超过64核心,并行程序怎么才能cpu100%?

zy_csdn_2017 2018-07-05 06:52:35


双路e52696v4,共44核88线程。程序中设置88核并行计算为什么cpu50%,如何才能100%(要求在超线程下)?

操作系统win7 ,开发环境fortran vs2012+ivf2013
...全文
2293 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我最近用的集群也是单节点双路CPU的,openmp如果按正常写法提交任务只能提交到一个CPU上,另一个CPU是闲置的。目前只发现用MPI可以把两个CPU都用上。不知道楼主找到解决办法没有。
ckc 2018-10-06
  • 打赏
  • 举报
回复
这么多核的计算机没装过windows,都是跑在linux下
还真没看过这么壮观的windows cpu使用情况
你用的还是这么冷门的fortran
qq_39036007 2018-10-05
  • 打赏
  • 举报
回复
请问楼主问题解决了吗?我也碰到了类似的问题;

我的机器是:四路e7,共96核192线程。openMP程序中设置192核并行计算时,cpu只使用了25%(一路);

以下是源代码:
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <omp.h>
void test()
{
int a = 0;
for(int i = 0;i < 100000000;i++)
a++;
}

int _tmain(int argc, _TCHAR* argv[])
{
clock_t t1 = clock();
omp_set_num_threads(192);//设置192核并行计算
#pragma omp parallel for
for (int i=0;i<192;i++)
test();
clock_t t2 = clock();
std::cout<<"time: "<<t2-t1<<std::endl;
getchar();
return 0;
}

zy_csdn_2017 2018-07-07
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
开88个线程(需要指定CPU,每个CPU一个),然后用死循环的操作。
不过,这个时候你的电脑会特别卡,你想要的事情可能都做不来。

请问您说的“需要指定CPU,每个CPU一个”,这个可能是我需要的东西,请问用什么函数或环境变量指定?
PROGRAM main
!$ use omp_lib
implicit none
real::x
!$OMP PARALLEL num_threads(88) PRIVATE(x)
x=1.0
do while(1==1)
x=1.0+1.0/x
end do
!$OMP END PARALLEL
END PROGRAM main
请问在哪里加什么语句可以让我的双路e5 88个逻辑处理器都工作呢?
赵4老师 2018-07-06
  • 打赏
  • 举报
回复
创建CPU核心数×2个线程
自信男孩 2018-07-06
  • 打赏
  • 举报
回复
开88个线程(需要指定CPU,每个CPU一个),然后用死循环的操作。
不过,这个时候你的电脑会特别卡,你想要的事情可能都做不来。
  • 打赏
  • 举报
回复
检查:
1、有没有安装比如支持至强处理器的主板驱动。用驱动软件搜一搜。
2、编译器开启优化选项
3、如果再不行,就采用2进程x44线程的模式。

没有用过单台CPU如此多的服务器。试试看C++ OpenMP看看。
另外,定义环境变量 OMP_NUM_THREADS = 88
ooolinux 2018-07-05
  • 打赏
  • 举报
回复
同时开88个扫雷~

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