【发布时间】:2014-10-23 12:12:49
【问题描述】:
我是openMP的新用户,我在linux ubuntu 13.10系统上有一个8核的intel i7-2670QM CPU
我的程序使用 C 中的嵌套并行来创建 8 个线程的总和。据我了解,每个线程都应该在它自己的处理器上运行,但是当我在终端上运行命令top 时,我看到我的程序只使用了 100% 的内存(预计为 800%),并且在处理器视图中,只有 CPU[X] 使用 100%(X 在 0 到 7 之间随机),其他 CPU 使用 0.1%。
当我使用 Intel vtune 放大器分析我的程序时,它显示有 7 个线程正在运行,但其中 6 个线程根本不使用 CPU,因为它们完全处于空闲状态。
当我尝试另一个示例并行程序时,线程在内核上分裂得很好,所以我认为问题出在我的代码中:
#include <omp.h>
void recursive_function(int k)
{
........
recursive_function(...);
}
int main()
{
omp_set_nested(1);
#pragma omp parallel for num_threads(4)
for(i=0;i< width * height;i++)
{
#pragma omp critical
{
......
// 3 simple instructions
}
if(i!=0)
{
recursive_function(i);
}
else
{
int j;
#pragma omp parallel for num_threads(4)
for(j=i;j< width * height;j++)
{
recursive_function(j);
}
}
}
}
使用 gcc 和选项 -fopenmp 执行
【问题讨论】:
-
您的处理器没有八个内核。它有四个核心和八个超线程(又名逻辑处理器)。
-
好的,但即使程序应该使用整个处理器,而不仅仅是一个逻辑处理器
-
你是对的。根据您提供的信息,我不知道是什么导致了您的问题。
标签: c linux multithreading openmp