二値化処理 30倍速
カラーRGB単色抽出変換 7倍速 マルチCPU 3コア並列演算処理 |
SIMD命令(Single Instruction Multiple Data)
インテルMMXテクノロジ対応 Pentium プロセッサ・ファミリ以降、
4つの拡張命令(MMX、SSE、SSE2、SSE3)が、IA-32アーキ
テクチャに導入され、SIMD演算を実行できるようになりました。
MMX命令
MMX命令は、整数の64ビット長のパックドバイト整数、パックドワード整数、
パックドダブルワード整数、クワッドワード整数の値を演算できます。
SSE命令画像処理のモノクロ画像など8ビットの整数演算が8個並列に処理できます。
SIMD命令は、パックド倍精度浮動小数点点数に加えて、128ビット長のパックドバイト整数、
パックドワード整数、パックドダブルワード整数、クワッドワード整数、ダブルクワッドワード整
数の値を演算できます。
インテルAVX(Advanced Vector eXtentions)このように、SIMD命令では8ビットの演算が16個並列に処理できます。
256ビットのレジスタをもつSIMD拡張命令です。
単精度浮動小数点が8個、倍精度浮動小数点演算が4個並列に演算できます。
マルチCPU 4コア並列演算処理(Advanced Vector eXtentions)8ビットの整数演算が32個並列に処理できます。
Corei7には物理的並列演算可能な4個のコアが存在します。それぞれのコア別に処理内容を指定し、分担させる事で
更に処理速度を高速化可能です。
Pentium(R)4 @3.00Ghz 32Bit Memory2GB WindowsXp (MMX 8バイト並列 200回平均)
|
改めて速度比較を行いました。
32bitのカラーグレー画像RGBからGをプレーンとして8bitに変換し、閾値を128として二値化処理を行いました。 各変換プログラムは比較のため、dllにて作成しています。
二値化処理 Corei7-870 @2.93Ghz 32Bit Memory4GB Windows7 (SSE 8バイト並列 100回平均)
二値化処理 Corei7-4790 @3.6Ghz 32Bit Memory8GB Windows10 (AVX 32バイト並列 100回平均)
二値化処理 Corei7-4790 @3.6Ghz 64Bit Memory8GB Windows10 (AVX 32バイト並列 100回平均)
32bitと64bitでは、AVX使用時の処理速度で若干のバラツキはありますが、近い値を示しました。誤差範囲内なので同じ値を記載しました。
64bitではインラインアセンブラが使用できないのでアセンブラにてプログラムしました。32bit,64bit共にAVXを使用した プログラムの処理内容が同じなので、処理速度の差は発生しませんでした。
カラー画像RGBがらGを抽出しました。
32To8BitGreen抽出 Corei7-870 @2.93Ghz 32Bit Memory4GB Windows7 (SSE 8バイト並列 100回平均)
32To8BitGreen抽出 Corei7-4790 @3.6Ghz 32Bit Memory8GB Windows10 (AVX 32バイト並列 100回平均)
32To8BitGreen抽出 Corei7-4790 @3.6Ghz 64Bit Memory8GB Windows10 (AVX 32バイト並列 100回平均)
32bitと64bitでは、AVX使用時の処理速度で若干のバラツキはありますが、近い値を示しました。誤差範囲内なので同じ値を記載しました。
64bitではインラインアセンブラが使用できないのでアセンブラにてプログラムしました。32bit,64bit共にAVXを使用した プログラムの処理内容が同じなので、処理速度の差は発生しませんでした。 |