2015-03-11 2 views

ответ

3

В CUDA 6 представлена ​​унифицированная память, которая позволяет выполнять этот тип операции. Все, что вам нужно сделать, это изменить ваш вызов cudaMalloc на cudaMallocManaged, и вы должны иметь доступ к памяти как с графического процессора, так и с CPU без явного вызова cudaMemcpy или запуска ядра.

float* vector; 
cudaMallocManaged(&vector, sizeof(float)*100); 
vector[53] = 2.345; 
cudaFree(vector); 

Одна вещь, чтобы отметить, что это поддерживается только на новых картах NVIDIA (sm_30 и выше) и работает только на 64-разрядных операционных системах Windows, и Linux. Кроме того, в зависимости от вашей системы и вашего использования этот тип доступа может быть не таким эффективным, как традиционные функции cudaMemcpy или cudaMemset

+0

Ха-ха, конечно же, Unified Memory не имеет прямого доступа к памяти. Он просто скрывает копирование данных. Платформа поддерживает отображение памяти устройства в адресное пространство процессора, NVIDIA только что выбрала возможность не раскрывать эту возможность по разным причинам. – ArchaeaSoftware

Смежные вопросы