Luận Văn Thạc Sĩ: Lập Trình Song Song Trên GPU và Ứng Dụng (Hoàng Đình Thắng, ĐHCN)

Luận văn thạc sĩ về lập trình song song trên GPU: Nghiên cứu chuyên sâu, phân tích hiệu năng và ứng dụng thực tế. Tối ưu hóa tốc độ xử lý vượt trội.

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Luận Văn Thạc Sĩ

2010

57
1
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

DANH MỤC HÌNH VẼ

KÝ TỰ VIẾT TẮT

1. CHƢƠNG 1: GIỚI THIỆU

1.1. Mục đích của lập trình song song

1.2. Mục tiêu của luận văn

1.3. Tổ chức của luận văn

2. CHƢƠNG 2: TỔNG QUAN VỀ ĐƠN VỊ XỬ LÝ ĐỒ HỌA (GRAPHIC PROCESSING UNIT-GPU)

2.1. Tóm tắt lịch sử phát triển của đơn vị xử lý đồ họa (GPU)

2.2. Sự khác nhau giữa GPU và CPU

2.3. Mô hình xử lý song song dữ liệu

2.4. Lợi ích sự thực thi tính toán song song

2.5. Phân cấp bộ nhớ

2.5.1. Bộ nhớ toàn cục (global memory) và bộ nhớ cục bộ (local memory)

2.5.2. Bộ nhớ chia sẻ (shared memory)

2.5.3. Bộ nhớ texture và constant

2.6. Các chiến lƣợc tối ƣu hóa trên GPU

2.6.1. Tối đa hóa thực thi song song

2.6.2. Tối ƣu hóa sử dụng bộ nhớ

2.6.3. Tối ƣu hóa thực thi các thread

2.6.4. Tối ƣu hóa sử dụng chỉ lệnh

3. CHƢƠNG 3: MÔ HÌNH TRƢỜNG NGẪU NHIÊN CÓ ĐIỀU KIỆN (CONDITIONAL RANDOM FIELDS -CRFS)

3.1. Mô hình lý thuyết CRFs

3.2. Ƣớc lƣợng tham số mô hình CRFs

3.3. Ứng dụng CRFs trong trích chọn thông tin

4. CHƢƠNG 4: ỨNG DỤNG GPU SONG SONG TỪNG PHẦN CÔNG CỤ CRF++

4.1. Công cụ CRF++

4.2. Song song CRF++

4.3. Song song phần Training

4.4. Kết quả thực nghiệm

4.4.1. Môi trƣờng thực nghiệm

4.4.2. Đánh giá kết quả

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Tổng Quan Lập Trình Song Song GPU Cơ Sở Ứng Dụng

Tính toán song song, hay xử lý song song, là chìa khóa để giải quyết các bài toán phức tạp với khối lượng dữ liệu khổng lồ. Thay vì xử lý tuần tự, tính toán song song cho phép nhiều đơn vị dữ liệu được xử lý đồng thời bởi nhiều bộ xử lý, rút ngắn thời gian đáng kể. Có hai mô hình song song chính: song song dữ liệu (Data Parallelism) và song song lệnh (Task Parallelism). Chip đồ họa (GPU) với hàng trăm, thậm chí hàng nghìn lõi, rất phù hợp cho các tác vụ song song. Trong khi đó, bộ xử lý trung tâm (CPU) với số lượng lõi ít hơn nhưng mạnh mẽ hơn, phù hợp hơn cho các ứng dụng tuần tự. Nghiên cứu của Intel chỉ ra rằng, một GPU như NVIDIA GeForce GTX 280 có thể nhanh hơn CPU Intel Core i7 960 tới 2.5 lần, và trong một số trường hợp, nhanh hơn đến 14 lần. Luận văn này tập trung vào xử lý song song trên GPU, một lĩnh vực phát triển mạnh mẽ, đồng thời khám phá mô hình trường ngẫu nhiên có điều kiện (CRFs), một công cụ mạnh mẽ trong các lĩnh vực như tin-sinh học và xử lý ngôn ngữ tự nhiên. Công cụ CRF++, được xây dựng cho mô hình CRF, sẽ được nghiên cứu để đề xuất các phương pháp song song hóa sử dụng GPU, tận dụng tối đa sức mạnh tính toán song song.

