程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何让 OpenMP 与 #pragma omp 任务一起工作?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何让 OpenMP 与 #pragma omp 任务一起工作??

开发过程中遇到如何让 OpenMP 与 #pragma omp 任务一起工作?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何让 OpenMP 与 #pragma omp 任务一起工作?的解决方法建议,希望对你解决如何让 OpenMP 与 #pragma omp 任务一起工作?有所启发或帮助;

我在 linux 终端上使用 OpenMP。我用 #pragma omp parallel num_threads(3) { #pragma omp task R11Inverted = compute_inverse(r11,half); #pragma omp task printf("5 I am thread # %d\n",omp_get_thread_num()); R22Inverted = compute_inverse(r22,half); } 标志编译我的程序。我使用的环境确实支持多线程。

printf("5 I am thread # %d\n",omp_get_thread_num());

作为一个简单和最低限度的测试,我想要做的就是让 omp_get_thread_num() 表明程序正在使用三个线程运行。基本上 {{1}} 应该返回值 0、1 或 2。

Relevant Stackblitz 上面的代码块被多次调用。但是每次的结果都显示线程不起作用并且程序仅使用单个线程(线程 0)。

解决方法

您缺少代码块周围的 {} 以及单个子句。

尝试以下操作:

#pragma omp parallel num_threads(3)
{
        #pragma omp single
        {
            #pragma omp task
               R11Inverted = compute_inverse(r11,half);
            #pragma omp task
            {
              printf("5 I am thread # %d\n",omp_get_thread_num());
              R22Inverted = compute_inverse(r22,half);
            }
        }
}

但是每次的结果都显示线程不是 工作并且程序只使用一个线程(线程 0)。

如果要检查它是否被多线程调用,请改用 omp_get_num_threads,它返回团队的线程数。

   #pragma omp parallel num_threads(3)
   {
            #pragma omp master
            {           
                printf("@R_36_10586@l Threads # %d\n",omp_get_num_threads()); 
            }
            #pragma omp single
            {
                #pragma omp task
                   R11Inverted = compute_inverse(r11,half);
                #pragma omp task
                {
                  printf("5 I am thread # %d\n",omp_get_thread_num());
                  R22Inverted = compute_inverse(r22,half);
                }
            }
    }

如果上面的代码是递归调用的,那么你需要适应如下:

   #pragma omp parallel num_threads(3)
   {
      #pragma omp master      
      printf("@R_36_10586@l Threads # %d\n",omp_get_num_threads()); 
      #pragma omp single
      compute_inverse(...); // First call to the recursive function
   }

在compute_inverse函数内部:

   #pragma omp task
   R11Inverted = compute_inverse(r11,half);
   #pragma omp task
   {
      printf("5 I am thread # %d\n",omp_get_thread_num());
      R22Inverted = compute_inverse(r22,half);
   }

大佬总结

以上是大佬教程为你收集整理的如何让 OpenMP 与 #pragma omp 任务一起工作?全部内容,希望文章能够帮你解决如何让 OpenMP 与 #pragma omp 任务一起工作?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。