最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

GPU の使用によるターボ符号化ビット誤り率のシミュレーションの高速化

この例では、GPU を使用してビット誤り率のシミュレーションを大幅に高速化する方法について示します。ターボ符号は多くの通信システムの基本です。ターボ復号化器で大量の計算を実行し、有効なビット誤り率シミュレーションのために試行を数多く行う必要があるため、ターボ復号化器が GPU 高速化を実現する理想的な候補となります。ターボ符号の詳細については、データ処理連鎖を説明している「並列連接畳み込み符号化: ターボ符号」の例を参照してください。

ターボ復号化器 GPU の例を使用するには、Parallel Computing Toolbox™ のライセンスが必要です。

この例では、GPU の使用によるターボ符号化ビット誤り率のシミュレーションの高速化を実現する 2 つのアプローチを示します。ベースライン システムは、ランダム メッセージ生成、ターボ符号化器 (comm.TurboEncoder)、MATLAB® コードを使用した BPSK 変調、AWGN チャネル (comm.AWGNChannel)、MATLAB コードを使用した BPSK 復調、ターボ復号化器 (comm.TurboDecoder) およびビット誤り率計算 (comm.ErrorRate) で構成されます。

注意: このソフトウェアの提供は、設計、シミュレーションおよび解析目的でソフトウェアを使用する場合を除き、France Telecom、Telediffusion de France または Groupe des Ecoles des Telecommunications が保有するターボ符号特許を使用するライセンスを譲渡するものでもなく、いかなる権利も意味するものではありません。このソフトウェアのターボ符号テクノロジーによって生成されたコードは、商業製品における実装や統合向けではなく、そのような用途に適したものでもありません。

ターボ符号のライセンス プログラムについては、次の住所の France Telecom 宛てにお問い合わせください。France Telecom R&D - PIV/TurboCodes 38-40, rue du General Leclerc 92794 Issy-les-Moulineaux Cedex 9, France.

TurboDecoderBERsim GUI の起動

TurboDecoderBER_GPU

シミュレーションの概要

[Simulation options] ボタン グループで、CPU のみのシミュレーション用の [CPU] オプションを選択します。[Simple GPU] オプションは、CPU ベースのターボ復号化器 (comm.TurboDecoder) を GPU 実装 (comm.gpu.TurboDecoder) に置き換えるため、CPU のバージョンがわずかに変更されます。

[Optimized GPU] オプションは comm.gpu.TurboDecoder オブジェクトを使用し、gpuArray オーバーロードを使用して GPU 上で BPSK 変調および復調コードを実行します。このオプションも GPU で高速化された AWGN チャネルを使用します。GPU 計算のベスト プラクティスとして、System object の step メソッドへの呼び出しのたびに複数のデータのフレームが処理されます。

GPU での処理が可能な限り、複数のデータのフレームを同時に (つまり並列で) 処理することをお勧めします。一般的に、GPU の計算能力は 1 データ フレームを処理するために必要な能力を圧倒的に上回っています。1 回の関数呼び出しで、GPU を複数のデータのフレームに割り当てて処理すると、GPU の処理能力をより効率的に活用できます。複数フレームの処理を使用するために、フレーム サイズの整数倍の長さとなるランダムなメッセージが作成されます。ターボ符号化器は、この長い複数フレームのベクトルを一度に 1 つずつ符号化します (実際には CPU での複数フレーム処理には利点はありません。CPU ターボ符号化器には複数フレーム モードがありません)。次に、関数 gpuArray を使用して、データを GPU に送信します。チャネル、変調器、または復調器にはフレームという概念がないため、残りのデータ処理連鎖は前述の内容と同じです。ターボ復号化器を複数フレーム モードで実行するには、NumFrames プロパティを複数フレーム データ ベクトルと同じ値にします (既定値は 1)。ターボ復号化器は、1 回の step メソッドの呼び出しで、各フレームを個別に並列で復号化します (具体的には、データは 1 つの長いフレームとして処理されないということです)。

コードの差異

2 つの GPU 実装に必要な元の CPU ソース コードの変更を確認するには、該当する GPU ラジオ ボタン ([Simple GPU] または [Optimized GPU] のいずれか) をクリックしてから、[Show Code Differences] ボタンをクリックします。これにより比較ツールが起動し、GPU 高速化に必要な変更を確認できます。

誤り率性能

3 つのバージョンのコードについて、ビット誤り率曲線をプロットできます。1 つの点をプロットするために必要な誤り数は、[Minimum Number of Errors] フィールドで変更できます。任意の誤り数を入力し、[Start Simulation] ボタンをクリックします。開始したシミュレーションを停止するには、同じボタンを早めにクリックします。

CPU と Simple GPU バージョンのビット誤り率曲線が完全に一致します。このことは、ターボ復号化器の GPU バージョンが、CPU バージョンとまったく同じビット誤り率の処理を、大幅に高速に実現できることを示します。Optimized GPU バージョンは複数のフレームを並列処理するため、ビット誤り率が若干異なる場合があります。したがって、最小誤り数を渡すために必要なフレーム数よりも数フレーム多く実行される場合があります。

結果

シミュレーションの実行時には、メイン シミュレーション ループで毎秒処理されるメッセージ ビット数がプロットの凡例に表示されます。これは、コードのバージョンごとのシミュレーション実行速度の尺度となります。Intel® Xeon® X5650 プロセッサと NVIDIA K20c GPU を搭載したコンピューターで、長時間のシミュレーションが完了しました。これらのシミュレーションは、Simple GPU の速度が CPU バージョンに対して 2 倍よりも速く、Optimized GPU バージョンの速度が CPU バージョンよりも 6 倍速いことを示しています。