// CUDA là gì?
CUDA là từ viết tắt trong tiếng Anh của thuật ngữ Compute Unified Device
 Architecture, tạm dịch là kiến trúc thiết bị hợp nhất cho tính toán. 
CUDA bắt đầu cuộc sống của mình từ tháng Bảy năm 2007 với vai trò ban 
đầu là một bộ công cụ phát triển phần mềm dựa trên ngôn ngữ lập trình C,
 và giờ đây ở năm 2010, sau hơn hai năm rưỡi phát triển, CUDA đang tiến 
hóa thành kiến trúc điện toán GPU, hay còn gọi là GPGPU, của NVIDIA. 
CUDA có mặt trên hầu hết các GPU đời mới của NVIDIA, từ dòng GeForce 
giành cho giải trí, đến Quadro giành cho điện toán hình ảnh chuyên 
nghiệp, ví dụ như trong thiết kế và sáng tạo, và mới nhất là dòng Tesla 
cho tính toán hiệu năng cao, như được chỉ ra trong hình (1). Danh sách 
chi tiết các GPU chạy được CUDA có thể tìm thấy ở trang sau đây: http://www.nvidia.com/object/cuda_got_cuda.html

Hình 1 – CUDA trên các GPU đời mới của NVIDIA
 
Hình (2) dưới đây cho chúng ta thấy bức tranh toàn cảnh về điện toán GPU
 xét trên khía cạnh phần mềm từ quan điểm và công nghệ của NVIDIA. Trong
 hình này, ở lớp thấp nhất của kiến trúc phần mềm giành cho điện toán 
GPU, chúng ta có các GPU của NVIDIA được trang bị kiến trúc tính toán 
song song CUDA, bao gồm cả trình điều khiển thiết bị CUDA vốn được nhúng
 bên trong trình điều khiển thiết bị đồ họa do NVIDIA cung cấp.

Hình 2 – Điện toán GPU được tăng cường bởi kiến trúc CUDA
 
Trình điều khiển thiết bị CUDA này giữ nhiệm vụ chuyển đổi mã PTX (viết 
tắt của thuật ngữ Parallel Thread Execution, tạm dịch là mã thực thi 
tiểu trình song song) được sinh ra bởi các trình biên dịch của từng ngôn
 ngữ lập trình – ví dụ như C/C++, Fortran, Java, Python, v.v… – sang 
dạng mã máy thật sự của GPU được dùng để thực thi ứng dụng. Nhờ cách 
tiếp cận thống nhất này cho mọi ngôn ngữ lập trình mà các nhà phát triển
 phần mềm chỉ cần sử dụng ngôn ngữ lập trình quen thuộc với mình để tạo 
ra các ứng dụng mới chạy được trên GPU. Lớp thứ hai kể từ dưới lên trong
 hình 2 cho chúng ta thấy một số ngôn ngữ lập trình như C/C++, Fortran, 
Java, Python, … và giao diện lập trình như OpenCL, Direct Compute, .NET,
 … mà hiện tại lập trình viên có thể dùng để tạo ra một làn sóng mới 
những phần mềm tuyệt vời.
Để có cái nhìn chi tiết hơn, tập trung hơn về điện toán GPU từ góc nhìn 
môi trường phát triển ứng dụng phần mềm, chúng ta hãy quan sát hình (3).
 Một lần nữa, ở lớp thấp nhất chúng ta sẽ có kiến trúc CUDA. Ngay phía 
trên nó là môi trường phát triển phần mềm nhất thiết phải có, bao gồm 
ngôn ngữ lập trình, giao diện ứng dụng lập trình thiết bị, trình biên 
dịch, bộ gỡ rối, bộ đo đạc hiệu năng, v.v… Với môi trường cơ bản này, từ
 quan điểm của một nhà phát triển phần mềm thông thường, vẫn còn rất 
nhiều khó khăn trong việc nhanh chóng tạo ra những ứng dụng hữu ích, và 
do vậy trên lớp này chúng ta có ngay lớp các thư viện nền tảng, với các 
đoạn mã chương trình cơ bản, hữu dụng, phổ biến, và có thể dùng lại ngay
 trong phần mềm của riêng nhà phát triển. Dựa trên lớp thư viện này, 
NVIDIA và nhiều đối tác của mình đã và đang tiếp tục cung cấp cho cộng 
đồng phát triển phần mềm vô số middleware, module, và plug-in, ví dụ như
 các engine tăng tốc ứng dụng hết sức lý thú gọi là AXE cho môi trường 
điện toán hình ảnh chuyên nghiệp.

Hình 3 – Mô hình phần mềm hỗ trợ phát triển ứng dụng điện toán GPU dựa 
trên CUDA
 
