インテルのみ表示可能 — GUID: wiu1473363373410
Ixiasoft
10.5.2. メモリー・レプリケーションとストール可能な LSU に関する情報のレビュー
transpose_and_foldコンポーネント ( <QPDS_installdir>/hls/examples/tutorials/loop_memory_dependencyで提供される tutorial ファイルの一部 ) から抜粋した次のコード例を考察します。
01 #include "HLS/hls.h" 02 #include "stdio.h" 03 #include "stdlib.h" 04 05 #define SIZE 32 06 07 typedef altera::stream_in<int> my_operand; 08 typedef altera::stream_out<int> my_result; 09 10 void transpose_and_fold(my_operand &a, my_operand &b, my_result &c) 11 { 12 int i; 13 int j; 14 int a_buf[SIZE][SIZE]; 15 int b_buf[SIZE][SIZE]; 16 for (i = 0; i < SIZE * SIZE; i++) { 17 a_buf[i / SIZE][i % SIZE] = a.read(); 18 b_buf[i / SIZE][i % SIZE] = b.read(); 19 } 20 #ifdef USE_IVDEP 21 #pragma ivdep 22 #endif 23 for (j = 0; j < SIZE * SIZE * SIZE; j++) { 24 #pragma unroll 25 for (i = 0; i < SIZE; i++) { 26 b_buf[j % SIZE][i] += a_buf[i][j % SIZE]; 27 } 28 } 29 for (i = 0; i < SIZE * SIZE; i++) { 30 c.write(b_buf[i / SIZE][i % SIZE]); 31 } 32 }
下の図は 23 行目のBlock3でループのレビューを促すために赤くハイライトされたことを示しています。Block3のループ分析は、II の値が 2 でパイプラインされていることを表し、ループのパイプラインはデザインのスループットに影響を与える可能性があります。 Component Viewerは、II の値が b_buf可変へのロードへのメモリーの依存性に起因していることを示しています。

ノード上にマウスを置くと、LSU に関する更なる情報を提供するツールチップとして詳細が表示されます。下の図では、ツールチップはロードのレイテンシーが 6 で、かつ LSU にストールがないという情報を表示しています。

Component Viewerは、表示させたい接続種類の選択ができるようにします。Controlを選択すると、システムビューアーにブロックとループの間の接続の表示を指示します。Memoryを選択すると、 Component Viewerにグローバルメモリーおよびローカルメモリーへの接続とそれらからの接続の表示を指示します。Streamsを選択すると、システムビューアーにストリームからの読み出しとストリームへの書き込みを接続する表示を指示します。
