Eri*_*ski 19 linux multithreading multicore octave
我希望能够用gnu octave编写多个线程,因此它将使用多个处理器.
我在Fedora 17 Linux上安装了GNU Octave并执行了以下操作:
yum install octave
Run Code Online (Sandbox Code Playgroud)
在我的电脑上安装了最新版本的octave,3.6.2.它工作得很好,但是当你将两个巨大的矩阵相乘时,它会陷入八度音阶使用的一个CPU.如果矩阵乘法利用所有内核,那将是很好的,因为在这种情况下,CPU显然是瓶颈.
octave可以充分利用多核处理器并在多个线程上运行吗?是否有库或编译时间标志?
Eri*_*ski 27
解
Octave本身是一个在一个核心上运行的单线程应用程序.您可以使用八度音程来使用ATLAS等利用多个核心的库.因此,虽然Octave只使用一个核心,但是当你遇到繁重的操作时,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");
Run Code Online (Sandbox Code Playgroud)
使用多个处理器的矩阵乘法速度更快,比单核处理速度快3倍:
Without Atlas: Elapsed time is 3.22819 seconds.
With Atlas: Elapsed time is 0.529 seconds.
Run Code Online (Sandbox Code Playgroud)
我使用的速度东西是三个库
blas-atlas,
cblas-atlas,
lapack-atlas.
如果octave可以使用这些而不是默认的blas和lapack库,那么它将使用多核.
这并不容易,并且需要一些编程技巧才能从ATLAS的源代码编译.
Drabacks使用Atlas:
这个Atlas软件使用大量开销将八度音程编程分成多个线程.当然,如果您所做的只是巨大的矩阵乘法,它会更快,但大多数命令都不能通过图集多线程.如果从核心中提取每一点处理能力/速度是最重要的,那么只要编写程序与自身并行运行,你就会有更好的运气.(将程序拆分为8个等效程序,解决问题的1/8并同时运行它们,完成所有操作后,重新组合结果).
Atlas帮助单线程八度音程程序更像一个多线程应用程序,但它不是银弹.Atlas不会让您的单线程Octave程序最大化您的2,4,6,8核心处理器.您会注意到性能提升,但是提升将让您寻找更好的方式来使用所有处理器.答案是编写程序与自身并行运行,这需要很多编程技巧.
建议
将您的精力投入到矢量化最重的操作中,并将过程分配到n个同时运行的线程上.如果等待一个进程运行的时间太长,那么加速它的最低成果可能是使用更有效的算法或数据结构.
| 归档时间: |
|
| 查看次数: |
20098 次 |
| 最近记录: |