1.1. Ưu điểm của Lập trình Song song GPU GPU Computing

Lập trình song song trên GPU mang lại nhiều ưu điểm vượt trội. Với số lượng lõi xử lý lớn, GPU có khả năng thực hiện đồng thời nhiều tác vụ, giảm thiểu thời gian xử lý đối với các bài toán đòi hỏi tính toán lớn. Khả năng truy xuất bộ nhớ nhanh chóng cũng là một lợi thế quan trọng. Nhờ đó, lập trình GPU trở thành một giải pháp hiệu quả cho các ứng dụng như xử lý ảnh, video, mô phỏng khoa học và học máy. Điều này được chứng minh qua nghiên cứu của Hoàng Đình Thắng, 'Lập Trình Song Song Trên Nền Đơn Vị Xử Lý Đồ Họa Và Ứng Dụng' (2010), cho thấy tiềm năng ứng dụng của GPU trong tính toán hiệu năng cao.

1.2. Giới hạn thách thức của lập trình Song song Parallel Programming

Tuy nhiên, lập trình song song cũng đối mặt với nhiều thách thức. Việc chia bài toán lớn thành các tác vụ nhỏ hơn, đồng thời đảm bảo sự đồng bộ và trao đổi dữ liệu giữa các tác vụ, đòi hỏi kỹ năng và kinh nghiệm. Các lỗi đặc thù của lập trình song song, như deadlock, livelock và race condition, cần được xử lý cẩn thận. Ngoài ra, hiệu năng thực tế có thể bị giới hạn bởi phần mã không thể song song hóa, theo quy tắc Amdahl. Do đó, việc lựa chọn thuật toán và kiến trúc phù hợp là rất quan trọng để tận dụng tối đa lợi thế của lập trình song song. Sự khác biệt giữa CPUGPU cũng tạo ra những thách thức riêng trong việc phát triển ứng dụng. Theo Hoàng Đình Thắng (2010), GPU tập trung vào xử lý song song dữ liệu, trong khi CPU tập trung vào xử lý luồng và quản lý bộ nhớ đệm.

II. Cách Lập Trình Song Song GPU Tổng Quan Kiến Trúc CUDA

Kiến trúc CUDA của NVIDIA là một trong những nền tảng hàng đầu cho lập trình song song trên GPU. CUDA cung cấp một bộ công cụ phát triển mạnh mẽ, cho phép các nhà phát triển tận dụng sức mạnh tính toán của GPU bằng các ngôn ngữ lập trình quen thuộc như C/C++. Mô hình lập trình CUDA dựa trên khái niệm kernel, là các hàm được thực thi song song bởi nhiều thread. Các thread này được tổ chức thành các block, và các block được tổ chức thành grid. Bộ nhớ GPU được chia thành nhiều loại, bao gồm global memory, shared memory, constant memorytexture memory, mỗi loại có đặc điểm và mục đích sử dụng riêng. Việc hiểu rõ kiến trúc CUDA và cách sử dụng các loại bộ nhớ khác nhau là rất quan trọng để viết các ứng dụng GPU hiệu quả.

2.1. Mô hình Bộ Nhớ GPU Chia Sẻ Toàn Cục Memory Model

Bộ nhớ GPU được tổ chức theo cấu trúc phân cấp. Bộ nhớ global, là bộ nhớ lớn nhất, có thể truy cập từ tất cả các thread trong grid. Tuy nhiên, truy cập bộ nhớ global có độ trễ cao. Bộ nhớ shared là bộ nhớ nhỏ hơn, nhưng có độ trễ thấp hơn và có thể truy cập từ tất cả các thread trong cùng một block. Bộ nhớ constanttexture là các loại bộ nhớ chỉ đọc, được tối ưu hóa cho các truy cập tuần tự. Việc sử dụng hiệu quả các loại bộ nhớ này là rất quan trọng để tối ưu hóa hiệu năng của các ứng dụng GPU. Theo Hoàng Đình Thắng (2010), "Hợp nhất truy cập bộ nhớ nghĩa là đọc từ một tập địa chỉ liên tục phải tƣơng ứng với tổ chức thread (số định danh thread)."

