cudaMemcpy2D для копий общей памяти - PullRequest
0 голосов
/ 16 мая 2011

У меня есть память, которая была выделена на устройстве, которая представляет собой всего лишь один маллок размером H * W * sizeof (float).

Это представляет матрицу H * W.

У меня есть код, где мне нужно поменять квадранты матрицы. Могу ли я использовать cudaMemcpy2D для достижения этой цели? Должен ли я просто указать spitch и dpitch равными W * sizeof (float) и просто использовать указатели на каждый квадрант матрицы для достижения этой цели?

Кроме того, когда эти cudaMemcpy говорят о том, что области памяти не перекрываются - значит ли это, что src и dst вообще не могут перекрываться? Например, если бы у меня был 10-байтовый массив, который я хотел сдвинуть влево один раз - он потерпит неудачу?

Спасибо

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Вы можете использовать cudaMemcpy2D для перемещения по подблокам, которые являются частью больших распределенных линейных распределений памяти. В этом нет проблем. Неперекрывающееся требование не подлежит обсуждению, и оно не будет выполнено, если вы попробуете его. Источник и пункт назначения могут исходить из одного и того же распределения, но диапазоны адресов источника и пункта назначения не могут перекрываться. Если вам нужно выполнить некоторое копирование «in-situ» там, где есть наложение, вам лучше написать ядро ​​для этого (см. Пример транспонирования матрицы в SDK как надежный способ сделать подобное).

1 голос
/ 17 мая 2011

Я предлагаю написать простое ядро ​​для этой матричной манипуляции. Я думаю, что было бы проще написать, чем использовать cudaMemcpy (2D), и почти наверняка быстрее, если вы напишите его, чтобы получить хорошую согласованность памяти.

Вероятно, проще всего выполнить преобразование вне места (т. Е. Различные массивы входных и выходных данных), чтобы избежать засорения входной матрицы. Каждый поток просто считывал из своего входного смещения и записывал в преобразованное смещение.

Это было бы похоже на транспонирование матрицы. В CUDA SDK есть пример транспонирования матрицы .

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