<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Errors GPU / FPGA runtime in Intel® oneAPI DPC++/C++ Compiler</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Errors-GPU-FPGA-runtime/m-p/1455328#M2807</link>
    <description>&lt;P&gt;Hi, i have this code i wrote in c++ for computing pagerank.&lt;/P&gt;
&lt;P&gt;It compiled and worked on cpu.&lt;/P&gt;
&lt;P&gt;I compiled it also with fpga.&lt;/P&gt;
&lt;P&gt;But when i try to run it on GPUs or FPGA's emulators, it doesn't work and returns runtime errors.&lt;/P&gt;
&lt;P&gt;What can they be?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the errors on&lt;/P&gt;
&lt;P&gt;GPU&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;//command line to run program:
./BUFFER_PageRank 2 "datasets/cit-Patents.csv" 3e-05 0.85 1 


Device : Intel(R) UHD Graphics P630 [0x3e96]
TIME FOR SETUP
Elapsed time in nanoseconds: 9078559211 ns
Elapsed time in microseconds: 9078559 µs
Elapsed time in milliseconds: 9078 ms
Elapsed time in seconds: 9 sec
terminate called after throwing an instance of 'sycl::_V1::runtime_error'
  what():  Native API failed. Native API returns: -1 (PI_ERROR_DEVICE_NOT_FOUND) -1 (PI_ERROR_DEVICE_NOT_FOUND)
Aborted&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;FPGA&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;// Command line to run Program
./Arria10_BUFFER_PageRank.fpga 1 "datasets/cit-Patents.csv" 3e-05 0.85 1 


Device : Intel(R) FPGA Emulation Device
TIME FOR SETUP
Elapsed time in nanoseconds: 8733429344 ns
Elapsed time in microseconds: 8733429 µs
Elapsed time in milliseconds: 8733 ms
Elapsed time in seconds: 8 sec
terminate called after throwing an instance of 'sycl::_V1::runtime_error'
  what():  Invalid device program image: size is zero -30 (PI_ERROR_INVALID_VALUE)
Aborted&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's how i compiled them and also all the code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Compiling commands:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;// for CPU / GPU
icpx -fsycl BUFFER_PageRank.cpp -o BUFFER_PageRank
// for FPGA
icpx -fsycl -fintelfpga -Xshardware -Xstarget=Arria10 BUFFER_PageRank.cpp -o Arria10_BUFFER_PageRank.fpga&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;main code (BUFFER_PageRank.cpp):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;sycl/sycl.hpp&amp;gt;
#include &amp;lt;sycl/ext/intel/fpga_extensions.hpp&amp;gt;
#include &amp;lt;cmath&amp;gt;
#include &amp;lt;chrono&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt;
#include "guideline.h"
#include "print_vector.h"
#include "print_time.h"
#include "read_graph.h"
#include "flatVector.h"


using namespace sycl;

