Копирование памяти, выделенной cudaMallocPitch - PullRequest
5 голосов
/ 02 января 2012

Можно ли использовать cudaMemcpy для памяти, выделенной с помощью cudaMallocPitch?Если нет, вы можете сказать, какую функцию следует использовать.cudaMallocPitch возвращает линейную память, поэтому я предполагаю, что следует использовать cudaMemcpy.

1 Ответ

10 голосов
/ 02 января 2012

Вы, конечно, могли бы использовать cudaMemcpy для копирования тональной памяти устройства, но было бы более привычным использовать cudaMemcpy2D.Пример переданной копии с хоста на устройство будет выглядеть примерно так:

#include "cuda.h"
#include <assert.h>

typedef float real;

int main(void)
{

    cudaFree(0); // Establish context

    // Host array dimensions
    const size_t dx = 300, dy = 300; 

    // For the CUDA API width and pitch are specified in bytes
    size_t width = dx * sizeof(real), height = dy;

    // Host array allocation
    real * host = new real[dx * dy];
    size_t pitch1 = dx * sizeof(real);

    // Device array allocation
    // pitch is determined by the API call
    real * device;
    size_t pitch2;
    assert( cudaMallocPitch((real **)&device, &pitch2, width, height) == cudaSuccess );

    // Sample memory copy - note source and destination pitches can be different
    assert( cudaMemcpy2D(device, pitch2, host, pitch1, width, height, cudaMemcpyHostToDevice) == cudaSuccess );

    // Destroy context
    assert( cudaDeviceReset() == cudaSuccess );

    return 0;
}

(примечание: непроверено, cavaet emptor и все такое .....)

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