Tôi sẽ nói thêm một chút về kiến trúc môi trường phát triển phần mềm này
 trong phần kế tiếp của bài viết, để bạn đọc có được bức tranh toàn thể 
về sức mạnh của nó trong việc tạo ra các ứng dụng trên cả tuyệt vời cho 
ngành công nghiệp giải trí trên máy tính.
A – CUDA VỚI NGHÀNH CÔNG NGHIỆP GIẢI TRÍ TRÊN MÁY TÍNH
1/ CUDA cho ngành công nghiệp game
Một trong những ví dụ hay nhất về sự thành công của công nghệ CUDA trong
 ngành công nghiệp giải trí là với lĩnh vực trò chơi. Hình 4 cho chúng 
ta thấy một cảnh trong game PC được đánh giá cao nhất kể từ năm 2007 đến
 nay có tựa là ‘Batman: Arkham Asylum’. Trò này có điểm metascore là 92 
và điểm người dùng là 9.4. Trong cảnh ở hình (4), game thủ có thể tận 
hưởng nhiều kiểu hiệu ứng hình ảnh, chẳng hạn như các màn khói phản ứng 
lại Batman, các bức tường bị nổ tung, kính vỡ, rồi các bức màn rách tơi 
tả tương tác với các nhân vật trong game.

Hình 4 – Một cảnh trong trò ‘Batman: Arkham Asylum’
 
Tất cả những thứ tuyệt vời này có được là nhờ bộ công cụ PhysX SDK và 
khung làm việc có khả năng mở rộng động trên nhiều nền tảng có liên quan
 với nó gọi là APEX, cả hai đều do NVIDIA cung cấp.Đây là những công cụ 
đầy sức mạnh trong bộ các engine AXE, mà chúng ta đã nói đến ở trên, 
giành riêng cho vật lý trong game, hay nói cách khác, được thiết kế để 
xử lý các di chuyển phát sinh động (sinh ra không được tính trước tùy 
theo cách đi của người chơi) và tương tác của các đối tượng trong từng 
cảnh game một. Vật lý trong game khiến cho tính năng đồ họa của một trò 
chơi trở nên sống động, và chẳng bao lâu nữa chuyện hiển thị cảnh như 
phim với thời gian thực trong game sẽ trở thành hiện thực với sự hỗ trợ 
của PhysX và APEX.
Hình (5) dưới đây mô tả một qui trình hiển thị hình ảnh trong game đã 
được đơn giản hóa, vốn thường được sử dụng trong ngành này. Khi không có
 mối quan tâm về các tác động vật lý trong game, các đối tượng cùng với 
kịch bản có liên quan sẽ lèo lái game engine, rồi bộ phận này sẽ cung 
cấp dữ liệu cho Render Engine, để nó kết xuất thông tin cần thiết ra hệ 
thống con đồ họa với khả năng hiển thị dựa trên DirectX hay OpenGL, và 
cuối cùng chuyển mọi thứ ra GPU cho việc hiển thị cảnh game trên màn 
hình của game thủ.

Hình 5 – PhysX và qui trình hiển thị hình ảnh trong game
 
Mặt khác, khi các yếu tố vật lý được thêm vào trong kịch bản vận hành 
game với sự hiện diện của hệ thống con PhysX vốn đã được tối ưu hóa dựa 
trên CUDA ở bên trái của qui trình tạo game thông thường, hệ thống này 
sẽ liên lạc với phần lõi của game engine nhằm cung cấp một tương tác hai
 chiều – các yếu tố vật lý sẽ có tác động đến vị trí của các đối tượng 
trong game, và cũng cập nhật luôn tất cả các yếu tố động của cảnh game 
hiện tại. Hệ thống này lấy thông tin về tính chất vật lý của các đối 
tượng trong cảnh từ cơ sở dữ liệu game cốt lõi, và thậm chí có thể làm 
việc trực tiếp với module Render Engine trong một vài hiệu ứng, tùy 
thuộc vào sự tương tác với game engine. Hơn thế nữa, hệ thống A/I cũng 
dùng được hệ thống con vật lý này cho việc phát tia và thực hiện các dự 
đoán có tính động.
Vậy thì những kiểu hiệu ứng nào PhysX có thể mang lại cho thế giới? Câu 
trả lời là khá nhiều thứ, như được tóm tắt trong hình (6). Trong hình 
này, cột đầu tiên bên trái với tựa đề  ‘Game World Entities’ (các thực 
thể trong thế giới game) cho chúng ta thấy một danh sách khả dĩ các thực
 thể đã được sắp xếp theo thang mức độ chuyển động trực quan (có nghĩa 
là mức độ chi tiết tại đó mô phỏng cần được thể hiện). Cột thứ hai với 
tựa đề ‘Physical Characteristics’ (các đặc tính vật lý) thảo luận các 
tính chất vật lý có liên quan của các thục thể game tương ứng.

