Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 并行程序:如何找到瓶颈(CPU绑定线程)_C++_Multithreading_Parallel Processing_Openmp - Fatal编程技术网

C++ 并行程序:如何找到瓶颈(CPU绑定线程)

C++ 并行程序:如何找到瓶颈(CPU绑定线程),c++,multithreading,parallel-processing,openmp,C++,Multithreading,Parallel Processing,Openmp,我已经用OpenMP编写了一个并行程序。它使用两个线程,因为我的笔记本电脑是双核的,线程执行很多矩阵运算,所以它们是CPU限制的。线程之间没有数据共享。该程序的单个实例运行速度相当快。但当我同时运行同一程序的多个实例时,性能会下降。下面是一个情节: 单个实例(两个线程)的运行时间为0.78秒。两个实例(总共四个线程)的运行时间为2.06,是0.78的两倍多。之后,运行时间随着实例数(线程数)的增加而成比例增加 以下是多个实例并行运行时其中一个实例的时间配置文件: 有人能洞察可能发生的事情吗?该

我已经用OpenMP编写了一个并行程序。它使用两个线程,因为我的笔记本电脑是双核的,线程执行很多矩阵运算,所以它们是CPU限制的。线程之间没有数据共享。该程序的单个实例运行速度相当快。但当我同时运行同一程序的多个实例时,性能会下降。下面是一个情节:

单个实例(两个线程)的运行时间为0.78秒。两个实例(总共四个线程)的运行时间为2.06,是0.78的两倍多。之后,运行时间随着实例数(线程数)的增加而成比例增加

以下是多个实例并行运行时其中一个实例的时间配置文件:


有人能洞察可能发生的事情吗?该配置文件显示,OpenMP占用了50%的时间。这意味着什么?

与@Bort所说的类似,您将应用程序设置为多线程(两个线程),因为您有两个内核

这意味着当您的程序只有一个实例在运行时(理想情况下),它就可以使用整个CPU

但是,如果应用程序的两个实例正在运行,则没有更多可用资源。他们每人都要花两倍的时间。更多实例也是如此


如果不增加每个实例的可用内核数(即,将每个实例的可用内核数保持在2个,而不是缩小百分比),则无法解决此问题.

如果没有任何代码,人们只能从水晶球中猜测。您观察到的是两个不同进程之间的上下文切换,每个进程在两个CPU上都有两个线程。这种扩展与应用程序中的瓶颈无关。您一般不能声明矩阵操作是CPU限制的。实际上很少有人这样做。矩阵乘法,如果做得好的话,是CPU受限的(就像LU和Cholesky分解一样),但其他很多都不是。我想你的意思是“整个CPU”使用任务集,我现在可以在4秒内并行运行64个,而不是38秒(在文章中绘图)。@user1274878你在用任务集做什么?你确定它工作正常吗?