硬件环境:
2台集成的 IBM X5800(2台四路服务器构成一个节点,不知道内部怎么实现的,但进系统就自动识别为一台机器了),共8个CPU, 80核160线程。
软件环境:
Red Hat Enterprise Linux 6
g++/icpc
用很简单的代码测试Openmp, 结果比较奇怪,谁能帮我解释一下原因?
情况:
1)1、2、4、8 、12线程运行基本正常,使用top查看CPU 使用分别为100%、200%、399%、799%、1199%。
2)16线程以上开始效率急剧下降,16线程CPU 使用率大约1499%,32线程2999%,64线程仅为4999%左右。使用intel vtune分析发现,64线程时有10多个线程创建后只运行过libgomp.so.1.0.0,其余时间空闲。
问题:
1)是不是我的程序并行有问题?有什么问题?怎么解决?
2)如果不是,是否系统和物流架构问题?怎么解决?
以下是主要代码:
#define N 256
int numThread=64;
double singlesum()
{
int i,j,k,l;
double sum=0;
for (i=0;i<=N;i++)
{
for (j=0;j<=N;j++)
{
for (k=0;k<=N;k++)
{
for (l=0;l<=N;l++)
{
sum+=sin(i+j+k+l)*cos(i+j+k+l);
}
}
}
}
sum=sum/N/N/N/N;
return sum;
}
void mainsum()
{
int i;
double sum=0;
srand(1);
#pragma omp parallel for reduction(+:sum)
for (i=0;i<=N;i++)
{
sum+=singlesum();
cout<
}
cout<
}
int main()
{
mainsum();
return 0;
}