2.2. Lập trình Kernel CUDA Hướng dẫn ví dụ cụ thể

Viết một kernel hiệu quả là chìa khóa để tận dụng sức mạnh của GPU. Kernel được viết bằng ngôn ngữ C/C++ với các phần mở rộng của CUDA. Các thread trong block thực thi cùng một kernel, nhưng trên các dữ liệu khác nhau. Việc chia dữ liệu và phân công công việc cho các thread là một thách thức quan trọng. Cần chú ý đến các vấn đề như đồng bộ hóa và tránh xung đột truy cập bộ nhớ. Hoàng Đình Thắng (2010) đề cập đến sự cần thiết phải xem xét kiến trúc GPU trước khi viết chương trình GPU. Điều này đòi hỏi cách tiếp cận khác so với lập trình CPU, do sự khác biệt về phần cứng và mô hình thực thi.

III. Tối Ưu Hiệu Năng Lập Trình GPU Các Phương Pháp Quan Trọng

Tối ưu hóa hiệu năng là một bước quan trọng trong lập trình GPU. Có nhiều kỹ thuật khác nhau có thể được sử dụng, bao gồm tối ưu hóa truy cập bộ nhớ, giảm thiểu phân nhánh, và sử dụng các thư viện chuyên dụng như CUBLASCUFFT. Việc tối ưu hóa truy cập bộ nhớ đặc biệt quan trọng, vì truy cập bộ nhớ chậm có thể trở thành nút thắt cổ chai. Cần cố gắng để đảm bảo rằng các thread truy cập bộ nhớ một cách hợp nhất, tránh các truy cập ngẫu nhiên. Giảm thiểu phân nhánh cũng quan trọng, vì các phân nhánh có thể làm cho các thread trong cùng một warp thực thi các đường dẫn khác nhau, làm giảm hiệu năng.

3.1. Giảm thiểu truyền dữ liệu CPU GPU Giải pháp tối ưu

Việc truyền dữ liệu giữa CPUGPU có thể là một quá trình tốn thời gian. Do đó, cần cố gắng giảm thiểu lượng dữ liệu cần truyền. Một cách để làm điều này là thực hiện nhiều tính toán trên GPU càng tốt, tránh phải liên tục chuyển dữ liệu qua lại. Một giải pháp khác là sử dụng các kỹ thuật như zero-copy memory, cho phép CPU truy cập trực tiếp vào bộ nhớ GPU mà không cần phải sao chép dữ liệu. Theo Hoàng Đình Thắng (2010), "Băng thông chuyển giữa host và device nhỏ hơn rất nhiều so với chuyển dữ liệu trong device và host."

3.2. Sử dụng Bộ Nhớ Chia Sẻ Shared Memory để tăng tốc truy cập

Bộ nhớ shared là một loại bộ nhớ có độ trễ thấp, có thể truy cập từ tất cả các thread trong cùng một block. Bằng cách lưu trữ dữ liệu thường xuyên được sử dụng trong bộ nhớ shared, có thể giảm đáng kể thời gian truy cập bộ nhớ. Tuy nhiên, cần chú ý đến các vấn đề như xung đột truy cập bộ nhớ, có thể làm giảm hiệu năng. Hoàng Đình Thắng (2010) nhấn mạnh rằng bộ nhớ chia sẻ làm việc giống L1cache trong một bộ đa xử lý và hầu nhƣ có chi phí truy cập bằng không, vì thế rất nhanh.

IV. Ứng Dụng Lập Trình Song Song GPU Bài Toán Thực Tế Kết Quả

