GUP を使用して MATLAB 上でコードの実行を高速化する方法
近年ではAMDのCPUがコストパフォーマンスに優れていますが、やはりIntelのCPUがおすすめです。Intel には科学計算における深い蓄積があるため、MATLAB は Intel MKL (Math Kernel Library) 数学コア コンピューティング ライブラリを使用しますが、MKL は AMD CPU で実際にテストされたことがないため、計算速度が大幅に低下します。したがって、現時点では、MATLAB を実行するには Intel CPU のみが推奨されています。MATLAB コードの実行速度を高速化するには、コードの最適化、ベクトル化プログラミング、その他の手段に加えて、GPU を使用して計算を高速化することもできます。
CPUとGPUの主な違い
まず最初に、CPU と GPU の主な違いを見てみましょう。CPU はコンピュータの中央処理装置であり、GPU はコンピュータのグラフィックス処理装置です。
CPU は、ALU 算術論理演算ユニット、Cache キャッシュ メモリ、および Bus バスを含む非常に大規模な集積回路です。これはコンピュータの制御および計算の中核であり、主な機能はコンピュータによって発行された命令を解釈し、コンピュータ ソフトウェア内のビッグ データを処理することです。
GPU はImage Processorの略称で、PC や組み込み機器向けの画像コンピューティング作業専用のマイクロプロセッサの一種です。GPU の働きは上記の CPU に似ていますが、まったく同じではありません。複雑な数学的および幾何学的な計算を実行するように設計されており、このゲームにはこの点で高い要件があるため、多くのゲーム プレーヤーも深い機能を持っています。 GPUへの愛情。
つまり、CPU と GPU はまったく別のものであり、名前が似ているだけです。CPUとGPUは元々別のタスクを処理するために使用されるため、設計に大きな違いがあり、一部のタスクは元々GPUが解決するために使用されていた問題と類似しているため、GPUが計算に使用されます。 GPU は小学生が何人雇われるかによって決まり、CPU の計算速度はどれだけ強力な教授が雇われるかによって決まります。複雑なタスクを処理する教授の能力は小学生を押しつぶす可能性がありますが、それほど複雑でないタスクでは、彼はまだ耐えることができません群衆。もちろん、現在のGPUでも中学生や高校生レベルにアップグレードしたような少々複雑な処理も可能ですが、それでも動作を開始するにはCPUがデータを口に送り込む必要があります。すべて、CPU によって管理されます。
CUDAのバージョンを確認し、ダウンロードしてインストールします
まず基本的な知識を知っておく必要があります。CUDA: グラフィックス カード メーカーである NVIDIA が発売したコンピューティング プラットフォームです。CUDA は、NVIDIA が導入した汎用の並列コンピューティング アーキテクチャで、GPU が複雑なコンピューティングの問題を解決できるようにします。つまり、GPU で MATLAB コードを実行するには CUDA パッケージを使用する必要があり、各グラフィックス カードは対応するバージョンの CUDA パッケージのみをインストールできます。
コンピューターの CUDA バージョンを確認する方法。私のコンピューターは win11 です。次の手順を確認してください。デスクトップを右クリック —> その他のオプションを表示 —> NVIDIA コントロール パネル —> 左下隅のシステム情報 —> コンポーネント — > 製品名
私のコンピュータの対応するバージョンは 11.6 であることがわかります。この時点で、対応するバージョンの cuda をコンピュータにインストールする必要があります。cuda をインストールするためのリンクを確認できます: https: //developer.nvidia
。 com/cuda-toolkit-archiveここで、
インストールには11.6を選択しました。どのバージョンを選択するかについては、大きな違いはありませんが、一般に、このバージョンが GPU の計算能力以上の処理能力を必要とするかどうかによって決まります。
読者は自分のコンピュータに応じて Linux または Windows を選択してインストールできます。インストールが完了すると、環境変数が設定されます。次の手順に従ってください: システム --> システム情報 --> システムの詳細設定 --> 環境変数 --> 新規。環境変数の設定を次の図に示します。
CUDAが正常にインストールされたかどうかを確認する方法
次の手順に従って確認してください: win+R --> cmd を入力 --> コマンドラインに nvcc -V を入力してバージョン情報を表示します。
cuda のインストール場所を確認する方法: win+R --> cmd と入力 --> コマンドラインに set cuda と入力して、インストール場所の情報を表示します。
MATLABとcudaの対応バージョンを確認する
インストール後、MATLABのバージョンがcudaのバージョン(私の場合はcuda11.6など)に対応していることを確認する必要がありますが、私の場合は対応するバージョンがないので、計算効果に影響しないMATLAB2018bを選択しました。これは MATLAB2020b 時点のバージョンです:
Matlab公式 Web サイトのクエリ リンク:
https://ww2.mathworks.cn/help/Parallel-computing/gpu-support-by-release.html
MATLAB で GPU バージョンを表示する
この時点で、cuda はインストールされており、MATLAB のバージョンは正しいです。MATLAB を開いて GPU を表示できます。cuda がインストールされていない場合は、エラーが表示されます。コマンドラインに入力してください
gpuDevice
通常の状況が表示されます。
グラフィック カードが RTX 3060 で、CUDA バージョンが 11.6 であることがわかります。
GPU をテストして MATLAB でコードを実行する
GPU を使用してコードを実行するには、まずいくつかの関数を理解する必要があります
GPU配列 | GPU に保存される配列 |
---|---|
集める | 分散配列または gpuArray をローカル ワークスペースに転送する |
gpuデバイス | GPU デバイスのクエリまたは選択 |
アレイファン | GPU 上の配列の各要素に関数を適用します。 |
速度テスト: 次のコードを入力して CPU 上で実行し、時間を表示します
tic
G=randn(1e4);
toc
次のコードを入力してGPUで実行し、時間を表示します。
tic
G=randn(1e4,'gpuArray');
toc
実行結果は次のとおりです。GPU
での計算速度が直接 94.55% 向上していることがわかります。
Matlab は速度が遅い理由を高速化するために GPU を使用することがあります
たとえば、次のコードを実行します。
N=rand(2000,2000);
tic
[a1,b1]=eig(N);
t1=toc
tic
N=gpuArray(N);
[a2,b2]=eig(N);
a2=gather(a2);
t2=toc
実行結果は次のとおりです。
主な理由は、GPU が並列化可能な行列の各要素の導関数を求めるなどの演算を並列化できる状況に適しており、GPU の使用は非常に高速ですが、 eig は並列化できないようです。