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 は並列化できないようです。

おすすめ

転載: blog.csdn.net/weixin_48266700/article/details/129275805