我正在尝试并行化for循环。 大致是:
#pragma omp parallel
{
#pragma omp for
for(int i=0;i<count;++i){
some_heavy_function_call()
}
}
使用count=2
进行调试和测试。 some_heay_function_call()
有
没有进一步的并行性。
我希望核心数量为2。 但操作系统(Ubuntu)说程序使用8个线程(我的系统最多)。
该函数被调用2次,问题似乎不是我做错了循环。
我的假设是错误的,应该使用最多2个线程吗? 如果不是可能会发生什么?
更新: 我不清楚。我不奇怪会产生8个线程。我想知道所有都有接近100%的负载。遗憾。
更新2: 如果我使用gdb调试并切换线程,我在2个线程中找到函数调用,在其他线程中找到:
(gdb) #1 0x00007ffff6267e22 in ?? () from /usr/lib/x86_64-linux-gnu/libgomp.so.1
(gdb) #2 0x00007ffff6b176da in start_thread (arg=0x7ffff2fc0700) at pthread_create.c:456
456 pthread_create.c: Datei oder Verzeichnis nicht gefunden.
(gdb) #3 0x00007ffff5d7bd7f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:105
105 ../sysdeps/unix/sysv/linux/x86_64/clone.S: Datei oder Verzeichnis nicht gefunden.
Datei oder Verzeichnis nicht gefunden表示找不到文件或目录。
答案 0 :(得分:0)
OpenMP通常会使用与核心一样多的线程。如果你有更好的想法,请自己设定数字。
{
omp_set_num_threads(2);
#pragma omp parallel for
for(int i=0;i<count;++i){
some_heavy_function_call();
}
}