Với M thread/block, một chỉ số duy nhất cho mỗi luồng sẽ là:
int index = threadIdx.x + blockIdx.x * M;
Dùng biến built-in blockDim.x (tương ứng với số lượng luồng trong một block) thay cho M ta được:
int index = threadIdx.x + blockIdx.x * blockDim.x;
Vậy code song song của chúng ta sẽlà:
global void KernelAdd(int *a, int *b, int*c) {
int index= threadIdx.x + blockIdx.x * blockDim.x;
c[index]= a[index] + b[index]; } void main() { ……; KernelAdd<<<n/ThreadperBlock, ThreadperBlock >>>(deva,devb,devc); ……; }
2.4. Các ứng dụng của CUDA trong các lĩnh vực
2.4.1. Ứng dụng của CUDA trong game
trò chơi là sự thành công lớn. Do NVIDIA cung cấp, hình ảnh trong trò chơi trở nên như thật nhờ bộ công cụ PhysX SDK và khung hình 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. Giành riêng cho vật lý trong trò chơi đây là những công cụ đầy sức mạnh trong bộ các engine AXE, hay nói cách khác được thiết kế để xử lý các di chuyển sinh động và tương tác của đối tượng trong từng cảnh của trò chơi.
Tính năng đồ họa hiệu ứng vật lý trong trò chơi khiến cho trò chơi trở nên sống động, và thời gian thực trong trò chơi sẽ trở thành hiện thực với sự hỗ trợ của PhysX và APEX chẳng bao lâu nữa chuyện hiển thị cảnh như phim.
Với hơn 150 tựa trò chơi mới trên thị trường, bộ công cụ PhysX SDK hiện nay đã có trên hầu hết các nền tảng máy trò chơi thông dụng, từ XBOX 360 sang PlayStation 3 sang Wii rồi đến NVIDIA GPU.
2.4.2. Ứng dụng của CUDA với video số
CUDA rất thành công trong việc xử lý video. Rất nhiều ứng dụng video số hóa dựa trên CUDA, chẳng hạn như mở rộng độ phân giải DVD với SimHD của ArcSoft, cải tiến chất lượng hình ảnh video với phần mềm vReveal của MotionDSP. Một trong số các ứng dụng hay này là vReveal đến từ MotionDSP, là phần mềm cải thiện chất lượng hình ảnh như: điều chỉnh độ tương phản và ổn định hóa (xóa run) các video, làm rõ nét. Trước kia vReveal thường sử dụng đến các hệ thống CPU đa bộ vi xử lý đắt tiền để hiển thị video một cách chậm chạp. Bây giờ với CUDA GPU đã có thể thực hiện công việc trên theo thời gian thực hoặc nhanh hơn khoảng năm lần so với CPU. Đối với lĩnh vực tình báo và điều tra pháp luật MotionDSP còn cung cấp một cung cấp một phiên bản cao cấp hơn, gọi là Ikenna.
Ngày nay khả năng thu dữ liệu hình ảnh, video với chất lượng cao của những thiết bị di động đã khiến con người thỏa mái hơn trong việc thưởng thức âm nhạc, phim, hình chụp cá nhân ở mọi lúc, mọi nơi. Tuy nhiên, cần phải có những nỗ lực của riêng mình khi sử dụng chúng. Ví dụ như phải tốn thời gian để chuyển đổi nhạc, phim trong một chiếc iPod Touch sang máy để bàn của mình và ngược lại. Quá trình đó thường mất nhiều thời gian và tài nguyên. Phần mềm Badaboom của
Elemental Technologies có thể giúp ích rất nhiều trong trường hợp đó. Đó là bộ chuyển đổi media nhanh nhất và khi so sánh bộ chuyển định dạng cuariTunes, Badaboom có thể nhanh hơn đến 20 lần hoặc tối thiểu cũng nhanh hơn hai đến ba lần ngay khi sử dụng CPU nhanh nhất và đắt tiền nhất hiện nay.
CHƯƠNG III: SỬ DỤNG GPU ĐỂ LÀM TĂNG TỐC ĐỘ TÍNH TOÁN CHO BÀI TOÁN MÃ HÓA AES
3.1 Giới thiệu về AES
Là một hệ mã khóa bí mật có tên là Rijdael cho phép xử lý các khối dữ liệu input có kích thước 128 bit sử dụng các khóa có độ dài 128, 192 hoặc 256 bit. Được Ủy ban tiêu chuẩn của Hoa Kỳ đưa ra năm 2001, hệ mã Rijdael được thiết kế để có thể làm việc với các khóa và các khối dữ liệu có độ dài lớn hơn tuy nhiên khi được chọn là một chuẩn, nó được qui định chỉ làm việc với các khối dữ liệu 128 bit và các khóa có độ dài 128, 192 hoặc 256bit.[5].
3.2 Thuật toán mã hóa
Được thực hiện bởi nhiều bước biến đổi tuần tự, đầu vào của các bước là kết quả của bước trước đó. Một mảng trạng thái chứa kết quả trung gian của phép biến đổi chính. Độ dài của khối dữ liệu đầu vào của AES là cố định với Nb=4, tùy vào độ dài khoá (Nk=4,6,8) ban đầu ta có số lần lặp Nr cho mỗi quá trình được xác định theo công thức Nr=max{Nb,Nk}+6
Công đoạn mã hóa và công đoạn giải mã AES sử dụng hàm lặp là hàm kết hợp của bốn hàm biến đổi (với đơn vị xử lý là byte) sau:
- Thực hiện biến đổi thay thế byte thông qua sử dụng một bảng thế S-box - Trong mảng trạng thái thực hiện dịch các hàng của với số lần dịch của mỗi
hàng là khác nhau.
- Kết hợp dữ liệu của mỗi cột trong mảng trạng thái - Cộng một khóa RoundKey vào mảng trạng thái.
Đối với công đoạn giải mã AES được thực hiện bằng cách biến đổi ngược của các biến đổi ở phép mã hóa AES hoặc bằng các biến đổi tương đương.[4] Các biến đổi này được minh họa như trong hình vẽ:
(a)Mã hóa (b) Giải mã