То, как вы объявляете это на хосте, в значительной степени не имеет значения. Важно то, как вы распределяете его, и даже если только планируете создать буфер с CL_MEM_USE_HOST_PTR и ваш GPU использует системную память. Это потому, что ваша память должна быть правильно выровнена для нулевой копии графического процессора, в противном случае драйвер создаст фоновую копию. Если ваш графический процессор не использует системную память для буферов или вы не используете CL_MEM_USE_HOST_PTR, то это не имеет значения - драйвер выделит надлежащий буфер на графическом процессоре.
Ваша большая проблема в том, что ваш графический процессор должен работать с 16-элементными векторами. Вы должны будете векторизовать каждое ядро, которое хотите запустить на нем. IOW каждая часть наших алгоритмов должна работать с float16
типами. Если вы просто используете простые числа с плавающей точкой или объявляете буфер как global float16* X
, но затем используете доступ к элементам (X.s0, Xw и т. Д.) И работаете с ними, производительность будет такой же, как если бы вы объявили буфер global float* X
- очень вероятно дерьмо.