gpt4 book ai didi

linux - 让 GNU Octave 与多核处理器一起工作。 (多线程)

转载 作者:IT王子 更新时间:2023-10-29 00:19:28 27 4
gpt4 key购买 nike

我希望能够使用 gnu octave 对多线程进行编程,这样它将利用多个处理器。

我在 Fedora 17 Linux 上安装了 GNU Octave 并执行了以下操作:

yum install octave

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

octave能否充分利用多核处理器,多线程运行?是否有用于此的库或编译时标志?

最佳答案

解决方案

Octave 本身是一个运行在一个内核上的单线程应用程序。您可以使用 Octave 来使用 ATLAS 等利用多核​​的库。因此,虽然 Octave 仅使用一个核心,但当您遇到繁重的操作时,Octave 会调用 ATLAS 中使用许多 CPU 的函数。

我能够做到这一点。首先从源代码编译“ATLAS”并使其可供您的系统使用,以便 octave 可以找到它并使用这些库函数。 ATLAS 会根据您的系统和内核数量进行 self 调整。当您从源代码安装 octave 并指定 ATLAS 时,它会使用它,因此当 octave 执行繁重的操作(如巨大的矩阵乘法)时,ATLAS 决定使用多少个 cpu。

我无法让它在 Fedora 上运行,但在 Gentoo 上我可以让它运行。

我使用了这两个链接: ftp://ftp.gnu.org/gnu/octave/

http://math-atlas.sourceforge.net/

我在 ATLAS 安装前后运行了以下 Octave 核心:

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.

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

使用 ATLAS 从源代码编译 Octave 并不容易,需要一些编程技巧。

使用 Atlas 的缺点:

此 Atlas 软件使用大量开销将您的 Octave 程序拆分为多个线程。当然,如果你所做的只是巨大的矩阵乘法,它会更快,但大多数命令不能被 atlas 多线程处理。如果从核心中提取每一点处理能力/速度是重中之重,那么只需编写与自身并行运行的程序,你就会有更好的运气。 (将你的程序分成 8 个等效程序,处理 1/8 的问题并同时运行它们,当所有完成后,重新组合结果)。

Atlas 帮助单线程 Octave 程序表现得更像多线程应用程序,但它不是 Elixir 。 Atlas 不会使您的单线程 Octave 程序最大化您的 2、4、6、8 核心处理器。您会注意到性能提升,但这种提升会让您寻找更好的方式来使用所有处理器。答案是编写与自身并行运行的程序,这需要大量的编程技巧。

建议

将您的精力投入到对您最繁重的操作进行矢量化处理并将流程分布到 n 个同时运行的线程上。如果您等待某个进程运行的时间过长,最有可能实现加速的最简单方法是使用更高效的算法或数据结构。

关于linux - 让 GNU Octave 与多核处理器一起工作。 (多线程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com