int main(int argc, char* argv[]){
    // Check Command Line
    if(argc &amp;lt; 6){
        // NOT ENOUGH PARAMS BY COMMAND LINE -&amp;gt; PROGRAM HALTS
        guideline();
    }
    else{
        // Command Line parsing
        int device_selected = atoi(argv[1]);
        std::string csv_path = argv[2];
        float threshold = atof(argv[3]);
        float damping = atof(argv[4]);
        int verbose;
        try{verbose = atoi(argv[5]);}
        catch (exception const&amp;amp; e) {verbose = 0;}
        device d = device(default_selector());
        
        // Queue
        queue q(d);
        std::cout &amp;lt;&amp;lt; "Device : " &amp;lt;&amp;lt; q.get_device().get_info&amp;lt;info::device::name&amp;gt;() &amp;lt;&amp;lt; "\n"; // print del device
        // Reading and setup Time Calculation
        auto start_setup = std::chrono::steady_clock::now();
        // Graph Retrieval by csv file
        std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph = Read_graph(csv_path);/*Sparse Matrix Representation with the description of each Edge of the Graph*/
        std::vector&amp;lt;int&amp;gt; flatGraph = flatten&amp;lt;int&amp;gt;(graph);
        // Calculation of the # Nodes
        int numNodes  = countNodes(graph);
        // Calculation of the Degree of each node
        std::vector&amp;lt;int&amp;gt; degreesNodes = getDegrees(graph, numNodes+1);
        auto end_setup = std::chrono::steady_clock::now();
        // Setup Execution Time print
        std::cout &amp;lt;&amp;lt; "TIME FOR SETUP" &amp;lt;&amp;lt; "\n";
        print_time(start_setup, end_setup);
        // Check Print
        //printVector&amp;lt;int&amp;gt;(degreesNodes);
        //Creation of Initial and Final Ranks' vectors of PageRank [R(t); R(t+1)]
        std::vector&amp;lt;float&amp;gt; ranks_t(numNodes, (float)(1.0/ (float)(numNodes)));
        std::vector&amp;lt;float&amp;gt; ranks_t_plus_one(numNodes, 0.0);
        std::vector&amp;lt;float&amp;gt; ranksDifferences(numNodes, 0.0);

        // PageRank Execution Time calculation
        auto start = std::chrono::steady_clock::now();
        buffer&amp;lt;int&amp;gt; bufferEdges(flatGraph.data(),flatGraph.size());
        buffer&amp;lt;float&amp;gt; bufferRanks(ranks_t.data(),ranks_t.size());
        buffer&amp;lt;int&amp;gt; bufferDegrees(degreesNodes.data(),degreesNodes.size());
        buffer&amp;lt;float&amp;gt; bufferRanksNext(ranks_t_plus_one.data(),ranks_t_plus_one.size());
        buffer&amp;lt;float&amp;gt; bufferRanksDifferences(ranksDifferences.data(),ranksDifferences.size());
        float distance = threshold + 1;
        int graph_size = flatGraph.size();
        int T = 1;
        while (distance &amp;gt; threshold) {
            q.submit([&amp;amp;](handler &amp;amp;h){
                accessor Edges(bufferEdges,h,read_only);
                accessor Ranks(bufferRanks,h,read_only);
                accessor Degrees(bufferDegrees,h,read_only);
                accessor RanksNext(bufferRanksNext,h,write_only);
                accessor RanksDifferences(bufferRanksDifferences,h,write_only);
                h.parallel_for(range&amp;lt;1&amp;gt;(numNodes),[=] (id&amp;lt;1&amp;gt; i){
                    RanksNext[i] = (1.0 - damping) / numNodes;
                    int index_node_i;
                    int index_node_j;
                    for (int j = 0; j&amp;lt;graph_size;j+=2) {
                        index_node_i = j;
                        index_node_j = j + 1;
                        if (Edges[index_node_j] == i) {
                            RanksNext[i] += damping * Ranks[Edges[index_node_i]] / Degrees[Edges[index_node_i]];
                        }
                    }
                    RanksDifferences[i] = (RanksNext[i] - Ranks[i]) * (RanksNext[i] - Ranks[i]);
                });
            }).wait();
            distance = 0;
            for (int i = 0; i &amp;lt; numNodes; i++) {
                distance += ranksDifferences[i];
                ranks_t[i] = ranks_t_plus_one[i];
                ranks_t_plus_one[i] = 0.0;
            }
            distance = sqrt(distance);
            std::cout&amp;lt;&amp;lt; "Time:\t" &amp;lt;&amp;lt; T &amp;lt;&amp;lt; "\tEuclidian Distance:\t" &amp;lt;&amp;lt; distance &amp;lt;&amp;lt; std::endl;
            T++;
        }
        auto end = std::chrono::steady_clock::now();
        // PageRank Results Printing
        if(verbose == 1){
            for(int i = 0;i&amp;lt;ranks_t.size();i++){
                std::cout&amp;lt;&amp;lt;"Final Vector" &amp;lt;&amp;lt; i&amp;lt;&amp;lt; "-th component:\t"&amp;lt;&amp;lt;ranks_t[i]&amp;lt;&amp;lt;std::endl;
            }
        }
        std::cout&amp;lt;&amp;lt;std::endl&amp;lt;&amp;lt;std::endl&amp;lt;&amp;lt;std::endl;
        std::cout&amp;lt;&amp;lt;"Final Norm:\t"&amp;lt;&amp;lt;distance&amp;lt;&amp;lt;std::endl;
        // PageRank Execution Time Printing
        std::cout &amp;lt;&amp;lt; "TIME FOR PAGERANK" &amp;lt;&amp;lt; "\n";
        print_time(start, end);

    }
    return 0;
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;other codes:&lt;/P&gt;
&lt;P&gt;flatVector.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

template&amp;lt;typename T&amp;gt;
std::vector&amp;lt;T&amp;gt; flatten(const std::vector&amp;lt;std::vector&amp;lt;T&amp;gt;&amp;gt;&amp;amp; nestedVector) {
    std::vector&amp;lt;T&amp;gt; flatVector;
    for (const auto&amp;amp; subVector : nestedVector) {
        for (const auto&amp;amp; element : subVector) {
            flatVector.push_back(element);
        }
    }
    return flatVector;
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;guideline.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;

void guideline(){
    std::cout&amp;lt;&amp;lt;"Not enough input parameters!\n\n";
    std::cout&amp;lt;&amp;lt;"Usage guide:\n\n";
    std::cout&amp;lt;&amp;lt;"First parameter:\tDevice code (as int number)\n";
    std::cout&amp;lt;&amp;lt;"\t\t1: CPU\n";
    std::cout&amp;lt;&amp;lt;"\t\t2: GPU\n";
    std::cout&amp;lt;&amp;lt;"\t\t3: FPGA\n";
    std::cout&amp;lt;&amp;lt;"Second parameter:\tCsv path of the dataset\n";
    std::cout&amp;lt;&amp;lt;"Available Ones:\n\n";
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/cit-Patents.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/soc-LiveJournal1.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/twitter-2010.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/web-uk-2005-all.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"Third parameter:\tThreshold (float value)\n";
    std::cout&amp;lt;&amp;lt;"Fourth parameter:\tDamping (float value)\n";
    std::cout&amp;lt;&amp;lt;"Fifth parameter:\tVerbose (int value)\n";
    std::cout&amp;lt;&amp;lt;"Prints all the ranks of each node\n";
    std::cout&amp;lt;&amp;lt;"Watch out! The print is huge\n";
    }&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;printTime.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;chrono&amp;gt;

void print_time(std::chrono::time_point&amp;lt;std::chrono::steady_clock&amp;gt; start, std::chrono::time_point&amp;lt;std::chrono::steady_clock&amp;gt; end){
    std::cout &amp;lt;&amp;lt; "Elapsed time in nanoseconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::nanoseconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " ns" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Elapsed time in microseconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::microseconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " µs" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Elapsed time in milliseconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::milliseconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " ms" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Elapsed time in seconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::seconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " sec" &amp;lt;&amp;lt; std::endl;    
}
//STAMPA DEL TEMPO IMPIEGATO&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;printVector.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

template &amp;lt;typename T&amp;gt;
void printVector(std::vector&amp;lt;T&amp;gt; vector_like_var){
    for(int i  = 0; i &amp;lt; vector_like_var.size(); i++){
        std::cout&amp;lt;&amp;lt; "element " &amp;lt;&amp;lt;i+1 &amp;lt;&amp;lt; "of vector:\t" &amp;lt;&amp;lt; vector_like_var[i] &amp;lt;&amp;lt;std::endl;
    }
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;read_graph.h&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;sstream&amp;gt;
#include &amp;lt;vector&amp;gt;
// #include "print_vector.h"


std::vector&amp;lt;int&amp;gt; getDegrees(const std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; &amp;amp;graph, int numNodes) {
    std::vector&amp;lt;int&amp;gt; degrees(numNodes);
    for (auto &amp;amp;edge : graph) {
        ++degrees[edge[0]];
        ++degrees[edge[1]];
    }
    return degrees;
}

std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; Read_graph(std::string file_name){
    // Apertura del file
    std::ifstream file(file_name);
    if (!file.is_open()) {
        std::cerr &amp;lt;&amp;lt; "Impossibile aprire il file" &amp;lt;&amp;lt; std::endl;
        return {};
    }

    // Lettura del file riga per riga
    std::string line;
    std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph;
    while (getline(file, line)) {
        std::stringstream ss(line);
        std::string cell;
        std::vector&amp;lt;int&amp;gt; edge;
        while (getline(ss, cell, ',')) {
            edge.push_back(stoi(cell));
        }
        graph.push_back(edge);
    }
    file.close();
    return graph;
}

int countNodes(std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph){
    int numNodes = 0;
    for(auto &amp;amp;i : graph){
        for(auto &amp;amp;j : i){
            numNodes = std::max(numNodes, j);
        }
    }
    return numNodes;
}

// int main(int argc, char* argv[]) {
//     if(argc &amp;lt; 1){return 0;}
//     else{
//         std::string csv_path = argv[1];
//         std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph = Read_graph(csv_path);
//         int numNodes  = countNodes(graph);
//         std::vector&amp;lt;int&amp;gt; degreesNodes = getDegrees(graph, numNodes+1);
//         printVector&amp;lt;int&amp;gt;(degreesNodes);

//         return 0;
//     }
// }
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 10 Feb 2023 16:26:55 GMT</pubDate>
    <dc:creator>Alechiove</dc:creator>
    <dc:date>2023-02-10T16:26:55Z</dc:date>
    <item>
      <title>Errors GPU / FPGA runtime</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Errors-GPU-FPGA-runtime/m-p/1455328#M2807</link>
      <description>&lt;P&gt;Hi, i have this code i wrote in c++ for computing pagerank.&lt;/P&gt;
&lt;P&gt;It compiled and worked on cpu.&lt;/P&gt;
&lt;P&gt;I compiled it also with fpga.&lt;/P&gt;
&lt;P&gt;But when i try to run it on GPUs or FPGA's emulators, it doesn't work and returns runtime errors.&lt;/P&gt;
&lt;P&gt;What can they be?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the errors on&lt;/P&gt;
&lt;P&gt;GPU&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;//command line to run program:
./BUFFER_PageRank 2 "datasets/cit-Patents.csv" 3e-05 0.85 1 


Device : Intel(R) UHD Graphics P630 [0x3e96]
TIME FOR SETUP
Elapsed time in nanoseconds: 9078559211 ns
Elapsed time in microseconds: 9078559 µs
Elapsed time in milliseconds: 9078 ms
Elapsed time in seconds: 9 sec
terminate called after throwing an instance of 'sycl::_V1::runtime_error'
  what():  Native API failed. Native API returns: -1 (PI_ERROR_DEVICE_NOT_FOUND) -1 (PI_ERROR_DEVICE_NOT_FOUND)
Aborted&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;FPGA&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;// Command line to run Program
./Arria10_BUFFER_PageRank.fpga 1 "datasets/cit-Patents.csv" 3e-05 0.85 1 


Device : Intel(R) FPGA Emulation Device
TIME FOR SETUP
Elapsed time in nanoseconds: 8733429344 ns
Elapsed time in microseconds: 8733429 µs
Elapsed time in milliseconds: 8733 ms
Elapsed time in seconds: 8 sec
terminate called after throwing an instance of 'sycl::_V1::runtime_error'
  what():  Invalid device program image: size is zero -30 (PI_ERROR_INVALID_VALUE)
Aborted&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's how i compiled them and also all the code:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Compiling commands:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;// for CPU / GPU
icpx -fsycl BUFFER_PageRank.cpp -o BUFFER_PageRank
// for FPGA
icpx -fsycl -fintelfpga -Xshardware -Xstarget=Arria10 BUFFER_PageRank.cpp -o Arria10_BUFFER_PageRank.fpga&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;main code (BUFFER_PageRank.cpp):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;sycl/sycl.hpp&amp;gt;
#include &amp;lt;sycl/ext/intel/fpga_extensions.hpp&amp;gt;
#include &amp;lt;cmath&amp;gt;
#include &amp;lt;chrono&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt;
#include "guideline.h"
#include "print_vector.h"
#include "print_time.h"
#include "read_graph.h"
#include "flatVector.h"


using namespace sycl;

int main(int argc, char* argv[]){
    // Check Command Line
    if(argc &amp;lt; 6){
        // NOT ENOUGH PARAMS BY COMMAND LINE -&amp;gt; PROGRAM HALTS
        guideline();
    }
    else{
        // Command Line parsing
        int device_selected = atoi(argv[1]);
        std::string csv_path = argv[2];
        float threshold = atof(argv[3]);
        float damping = atof(argv[4]);
        int verbose;
        try{verbose = atoi(argv[5]);}
        catch (exception const&amp;amp; e) {verbose = 0;}
        device d = device(default_selector());
        
        // Queue
        queue q(d);
        std::cout &amp;lt;&amp;lt; "Device : " &amp;lt;&amp;lt; q.get_device().get_info&amp;lt;info::device::name&amp;gt;() &amp;lt;&amp;lt; "\n"; // print del device
        // Reading and setup Time Calculation
        auto start_setup = std::chrono::steady_clock::now();
        // Graph Retrieval by csv file
        std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph = Read_graph(csv_path);/*Sparse Matrix Representation with the description of each Edge of the Graph*/
        std::vector&amp;lt;int&amp;gt; flatGraph = flatten&amp;lt;int&amp;gt;(graph);
        // Calculation of the # Nodes
        int numNodes  = countNodes(graph);
        // Calculation of the Degree of each node
        std::vector&amp;lt;int&amp;gt; degreesNodes = getDegrees(graph, numNodes+1);
        auto end_setup = std::chrono::steady_clock::now();
        // Setup Execution Time print
        std::cout &amp;lt;&amp;lt; "TIME FOR SETUP" &amp;lt;&amp;lt; "\n";
        print_time(start_setup, end_setup);
        // Check Print
        //printVector&amp;lt;int&amp;gt;(degreesNodes);
        //Creation of Initial and Final Ranks' vectors of PageRank [R(t); R(t+1)]
        std::vector&amp;lt;float&amp;gt; ranks_t(numNodes, (float)(1.0/ (float)(numNodes)));
        std::vector&amp;lt;float&amp;gt; ranks_t_plus_one(numNodes, 0.0);
        std::vector&amp;lt;float&amp;gt; ranksDifferences(numNodes, 0.0);

        // PageRank Execution Time calculation
        auto start = std::chrono::steady_clock::now();
        buffer&amp;lt;int&amp;gt; bufferEdges(flatGraph.data(),flatGraph.size());
        buffer&amp;lt;float&amp;gt; bufferRanks(ranks_t.data(),ranks_t.size());
        buffer&amp;lt;int&amp;gt; bufferDegrees(degreesNodes.data(),degreesNodes.size());
        buffer&amp;lt;float&amp;gt; bufferRanksNext(ranks_t_plus_one.data(),ranks_t_plus_one.size());
        buffer&amp;lt;float&amp;gt; bufferRanksDifferences(ranksDifferences.data(),ranksDifferences.size());
        float distance = threshold + 1;
        int graph_size = flatGraph.size();
        int T = 1;
        while (distance &amp;gt; threshold) {
            q.submit([&amp;amp;](handler &amp;amp;h){
                accessor Edges(bufferEdges,h,read_only);
                accessor Ranks(bufferRanks,h,read_only);
                accessor Degrees(bufferDegrees,h,read_only);
                accessor RanksNext(bufferRanksNext,h,write_only);
                accessor RanksDifferences(bufferRanksDifferences,h,write_only);
                h.parallel_for(range&amp;lt;1&amp;gt;(numNodes),[=] (id&amp;lt;1&amp;gt; i){
                    RanksNext[i] = (1.0 - damping) / numNodes;
                    int index_node_i;
                    int index_node_j;
                    for (int j = 0; j&amp;lt;graph_size;j+=2) {
                        index_node_i = j;
                        index_node_j = j + 1;
                        if (Edges[index_node_j] == i) {
                            RanksNext[i] += damping * Ranks[Edges[index_node_i]] / Degrees[Edges[index_node_i]];
                        }
                    }
                    RanksDifferences[i] = (RanksNext[i] - Ranks[i]) * (RanksNext[i] - Ranks[i]);
                });
            }).wait();
            distance = 0;
            for (int i = 0; i &amp;lt; numNodes; i++) {
                distance += ranksDifferences[i];
                ranks_t[i] = ranks_t_plus_one[i];
                ranks_t_plus_one[i] = 0.0;
            }
            distance = sqrt(distance);
            std::cout&amp;lt;&amp;lt; "Time:\t" &amp;lt;&amp;lt; T &amp;lt;&amp;lt; "\tEuclidian Distance:\t" &amp;lt;&amp;lt; distance &amp;lt;&amp;lt; std::endl;
            T++;
        }
        auto end = std::chrono::steady_clock::now();
        // PageRank Results Printing
        if(verbose == 1){
            for(int i = 0;i&amp;lt;ranks_t.size();i++){
                std::cout&amp;lt;&amp;lt;"Final Vector" &amp;lt;&amp;lt; i&amp;lt;&amp;lt; "-th component:\t"&amp;lt;&amp;lt;ranks_t[i]&amp;lt;&amp;lt;std::endl;
            }
        }
        std::cout&amp;lt;&amp;lt;std::endl&amp;lt;&amp;lt;std::endl&amp;lt;&amp;lt;std::endl;
        std::cout&amp;lt;&amp;lt;"Final Norm:\t"&amp;lt;&amp;lt;distance&amp;lt;&amp;lt;std::endl;
        // PageRank Execution Time Printing
        std::cout &amp;lt;&amp;lt; "TIME FOR PAGERANK" &amp;lt;&amp;lt; "\n";
        print_time(start, end);

    }
    return 0;
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;other codes:&lt;/P&gt;
&lt;P&gt;flatVector.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

template&amp;lt;typename T&amp;gt;
std::vector&amp;lt;T&amp;gt; flatten(const std::vector&amp;lt;std::vector&amp;lt;T&amp;gt;&amp;gt;&amp;amp; nestedVector) {
    std::vector&amp;lt;T&amp;gt; flatVector;
    for (const auto&amp;amp; subVector : nestedVector) {
        for (const auto&amp;amp; element : subVector) {
            flatVector.push_back(element);
        }
    }
    return flatVector;
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;guideline.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;

void guideline(){
    std::cout&amp;lt;&amp;lt;"Not enough input parameters!\n\n";
    std::cout&amp;lt;&amp;lt;"Usage guide:\n\n";
    std::cout&amp;lt;&amp;lt;"First parameter:\tDevice code (as int number)\n";
    std::cout&amp;lt;&amp;lt;"\t\t1: CPU\n";
    std::cout&amp;lt;&amp;lt;"\t\t2: GPU\n";
    std::cout&amp;lt;&amp;lt;"\t\t3: FPGA\n";
    std::cout&amp;lt;&amp;lt;"Second parameter:\tCsv path of the dataset\n";
    std::cout&amp;lt;&amp;lt;"Available Ones:\n\n";
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/cit-Patents.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/soc-LiveJournal1.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/twitter-2010.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"\t\t\"datasets/web-uk-2005-all.csv\""&amp;lt;&amp;lt;std::endl;
    std::cout&amp;lt;&amp;lt;"Third parameter:\tThreshold (float value)\n";
    std::cout&amp;lt;&amp;lt;"Fourth parameter:\tDamping (float value)\n";
    std::cout&amp;lt;&amp;lt;"Fifth parameter:\tVerbose (int value)\n";
    std::cout&amp;lt;&amp;lt;"Prints all the ranks of each node\n";
    std::cout&amp;lt;&amp;lt;"Watch out! The print is huge\n";
    }&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;printTime.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;chrono&amp;gt;

void print_time(std::chrono::time_point&amp;lt;std::chrono::steady_clock&amp;gt; start, std::chrono::time_point&amp;lt;std::chrono::steady_clock&amp;gt; end){
    std::cout &amp;lt;&amp;lt; "Elapsed time in nanoseconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::nanoseconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " ns" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Elapsed time in microseconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::microseconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " µs" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Elapsed time in milliseconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::milliseconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " ms" &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; "Elapsed time in seconds: " &amp;lt;&amp;lt; std::chrono::duration_cast&amp;lt;std::chrono::seconds&amp;gt;(end - start).count() &amp;lt;&amp;lt; " sec" &amp;lt;&amp;lt; std::endl;    
}
//STAMPA DEL TEMPO IMPIEGATO&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;printVector.h&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

template &amp;lt;typename T&amp;gt;
void printVector(std::vector&amp;lt;T&amp;gt; vector_like_var){
    for(int i  = 0; i &amp;lt; vector_like_var.size(); i++){
        std::cout&amp;lt;&amp;lt; "element " &amp;lt;&amp;lt;i+1 &amp;lt;&amp;lt; "of vector:\t" &amp;lt;&amp;lt; vector_like_var[i] &amp;lt;&amp;lt;std::endl;
    }
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;read_graph.h&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;sstream&amp;gt;
#include &amp;lt;vector&amp;gt;
// #include "print_vector.h"


std::vector&amp;lt;int&amp;gt; getDegrees(const std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; &amp;amp;graph, int numNodes) {
    std::vector&amp;lt;int&amp;gt; degrees(numNodes);
    for (auto &amp;amp;edge : graph) {
        ++degrees[edge[0]];
        ++degrees[edge[1]];
    }
    return degrees;
}

std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; Read_graph(std::string file_name){
    // Apertura del file
    std::ifstream file(file_name);
    if (!file.is_open()) {
        std::cerr &amp;lt;&amp;lt; "Impossibile aprire il file" &amp;lt;&amp;lt; std::endl;
        return {};
    }

    // Lettura del file riga per riga
    std::string line;
    std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph;
    while (getline(file, line)) {
        std::stringstream ss(line);
        std::string cell;
        std::vector&amp;lt;int&amp;gt; edge;
        while (getline(ss, cell, ',')) {
            edge.push_back(stoi(cell));
        }
        graph.push_back(edge);
    }
    file.close();
    return graph;
}

int countNodes(std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph){
    int numNodes = 0;
    for(auto &amp;amp;i : graph){
        for(auto &amp;amp;j : i){
            numNodes = std::max(numNodes, j);
        }
    }
    return numNodes;
}

// int main(int argc, char* argv[]) {
//     if(argc &amp;lt; 1){return 0;}
//     else{
//         std::string csv_path = argv[1];
//         std::vector&amp;lt;std::vector&amp;lt;int&amp;gt;&amp;gt; graph = Read_graph(csv_path);
//         int numNodes  = countNodes(graph);
//         std::vector&amp;lt;int&amp;gt; degreesNodes = getDegrees(graph, numNodes+1);
//         printVector&amp;lt;int&amp;gt;(degreesNodes);

//         return 0;
//     }
// }
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 10 Feb 2023 16:26:55 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Errors-GPU-FPGA-runtime/m-p/1455328#M2807</guid>
      <dc:creator>Alechiove</dc:creator>
      <dc:date>2023-02-10T16:26:55Z</dc:date>
    </item>
    <item>
      <title>Re:Errors GPU / FPGA runtime</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Errors-GPU-FPGA-runtime/m-p/1455652#M2810</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Since this is a duplicate thread of &lt;A href="https://community.intel.com/t5/Intel-oneAPI-Data-Parallel-C/Compiled-program-Works-on-CPU-but-not-in-GPU-FPGA-and-cannot/m-p/1453024#M2769" target="_blank"&gt;https://community.intel.com/t5/Intel-oneAPI-Data-Parallel-C/Compiled-program-Works-on-CPU-but-not-in-GPU-FPGA-and-cannot/m-p/1453024#M2769&lt;/A&gt;,&amp;nbsp;&lt;/P&gt;&lt;P&gt;we will no longer monitor this thread. We will continue addressing your issue in the other thread.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thanks and Regards,&lt;/P&gt;&lt;P&gt;Pendyala Sesha Srinivas&lt;/P&gt;&lt;BR /&gt;</description>
      <pubDate>Tue, 14 Feb 2023 11:01:50 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-DPC-C-Compiler/Errors-GPU-FPGA-runtime/m-p/1455652#M2810</guid>
      <dc:creator>SeshaP_Intel</dc:creator>
      <dc:date>2023-02-14T11:01:50Z</dc:date>
    </item>
  </channel>
</rss>

