前回で、ARMでサイクルカウンタを使用する方法を調査した。
サンプルプログラムを用いてPLへのアクセス性能を計測するプログラムを記述する
これを前回PS/PLのサンプルデザインに適用してみよう。以下のように、PL内にメモリが格納されている。
メモリへのストアとロードを繰替えして、どの程度サイクル数が必要なのか計測してみる。
int main() { init_platform(); print("Start Timer Test\n\r"); unsigned long start_time = pmon_start_cycle_counter (); int i; uint32_t result0 = 0, result1 = 0; for (i=0; i < 1000; i++) { Xil_Out32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 0, i); Xil_Out32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 4, i+1); result0 += Xil_In32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 0); result1 += Xil_In32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 4); } unsigned long stop_time = pmon_read_cycle_counter(); xil_printf ("start_time = %ld, stop_time = %ld, result0=%d, result1=%d\n", start_time, stop_time, result0, result1); cleanup_platform(); return 0; }
以下のように、サイクル数が計測できた。いくつかバリエーションを変えて、サイクル数を計測している。また、アクセス回数に比例してサイクル数が変化しているので、計測方法も問題無いと思う。
サイクル数 | |
---|---|
Load1回 | 1877 |
Load2回 | 3648 |
Store1回 | 2102 |
Store2回 | 4064 |
Load2回/Store2回 | 7503 |