Преобразование OMP в Pthreads в c - PullRequest
0 голосов
/ 05 октября 2018

У меня есть следующий раздел кода, работающий в OMP для вычисления алгоритма Дейкстры, я хотел бы преобразовать его в Pthreads.Я понимаю, что для pthreads мне пришлось бы равномерно распределить работу по количеству входных потоков и снова присоединиться к ней.Может кто-нибудь, пожалуйста, покажите мне, как создать это?

//Set max nThreads
    omp_set_num_threads(nThreads);
    omp_set_schedule(omp_sched_auto, G->N/100);
        dijkstra(G, 0, 0);

void dijkstra(graph* G, long initial_node, char debug)
{
    long i,j,k;
    long aN; //actualNode
    G->D[initial_node] = 0;
    aN = initial_node;

    if(debug){
        printf("Running dijkstra on graph\n");
        printGraph(G);
    }

    for(i = 0; i < G->N; i++)
    {
        G->visited[aN] = VISITED;

        if(debug){
            printf("It[%d] aN [%d]",i, aN); printStatus(G); printf("\n");
        }

        //Find all nodes connected to aN
        #pragma omp parallel for schedule(runtime)
        for(j=0;j<G->N;j++){
            if( (G->node[aN][j] != NO_CONN) ){
                if( (G->D[aN] + G->node[aN][j]) < G->D[j] ){
                    G->D[j] = (G->D[aN] + G->node[aN][j]);
                }
            }
        }

        aN = getNextNode(G);
    }
}
...