我有一個關於在Intel CPU上使用OpenCL中的結構的問題。我目前的內核訪問下列方式使用結構兩個緩衝區:Intel OpenCL編譯器:優化結構使用
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 ];
// ...
}
有沒有辦法讓英特爾編譯器做這個優化? NVIDIA編譯器似乎能夠做到這一點,因爲我沒有看到GPU上運行時間的差異。
提前致謝!
難道它是一切都是一個常量,並高度重視緩存管理? –
我嘗試刪除'const'關鍵字,但這並沒有解決問題。 –