在使用openMP的C++中,是否有任何区别
#pragma omp parallel for
for(int i=0; i<N; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
和
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
?
谢谢!
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
Run Code Online (Sandbox Code Playgroud)
此代码创建一个并行区域,每个单独的线程执行循环中的内容.换句话说,你完成N次完整循环,而不是N个线程分割循环并完成所有迭代一次.
你可以做:
#pragma omp parallel
{
#pragma omp for
for( int i=0; i < N; ++i )
{
}
#pragma omp for
for( int i=0; i < N; ++i )
{
}
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个并行区域(也就是一个fork/join,这是昂贵的,因此您不希望为每个循环执行此操作)并在该区域内并行运行多个循环.只要确保你已经有一个你使用的并行区域#pragma omp for,而#pragma omp parrallel for后者将意味着你的每个N个线程产生N个更多线程来进行循环.
| 归档时间: |
|
| 查看次数: |
5159 次 |
| 最近记录: |