OpenCLでIntel CPU上の構造体の使用に関する質問があります。はるかに速く、私は次のようにカーネルを変更する場合Intel OpenCLコンパイラ:structの使用を最適化する
struct pair {
float first;
float second;
};
inline const float f(const struct pair param) {
return param.first * param.second;
}
inline const struct pair access_func(__global float const * const a, __global float const * const b, const int i) {
struct pair res = {
a[i],
b[i]
};
return res;
}
// slow
__kernel ...(__global float const * const a, __global float const * const b)
{
// ...
x = f(access_func(a, b, i));
// ...
}
は、それが実行されます:
// fast
__kernel ...(__global float const * const a, __global float const * const b)
{
// ...
x = a[i] * b[ i ];
// ...
}
インテルを聞かせする方法はあります私の現在のカーネルは、次のように構造体を使用して、2つのバッファにアクセスコンパイラはこの最適化を行いますか? NVIDIAコンパイラはこれを行うことができると思われます。なぜなら、私はGPU上のランタイムに違いは見られないからです。
ありがとうございます!
これはconstであり、キャッシュ管理に大きな負荷をかけることができますか? –
私は 'const'キーワードを削除しようとしましたが、それは問題を解決しませんでした。 –