2012-08-09 255 views
17

我希望能够用GNU八度编程多线程,所以它会利用多个处理器。获取GNU Octave以使用多核处理器。 (多线程)

我在Fedora 17的Linux安装GNU八度,也做了以下内容:

yum install octave 

在我的电脑上安装了最新版本的八度,3.6.2。它工作的很好,但是当你将两个巨大的矩阵相乘时,它会使八度使用的一个CPU陷入沉寂。如果矩阵乘法利用了所有内核,那将会很不错,因为在这种情况下,CPU显然是瓶颈。

八度可以完全利用多核处理器并在多线程上运行吗?有没有图书馆或编译时间的标志呢?

+0

与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

回答

24

解决方案

八度本身是一个内核上运行的单线程应用程序。你可以使用八度来使用一些像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-atlascblas-atlaslapack-atlas

如果八度可以使用这些而不是默认的blas和lapack库,那么它将利用多核。

这并不容易,需要一些编程技巧才能使用ATLAS从源代码编译八度。

Drabacks使用阿特拉斯:

这Atlas软件使用了大量的开销到您的倍频程的程序分成多个线程。如果你所做的只是巨大的矩阵乘法,那么速度要快得多,但大多数命令不能通过地图集来实现多线程。如果从你的内核中提取每一点处理能力/速度是最重要的,那么你将有更好的运气,只需编写你的程序与自己并行运行即可。 (把你的程序分成8个相同的程序,在问题的八分之一上工作,并在所有工作完成时同时运行,重新组合结果)。

Atlas可帮助单线程八度音程表现得更像一个多线程应用程序,但它不是银色的子弹。 Atlas不会让你的单线程Octave程序超出你的2,4,6,8核心处理器。您会注意到性能提升,但提升会让您寻找更好的方式来使用所有处理器。答案是编写程序与本身并行运行,这需要很多编程技巧。

建议

把你的精力投入到你的矢量化最重的操作和在分发过程中n个联立运行的线程。如果你等待一个进程运行的时间太长,最有可能的结果就是使用更高效的算法或数据结构。

+0

对于“在单独的线程中分割你的程序”的方法,优化的BLAS仍然是可取的,但是* single螺纹*。就像这个[openBLAS节](http://wiki.octave.org/Octave_and_separate_toolchain)一样。然后在http://wiki.octave.org/Parallel_package中查看示例 – ederag 2018-01-30 11:49:27

2

正如Eric建议的那样,我尝试使用ATLAS,它提高了我的性能3倍(在NN学习应用程序中,主要成本是矩阵乘法)。令人惊讶的是,它似乎仍然只使用一个核心。经过进一步的研究,我偶然发现了OpenBLAS,它开始使用多个内核,并进一步提高了性能2倍(尽管我只有2个内核)。如果你想挤出更多,你也可以尝试使用MKL,但由于依赖关系,磁盘空间很大。

我正在使用Arch Linux社区/ atlas-lapack-base and aur/openblas-lapack。安装它们中的每一个都切换了Octave中使用的默认设置。


这是一个很好的比较基准:http://www.tcm.phy.cam.ac.uk/~mjr/linpack/