获取GNU八度与多核处理器一起工作。 (multithreading)

我希望能够用GNU八度编程multithreading,所以它会利用多个处理器。

我在Fedora 17 Linux上安装了GNU Octave,并做了如下工作:

yum install octave 

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

八度可以充分利用多核处理器并在multithreading上运行吗? 是否有一个库或编译时间标志呢?

Solutions Collecting From Web of "获取GNU八度与多核处理器一起工作。 (multithreading)"

Octave本身是一个在单核上运行的单线程应用程序。 你可以得到八度来使用一些像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个同时运行的线程。 如果你等待一个进程运行时间太长,那么最有可能的就是使用更高效的算法或者数据结构。

Octave-Forge是处理并行计算的两个软件包:

  • MPI
  • 平行

也可以使用fork()函数产生子进程。

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

我使用Arch Linux的软件包community / atlas-lapack-base和aur / openblas-lapack 。 安装其中的每一个切换默认使用八度。

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