Parallel processing OpenMP,使用所有具有并行
我有一台4核的计算机和一个OMP应用程序,它有两个重要的任务Parallel processing OpenMP,使用所有具有并行,parallel-processing,openmp,Parallel Processing,Openmp,我有一台4核的计算机和一个OMP应用程序,它有两个重要的任务 int main() { #pragma omp parallel sections { #pragma omp section WeightyTask1(); #pragma omp section WeightyTask2(); } return 0; } 每项任务都有如此重要的部分: #omp pragma parallel f
int main()
{
#pragma omp parallel sections
{
#pragma omp section
WeightyTask1();
#pragma omp section
WeightyTask2();
}
return 0;
}
每项任务都有如此重要的部分:
#omp pragma parallel for
for (int i = 0; i < N; i++)
{
...
}
#omp pragma并行
对于(int i=0;i
我用-fopenmp
参数编译程序,使导出OMP\u NUM\u THREADS=4
。
问题是只加载了两个磁芯。如何在任务中使用所有内核?我最初的反应是:必须声明更多的并行性 您已经定义了两个可以并行运行的任务。OpenMP在两个以上的内核上运行它的任何尝试都会降低速度(因为缓存位置和可能的错误共享) 编辑如果并行for循环的数量很大(比如说,不少于8次迭代),并且使用的内核不超过2个,请查看
-
此环境变量启用或禁用嵌套并行性。通过调用
运行时库函数,可以覆盖此环境变量的设置 如果禁用嵌套并行,嵌套并行区域将序列化并在当前线程中运行 在当前的实现中,嵌套的并行区域总是序列化的。因此,omp\u set\u nested()
没有任何效果,OMP\u SET\u NESTED
始终返回0。如果-qsmp=nested_par选项处于启用状态(仅在非严格OMP模式下),嵌套并行区域可能会使用其他可用线程。但是,不会创建新团队来运行嵌套的并行区域。 OMP\U嵌套的默认值为FALSE。OMP\u get\u NESTED()
?(i从0到N/2-1)和(i从N/2到N-1)?