プログラミング モデルの機能 - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

AI エンジン プログラミング モデルには、次の機能があります。

  • すべての I/O オブジェクト (input_plio/output_plio および input_gmio/output_gmio) は、グラフ クラスのパブリック メンバーです。I/O オブジェクトを介するループがサポートされます。これにより、I/O オブジェクトの構築が容易になり、エラーも少なくなります。次に例を示します。
    class mygraph : public graph
    {
    public:
        // Declare N kernels.
        kernel k[N];
        // Declare N input_gmio(s) and output_gmio(s)
        input_gmio gmioIn[N];
        output_gmio gmioOut[N];
    
        mygraph()
        {
            // Create multiple input_gmio(s)/output_gmio(s) and connections
            for (int i=0; i<N; i++)
            {
                gmioIn[i]  = input_gmio::create("gmioIn" + std::to_string(i), 64, 1);
                gmioOut[i] = output_gmio::create("gmioOut" + std::to_string(i), 64, 1);
                connect(gmio[i].out[0], k[i].in[0]);
                connect(k[i].out[0], gmioOut[i].in[0]);
    
                dimensions(k[i].in[0]) = {FRAME_LENGTH};
                dimensions(k[i].out[0]) = {FRAME_LENGTH};
            }
        }
    };
    注記: 必須ではありませんが、input_pliooutput_plioinput_gmio、および output_gmio オブジェクトを生成する際、論理名を指定できます。論理名を指定しない場合、AI エンジン コンパイラで自動的に固有の論理名が付けられます。
  • プログラミング モデルを使用すると、デザイン内での接続を簡単に指定できます。ローカル スコープの input_pliooutput_plioinput_gmio、および output_gmio オブジェクトでは、connect 呼び出しを使用して接続名を指定する必要はありません。
  • プログラミング モデルでは、input_pliooutput_plioinput_gmio、および output_gmio オブジェクトの方向プロパティがサポートされます。方向プロパティは、オブジェクト構築内で決定されます。

次に、これらの機能を含むプログラミング モデルの例を示します。

/* A graph with both PLIO and GMIO*/
class mygraph : graph
{
public:

    /* Classes support input_gmio/output_gmio and input_plio/output_plio */
    input_gmio gm_in; 
    output_gmio gm_out;

    input_plio pl_in;
    output_plio pl_out;

    kernel k1, k2;
    mygraph()
    {
        k1 = kernel::create(...);
        k2 = kernel::create(...);

        /* create() API for PLIO and GMIO objects support same arguments specified as in global scope */
        gm_in = input_gmio::create("GMIO_In0",/*const std::string& logical_name*/
                                    64,       /*size_t burst_length*/
                                    1         /*size_t bandwidth*/);

        gm_out = output_gmio::create("GMIO_Out0", 64, 1);

        pl_in = input_plio::create("PLIO_In0",       /* std::string logical_name */
                                    plio_32_bits,    /* enum plio_type plio_width */
                                    "data/input.txt",/* std::string data_file */
                                    250.0            /* double frequency */ );

        pl_out = output_plio::create("PLIO_Out0", plio_32_bits, "data/output.txt", 250.0);

        /* Each input_gmio/output_gmio and input_plio/output_plio supports 1 port per direction */
        connect(gm_in.out[0], k1.in[0]);
        connect(k1.out[0], gm_out.in[0]);

        connect(pl_in.out[0], k2.in[0]);
        connect(k2.out[0], pl_out.in[0]);

        location<GMIO>(gm_in) = shim(col);
        location<GMIO>(gm_out) = shim(col, ch_num); /* not supported */

        location<PLIO>(pl_in) = shim(col);
        location<PLIO>(pl_out) = shim(col, ch_num);
    }

};

上記のコードは、次を示しています。

  • input_pliooutput_plioinput_gmio、および output_gmio は、グラフ内のパブリック オブジェクトです。
  • input_plio および output_plio クラスは、PLIO クラスから継承されます。
  • input_gmio および output_gmio クラスは、GMIO クラスから継承されます。
  • input_pliooutput_plioinput_gmio、および output_gmio オブジェクトの構築には、方向プロパティが含まれます。
  • connect 呼び出しに固有の名前は不要です。
  • ロケーション制約は、このリリースではサポートされていない GMIO チャネル制約を除き、input_pliooutput_plioinput_gmio、および output_gmio オブジェクトに直接適用できます。
    注記: DMA チャネルでの GMIO シム タイルのロケーション制約はサポートされません。
    注記: プロファイリング API を呼び出すホスト アプリケーションには、参照オブジェクトのパブリック メンバー mygraph.gm_inmygraph.gm_outmygraph.pl_inmygraph.pl_out が必要です。プロファイリング API の詳細は、 『AI エンジン ツールおよびフロー ユーザー ガイド』 (UG1076)シミュレーション中の AI エンジン グラフ アプリケーションのパフォーマンス解析を参照してください。

    次に、プログラミング モデルからのプロファイル呼び出し例を示します。

    event::handle handle0 = event::start_profiling(mygraph.gm_in, event::io_stream_start_to_bytes_transferred_cycles, sizeIn*sizeof(cint16));
重要: input_pliooutput_plioinput_gmio、および output_gmio オブジェクトの名前は、固有のものである必要があります。名前が重複している場合は、次のエラー メッセージが表示されます。
ERROR: [aiecompiler 77-4551] The logical name DataIn1 of node i6 conflicts with the logical/qualified name of node i0.