J'ai une question concernant l'utilisation des structures dans OpenCL sur un processeur Intel. Mon noyau en cours d'accéder à deux tampons en utilisant une struct de la manière suivante:Compilateur Intel OpenCL: optimisation de l'utilisation de la structure
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));
// ...
}
Lorsque je modifie le noyau de la manière suivante, il tourne beaucoup plus vite:
// fast
__kernel ...(__global float const * const a, __global float const * const b)
{
// ...
x = a[i] * b[ i ];
// ...
}
Est-il possible de laisser le processeur Intel compilateur faire cette optimisation? Le compilateur NVIDIA semble être capable de le faire, car je ne vois pas de différence dans l'exécution sur un GPU.
Merci d'avance!
Pourrait-il être tout ce qui est const et mettre un stress élevé sur la gestion du cache? –
J'ai essayé de supprimer les mots clés 'const', mais cela n'a pas résolu le problème. –