QPU: スレッド間におけるセマフォの値変化の伝わる速さ

概要

QPUのセマフォの値の変化が他のスレッドに伝わるまでの遅延は$0$クロックであることがわかった.

実験環境

実験環境としてRaspberry Pi 3 Model Bを使用した. config.txtにおいてforce_turbo=1としているため, QPUの$1$コアは$400/4 = 100$MHzで動作する.

プログラムの動作

準備部では約$9$個の命令を実行した.ここで概数を述べたのは, 準備部ではuniformのオーバーヘッドや命令キャッシュミスの割合が大きいからである.

主要ループ部ではTable. 1のコードを実行した. 時間測定の誤差を抑えるため,主要ループ部は$12345678$回繰り返して実行した. よって,主要ループ部では$12345678 \times 7 = 86419746$個の命令を実行した.

上記より,プログラムでは約$86419755$個の命令を実行した. プログラムは$10$回実行し,その中央値を測定値とした.

Table 1. プログラムの主要ループ部における動作
Thread#1 Thread#2
nop nop
semaphore#0 increment nop
nop semaphore#0 decrement
nop nop
nop semaphore#1 increment
semaphore#1 decrement nop
nop nop

結果

上記のプログラムを実行すると,実行完了に$0.864278$秒かかった.

考察

QPUが理想的に$100$MHzで$86419755$個の命令を実行すると$86419755 / 100e6 = 0.86419755$秒かかる. これは上記プログラムの実行完了にかかった時間とほぼ一致しているので, セマフォの値の変化が他のスレッドに伝わるまでの遅延は$0$クロックであることがわかる.

Copyright notice

© 2016 Yukimasa Sugizaki. All rights reserved.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.