Hình 6 – Các tính năng do bộ PhysX SDK mang lại cho hiệu ứng hình ảnh 
trong game
 
Ở đây, những đối tượng ở dạng khối rắn sẽ có kích thước nhỏ dần khi đi 
từ dưới lên trên. Ở mức cao nhất chúng cần phải được tạo hoạt cảnh liên 
tục. Và ngay khi có sự phá hủy xảy ra, các thực thể có mức độ chất lượng
 hình ảnh tinh tế cao cần được tạo ra từ những thực thể có mức độ chất 
lượng hình ảnh thô hơn. Cột cuối cùng với tựa ‘PhysX Representation’ 
(đại diện tương ứng trong PhysX) chỉ ra cách thức đối tượng sẽ được mô 
tả theo ngôn ngữ PhysX. Những đối tượng ở trên cùng của cột là các ứng 
cử viên rất tốt cho việc song song hóa, chẳng hạn như đặc trưng dòng 
chảy dạng hạt.
Bộ công cụ PhysX SDK hiện nay đã có trên hầu hết các nền tảng máy game 
thông dụng, từ XBOX 360 sang PlayStation 3 sang Wii rồi đến NVIDIA GPU, 
với hơn 150 tựa game mới trên thị trường. Nếu bạn muốn thưởng thức những
 thứ PhysX mang lại cho hàng triệu game thủ, hãy đến thăm site demo ở 
đây: http://www.nvidia.com/physX.
Các thông tin chi tiết hơn có thể tìm thấy ở các trang sau đây:
http://developer.nvidia.com/object/physx.html
 (cho thông tin liên quan đến PhysX SDK)
http://developer.nvidia.com/object/apex.html
 (cho thông tin liên quan đến APEX)
http://developer.nvidia.com/object/p...d_company.html
 (cho các tựa game mới)
2/ CUDA cho các ứng dụng video số
Sẽ là một sai lầm nghiêm trọng nếu tôi không nói gì về CUDA với xử lý 
video số hóa ở đây như một minh chứng khác cho sự thành công chói lọi 
của nó trong việc phục vụ cuộc sống hàng ngày của con người. Khi nhìn 
vào hình (7), bạn đọc có thể quan sát thấy rất nhiều ứng dụng video số 
hóa dựa trên CUDA, chẳng hạn như cải tiến chất lượng hình ảnh video với 
phần mềm vReveal của MotionDSP, mở rộng độ phân giải DVD với SimHD của 
ArcSoft, biên tập video nhanh chóng và đơn giản với SuperLoiloScope 
‘Mars’ của Loilo, hoặc chuyển đổi định dạng video nhanh chóng với chất 
lượng cao bằng công cụ Badaboom do Elemental Technologies tạo ra, v.v… 
Giá trị ‘xx’ trong hình chính là tỉ lệ tăng tốc khi chúng ta so sánh 
hiệu năng giữa phiên bản chạy trên GPU và CPU của cùng một phần mềm. Nền
 tảng GPU  được dùng trong so sánh là CUDA chạy trên card NVIDIA GTX285,
 còn của CPU là chip Intel Core 2 Duo E8200. Chúng ta hãy điểm qua một 
vài ví dụ trong số các ứng dụng hay ho này.

Hình 7 – Các thành tựu CUDA đã đạt được với các ứng dụng cho người dùng 
thông thường
 
Bên phía tay trái của hình số (8) dưới đây , ở phía dưới có hai ảnh chụp
 một em bé rất là dễ thương. Ảnh bên trái là bản gốc của video với chất 
lượng thấp. Ở bên phải là ảnh của video đó nhưng với chất lượng trực 
quan cao hơn, và đó là kết quả sử dụng phần mềm vReveal đến từ 
MotionDSP. Phần mềm này đơn giản sẽ làm cải thiện chất lượng video cho 
người dùng, ví dụ như làm rõ nét, điều chỉnh độ tương phản, và ổn định 
hóa (xóa run) các video của bạn.

Hình 8 – vReveal – Cách mới để cải thiện chất lượng video của bạn
 
Khởi đầu như một dự án tạo phần mềm cải thiện chất lượng video cho ứng 
dụng quân sự, vReveal thường cần đến các hệ thống CPU đa chip đắt tiền 
để hiển thị video một cách chậm chạp. Nhưng giờ đây với CUDA, GPU đã có 
thể thực hiện nó theo thời gian thực đến khoảng 5 lần nhanh hơn so với 
CPU.  MotionDSP còn cung cấp một phiên bản cao cấp hơn của phần mềm này,
 gọi là Ikena, cho lĩnh vực tình báo và điều tra pháp luật. Hãy tham 
