ตอนนี้ หากฉันใช้โค้ดนี้เพื่อลองเข้าถึง GPU-RAM จาก CPU-Core โดยใช้ CUDA5.5 ใน GeForce GTX460SE (CC2.1) ฉันจะได้รับข้อยกเว้น "การละเมิดการเข้าถึง":
#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 (Unified Virtual Addressing) และมีบางอย่างใหม่:
- 25 ตุลาคม 2556 - 331.17 Beta Linux GPU Driver: โมดูล NVIDIA Unified Kernel Memory ใหม่เป็นโมดูลเคอร์เนลใหม่สำหรับฟีเจอร์ Unified Memory ที่จะเปิดเผยโดย CUDA ของ NVIDIA ที่กำลังจะเปิดตัวเร็วๆ นี้ โมดูลใหม่คือ nvidia-uvm.ko และจะช่วยให้พื้นที่หน่วยความจำแบบรวมระหว่าง GPU และ RAM ของระบบ http://www.phoronix.com/scan.php?page=news_item&px=MTQ5NDc
- คุณสมบัติที่สำคัญของ CUDA 6 ได้แก่: Unified Memory -- ลดความยุ่งยากในการเขียนโปรแกรมโดยทำให้แอปพลิเคชันสามารถเข้าถึงหน่วยความจำ CPU และ GPU โดยไม่จำเป็นต้องคัดลอกข้อมูลจากที่หนึ่งไปยังอีกที่หนึ่งด้วยตนเอง และทำให้ง่ายต่อการเพิ่มการรองรับการเร่งความเร็ว GPU ในหลากหลาย ภาษาโปรแกรม http://www.techpowerup.com/194505/nvidia-dramaically-simplifies-parallel-programming-with-cuda-6.html
เป็นไปได้ไหมที่จะเข้าถึงหน่วยความจำ GPU-RAM จาก CPU-Cores โดยใช้ตัวชี้อย่างง่ายใน CUDA6 ใหม่