転送されるデータ量を制御するプラグマの追加

この演習では、別のテンプレートを使用してコピー プラグマを使用する方法を示します。このテンプレートでは、M と呼ばれる追加のパラメーターが行列乗算関数に渡されます。このパラメーターを使用すると、最大 32*32 までの任意サイズ M*M の正方行列 2 つを乗算する行列乗算関数を使用できます。この行列の最上位の割り当てにより、最大 32x32 までのサイズの行列が作成されます。M パラメーターは、行列乗算関数で乗算する行列のサイズを指定します。data copy プラグマは、最大の行列サイズではなく、実際の行列サイズに相当するデータ量を転送することを指定します。

  1. SDx 環境を起動し、可変データ サイズを使用する行列乗算デザイン テンプレートを使用して、ZC702 と Linux プラットフォーム用の新しいプロジェクトを作成します。
    1. [File][New][Xilinx SDx Project] をクリックします。
    2. New Project ウィザードにプロジェクトの名前 (たとえば lab3a) を入力します。
    3. [zc702] および [Linux] を選択します。
    4. [Next] をクリックします。
    5. [Available Templates] から [Matrix Multiplication Data Size] を選択し、[Finish] をクリックします。
    6. mmult_accel ファンクションはハードウェア アクセラレーション用にマークされていることに注意してください。
  2. [Options] パネルで [Generate bitstream][Generate SD Card Image] をオフにして、ビットストリームとブート ファイルが生成されないようにプロジェクトを設定します。
  3. 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);
  4. プロジェクトの最上位フォルダーを右クリックして、[Build Project] をクリックします。
  5. ビルドが完了したら、[Project Explorer] の [Reports] タブで [Data Motion Network Report] をダブルクリックして開きます。
  6. 右から 2 番目の [Pragmas] 列に、各配列のデータ転送の長さが表示されます。2 つ目の表には、各ハードウェア関数呼び出しサイトの転送サイズが示されます。