Lập trình song song trên GPU đã được ứng dụng thành công trong nhiều lĩnh vực khác nhau. Trong lĩnh vực học máy, GPU được sử dụng để tăng tốc quá trình huấn luyện các mô hình phức tạp như mạng nơ-ron sâu. Trong lĩnh vực xử lý ảnh và video, GPU được sử dụng để thực hiện các tác vụ như lọc ảnh, nhận diện đối tượng và theo dõi chuyển động. Trong lĩnh vực mô phỏng khoa học, GPU được sử dụng để mô phỏng các hệ thống vật lý phức tạp như dòng chảy chất lỏng và động lực học phân tử. Luận văn của Hoàng Đình Thắng (2010) cũng đề cập đến ứng dụng của GPU trong việc song song hóa công cụ CRF++, nhằm cải thiện tốc độ tính toán trong các tác vụ xử lý ngôn ngữ tự nhiên.

4.1. Ứng dụng GPGPU tăng tốc trong Deep Learning và Machine Learning

Khả năng tính toán song song của GPU đặc biệt hữu ích trong các tác vụ Deep Learning. Việc huấn luyện các mạng nơ-ron sâu đòi hỏi phải thực hiện hàng tỷ phép tính, và GPU có thể giúp giảm đáng kể thời gian huấn luyện. Các thư viện như TensorFlowPyTorch đều hỗ trợ GPU, cho phép các nhà nghiên cứu và phát triển tận dụng sức mạnh của GPU một cách dễ dàng. GPU có thể xử lý các phép toán ma trận, tích chập và các phép toán khác một cách hiệu quả.

4.2. Ứng dụng GPU trong Xử Lý Ảnh Video và Render Đồ Họa

GPU ban đầu được thiết kế để xử lý đồ họa, và vẫn là một công cụ mạnh mẽ cho các tác vụ xử lý ảnh và video. GPU có thể được sử dụng để thực hiện các tác vụ như lọc ảnh, nén video, và render đồ họa 3D. Các thư viện như OpenGLDirectX cung cấp các giao diện lập trình cho phép các nhà phát triển tận dụng sức mạnh của GPU cho các ứng dụng đồ họa. Render thời gian thực, hiệu ứng hình ảnh phức tạp và các tác vụ liên quan đều được hưởng lợi từ khả năng song song của GPU.

V. CRF Song Song hóa Phương Pháp và Kết Quả Thực Nghiệm

Luận văn của Hoàng Đình Thắng (2010) đề xuất phương pháp song song hóa công cụ CRF++ bằng cách sử dụng GPU. CRF++ là một công cụ mạnh mẽ cho các tác vụ xử lý ngôn ngữ tự nhiên, nhưng quá trình huấn luyện có thể tốn thời gian, đặc biệt là với các tập dữ liệu lớn. Bằng cách song song hóa một số phần của thuật toán huấn luyện, có thể giảm đáng kể thời gian huấn luyện. Kết quả thực nghiệm cho thấy rằng việc sử dụng GPU có thể tăng tốc quá trình huấn luyện CRF++ lên nhiều lần. Tuy nhiên, việc song song hóa đòi hỏi phải thay đổi cấu trúc code hiện có của CRF++, và cần phải chú ý đến các vấn đề như đồng bộ hóa và quản lý bộ nhớ.

5.1. Song song hóa vòng lặp MIRA trong CRF CUDA

Luận văn tập trung vào song song hóa vòng lặp trong thuật toán MIRA (Margin Infused Relaxed Algorithm) của CRF++. Thuật toán MIRA được sử dụng để huấn luyện mô hình CRF, và vòng lặp này chiếm phần lớn thời gian huấn luyện. Bằng cách phân chia vòng lặp cho nhiều thread trên GPU, có thể giảm đáng kể thời gian huấn luyện. Các tính toán như tính tổng số lỗi và tính giá trị zero-one được thực hiện song song. Việc sử dụng CUDA cho phép tận dụng tối đa sức mạnh của GPU trong việc song song hóa vòng lặp này.

5.2. Kết quả thực nghiệm và phân tích hiệu năng Benchmarking