khảo trang http://www.motiondsp.com/để biết thêm chi tiết.
Phần mềm SimHD của ArcSoft (http://www.arcsoft.com/estore/softwa...ductCode=SIMHD)
 là một ứng dụng lý thú khác mà bạn không thể bỏ qua. Nó là một plug-in 
cho phần mềm chiếu video  ArcSoft TotalMedia Theater, với mục đích 
chuyển đổi các file multimedia và DVD với độ phân giải chuẩn sang dạng 
có độ phân giải cao, mang lại cho người xem hình ảnh rõ ràng hơn, sống 
động hơn theo thời gian thực.

Hình 9 – SimHD – Từ DVD sang HD theo thời gian thực
 
Các ảnh chụp lại màn hình trong hình (9) mô tả chất lượng nâng độ phân 
giải cơ bản (không dùng CUDA, ở bên trái) và chất lượng cải thiện rõ rệt
 khi dùng SimHD (với CUDA, ở bên phải). Ở đây bạn đọc cần lưu ý đến các 
chỉ số đo CPU và frame rate có ở bên phía tay phải của hình. Với CUDA, 
CPU được giảm tải nhờ GPU, do vậy chỉ có 31% công suất CPU được sử dụng,
 đồng thời ứng dụng vẫn chạy ở mức full frame rate. Trong trường hợp 
không dùng CUDA, CPU bị tận dụng 100% và giá trị frame rate không thể 
quan sát được do quá chậm.
Trong thời gian gần đây, sự phát triển của những thiết bị di động có khả
 năng thu dữ liệu hình ảnh/video với chất lượng cao đã khiến con người 
thoải mái hơn trong việc thưởng thức âm nhạc, phim, hình chụp cá nhân ở 
mọi nơi mọi lúc. Tuy nhiên, phong cách giải trí mới trong cuộc sống hàng
 ngày này sẽ không thể có được nếu như bạn không có những nỗ lực của 
riêng mình. Chẳng hạn như bạn sẽ phải tốn nhiều thời gian để chuyển đổi 
nhạc/phim có trong máy PC của mình sang chiếc iPod Touch yêu quý và 
ngược lại. Và quá trình chuyển đổi đó hoàn toàn không đơn giản, nếu như 
bạn chỉ là một người sử dụng máy tính bình thường.
Trong trường hợp đó, phần mềm Badaboom của Elemental Technologies có thể
 giúp bạn rất nhiều. Đó là bộ chuyển đổi media nhanh nhất và được thiết 
kế đầu tiên trên thế giới để chạy tối ưu với GPU và CUDA của NVIDIA. Khi
 so sánh bộ chuyển định dạng của iTunes, một trong những phần mềm phổ 
dụng nhất, nó có thể nhanh hơn đến 20 lần, hoặc tối thiểu thì cũng nhanh
 hơn 2 đến 3 lần ngay cả khi sử dụng CPU nhanh nhất và đắt tiền Core i7 
của Intel.

Hình 10 – Badaboom – Bộ chuyển đổi media nhanh nhất đầu tiên trên thế 
giới, do sử dụng công nghệ CUDA trên GPU của NVIDIA nên tốc độ chuyển 
đổi video nhanh hơn sử dụng CPU tới 20 lần!!!
 
Như hình (10) cho bạn đọc thấy, giao diện của nó rất đơn giản, thân 
thiện, dễ dùng. Người dùng chỉ cần chọn video đầu vào ở bên trái và cho 
biết thiết bị cần chuyển video sang ở bên phải. Bản dùngthử có thể tìm 
thấy ở đây: http://www.badaboomit.com/.
 Elemental Technologies còn cung cấp nhiều giải pháp mã hóa video mạnh 
hơn cho các tập đoàn lớn gọi là Elemental Server, hay Elemental 
Accelerator for Adobe Premiere Pro CS4 cho những nhà sản xuất video 
chuyên nghiệp. Để có thêm thông tin chi tiết vui lòng xem: http://www.elementaltechnologies.com/.
// TẠM KẾT…
Để kết thúc bài báo này, tôi muốn chia sẻ với các bạn đà phát triển của 
các ứng dụng hình ảnh giành cho người dùng bình thường dựa trên CUDA, 
như được thể hiện trong hình (11).

Hình 11 – CUDA với ứng dụng hình ảnh cho người dùng bình thường – Hôm 
nay và Ngày mai
 
Các ứng dụng kiểu này bắt đầu xuất hiện từ 2008, và tiếp tục phát triển 
cả về số lượng, chất lượng, tính hiệu quả, tính năng được cung cấp. 
Chúng ta hy vọng sẽ được thấy nhiều hơn nữa trong năm nay!!!
		
		
			 Theo Internet