解決
Octave 自体は、1 つのコアで実行されるシングルスレッド アプリケーションです。複数のコアを利用するATLASのようないくつかのライブラリを使用するためにオクターブを取得できます。したがって、Octave は 1 つのコアしか使用しませんが、負荷の高い操作に遭遇すると、octave は多くの CPU を使用する ATLAS の関数を呼び出します。
私はこれを行うことができました。最初にソース コードから 'ATLAS' をコンパイルし、システムで使用できるようにして、オクターブがそれを見つけてそれらのライブラリ関数を使用できるようにします。ATLAS は、システムとコア数に合わせて調整します。ソースから octave をインストールして ATLAS を指定すると、それが使用されます。そのため、octave が巨大な行列乗算のような重い操作を行う場合、ATLAS は使用する CPU の数を決定します。
Fedora ではこれを機能させることができませんでしたが、Gentoo では機能させることができました。
次の 2 つのリンクを使用しました:
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.
私が使用している高速化する 3 つのライブラリは
blas-atlas
、、、
cblas-atlas
です
lapack-atlas
。
オクターブがデフォルトの blas と lapack ライブラリの代わりにこれらを使用できる場合、マルチコアを利用します。
ATLAS を使用してソースからオクターブをコンパイルするには、簡単ではなく、ある程度のプログラミング スキルが必要です。
Atlas を使用する際の欠点:
この Atlas ソフトウェアは、多くのオーバーヘッドを使用して、オクターブ プログラムを複数のスレッドに分割します。確かに、巨大な行列の乗算だけを行っている場合は、はるかに高速になりますが、ほとんどのコマンドはアトラスによってマルチスレッド化できません。コアからすべての処理能力/速度を引き出すことが最優先事項である場合は、それ自体と並行して実行されるプログラムを作成するだけで、はるかに幸運になります。(プログラムを、問題の 1/8 で動作する 8 つの同等のプログラムに分割し、それらをすべて同時に実行します。すべてが完了したら、結果を再構築します)。
Atlas は、シングル スレッドのオクターブ プログラムをマルチスレッド アプリのように動作させるのに役立ちますが、特効薬ではありません。Atlas は、シングル スレッドの Octave プログラムで 2、4、6、8 コア プロセッサを最大限に活用することはありません。パフォーマンスが向上したことに気付くでしょうが、その向上により、すべてのプロセッサを使用するためのより良い方法を探す必要が生じます. 答えは、それ自体と並行して実行するようにプログラムを作成することです。これには、多くのプログラミング スキルが必要です。
提案
最も負荷の高い操作をベクトル化し、n 個の同時実行スレッドにプロセスを分散することにエネルギーを注ぎます。プロセスが実行されるまでの待ち時間が長すぎる場合、最も効率的なアルゴリズムまたはデータ構造を使用することで、プロセスを高速化できます。