Я пытаюсь понять объединение памяти. После некоторых исследований я узнал, что объединение памяти должно гарантировать, что потоки обращаются к последовательной памяти, чтобы она могла считывать все данные за одну транзакцию. И эти данные могут быть повторно использованы другими потоками в той же группе.
Однако, когда я посмотрел на реальный пример, я понятия не имел, почему следующая функция имеет плохую коалесценцию:
__kernel void mapSin(
__global float* input,
__global float* input,
const unsigned int cout)
{
int x = get_global_id(0);
int y = get_global_id(1);
output[x * count + y] = sin(input[x * count + y]);
}
Я предполагаю, что умножение x * count
вызывает дискретный доступ к памяти. Я прав? И как улучшить эту функцию, чтобы она обеспечивала лучшее слияние?