Kết quả thực nghiệm cho thấy rằng việc song song hóa vòng lặp trong thuật toán MIRA bằng GPU có thể cải thiện đáng kể hiệu năng của CRF++. Thời gian huấn luyện giảm đáng kể khi sử dụng GPU so với CPU. Tuy nhiên, hiệu năng có thể bị ảnh hưởng bởi kích thước tập dữ liệu và cấu hình phần cứng. Bảng kết quả thực nghiệm cho thấy sự khác biệt về thời gian thực hiện giữa GPUCPU với các kích thước dữ liệu khác nhau. Cần phải thực hiện benchmarking để đánh giá hiệu năng của các ứng dụng GPU một cách chính xác.

VI. Tương Lai Lập Trình GPU Xu Hướng Hướng Nghiên Cứu Mới

Lập trình song song trên GPU là một lĩnh vực phát triển nhanh chóng. Các xu hướng mới bao gồm việc sử dụng GPU trong các ứng dụng đám mây, sự phát triển của các kiến trúc GPU mới, và sự tích hợp của GPU vào các thiết bị di động. Ngoài ra, các hướng nghiên cứu mới bao gồm việc phát triển các thuật toán song song hiệu quả hơn, các công cụ lập trình dễ sử dụng hơn, và các phương pháp để tối ưu hóa hiệu năng trên các kiến trúc GPU khác nhau. Sự phát triển của GPGPU (General-Purpose computing on Graphics Processing Units) tiếp tục mở ra những cơ hội mới cho việc sử dụng GPU trong các ứng dụng ngoài đồ họa.

6.1. GPU trên đám mây Cloud Computing Cơ hội và thách thức

Việc sử dụng GPU trên đám mây đang trở nên phổ biến hơn. Các nhà cung cấp dịch vụ đám mây như AWSAzure cung cấp các phiên bản máy ảo được trang bị GPU, cho phép các nhà phát triển chạy các ứng dụng GPU mà không cần phải đầu tư vào phần cứng đắt tiền. Tuy nhiên, việc sử dụng GPU trên đám mây cũng đặt ra một số thách thức, bao gồm quản lý chi phí và đảm bảo an ninh dữ liệu. Khả năng mở rộng linh hoạt và khả năng truy cập GPU từ bất kỳ đâu là những lợi thế lớn.

6.2. Kiến trúc GPU tương lai Xu hướng và tiềm năng phát triển

Các kiến trúc GPU liên tục được cải tiến để đáp ứng nhu cầu ngày càng tăng về hiệu năng. Các xu hướng mới bao gồm việc tăng số lượng lõi xử lý, cải thiện băng thông bộ nhớ, và tích hợp các tính năng mới như hỗ trợ cho trí tuệ nhân tạo. Các công ty như NVIDIA, AMDIntel đang cạnh tranh để phát triển các kiến trúc GPU tiên tiến nhất. Sự phát triển của các kiến trúc GPU mới sẽ tiếp tục thúc đẩy sự phát triển của lập trình song song trên GPU. Các kiến trúc mới tập trung vào hiệu quả năng lượng, tính linh hoạt và khả năng lập trình.

24/09/2025

Trích đoạn nội dung tài liệu

Chương 1 - Giới thiệu nêu lên mục đích của lập trình song song, những khó khăn của lập trình song song truyền thống, dẫn đến yêu cầu một mô hình lập trình song song kiểu mới linh hoạt hơn. Chƣơng này cũng trình bày mục tiêu của luận văn, tổ chức của luận văn. Chương 2 - Tổng quan về đơn vị xử lý đồ họa (GPU), cung cấp cái nhìn tổng quan về tính toán song song đa dụng trên đơn vị xử lý đồ họa. Mô tả sự khác nhau cơ bản giữa đơn vị xử lý trung tâm (CPU) và đơn vị xử lý đồ họa (GPU).

