抱歉,很长的帖子,但我想一开始就包括我认为相关的所有内容。 我想要的是 我正在实现用于稠密矩阵的Krylov子空间方法的并行版本。主要是GMRES,QMR和CG。我(剖析后)意识到我的DGEMV例程是可悲的。因此,我决定通过隔离来集中精力解决这一问题。我尝试在12核计算机上运行它,但以下结果是4核Intel i3笔记本电脑的结果。趋势差异不大。 我的KMP_AFFINITY=VERBOSE输出在这里。 我写了一个小代码: size_N = 15000 A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad b = randomly_generated_dense_vector(size_N); for it=1:n_times %n_times I kept at 50 x = Matrix_Vector_Multi(A,b); end 我相信这可以模拟CG进行50次迭代的行为。 我尝试过的 翻译 我最初是用Fortran编写代码的。我将其翻译为C,MATLAB和Python(Numpy)。不用说,MATLAB和Python太可怕了。令人惊讶的是,对于上述值,C比FORTRAN好一到两秒。一致。 剖析 我分析了要运行的代码,并且运行了46.075几秒钟。这是将MKL_DYNAMIC设置为FALSE并且使用了所有内核的时候。如果我将MKL_DYNAMIC设置为true,则在任何给定时间点仅使用(大约)一半数量的内核。以下是一些详细信息: Address Line Assembly CPU Time 0x5cb51c mulpd %xmm9, %xmm14 36.591s 最耗时的过程似乎是: Call Stack …