小编may*_*aya的帖子

如何在线程迭代次数不相等的 while 循环上使用 omp 屏障

我正在尝试使用 omp 来实现列表排名问题(也称为快捷方式),以获得数组 W 的总和前缀。我不知道我是否正确使用了刷新杂注..并且在编译“barrier”时出现警告区域不能紧密嵌套在工作共享、关键、有序、主或显式任务区域内”

#include <stdio.h> 
#include <stdlib.h>
#include <math.h>
#include <omp.h>

main(int argc, char *argv[])
{ 
  int Q[9]={1,2,3,4,5,6,7,8,0};
  int W[8]={1,2,3,4,5,6,7,8};
  int i,j=6,id;

  printf("Before:\n");
  for(j=0;j<8;j++)
  printf("%d",W[j]);
  printf("\n");
  #pragma omp parallel for shared(Q,W) private(id) num_threads(7)
  for (i=6; i>=0; i--)
  {
    id= omp_get_thread_num();
    while((Q[i] !=0)&& (Q[Q[i]] !=0))
    { 
      #pragma omp flush(W)

       W[i]=W[i]+W[Q[i]];

      #pragma omp flush(W)

       printf("Am %d \t W[%d]= %d",id,i,W[i]);

     #pragma omp barrier    
     #pragma omp flush(Q)
     Q[i]=Q[Q[i]];
     #pragma omp flush(Q)
     printf("Am %d \n Q[%d]= %d",id,i,Q[i]);
   };
 }
  printf("Result:\n");
  for(j=0; j<8; j++) …
Run Code Online (Sandbox Code Playgroud)

c multithreading openmp

2
推荐指数
1
解决办法
6304
查看次数

标签 统计

c ×1

multithreading ×1

openmp ×1