Phần lớn của chƣơng này dành cho việc giải thích các nguyên tắc cơ bản của tính toán song song đa dụng trên đơn vị xử lý đồ họa và giao diện lập trình ứng dụng (API) trên GPU. TIEU LUAN MOI download : skknchat@gmail.com 13 Chương 3 - Mô hình trường ngẫu nhiên có điều kiện (CRF), trình bày mô hình lý thuyết CRF, phƣơng pháp ƣớc lƣợng tham số của mô hình CRF và một số ứng dụng của CRF. Chương 4 - Ứng dụng GPU song song hóa từng phần công cụ CRF++, giới thiệu công cụ CRF++, cách thức mà tác giả của CRF++ thực hiện, từ đó đề xuất chiến lƣợc song song CRF++ bằng GPU thông qua các thƣ viện lập trình cho GPU nhƣ CUDA, Thrust. Phần cuối của chƣơng sẽ đƣa ra kết quả thực nghiệm cũng nhƣ một số đánh giá, nhận xét.

TIEU LUAN MOI download : skknchat@gmail.com 14 CHƢƠNG 2: TỔNG QUAN VỀ ĐƠN VỊ XỬ LÝ ĐỒ HỌA (GRAPHIC PROCESSING UNIT-GPU) 2. Tóm tắt lịch sử phát triển của đơn vị xử lý đồ họa (GPU) Trong suốt 20 năm qua GPUs đã trải qua những phát triển lớn. Bắt đầu phát triển từ đơn vị xử lý đồ họa 2D đơn giản, đến đa mục đích, có thể lập trình đƣợc, song song mức độ cao, có nhiều lõi đơn vị xử lý với khả năng tính toán phi thƣờng và băng thông bộ nhớ rất cao. Lịch sử của GPUs những năm 1970 với các máy tính có Atari 8-bit.

Những chíp đồ họa này đƣợc sử dụng để hòa trộn đồ họa và dữ liệu văn bản rồi hiển thị chúng lên màn hình. Những năm 1980, kiến trúc của chíp này trở thành nền tảng của sản xuất chíp hàng loạt tiếp theo, đƣợc tích hợp trong Commodore Amiga. Chíp này là chip đầu tiên có đầy đủ các đặc tính tăng tốc đồ họa – nó chứa các đặc tính nhƣ: vẽ hình ảnh gốc, tô màu hình ảnh, chuyển khối hình ảnh, v.Đặc tính cách mạng là tất cả video đƣợc đẩy vào phần cứng. Năm 1984, gần 10 năm sau khi phần cứng tăng tốc đồ họa trở thành chuẩn, IBM giới thiệu tăng tốc 2D/3D đầu tiên dƣới cái tên IBM Professional Graphics Controller, nhƣng thành công thì không đƣợc nhƣ mong đợi.

Việc thiếu tính tƣơng thích, xử lý chậm và giá cao ($4.500) làm cho dự án này thất bại [7]. Trong suốt những năm 1990, nhu cầu tăng tốc đồ họa trở nên cấp thiết, bởi vì số lƣợng máy trạm ngày càng tăng với nền tảng công nghệ của Microsoft Windows. Năm 1993, S3 Graphics giới thiệu chíp đơn 2D tăng tốc đầu tiên - S3 86C911, dƣới tên mã là Porsche 911. Chíp này thiết lập chuẩn tăng tốc 2D trong vòng vài năm.

Năm 1995 gần nhƣ tất cả các nhà sản xuất chíp đã bổ sung hỗ trợ tăng tốc 2D vào sản phẩm của họ. Giữa những năm 1990 đồ họa 3D thời gian thực trở nên phổ biến hơn trong máy tính và trò chơi điều khiển. Nhu cầu đồ họa 3D thời gian thực dẫn đến phát triển tăng tốc 3D thời gian thực đầu tiên. Các chíp giá rẻ nhƣ S3 ViRGE, Matrox Mystique hay Ati Rage đƣợc dựa trên 2D tăng tốc và thêm các đặc tính 3D.

