Cupy - Проблема с текстурами для вычислений двойной точности.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Cupy - Проблема с текстурами для вычислений двойной точности.

Сообщение Anonymous »

Я написал ядро ​​CUDA, которое работает с массивами двойной точности.
В этом ядре CUDA я оцениваю двумерные текстуры, которые в идеале должны возвращать двойное значение.
По умолчанию tex2D не возвращает двойное значение, и, видимо, способ сделать это — использовать массив CUDA с двумя каналами. Это решение, по-видимому, хорошо работает с чистыми оценками CUDA:
CUDA C — как использовать Texture2D для вычислений с плавающей запятой двойной точности
Подвох здесь (насколько далеко насколько я понимаю) заключается в том, что необходимо использовать ChannelFormatDescriptor с двумя 32-битными каналами.
Затем вы получаете двойные значения из текстуры, выполнив (в CUDA ядро):

Код: Выделить всё

static __inline__ __device__ double fetch_double(uint2 p){
return __hiloint2double(p.y, p.x);
}

__global__ void my_print(cudaTextureObject_t texObject)
{

uint2 rval = tex2D(texObject, x,y);
double dval = fetch_double(rval);

}
Когда я компилирую это ядро ​​CUDA и генерирую файл .cubin, все работает нормально.
Однако, как только я попытаюсь использовать это с CuPy начинается моя проблема.
В CuPy я генерирую объект TextureObject, используя ChannelFormatDescriptor, следуя указаниям, приведенным в справочном примере выше.

Код: Выделить всё

ch=cp.cuda.texture.ChannelFormatDescriptor(32,32,0,0,cp.cuda.runtime.cudaChannelFormatKindUnsigned)
cu_array = cp.cuda.texture.CUDAarray(ch,Nx,Ny)
spline_coeffs = cp.zeros((Ny,Nx),dtype=cp.double)
cu_array.copy_from(spline_coeffs)
Однако, как только я пытаюсь скопировать некоторые данные в CUDAArray, я получаю сообщение об ошибке:

Код: Выделить всё

cu_array.copy_from(spline_coeffs)
File "cupy\cuda\texture.pyx", line 489, in cupy.cuda.texture.CUDAarray.copy_from
File "cupy\cuda\texture.pyx", line 400, in cupy.cuda.texture.CUDAarray._prepare_copy
ValueError: shape mismatch
Обратите внимание, что этой проблемы не существует, если я использую числа одинарной точности (с одним каналом для массива CUDA) и типы cp.float32 в Python.
На данный момент у меня такое ощущение, что проблема связана с тем фактом, что CUDAarray имеет два 32-битных канала, которые имеют разную структуру памяти по сравнению с массивом CuPy для cp.double< /код> тип. Но здесь я действительно не совсем понимаю, что происходит и, что более важно, что делать.
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/788 ... lculations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Cupy - Проблема с текстурами для вычислений двойной точности.
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Числа с плавающей запятой двойной точности и одинарной точности?
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Непредсказуемые изменения точности вычислений в ядре OpenCL.
    Anonymous » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Предупреждение о точности вычислений при использовании GridSearchCV для логистической регрессии
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Повышение точности обучения при колебаниях точности проверки
    Anonymous » » в форуме Python
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»