Mặc dù các bản thông cáo đã được đưa ra sớm hơn, nhưng hãng NVidia chỉ chính thức ra mắt CUDA tới công chúng vào tháng 2 năm 2007. Công nghệ
này được thiết kế để đáp ứng một số yêu cầu quan trọng của một nhóm đông
đảo người dùng. Một trong số yêu cầu quan trọng nhất đó là làm sao để lập trình GPU một cách dễ dàng. Sựđơn giản là điều cần thiết để đơn giản hóa việc lập trình song song GPU và khiến nó được sử dụng nhiều hơn. Trước CUDA, lập trình song song GPU bị hạn chế bởi các mô hình đổ bóng của các API đồ
họa. Do đó, chỉ những bài toán phù hợp một cách tự nhiên với các thuật toán đổ
bóng đỉnh và mảnh mới được tính toán bằng cách sử dụng lập trình xử lý song song với GPU. Thêm nữa, các thuật toán tổng quát sử dụng các khái niệm kết cấu và việc GPU chỉ cung cấp các phép toán 3D với số thực đã làm hạn chế sự
phổ biến của tính toán GPU. Để làm cho lập trình song song GPU trở nên dễ
dàng và thiết thực hơn, NVidia đã sử dụng ngôn ngữ lập trình C với những mở
rộng ở mức tối thiểu.
CUDA- viết tắt của Compute Unified Device Architecture, tạm dịch là kiến trúc thiết bị tính toán hợp nhất, là kiến trúc mới bao gồm cả phần cứng và phần mềm để phát triển và quản lý việc tính toán trên GPU như một thiết bị tính toán song song mà không cần ánh xạ vào các hàm lập trình đồ họa. Kiến trúc này có trong giải pháp của GeForce 8 Series, Quadro FX 5600/4600, và Tesla của NVIDIA. Cơ chế đa nhiệm của hệ điều hành chịu trách nhiệm cho việc quản lý truy cập tới GPU bởi các ứng dụng CUDA và
32 Bộ phần mềm CUDA bao gồm các lớp mô tả trong hình 2.1: driver cho phần cứng, API lập trình, môi trường thực thi; và hai thư viện toán học mức cao hơn của các hàm thường dùng, CUFFT và CUBLAS. Phần cứng được thiết kếđể hỗ trợ dirver hạng nhẹ và lớp môi trường thực thi, từđó cho tốc độ
tính toán cao.
Hình 2.1. Kiến trúc bộ phần mềm NVidia CUDA.[9]
Thư viện lập trình CUDA bao gồm các hàm mở rộng của ngôn ngữ C. CUDA cung cấp cách đánh địa chỉ DRAM thường dùng như mô tả trong hình 2.2 cho việc lập trình linh hoạt hơn, bao gồm cả thao tác cấp phát và thu hồi bộ nhớ. Từ góc độ lập trình, điều đó tương ứng với khả năng đọc và ghi dữ
33 Hình 2.2. Các thao tác thu hồi và cấp phát bộ nhớ với CUDA. [9]
CUDA có đặc tính lưu dữ liệu đệm song song và bộ nhớ chia sẻ on- chip với tốc độđọc ghi rất cao, các luồng dùng bộ nhớ này để chia sẻ dữ liệu với nhau. Như mô tả trong hình 2.3, ứng dụng có thể đạt kết quả tốt với việc tối thiểu hóa việc lấy/trả dữ liệu từ DRAM, từđó giảm phụ thuộc băng thông truyền bộ nhớ DRAM.
34