Bƣớc đột phá đầu tiên đến năm 1996, khi 3Dfx Interactive giới thiệu tăng tốc 3D đầu tiên đầu đủ tính năng có tên là Voodoo [8]. Gia tăng tốc độ này xác định tiêu chuẩn mới cho chip đồ họa 3D cho ba năm tiếp theo. Bƣớc đột phá lớn thứ hai đến năm 1999 khi tổng công ty nVidia giới thiệu GPU đầu tiên – NV10, TIEU LUAN MOI download : skknchat@gmail.com 15 dƣới tên mã GeForce 256. Tất cả các con chíp hiện nay về cơ bản đều xuất phát từ kiến trúc này.

Vào cuối năm 2006 nVidia giới thiệu kiến trúc thiết bị hợp nhất cho tính toán đầu tiên - Compute Unified Device Architecture (CUDA). Các công ty đối thủ AMD/ATI giới thiệu kiến trúc của họ (ATI FireStream) vài tháng sau đó. Thời điểm này GPU trở nên dễ tiếp cận để phát triển phần mềm bằng các ngôn ngữ lập trình chuẩn công nghiệp và thiết lập cách thức mới cho tính toán hiệu năng cao [2]. Sự khác nhau giữa GPU và CPU Ý tƣởng chính của tính toán song song đa dụng trên GPU (GPGPU) là sử dụng nhiều bóng bán dẫn (transistor) để xử lý dữ liệu và xử lý dữ liệu song song.

Đây là sự khác biệt chính giữa CPU và GPU. GPU chủ yếu định hƣớng các thao tác song song dữ liệu hơn là trữ dữ liệu (caching data) và điều khiển luồng [2]. Nhu cầu này chủ yếu xuất phát từ dựng hình đồ họa, bởi vì thiết bị đồ họa bắt buộc phải xử lý một lƣợng lớn các phần tử dữ liệu đồ họa (nhƣ các điểm ảnh, đỉnh và mảnh) và thao tác trên các phân tử này (lightning, blending, clipping, texturing, …). Song song là cách để giảm lƣợng thời gian cần thiết để xử lý dữ liệu và giảm chi phí tổng thể bằng cách phân phối nó trong xử lý các phần tử.

Nguyên tắc cơ bản là quá trình dựng hình đồ họa là cố định. Dữ liệu đƣợc xử lý bởi phần cứng đồ họa đi qua nhiều giai đoạn trƣớc khi chúng đƣợc hiển thị và chuỗi sự kiện này là không thay đổi. Hình 1: Sự khác nhau giữa CPU và GPU – GPU có nhiều bộ xử lý để định hướng xử lý song song dữ liệu [2]. TIEU LUAN MOI download : skknchat@gmail.com 16 Hình 2: So sánh tốc độ tính toán giữa CPU và GPU [2] CPU phải xử lý nhiều tác vụ khác nhau vào cùng một thời gian.

Vì vậy CPU phải đƣợc tối ƣu hóa cho mục đích này, chủ yếu lƣu trữ dữ liệu quan trọng đƣợc dùng bởi tiến trình đang chạy và nhanh chóng chuyển ngữ cảnh giữa các tiến trình đang chạy. Tất cả các tác vụ đƣợc cung cấp một thời gian xử lý xác định trƣớc để thực thi mã của chúng. Khi đến thời gian này, hệ điều hành chuyển CPU sang tiến trình tiếp theo. Chuyển đổi ngữ cảnh giữa các tiến trình đang chạy có thể đƣợc tính toán với cƣờng độ lớn.

TIEU LUAN MOI download : skknchat@gmail.com 17 Ngƣợc lại, GPU xử lý nhiều nhất một nhiệm vụ tại một thời điểm nhƣng thực hiện nhiều lần song song. GPU sử dụng mô hình song song dữ liệu, để có thể giải quyết các vấn đề số học cƣờng độ cao hơn CPU. Khi cùng một đoạn mã GPU đƣợc thực hiện song song nhiều lần thì không cần kiểm soát luồng và quản lý bộ nhớ đệm (cache). Thực thi tác vụ song song không đƣợc hỗ trợ trong GPU.

