Performance 使用OpenMP降低x64的性能

Performance 使用OpenMP降低x64的性能,performance,parallel-processing,64-bit,openmp,Performance,Parallel Processing,64 Bit,Openmp,我注意到在版本模式下用VS2008以x64“模式”运行代码时出现了一个非常奇怪的行为 我寻求性能改进,因此我将我的项目转向x64平台(我最初的项目是作为控制台应用程序Win32编写的) 我确实取得了一些进步,但在跑步过程中我发现了一个非常奇怪的行为。我使用OpenMP pragmas来并行化循环(“for”)。因此,当我在四核i5处理器上运行我的程序(Win32)时,我看到100%的CPU负载和4个线程。没关系 但是当我切换到x64模式(在Projet Properties->Configura

我注意到在版本模式下用VS2008以x64“模式”运行代码时出现了一个非常奇怪的行为

我寻求性能改进,因此我将我的项目转向x64平台(我最初的项目是作为控制台应用程序Win32编写的)

我确实取得了一些进步,但在跑步过程中我发现了一个非常奇怪的行为。我使用OpenMP pragmas来并行化循环(“for”)。因此,当我在四核i5处理器上运行我的程序(Win32)时,我看到100%的CPU负载和4个线程。没关系

但是当我切换到x64模式(在Projet Properties->Configuration Manager->…)时,100%的负载会下降到75%、50%甚至25%(3-5分钟后)。但仍然有4个线程在运行。(根据资源监视器)

怎么可能在所有4个踏板上只有25%的CPU性能?假设每个线程在其各自的内核上运行

p.S.操作系统Windows 7 x64和VS 2008

提前谢谢!任何建议都将不胜感激

A.K.

已解决:

我想我确实知道我的问题的答案:当所有4个踏板都处于活动状态时,只有25%的CPU负载,这意味着4个内核中的3个完成了他们的工作,并等待最后一个内核完成他的工作。可能这个核心被计算卡住了(有一个积分计算,如果积分不收敛,它会尝试减小步长并继续计算)


我不确定,这是我的猜测

不幸的是,这是不可能的,因为没有简短而独立的部分。粗略地说,有两个嵌套的“for”循环,它们在每个矩阵单元用繁琐的积分表达式填充二维矩阵。