|
CPUの演算速度、特に命令当りの単位演算速度は、理論としても、実測としても正確に分からない。特に、現在のCPUは内部で並列化やパイプライン化されており、理論的な速度も算出不能と言えるし、命令当りのクロック数もあまり意味がない。また、メモリ方式、メモリ速度でも変化する。 そこで、ここでは、そのマシンにおける単位演算速度を、実測して見る。2006/3/23 測定方法を全自動にした。 ●測定対象 単位演算命令、比較(?)、加算(+)、減算(-)、乗算(*)、除算(/)、整数除算(\)、剰余(Mod)で、Byte、Short、Integer、Long、Decimal、Single、Double、 での演算速度をnsで測定する。 ●方法 ○演算時間 それぞれ、最低2秒間以上ループし、その平均を単位演算速度とする。Forループ制御時間の影響を除外するために、下記のように、空のForループのみを計測して、差し引く方法はうまく行かない。
For i = 0 To Cnt - 1 の時間 Tb を計測しておき、
For i = 0 To Cnt - 1 の時間 T を測定し、実演算時間を、 T - Tb とする。 などでは、空ループ時間を差し引くと負になる場合もある。これは、内部で演算命令と分岐制御の並列化が影響するものと思われる(数値演算が分岐制御に完全に隠れた場合など)。そこで、ループ処理 の影響を極力小さくする測定法とする。以下のように、同じ演算命令を20回連続させる方法とした。この場合は、空ループは測定しない。演算回数は、Cnt * 20 となる。Cnt 分だけ列挙するのが最も良いが、1億行は列挙できない。
For i = 0 To Cnt - 1 ○\、Mod この測定では、分子が分母より大きくないと、実質の演算なしで終了となり、正しい時間が計測されない。乱数で値を生成する場合は、分子>分母 となるように調整する。 ●結果 マシンは、P4 3.2GHz メモリはDDRのデュアル構成。
全自動で速度測定したもの ●考察
|