プライムモーション社「MOS Bench(モスベンチ)」のリアルタイムインタープリタは、C言語に似たIO制御プログラム記述用MOS言語を翻訳した中間言語を、さらに高速翻訳実行するソフトである。
以下の記事で、Core 2 Duo 1.8GHzでは、1usあたり1命令のMOS言語を実行可能と書いた。
12/15の記事
今回は、他のCPUの処理速度を紹介したい。
前回と同じで、以下のプログラムを各種のCPUで実行した。
while( a<1001) {
val[a] = GetTimerValue(1) * 10000000; // 100ns単位
a = a+1;
}
プログラムは、RTXの100ns分解能タイマーから現在時間を実数の秒のとして取得し、それを100ns単位の時間として変換し、それを配列に格納するものです。
インタープリタ処理には、上記以外に、各行末尾の「;」毎に停止命令が入っていないか確認したり、配列のインデックスが配列要素数を超えていないか判断したり、表に出ない処理が含まれています。
上記プログラムの平均処理時間は、以下の数値になりました。
PentiumⅣ 2.4GHz 1GBメモリ : 約4.8us
PentiumM 1.8GHz 512MBメモリ : 約8.0us
PentiumⅢ 850MHz 128MBメモリ : 約16.9us
命令としては
・配列val[a]代入文
・変数a代入文
・whlie文
の3つであるので、
PentiumⅣ 2.4GHz 1.6us/命令
PentiumM 1.8GHz 2.7us/命令
PentiumⅢ 850MHz 5.6us/命令
となります。
参考1)
上記の値では、PentiumⅣがPentiumMに対して速いのですが、画像処理を使う装置では、PentiumMのほうが速い例がありました。CPUカードを代えてタクトを評価したら、PentiumMのほうが速かったという話をお客様から聞きました。PentiumⅣは、動作周波数を上げるためにパイプライン段数をかなり多くしてあります。分岐が多いプログラムを実行すると、パイプラインがフラッシュされて、その高速化の効果が発揮できないと推測しています。
参考2)CPUの選択指針
中速の装置は、PentiumM
画像処理負荷が大きい装置や超高速装置は、Core 2 Duo
といったかんじです。
低速でよければ、Celeronという選択肢もあります。命令実行時間評価データは、別の機会に紹介したいと考えています。
参考3) 計測データ
ちなみに、1000以上(100μs以上)の値があります。これは、同じCPUで、1ms毎割込み処理(PCIカードアクセス、軌跡演算、等)が最優先で実行されているため、発生しています。本リアルタイムインタープリタ処理はそれより優先度が低いので、割込み処理時間がタイマ間隔に現れます。なお、上記の命令あたりの実行時間は、この長い時間も含めて平均した処理時間です。
データは、こちら、
参考4)
評価方法の詳細、および、実行プログラムソースについては、以下の記事を参照されたい。
12/15の記事