ストリーミングは、デバイスのオンボードメモリに格納できない、大きなサイズの波形を生成する方法です。ストリーミングは、ダイナミック生成セッションで使用できます。

波形データをストリーミングするには、すべてのまたは一部のデバイスオンボードメモリを、ストリーミング用オンボード波形として割り当ておよび識別します。生成を開始する前に、オンボードメモリに波形の最初の部分を格納します。波形が生成されるとオンボードメモリの領域が開放されるので、そこに新しい波形データを格納します。波形が完成するまで、新しい波形データをオンボードメモリに格納する手順を繰り返します。

下記の説明は、ストリーミング用にアプリケーションを構成するガイドラインとなります。

たとえば、256 MBのオンボードメモリが搭載されたデバイスで、1.6 GB波形を生成するとします。この1.6 GB波形は、ホストメモリやディスクにあるもの、または生成中にアプリケーションが動的に生成するデータを使用できます。

  1. ストリーミングに使用するオンボードメモリの量を指定します。

    「niHSDIO名前付き波形を割り当て」VIまたは「niHSDIO_AllocateNamedWaveform」関数を使用して、ストリーミングに予約するオンボードメモリ量を指定します。このメモリは、ストリーミング処理のバッファとして機能します。「niHSDIO波形を割り当て」関数は、波形ハンドルを返します。

  2. ストリーミング波形を識別します。

    手順1で返された波形ハンドルに対してストリーミング波形名プロパティまたはNIHSDIO_ATTR_STREAMING_WAVEFORM_NAME属性を設定します。このプロパティを設定することで、ストリーミングするデータが生成前に上書きされないように保護します。NI-HSDIOはこの進行状況をモニターして、新しいデータが生成に遅れることなく高速で書き込まれるようにします。ご利用のアプリケーションが新しいデータを高速で書き込まない、または新しいデータで未生成のデータが上書きされそうになった場合、NI-HSDIOはエラーを返します。

  3. 最初のデータをストリーミング波形に書き込みます。

    「niHSDIO名前付き 波形の書き込み」VI または「 名前付き波形 の書き込み」関数の1つを呼び出して、波形データの最初の部分をオンボードメモリのストリーミング波形に書き込みます。

    ヒント 大きな波形データブロックを転送する場合は、データを小さなセグメントに分割します。「niHSDIO名前付き波形の書き込み」VIまたは「名前付き波形の書き込み」関数の1つを複数回使用します。各呼び出しはデータを順番に追加します。コンピュータは通常、1つの大きな連続ブロックよりも速く小さなブロックを割り当てます。たとえば、RAM容量によって、10個の16 MBブロックを転送するほうが1個の160 MBブロックを転送するよりも高速である場合があります。
  4. 波形生成を開始します。

    「niHSDIO生成セッションを初期化」VIまたは「niHSDIO_InitGenerationSession」関数を呼び出して、波形生成を開始します。波形が生成される際に、ストリーミング波形の容量が空きます。

  5. 波形が生成時に使用可能なメモリを監視します。

    ストリーミング波形で使用可能な領域プロパティまたはNIHSDIO_ATTR_SPACE_AVAILABLE_IN_STREAMING_WAVEFORM属性を使用して、新規データを書き込むことができるオンボード波形の空き容量を取得します。波形が生成される際に容量が空き、より多くの波形データを書き込むことが可能になります。特定の量のオンボードメモリが使用可能になると、オンボードメモリのストリーミング波形に波形を書き込むことができます。通常、16 MBなどの大きなブロックを書き込むと、ストリーミングの効率性と速度が向上します。

  6. 波形データブロックを書き込みます。

    「niHSDIO名前付き 波形の書き込み」VI または「 名前付き波形 の書き込み」関数の1つを呼び出して、波形データの新しいブロックをオンボードメモリのストリーミング波形に書き込みます。

  7. 使用可能なメモリを監視して、容量が空いてから波形データブロックを書き込む手順を繰り返します。

ヒント このアプリケーションをLabVIEWで作成する方法については、「Continuous Generation - Stream From Memory」VIを参照してください。このVIは、NI-HSDIOサンプルの一部として出荷されるDynamic Generation.llbに含まれています。

ストリーミングを向上させる

ストリーミング用に最大持続転送レートを向上させるには、以下を実行してください。

  • データ転送ブロックサイズプロパティまたはNIHSDIO_ATTR_DATA_TRANSFER_BLOCK_SIZE属性を調整して、波形サイズに近づけます。この変更によって、データ転送はより効率的になり、たとえば4回の転送を1回で完了できます。
  • ハードドライブからストリーミングする際には、最大持続レートで必要なハードドライブの速度を考慮します。ノートブックPCのハードドライブデータ転送レートは通常、5~10 MB/sです。デスクトップハードドライブのデータ転送レートは通常、20 MB/s以上のものも存在します。
  • ハードドライブからの転送レートは、さまざまな理由で異なります。たとえば、データが物理的に格納されているハードドライブ内の場所や、格納されたデータ量が転送レートを左右します。最適化した専用ハードドライブに波形ファイルを格納すると、パフォーマンスが向上する可能性があります。
  • RAID構成でハードドライブを使用することを検討してください。これにより、ストライピングが可能になり、ディスクからのデータ転送レートが向上します。
  • 18スロットPXIシャーシを使用する場合は、ストリーミングに使用するデバイスをシャーシのスロット2~6に取り付けます。
  • ダイレクトDMAを活用します。