Có nghĩa là, không thể thực thi hai hoặc nhiều chƣơng trình khác nhau trên cùng GPU vào cùng một thời điểm. Mô hình xử lý dữ liệu song song ánh xạ các phần tử dữ liệu vào các đơn vị làm việc cơ sở đƣợc gọi là các luồng (thread). Tính song song thread cùng với phân cấp bộ nhớ chia sẻ và hàng rào đồng bộ hóa giữa các luồng làm nên khái niệm trừu tƣợng về mô hình lập trình song song đa dụng của GPU [2]. Mô hình xử lý song song dữ liệu Mục này sẽ trình bày các khái niệm cơ bản trong đơn vị xử lý đồ họa.

Kernel là một đoạn mã chƣơng trình, đƣợc thể hiện bởi một hàm hay thủ tục viết bằng một ngôn ngữ lập trình cụ thể. Thread là một thực thể chạy mã nhị phân, đƣợc thực thi song song nhiều lần [2]. Có thể nói kernel là một “mẫu hàm” cho một nhóm thread. Hai thuật ngữ quan trọng tiếp theo là host và device.

Host là bao gồm bộ xử lý trung tâm và DRAM của CPU, còn device gồm các bộ xử lý và DRAM của GPU. Host và device đƣợc phân tách bởi không gian địa chỉ của hai DRAM. Host thực thi chƣơng trình chính (mã tuần tự) còn device thực thi kernel (mã song song). Device trong mô hình này làm việc giống nhƣ một bộ đồng xử lý (co-processor) đối với host.

Hình 3 thể hiện cách thức thực thi mã tuần tự và song song. GPU thread dùng xử lý dữ liệu song song và mô hình lập trình. Trong mô hình này, các phần tử dữ liệu cơ sở đƣợc lƣu trong bộ nhớ GPU đƣợc ánh xạ vào thread đang chạy. Bộ nhớ GPU (không gian địa chỉ) là một mảng tuyến tính của các phần tử cơ bản (bytes).

Để ánh xạ thread vào bộ nhớ đối tƣợng chúng ta cần biết cách tổ chức thread. Cơ cấu tổ chức này phải có khả năng xác định rõ đối tƣợng bộ nhớ từ các giá trị định danh thread đƣợc sinh ra một cách tự động. Để làm đƣợc điều này, cách dễ dàng nhất là tổ chức thread thành lƣới (grid) ảo đa chiều của các thread. Với công nghệ CUDA, lƣới này có 5 chiều và để định hƣớng tốt hơn, lại đƣợc chia thành 2 loại: khối 3 chiều của thread và lƣới 2 chiều của khối của thread.

TIEU LUAN MOI download : skknchat@gmail.com 18 Hình 3: Nguyên lý lập trình trên GPU [2] Số định danh duy nhất của thread có thể ƣớc lƣợng từ một số biến liên quan, đƣợc khởi tạo khi lƣới của khối thread đƣợc liệt kê. Các biến này có thể truy cập từ bên trong mỗi kernel. Mỗi thread có biến riêng của nó, chứa tọa độ TIEU LUAN MOI download : skknchat@gmail.com 19 ba chiều x, y, z trong khối. Khối thread chứa các biến chiều x, y, z ứng với các trục , , và tọa độ 2 chiều x, y trong lƣới khối thread.

Các chiều của lƣới khối thread cũng có thể truy cập từ trong các biến x, y. Các chiều của khối thread và của lƣới phải đƣợc thiết lập trƣớc khi chạy các tính toán. Số định danh duy nhất của thread trong khối thread và số định danh duy nhất của block trong grid đƣợc tính nhƣ sau [2]: threadId = x + y * x+ z* x* y (2.2) Hình 4: Ví dụ về lưới 5 chiều của thread Cơ cấu phân cấp cung cấp phƣơng tiện để tính toán trên các cấu trúc dữ liệu nhƣ véctơ, ma trận hay mảng ba chiều. Tuy nhiên do hạn chế của phần cứng, kích thƣớc của khối thread hay số thread trong mỗi block là giới hạn1.

1 Đối với nVidia CUDA tương thích với 1.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