C++ 使用OpenMP并行化for循环

C++ 使用OpenMP并行化for循环,c++,multithreading,openmp,C++,Multithreading,Openmp,我是OpenMP新手。当我使用 #pragma omp parallel for num_threads(4) for(i=0;i<4;i++){ //some parallelizable code } 用于num_线程的pragma omp并行(4) 对于(i=0;i循环构造中的分工由计划决定。如果不存在schedule子句,则使用def sched var计划,该计划由实现定义 您可以使用调度(static,1),在您的情况下,它保证每个线程只获得一个值 我强烈

我是OpenMP新手。当我使用

  #pragma omp parallel for num_threads(4)
  for(i=0;i<4;i++){
    //some parallelizable code
  }
用于num_线程的pragma omp并行(4)
对于(i=0;i循环构造中的分工由计划决定。如果不存在
schedule
子句,则使用def sched var计划,该计划由实现定义

您可以使用
调度(static,1)
,在您的情况下,它保证每个线程只获得一个值

我强烈建议看一下表2.5和表2.7.1.1

做出这种假设可能有正当的理由,但一般来说,循环代码的正确性不应依赖于此。我主要将其视为性能提示


根据您的用例,您可能需要考虑任务或只是并行构造。如果您依赖于循环的这些细节,请确保它在标准中被明确指定,而不只是在特定的实现中工作。

< P>循环结构中的工作划分由进度决定。如果没有<代码>调度< /COD>子句,则存在。使用e def sched var计划,该计划由实现定义

您可以使用
调度(static,1)
,在您的情况下,它保证每个线程只获得一个值

我强烈建议看一下表2.5和表2.7.1.1

做出这种假设可能有正当的理由,但一般来说,循环代码的正确性不应依赖于此。我主要将其视为性能提示


根据您的用例,您可能需要考虑任务或只是并行构造。如果您依赖于循环的这些细节,请确保它在标准中被明确指定,而不仅仅是在特定的实现中工作。

HI,查看日程KW,因为微软仅支持OpenMP 2,大多数其他OpenMP实现将具有附加功能。非常有用的选项。我觉得这是有建设性的。您好,请查看计划kw,因为Microsoft仅支持OpenMP 2.0,大多数其他OpenMP实现将有其他有用的选项。我觉得这是有建设性的。默认计划预期使用最大块大小。谢谢。我找到了一个,它为我提供了检查计划的代码。默认计划ler应该是静态的,并将在编译时将
i
值的数量尽可能均匀地分配给线程。这是可以确保的。这样的实验对于了解东西是如何工作的非常有用。但请确保便携、经得起未来考验的代码中的假设仅基于标准。默认计划预计使用最大块数谢谢。我找到了一个可以给我一个代码来检查计划的。默认的计划程序应该是静态的,并且会在编译时将
I
值的数量尽可能均匀地分配给线程。这是可以确保的。这样的实验对于了解东西是如何工作的非常有用。但是请确保在可移植的、经得起未来考验的code仅基于标准。