Я использую vloadn для загрузки данных, и в качестве параметра я передаю диапазон, который хочу прочитать, и он работает, но мне интересно, каково поведение vload4.Если это может вызвать какую-то неожиданную проблему, или я совершенно безопасен для этого.Примером может быть что-то вроде этого:
__kernel void myKernel(__global float* data_ptr, int size)
{
float4 vec = vload4(0, data_ptr);
float sum = 0.f;
// data_ptr points to an array of 2 floats in global mem
if (size == 2) {
sum += vec.s1;
sum += vec.s0;
}
else if (size == 1) {
sum += vec.s0;
}
}
data_ptr - это массив из 2-х чисел в глобальной памяти, но, хотя я и обращаюсь только к этим 2-м числам, я загружаю 4-х чисел с помощью vload4.Причина, по которой я спрашиваю, состоит в том, что я хочу использовать один vloadn и впоследствии решить, какую часть я на самом деле хочу использовать, а не использовать vloadn в зависимости от размера (например, для size == 4 используйте vload4, для size == 8 vload8и т.д.