Komrade – Thư viện C++ cho CUDA

Hôm nay NVIDIA chính thức công bố thư viện lập trình C++ cho CUDA đầu tiên, với tên gọi Komrade.

http://code.google.com/p/komrade/

Với thư viện này, NVIDIA đã cung cấp một công cụ tuyệt vời cho những ai yêu thích vẻ đẹp đơn giản của lập trình định hướng đối tượng, đặc biệt là các tín đồ C++ giáo, cùng với sức mạnh của GPU trong tính toán song song. Sau đây là một chương trình hoàn chỉnh để tính tổng của 100 số ngẫu nhiên trên GPU, mà tôi mạn phép sao chép từ trang chính của Komrade.

[sourcecode language=”cpp”]
#include <komrade/host_vector.h>
#include <komrade/device_vector.h>
#include <komrade/generate.h>
#include <komrade/reduce.h>
#include <komrade/functional.h>
#include <cstdlib>

int main(void)
{
// generate random data on the host
komrade::host_vector h_vec(100);
komrade::generate(h_vec.begin(), h_vec.end(), rand);
// transfer to device and compute sum
komrade::device_vector d_vec = h_vec;
int x = komrade::reduce(d_vec.begin(),
d_vec.end(),
komrade::plus());
return 0;
}

[/sourcecode]

Trong hàm main() ở đoạn chương trình trên, rõ ràng chúng ta không cần quan tâm gì đến chuyện khởi động thiết bị (GPU), rồi cấp phát bộ nhớ trên RAM và trên bộ nhớ toàn cục của GPU, sao chép dữ liệu từ RAM vào phần bộ nhớ trên GPU, kích hoạt kernel để tính toán, sau cùng lấy dữ liệu từ GPU trả trở về cho CPU, như thường thấy trong lập trình CUDA.

Các bạn thử chạy chương trình trên với số lượng các số ngẫu nhiên không phải là 100, mà 1000, hay 10000 coi nó có nhanh hơn phiên bản do các bạn tự sáng tác ra, hay tìm được đâu đó trên NET 🙂 không?

Komrade chỉ dùng được với CUDA 2.2 trở lên. Phiên bản này với rất nhiều cải tiến mới mẻ sẽ được công bố chính thức một ngày không xa 🙂 . Hiện tại các bạn có thể đăng ký và dùng thử ở đây: http://www.nvidia.com/object/cuda_get.html (tìm cụm từ CUDA 2.2 Beta).