Использование vloadn (opencl) для загрузки нераспределенной памяти - PullRequest
0 голосов
/ 16 мая 2019

Я использую 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и т.д.

1 Ответ

0 голосов
/ 16 мая 2019

Если это все еще в пределах data_ptr, все будет хорошо;Вам не нужно использовать все данные, которые вы прочитали.Однако, если вы читаете за любым концом буфера, на который указывает data_ptr, у вас могут возникнуть проблемы (например, исключение чтения из памяти или какая-либо другая ошибка, зависящая от устройства).Примечание. Проверьте требования к выравниванию адресов для vload, чтобы узнать, разрешено ли чтение по любому адресу или только кратно размеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...