解决方案
八度本身是一个内核上运行的单线程应用程序。你可以使用八度来使用一些像ATLAS这样的利用多核的库。所以虽然Octave只使用一个内核,但当遇到繁重的操作时,八度调用ATLAS中使用多个CPU的函数。
我能够做到这一点。首先从源代码编译“ATLAS”,并使其可用于您的系统,以便八度可以找到它并使用这些库函数。 ATLAS将自己调整到您的系统和内核数量。当你从源代码安装八度并指定ATLAS时,它会使用它,所以当八度音程执行大量矩阵乘法等繁重操作时,ATLAS会决定使用多少个CPU。
我无法得到这个工作的Fedora,但在Gentoo我可以得到它的工作。
我用这两个环节: ftp://ftp.gnu.org/gnu/octave/
http://math-atlas.sourceforge.net/
我之前和ATLAS后运行下面的八度核心安装:
tic
bigMatrixA = rand(3000000,80);
bigMatrixB = rand(80,30);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");
的矩阵乘法去要快得多使用多核处理器,比单核处理器快3倍:
Without Atlas: Elapsed time is 3.22819 seconds.
With Atlas: Elapsed time is 0.529 seconds.
我使用的三个库,其速度事情是 blas-atlas
, cblas-atlas
, lapack-atlas
。
如果八度可以使用这些而不是默认的blas和lapack库,那么它将利用多核。
这并不容易,需要一些编程技巧才能使用ATLAS从源代码编译八度。
Drabacks使用阿特拉斯:
这Atlas软件使用了大量的开销到您的倍频程的程序分成多个线程。如果你所做的只是巨大的矩阵乘法,那么速度要快得多,但大多数命令不能通过地图集来实现多线程。如果从你的内核中提取每一点处理能力/速度是最重要的,那么你将有更好的运气,只需编写你的程序与自己并行运行即可。 (把你的程序分成8个相同的程序,在问题的八分之一上工作,并在所有工作完成时同时运行,重新组合结果)。
Atlas可帮助单线程八度音程表现得更像一个多线程应用程序,但它不是银色的子弹。 Atlas不会让你的单线程Octave程序超出你的2,4,6,8核心处理器。您会注意到性能提升,但提升会让您寻找更好的方式来使用所有处理器。答案是编写程序与本身并行运行,这需要很多编程技巧。
建议
把你的精力投入到你的矢量化最重的操作和在分发过程中n个联立运行的线程。如果你等待一个进程运行的时间太长,最有可能的结果就是使用更高效的算法或数据结构。
与Eric的回答相似,您可以使用Intel的Math Kernel库编译Octave以使其使用多线程。 MKL可免费用于非商业用途。 http://software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave – KevinC 2014-03-07 13:55:06