并行化C中的for循环

RIc*_*ams 9 c parallel-processing

我的C代码中有一个for循环,如下所示:

for(i=0; i<100000; i++){

    a[i] = simulate(); //  simulate() function simulates some system

}
Run Code Online (Sandbox Code Playgroud)

我们看到每次迭代的计算都与其他迭代无关(元素的顺序a[]对我来说并不重要).我想使用多线程并行化这个for循环的计算.我不完全清楚如何在C中这样做?我有一台8处理器的机器,所以我可以并行运行8个线程.

Mys*_*ial 14

在C*中没有可移植的并行方法.但是,OpenMP标准得到了广泛支持:

#pragma omp parallel for
for(i=0; i<100000; i++){

    a[i] = simulate(); //  simulate() function simulates some system

}
Run Code Online (Sandbox Code Playgroud)

根据您的编译器,将有一个标志,您必须设置该标志以启用OpenMP支持:

  • MSVC: /openmp
  • GCC: -fopenmp

以及如果您希望访问某些OpenMP功能的标题:

#include <omp.h>
Run Code Online (Sandbox Code Playgroud)

编辑:

*(最近批准的)C11标准支持线程通过<threads.h>.