Теперь, если я использую этот код, чтобы попытаться доступ к GPU-RAM от CPU-ядер с помощью CUDA5.5 в GeForce GTX460SE (CC2.1), то я получаю исключение "Access Violation":Можно ли получить доступ к GPU-RAM от CPU-Core простым указателем в новом CUDA6?
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
int main()
{
unsigned char* gpu_ptr = NULL;
cudaMalloc((void **)&gpu_ptr, 1024*1024);
*gpu_ptr = 1;
int q; std::cin >> q;
return 0;
}
Но мы знаем, что существует UVA (Унифицированная виртуальная адресация). И есть некоторые новые:
- 25 октября 2013 - 331,17 Бета Linux GPU Driver: Новый модуль NVIDIA Unified Kernel Memory представляет собой новый модуль ядра для функции единой памяти, которые будут выставлены на предстоящем выпуске CUDA от NVIDIA. Новый модуль - nvidia-uvm.ko и позволит использовать единое пространство памяти между графическим процессором и системным ОЗУ. http://www.phoronix.com/scan.php?page=news_item&px=MTQ5NDc
- Основные характеристики CUDA 6: Унифицированная память - упрощает программирование, позволяя приложениям получать доступ к памяти ЦП и ГПУ без необходимости вручную копировать данные из одного в другое и упрощает добавление поддержки ускорения GPU в широкий спектр языков программирования. http://www.techpowerup.com/194505/nvidia-dramatically-simplifies-parallel-programming-with-cuda-6.html
Возможно ли получить доступ к памяти GPU-RAM с процессорных ядер с помощью простого указателя в новом CUDA6?
Спасибо! То есть, возможности доступа из CPU-Core напрямую в GPU-RAM по-прежнему не будут. Но это будет возможно, выделите управляемую память, которая автоматически на уровне страницы переместится из CPU-RAM в GPU-RAM и обратно, в зависимости от того, как драйвер считается более оптимальной. И если управляемая память переместилась в GPU-RAM, а затем CPU-Core попытается получить к ней доступ, тогда CPU начнет DMA-контроллер для отправки данных на этот GPU-RAM (страница памяти). Это правильно? – Alex
С точки зрения программиста, процессор «появляется», чтобы иметь возможность прямого доступа к памяти GPU (если он был выделен с помощью 'cudaMallocManaged'). Остальные ваши высказывания кажутся мне верными. –
I.e. если я использую SSE-инструкции для доступа с CPU-Core в GPU-RAM, тогда данные будут отправляться в PCI-Express BAR (базовые регистры адресов - как аппаратная функция http://en.wikipedia.org/wiki/Base_Address_Register#Bus_enumeration), в котором отображается GPU-RAM, а главное - DMA-контроллер для него не будет использоваться (поскольку DMA-контроллер добавляет задержку для небольших пакетов), не так ли? – Alex