OpenCLで変数を別の型にキャストするコストはいくらですか?OpenCL:型変換のオーバーヘッド
例:私は2つのint3
ベクトル(私の知る限りdot()
がint3
秒間オーバーロードされていない)の内積を取りたいので、代わりにunvectorized方法で、自分でdot()
を実装するので、私が使用してコードをベクトル化したいですネイティブdot()
はfloat3
です。まず、2つのベクトルをfloat3
に変換してから、結果をint
にキャストします。
foo
とbar
という2つの機能のどちらが、時間の節約になります(なぜですか)。
inline int foo(int3 a, int3 b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
}
inline int bar(int3 a, int3 b) {
return (int)dot(convert_float3(a), convert_float3(b));
}
最適化の第1のルール:尺度。最適化の第2のルール:再び測定する。これは完全にハードウェアとアーキテクチャに依存します。誰もあなたの質問に決定的な答えを与えることはできません。 –
@AndreasPapadopoulos私は同意します。ちなみに、もっと細かいプロファイリング方法、つまり、* whole *カーネルの実行時間を見るのではなく、カーネルの個々のコマンド(AppleのMetalのようなもの)の実行時間を見てみましょう。 – sarasvati
@AndreasPapadopoulosでアイデアをよりよく説明するには、XCodeの[このプロファイリングセッションイメージ](https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Art/xcode_gpu_overview_program_2x.png)をご覧ください。 。各コード行に費やされた時間の割合を示します。 – sarasvati