マガジンのカバー画像

アダコテック社員によるNote

95
アダコテックの社員が書いたNoteを一つにまとめました!
運営しているクリエイター

#Cplusplus

画像解析を高速化させるためのTipsわかりやすくまとめてみた(6) プリフェッチ

前回(第5回)は、SSE2とAVX2の比較をしました。ベンチマークの結果、同じメモリに対して繰り返すだけなら約1.8倍高速化出来ましたが、大きな配列に対して連続して計算すると、約1.03倍にしかなりませんでした。 キャッシュメモリCPUの中にはキャッシュメモリと呼ばれる高速なメモリがあります。低速なメインメモリへのアクセスを隠蔽するために、よく使うデータを演算装置の近くに高速なメモリに置いておくことで、速度性能を向上させています。 よく使うデータはキャッシュメモリに入って

画像解析を高速化させるためのTipsわかりやすくまとめてみた(5)

前回(第4回)は、整数型での四捨五入を、AVX2の整数型で実装しました。 今回は、もっと単純なお題で、SSE2とAVX2の比較をしてみたいと思います。 お題乱数の入った80000000個の符号なし8bit整数型の配列を2つ(X, Y)を用意し、XとYの要素同士の平均値Zを求めます(ただし、小数点以下は切り上げ)。つまり、Z[i] = ceil(X[i] + Y[i]) です。 実装前回までは、32bit整数型でしたが、今回は8bit整数型です。SSE2の場合はレジスタが

画像解析を高速化させるためのTipsわかりやすくまとめてみた(4)

前回(第3回)は、整数型での四捨五入を、SSE2~SSE4.1の整数型で計算する方法を説明しました。 今回は、AVX2の整数型で計算してみます。レジスタ長が2倍になるから2倍速くなってくれるよね…? 割り算を使わない割り算のAVX2での実装 前回のコードとの違いは、変数の型が m128_t から m256_t に、 関数のプレフィックスが _mm128 から _mm256 になっているところです。また、アラインメントは、SSEの場合は16バイトに合わせましたが、AVXの場

画像解析を高速化させるためのTipsわかりやすくまとめてみた(3)

前回(第2回)は、固定小数点数の話をしました。固定小数点数を使った整数型演算で、割り算を使わない割り算の方法を説明しました。 今回は、前回説明した、割り算を使わない割り算を用いて、前々回(第1回)の整数型での四捨五入を、SIMDの整数型で計算する方法を説明します。 SIMDとはSingle Instruction, Multiple Data の略で、1つの命令で複数のデータに対して同時に並列に演算する手法です。ベクトル演算とも呼ばれます。SIMD命令があるプロセッサには