この演習では、別のテンプレートを使用してコピー プラグマを使用する方法を示します。このテンプレートでは、M と呼ばれる追加のパラメーターが行列乗算関数に渡されます。このパラメーターを使用すると、最大 32*32 までの任意サイズ M*M の正方行列 2 つを乗算する行列乗算関数を使用できます。この行列の最上位の割り当てにより、最大 32x32 までのサイズの行列が作成されます。M パラメーターは、行列乗算関数で乗算する行列のサイズを指定します。data copy プラグマは、最大の行列サイズではなく、実際の行列サイズに相当するデータ量を転送することを指定します。
- SDx 環境を起動し、可変データ サイズを使用する行列乗算デザイン テンプレートを使用して、ZC702 と Linux プラットフォーム用の新しいプロジェクトを作成します。
- をクリックします。
- New Project ウィザードにプロジェクトの名前 (たとえば
lab3a) を入力します。
- [zc702] および [Linux] を選択します。
- [Next] をクリックします。
- [Available Templates] から [Matrix Multiplication Data Size] を選択し、[Finish] をクリックします。
mmult_accel ファンクションはハードウェア アクセラレーション用にマークされていることに注意してください。
- [Options] パネルで [Generate bitstream] と [Generate SD Card Image] をオフにして、ビットストリームとブート ファイルが生成されないようにプロジェクトを設定します。
- data copy プラグマがコードに含まれています。data copy プラグマを確認するには、[Project Explorer] タブで mmult_accel.h (src フォルダーの下) をダブルクリックしてソース エディター ビューで開きます。
次のように、各配列に異なるデータ コピー サイズを指定します。プラグマでは、関数のスカラー引数のどれでも使用してデータ コピー サイズを指定できます。ここでは、サイズを指定するのに
M を使用しています。
#pragma SDS data copy(A[0:M*M], B[0:M*M], C[0:M*M])
#pragma SDS data access_pattern(A:SEQUENTIAL, B:SEQUENTIAL, C:SEQUENTIAL)
void mmult_accel (float A[N*N],
float B[N*N],
float C[N*N],
int M);
- プロジェクトの最上位フォルダーを右クリックして、[Build Project] をクリックします。
- ビルドが完了したら、[Project Explorer] の [Reports] タブで [Data Motion Network Report] をダブルクリックして開きます。
- 右から 2 番目の [Pragmas] 列に、各配列のデータ転送の長さが表示されます。2 つ目の表には、各ハードウェア関数呼び出しサイトの転送サイズが示されます。