Professional Documents
Culture Documents
CSE - Lec2.1-GPU
CSE - Lec2.1-GPU
NVIDIA’S APPLICATIONS
Tóm tắt
05
Giới thiệu
GPU là gì?
• GPU viết tắt của Graphic Processing Unit, là đơn
vị xử lý tín hiệu đồ họa.
• GPU được hình thành và phát triển từ rất sớm, và
có lịch sử lâu đời tương tự CPU.
• GPU được phân thành nhiều nhóm có nhiều chức
năng khác nhau giúp người dùng dễ dàng lựa
chọn theo nhu cầu sử dụng đồ họa.
• GPU ngày nay được xem là một phần không thể
thiếu trong các hệ máy tính (hệ thống nhúng, điện
thoại di động, máy tính cá nhân, máy trạm, và
điều khiển game)
Cấu tạo của GPU
Add Text
So sánh CPU vs GPU
So sánh CPU vs GPU
GPU Card
Dành cho máy WorkStation và Desktop yêu
cầu năng lực xử lý đồ họa cao cấp.
GPU Card
Phân loại GPU
Game
Ứng dụng của GPU
Trí
tuệ
nhân
tạo Add Title
You can simply impress your
audience and add a unique
Add Title
You can simply impress your
audience and add a unique
Add Title
You can simply impress your
audience and add a unique
zing and appeal to your zing and appeal to your zing and appeal to your
Presentations. Presentations. Presentations.
Ứng dụng của GPU
Lái
xe tự
động
Add Title Add Title Add Title
You can simply impress your You can simply impress your You can simply impress your
audience and add a unique audience and add a unique audience and add a unique
zing and appeal to your zing and appeal to your zing and appeal to your
Presentations. Presentations. Presentations.
Một số tính năng của GPU
Tính năng GPU
Ray Tracing
Ray Tracing
Graphic Pipeline
GRAPHIC PIPELINE
GRAPHIC PIPELINE
Resource: id, vị trí, màu sắc, thuộc tính, texture.
Từ các điểm tạo ra các tam giác riêng biệt từ các điểm cho
Ghép các tam giác pixel với nhau để tạo thành hình ảnh 3d hoàn chỉnh
Vertices
Position
(vị trí, màu sắc, thuộc tính)
Vertex Processing
Vertices
Primitives (triangles) Pixel
Pipeline
Graphic Pipeline
Ray Tracing Algorithms
Ray Tracing Algorithms
CUDA – NGÔN NGỮ LẬP TRÌNH SONG SONG
Giới thiệu chung
• Sự ra đời của bộ xử lý đa lõi CPU và đa nhân
GPU có thể hiểu là việc sử dụng nhiều chip xử lý
cùng thực hiện trong các hệ thống song song.
• Những thách thức đặt ra trong việc phát triển
phần mềm cho thấy việc ứng dụng sự song song
trong tiến trình chạy lệnh bởi sự gia tăng số lượng
lõi của bộ xử lý là rất cần thiết và quan trọng. Đặc
biệt trong việc xử lý các lệnh của ứng dụng đồ
họa 3D.
Giới thiệu về CUDA
• CUDA là một ngôn ngữ lập trình và môi trường
phần mềm do hãng NVIDIA thiết kế và phát triển Compute Unified
dựa trên cơ sở kiến trúc Tesla. Device Architecture
è CUDA rất thích hợp với khả năng tính toán song
song của GPU, dễ tiếp cận đối với các lập trình viên
và thân thiện với ngôn ngữ lập trình chuẩn như C.
• CUDA Core là một nhân xử lý các phép tính dành
cho GPU, tương tự như Core của CPU nhưng
đơn giản hơn. Số lượng Core của CPU thường là
1, 4,… cho đến 16, 32 nhưng CUDA Core có đến
hàng trăm, hàng nghìn.
Latest version: CUDA 11
è CUDA Core càng nhiều, GPU càng xử lý được
nhiều phép tính cùng một lúc.
Giới thiệu về CUDA
• Trước CUDA, đã có các shader khác nhau trong GPU. Các shader như: shader
pixel, shader vertex, shader geometry, shader fragment, shader hình học,…các
GPU có các đơn vị tính toán riêng cho chúng.
è Với sự ra đời của CUDA, cùng một đơn vị tính toán có khả năng xử lý tất cả các
loại shader.
è Ngày nay, CUDA được gọi là API được sử dụng để thực hiện lập trình song song
trên hàng trăm lõi CUDA có sẵn trong GPU NVIDIA.
GPU: Bộ xử lý nhiều lõi song song
Được xây dựng do yêu cầu của thị trường, đồ họa 3D phân giải cao, GPU có thể
lập trình phát triển thành bộ xử lý nhiều lõi song song và đa luồng với tốc độ tính
toán cực cao và băng thông rất rộng.
Add Text
GPU: Bộ xử lý nhiều lõi song song
• Xử lý song song dữ liệu nối các phần tử của dữ liệu với các luồng xử lý song song.
Nhiều ứng dụng xử lý lượng lớn tập dữ liệu có thể dung mô hình lập trình song song
để tăng tốc độ tính toán. Ví dụ, render đồ họa 3D, một tập các điểm và đường thẳng
đứng được nối với các luồng song song..
• Nguyên nhân của sự chênh lệch giữa CPU và GPU là do GPU được thiết kế đặc
biệt vớiAdd
khảText năng tính toán mạnh, tính toán song song cao. Cụ thể, do yêu cầu
render của đồ họa và do đó nó được thiết kế nhiều transistor hơn để sử dụng cho
việc xử lý dữ liệu trên Cache và Control Unit.
Mô hình lập trình CUDA
(Programming Model)
• CUDA mở rộng C bằng việc cho phép người lập trình định nghĩa các hàm của C,
được gọi là Kernels, khi được gọi nó được thực hiện N lần song song bởi N luồng
CUDA khác nhau.
• Một Kernel được định nghĩa bằng việc dùng thuộc tính __global__ để khai báo và số
lượng thread cho mỗi lời gọi được chỉ ra bằng việc sử dụng cú pháp <<<…>>>
Add Text
Mô hình lập trình CUDA
(Programming Model)
• Mỗi thread thực hiện một kernel mang một threadID riêng, nó
chứa bên trong thread và được tạo bởi biến threadIdx.
• Phân cấp thread: threadIdx có 3 vector, nhờ đó những thread có
thể được định nghĩa bằng việc dung 1, 2 hay 3 chiều chỉ số. Chỉ
số của thread và threadID có liên quan tới nhau.
• Thread bên trong block có thể kết hợp với nhau bằng việc chia
sẻ dữ liệu thông qua vài vùng nhớ chia sẻ và đồng bộ hóa việc
thực hiện chúng theo điều kiện truy nhập vùng nhớ.
• Kernel có thể được thực hiện bởi nhiều khối thread được phân
chia bằng nhau, do đó tổng số thread bằng với số thread trên
một khối nhân với số lượng khối.
• Để chỉ ra khối trong lưới là 1 hay 2 chiều có thể truy cập trong
Add Text
kernel qua biến blockIdx. Chiều của khối thread được truy cập
trong kernel qua biến blockDim.
Phân cấp bộ nhớ
(Memory-level)
Add Text
Giao diện lập trình
Giao diện lập trình
§ Một số các mở rộng từ ngôn ngữ lập trình C cho phép lập trình viên thực hiện một
phần của chương trình trên thiết bị tính toán.
§ Một thư viện được chia ra thành các thành phần:
§ Thành phần chính (host component): chạy trên host và cung cấp các chức năng
để truy cập tới một hoặc nhiều thiết bị khác từ host.
§ Các thiết bị thành phần (device component): chạy trên thiết bị và cũng cấp các
hàm riêng của thiết bị đó.
§ Một thành phần chung (common component): cung cấp các kiểu dữ liệu vector và
các tập con trong thư viện chuẩn của C, nó hỗ trợ cho cả host và thiết bị thành
phần.
Thuật ngữ
CUDA:
Host: Device:
CPU và bộ nhớ của nó (host memory) GPU và bộ nhớ của nó (device memory)
Hạn định của hàm
Trong 1 chương trình, có subprogram thì chạy ở host, có cái thì chạy ở device.
Nên để chỉ định một cách tường minh, các từ khóa (specifier) sau được dùng.
__device__
• Xác định kenel (chạy trên device)
• Chỉ được gọi từ 1 kenel khác
• Không có biến tĩnh (static variable)
__global__
• Chỉ có thể được gọi từ một host function
• Kiểu trả về luôn là void
__host__
• Xác định host function (chạy trên host)
• Chỉ có thể được gọi từ 1 host function khác
Hạn định của biến
__device__
• Chứa trong global memory (device memory).
• Có thời gian sống xác định trong một ứng dụng.
• Có thể được truy cập từ mọi thread ở mọi grid.
__constant__
• Chứa trong vùng nhớ hằng số
• Chỉ có thể được gán giá trị từ host functions
__shared__
• Chứa trong trong block shared memory
• Tồn tại theo block
• Chỉ có thể được truy cập từ các threads của block đó
Hạn chế với kernel
§ Chỉ truy xuất bộ nhớ trên GPU (không được đọc data từ CPU, vì thế trước khi thực thi
kernel, từ host phải thực hiện các tác vụ khởi tạo các đối tượng dữ liệu trên GPU và
sao chép dữ liệu cần thiết từ host memory ra đó.
§ Mỗi function phải có số đối số (arguments) là cố định
§ Không có biễn tĩnh (static)
§ Không có đệ qui
§ kernel phải được khai báo dùng 1 trong các qualifier sau
__global__ : kernel này được gọi từ host (CPU), trả về luôn là void
__device__ : kernel này được gọi từ 1 kernel khác
__host__ : function thực thi trên CPU (mặc định nếu không chỉ định qualifier)
__host__ __device__
Cấu hình thực thi
Cú pháp:
function_name là tên hàm cần gọi, param_i là các đối số của nó.
• gd: kích thước của grid (kiểu dim3, với 3 thành phần: gd.x, gd.y, gd.z cho biết
số blocks ở mỗi chiều
§ bd: kích thước của mỗi blocks (kiểu dim3, với 3 thành phần: bd.x, bd.y,
bd.z cho biết số threads ở mỗi chiều
§ N: (optional) cho biết số lượng bộ nhớ (tính theo bytes) cần thêm vào
trong shared memory của mỗi block để dùng cho đối số là assumed-sized
array
Biến định nghĩa sẵn
Để phân chia công việc cho mỗi threads, ta cần xác định các thông tin về threads.
CUDA đã có các biến đặc biệt sẵn để hỗ trợ
return(0);
}
Ngôn ngữ CUDA tuân thủ chặt chẽ cú pháp C / C ++ với bộ mở rộng tối thiểu:
Trình biên dịch NVCC sẽ biên dịch hàm chạy trên thiết bị và trình biên dịch máy
chủ (gcc) sẽ xử lý tất cả các chức năng khác chạy trên máy chủ (ví dụ: main ())
DEMO
Demo
Demo
Case Study
Case Study
• Dự án Folding@Home
• Đại học Stanford University đang sử dụng một trong những ứng
dụng tính toán phổ biến nhất hiện nay mang tên (FAH), chuyên dùng
để tính toán protein trên diện rộng, sử dụng hàng nghìn máy tính và
máy chơi game PlayStation 3 trên toàn thế giới.
• Ý tưởng ở đây là hiểu rõ hơn cách các protein tự tập hợp, cũng như
một số sai sót trong quá trình này -- được cho là nguyên nhân gây ra
các chứng bệnh như Alzheimer và Parkinson.
Case Study
Case Study
• Hiện tại phòng thí nghiệm Đại học Stanford đang phối hợp với ATI
để sản xuất ra một phiên bản tăng tốc GPU dành cho phần mềm này
của họ. Thế hệ thứ hai của ứng dụng này đã có bản beta miễn phí,
và đang sử dụng CUDA đối với GPU Nvidia, hoặc CAL đối với card
ATI.
• Theo trang web thì khi bài báo này đang được viết, có khoảng 7600
GPU đang chạy ứng dụng FAH, tạo ra 840 teraflop năng lượng tính
toán (đây không phải là một con số mang tính lý thuyết, mà là số
năng lượng thực dùng để chạy các phép tính trong FAH), tức là
trung bình khoảng 110 gigaflop mỗi GPU.
Case Study
• Ở thời điểm đó,PS3 vẫn đang dẫn đầu với tổng cộng 1,358 teraflop,
nhưng đó là từ hơn 48,000 PS3 đang hoạt động. Mỗi PS3 tạo ra
khoảng 28 gigaflop.
• Nói cách khác, một máy trạm GPU trung bình nhanh hơn 4 lần so
với PS3, tính cả card đồ hoạ cũ và giá rẻ. Còn các loại card mới có
tốc độ gấp từ 4 đến 6 lần.
Case Study
• Ở thời điểm đó,PS3 vẫn đang dẫn đầu với tổng cộng 1,358 teraflop,
nhưng đó là từ hơn 48,000 PS3 đang hoạt động. Mỗi PS3 tạo ra
khoảng 28 gigaflop.
• Nói cách khác, một máy trạm GPU trung bình nhanh hơn 4 lần so
với PS3, tính cả card đồ hoạ cũ và giá rẻ. Còn các loại card mới có
tốc độ gấp từ 4 đến 6 lần.
Case Study
• Dự án hiện tại của Folding@Home là CovidMoonshoot cũng dựa
trên sức mạnh GPU nhằm đánh giá hàng nghìn phân tử mỗi tuần,
tổng hợp hàng trăm phân tử này trong nhiệm vụ phát triển một loại
thuốc không có bằng sáng chế cho COVID-19 có thể được dùng
như một viên thuốc đơn giản 2 lần / ngày.
Case Study
Đối với các dòng GPU bình thường, sẽ giúp tăng tốc từ 15-30% tốc
độ xử lý phân tích trên GPU
Case Study
Kết hợp với Nvidia, dự án này đã sử dụng them 1 công nghệ đặc biệt
là OpenMM giúp xác định các phương pháp trị liệu đầy hứa hẹn —
dao động từ 50-400%
TÓM TẮT
TÓM TẮT
• GPU đã trở thành phương tiện được ưu tiên để đào tạo các mô hình AI
• GPU cung cấp tốc độ ấn tượng so với CPU, khi khối lượng công việc đủ lớn
và dễ dàng chạy song song.
• GPU khác nhau nhằm tối ưu cho các mục đích về AI và Deep Learning.
• Các công nghệ GPU và công nghệ xung quanh GPU như NVIDIA Tesla,
NVLINK, NVSWITCH… nhằm tăng tốc AI đã phát triển mạnh mẽ.
THANK YOU !