Luận văn: Tính toán hiệu năng cao GPU và ứng dụng (ĐH Quốc Gia Hà Nội)

Luận văn thạc sĩ: Tính toán hiệu năng cao với GPU. Nghiên cứu ứng dụng và tối ưu hóa hiệu năng trên bộ xử lý đồ họa. Tìm hiểu ngay!

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ĩ

2009

81
1
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

MỤC LỤC

DANH MỤC THUẬT NGỮ

DANH MỤC HÌNH VẼ, BẢNG BIỂU

Danh mục hình vẽ

Danh mục bảng biểu

MỞ ĐẦU

1. TỔNG QUAN VỀ TÍNH TOÁN SONG SONG VÀ GPU

1.1. Tổng quan về tính toán song song

1.2. Các mô hình máy tính song song

1.3. Mô hình lập trình song song

1.4. Sự cần thiết của công cụ phát triển ứng dụng song song

1.5. Tổng quan về bộ xử lý đồ họa (GPU)

1.5.1. Giới thiệu GPU

1.5.2. Lịch sử phát triển GPU

1.5.3. Kiến trúc GPU

1.5.4. Tính toán trên GPU (GPU Computing)

1.5.4.1. Môi trường phần mềm
1.5.4.2. Kỹ thuật và ứng dụng

2. HỆ THỐNG CHƯƠNG TRÌNH DỊCH VÀ NGÔN NGỮ LẬP TRÌNH GPU

2.1. Giới thiệu về môi trường phát triển CUDA

2.1.1. Mô hình lập trình

2.1.2. Bộ đồng xử lý đa luồng mức cao

2.1.3. Gom lô các luồng (Thread Batching)

2.1.4. Mô hình bộ nhớ

2.1.5. Thiết lập phần cứng

2.1.6. Tập các bộ đa xử lý SIMD với bộ nhớ dùng chung trên chip

2.1.7. Mô hình thực thi

2.1.8. Khả năng tính toán

2.1.9. Cơ chế chuyển đổi

2.1.10. Giao diện lập trình ứng dụng

2.1.10.1. Mở rộng cho ngôn ngữ lập trình C
2.1.10.2. Mở rộng ngôn ngữ
2.1.10.3. Thành phần chung trong thời gian chạy
2.1.10.4. Thành phần thiết bị thời gian chạy

2.1.11. Hướng dẫn hiệu năng

2.1.11.1. Hiệu năng lệnh
2.1.11.2. Số lượng luồng trong một khối
2.1.11.3. Truyền dữ liệu giữa Host và device
2.1.11.4. Lợi ích của việc tổ chức bộ nhớ

3. ỨNG DỤNG GPU VÀO BÀI TOÁN N-BODY

3.1. Bài toán mô phỏng N-body

3.2. Xây dựng bài toán N-body trên CPU

3.2.1. Công thức tính lực cơ bản và tính thế năng

3.3. Thuật toán mô phỏng N-Body

3.4. Xây dựng bài toán N-body trên GPU

3.5. Môi trường thử nghiệm:

3.6. Kết quả thử nghiệm

3.7. Kết luận thử nghiệm

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Giới thiệu tính toán hiệu năng cao GPU Tổng quan ứng dụng

Bộ xử lý đồ họa (GPU) đã trở thành một thành phần không thể thiếu trong hệ thống máy tính hiện đại. Sáu năm qua chứng kiến sự tăng trưởng đáng kể về hiệu năng và khả năng của GPU. GPU hiện đại không chỉ là công cụ xử lý đồ họa mạnh mẽ mà còn là bộ xử lý hỗ trợ lập trình song song ở mức cao, cho phép xử lý các bài toán số học phức tạp với băng thông bộ nhớ tăng đáng kể so với CPU cùng loại. Sự phát triển nhanh chóng này đã tạo ra một xu hướng nghiên cứu mới, trong đó cộng đồng các nhà nghiên cứu đang nỗ lực ánh xạ nhiều vấn đề phức tạp, đòi hỏi tính toán lớn vào việc thực thi trên GPU. Mục tiêu chung là ứng dụng GPU vào giải quyết các bài toán hiệu năng cao của tính toán hiện đại. GPGPU (General Purpose Computing on GPU) là một sự thay thế hấp dẫn cho CPU truyền thống trong hệ thống máy tính hiện đại và được áp dụng rộng rãi trong nhiều lĩnh vực như vật lý, hóa học, sinh học, tài chính. Trong tương lai, GPU có thể thay thế CPU trong các công việc như xử lý hình ảnh và đồ họa, các tính toán phức tạp trong các bài toán tính toán hiệu năng cao. Luận văn này đi sâu vào nghiên cứu tính toán thông dụng trên GPU và thử nghiệm trực tiếp trên bài toán N-body, một bài toán kinh điển trong lĩnh vực tính toán hiệu năng cao. Luận văn gồm 3 chương chính: Tổng quan về tính toán song song và GPU, Hệ thống chương trình dịch và ngôn ngữ lập trình GPU, và Ứng dụng GPU vào bài toán N-body và thử nghiệm chương trình.

1.1. Lịch sử phát triển của GPU và các cột mốc quan trọng

Sự phát triển của card đồ họa gắn liền với các chip vi xử lý. Ban đầu, GPU là bộ xử lý trên card đồ họa, chuyên tính toán các phép toán dấu phẩy động. Những năm 1970, các bộ điều khiển phần cứng cho kết hợp đồ họa và text xuất hiện trên máy tính ATARI. Những năm 1980, Commodore Amiga tích hợp các bộ blit (BLock Image Transfer) vào phần cứng video. IBM giới thiệu hệ thống đồ họa 8514 có thể thực thi các phép toán 2D nguyên thủy trên phần cứng. Những năm 1990 chứng kiến sự ra đời của các bộ gia tốc chip 2D như S3 Graphics 86C911. Đến năm 1995, hầu hết các nhà sản xuất chip đồ họa máy tính lớn đã thêm hỗ trợ tăng tốc 2D. Đầu những năm 1990, đồ họa 3D trở nên phổ biến, dẫn đến nhu cầu phát triển phần cứng tăng tốc đồ họa 3D. Các chipset Verite của Rendition tích hợp video, tăng tốc 2D GUI và chức năng 3D vào một chip. OpenGL xuất hiện như một API đồ họa chuyên nghiệp và trở thành một động lực cho phát triển phần cứng. DirectX trở nên phổ biến với các nhà phát triển game Windows. Từ năm 2000 đến nay, GPU thêm tính năng đổ bóng lập trình được. NVIDIA GeForce 3 (NV20) là chip đầu tiên có khả năng lập trình đổ bóng. ATI Radeon 9700 (R300) là bộ tăng tốc Direct3D 9.0 đầu tiên trên thế giới. GPU ngày nay có kiến trúc song song, cạnh tranh với CPU. GPGPU đã được ứng dụng vào nhiều lĩnh vực khác nhau, như thăm dò dầu, xử lý hình ảnh khoa học, đại số tuyến tính, tái tạo 3D và hỗ trợ lựa chọn giá cổ phiếu.

1.2. Tại sao GPU lại quan trọng trong tính toán hiệu năng cao

GPU có kiến trúc song song vượt trội so với CPU. GPU luôn là một bộ xử lý với dư thừa tài nguyên tính toán. Xu hướng quan trọng nhất gần đây là trưng bày cho các lập trình viên thấy được sức mạnh tính toán song song này. GPU đã phát triển từ một hàm cố định, bộ xử lý chuyên dụng tới bộ xử lý lập trình song song, đầy đủ tính năng độc lập với việc bổ sung thêm các chức năng cố định, và các chức năng chuyên biệt. Hơn bao giờ hết, các khía cạnh về khả năng lập trình của bộ xử lý chiếm vị trí trung tâm. GPU được xây dựng cho các nhu cầu ứng dụng khác nhau so với CPU, đó là các yêu cầu tính toán lớn chạy song song, với trọng tâm là thông lượng hơn là độ trễ. GPU phân chia các nguồn lực của bộ xử lý theo các khung cảnh khác nhau, sao cho đường ống được chia theo không gian chứ không phải thời gian. Các phần của bộ vi xử lý làm việc trên một trong những khung cảnh cấp dữ liệu đầu ra trực tiếp vào một phần khác mà sẽ hoạt động trong giai đoạn tiếp theo. Khi các bộ phận lập trình được của đường ống chịu trách nhiệm tính toán ngày càng nhiều trong các đường ống dẫn đồ họa thì kiến trúc của GPU chuyển từ kiến trúc song song tác vụ trong một đường ống nghiêm ngặt sang kiến trúc được phát triển xung quanh một đơn vị lập trình được theo cơ chế song song dữ liệu thống nhất.

II. Thách thức và vấn đề trong tính toán hiệu năng cao trên GPU

Mặc dù GPU mang lại hiệu năng vượt trội trong nhiều ứng dụng, vẫn còn tồn tại những thách thức và vấn đề cần giải quyết. Một trong số đó là sự phức tạp trong lập trình. Lập trình GPU đòi hỏi kiến thức về kiến trúc phần cứng, mô hình lập trình song song và các công cụ phát triển chuyên biệt. Việc tối ưu hóa hiệu năng trên GPU cũng đòi hỏi sự hiểu biết sâu sắc về cách GPU hoạt động và cách các thuật toán được ánh xạ lên kiến trúc song song. Hơn nữa, việc gỡ lỗi các ứng dụng GPU có thể khó khăn hơn so với các ứng dụng CPU, do tính chất song song và phức tạp của phần cứng. Một thách thức khác là sự phụ thuộc vào phần cứng cụ thể. Hiệu năng của một ứng dụng GPU có thể khác nhau đáng kể trên các loại GPU khác nhau. Việc tối ưu hóa cho một loại GPU có thể không hiệu quả trên các loại GPU khác. Điều này đòi hỏi các nhà phát triển phải cân nhắc kỹ lưỡng về phần cứng mục tiêu và điều chỉnh mã của họ cho phù hợp.

2.1. Giới hạn về bộ nhớ và băng thông trong tính toán GPU

Mặc dù GPU có băng thông bộ nhớ cao hơn CPU, nhưng vẫn có những giới hạn cần xem xét. Việc truy cập bộ nhớ trên GPU có thể chậm hơn so với truy cập bộ nhớ cục bộ. Việc truyền dữ liệu giữa CPU và GPU cũng có thể là một nút thắt cổ chai. Các lập trình viên cần tối ưu hóa cách dữ liệu được truy cập và truyền để giảm thiểu tác động của những giới hạn này. Các kỹ thuật như sử dụng bộ nhớ dùng chung, kết hợp truy cập bộ nhớ và giảm thiểu truyền dữ liệu giữa CPU và GPU có thể giúp cải thiện hiệu năng. Kiến trúc bộ nhớ phân cấp của GPU cũng là một yếu tố cần xem xét. Việc sử dụng hiệu quả các bộ nhớ cache và bộ nhớ cục bộ có thể cải thiện đáng kể hiệu năng của các ứng dụng GPU.

2.2. Khó khăn trong việc tối ưu hóa mã cho kiến trúc GPU

Việc tối ưu hóa mã cho kiến trúc GPU là một quá trình phức tạp. Các lập trình viên cần hiểu rõ về kiến trúc phần cứng, mô hình lập trình song song và các công cụ phát triển chuyên biệt. Việc tối ưu hóa có thể bao gồm các kỹ thuật như song song hóa dữ liệu, tối ưu hóa truy cập bộ nhớ, giảm thiểu phân nhánh và sử dụng các lệnh SIMD. Việc lựa chọn thuật toán phù hợp cũng rất quan trọng. Các thuật toán được thiết kế cho CPU có thể không hiệu quả trên GPU. Các lập trình viên cần xem xét các thuật toán phù hợp với kiến trúc song song của GPU. Việc sử dụng các thư viện và công cụ tối ưu hóa có thể giúp đơn giản hóa quá trình tối ưu hóa. Tuy nhiên, các thư viện và công cụ này có thể có những hạn chế và có thể không phù hợp cho tất cả các ứng dụng.

III. CUDA Hướng dẫn lập trình tính toán hiệu năng cao trên GPU

CUDA (Compute Unified Device Architecture) là một kiến trúc lập trình song song và mô hình lập trình được phát triển bởi NVIDIA. CUDA cho phép các nhà phát triển sử dụng GPU của NVIDIA cho các mục đích tính toán tổng quát. CUDA cung cấp một bộ công cụ phát triển, bao gồm trình biên dịch, thư viện và trình gỡ lỗi, giúp các nhà phát triển dễ dàng viết và tối ưu hóa các ứng dụng GPU. CUDA hỗ trợ nhiều ngôn ngữ lập trình, bao gồm C, C++ và Fortran. CUDA là một công cụ mạnh mẽ để phát triển các ứng dụng tính toán hiệu năng cao trên GPU. CUDA cung cấp các tính năng như quản lý bộ nhớ, lập lịch luồng và đồng bộ hóa, giúp các nhà phát triển dễ dàng tận dụng tối đa sức mạnh của GPU.

3.1. Mô hình lập trình CUDA và các khái niệm cơ bản

Trong lập trình CUDA, GPU được xem như là một thiết bị tính toán có khả năng thực hiện một số lượng rất lớn các luồng song song. Nó hoạt động như là một bộ đồng xử lý với CPU chính. Chính xác hơn, một phần của một ứng dụng được thực hiện nhiều lần, nhưng độc lập về mặt dữ liệu, có thể nhóm thành một chức năng được thực hiện trên thiết bị như nhiều luồng khác nhau. Để có điều đó, một chức năng được biên dịch thành các tập lệnh của thiết bị và tạo tra chương trình, gọi là nhân (kernel), được tải vào thiết bị. Cả hai host và thiết bị duy trì DRAM riêng của nó, được gọi là bộ nhớ hostbộ nhớ thiết bị. Có thể sao chép dữ liệu giữa DRAM của host và thiết bị thông qua API đã tối ưu hóa có sử dụng cơ chế truy cập bộ nhớ trực tiếp tốc độ cao (DMA) của thiết bị. Các luồng thực hiện được nhân tổ chức thành một lưới các khối luồng. Một khối luồng là một tập các luồng, có thể đồng thời xử lý với nhau bằng cách dùng dữ liệu trong bộ nhớ dùng chung và thực thi đồng bộ để phối hợp truy cập bộ nhớ. Các khối cùng số chiều và kích thước thực thi trên cùng nhân có thể nhóm với nhau thành lưới các khối, do vậy tổng số luồng chạy trên một nhân là lớn hơn nhiều.

3.2. Quản lý bộ nhớ trong CUDA Bí quyết tăng tốc ứng dụng

Một luồng thực thi trên thiết bị chỉ truy cập vào DRAM của thiết bị và bộ nhớ trên chip qua các không gian nhớ sau: Đọc- ghi trên các thanh ghi của mỗi luồng, Đọc-ghi bộ nhớ cục bộ mỗi luồng, Đọc-ghi bộ nhớ dùng chung của mỗi khối, Đọc-ghi bộ nhớ toàn cục của mối lưới, Chỉ đọc bộ nhớ hằng số của mỗi lưới, và Chỉ đọc bộ nhớ kết cấu (texture) của mỗi lưới. Các cùng nhớ toàn cục, hằng số và kết cấu có thể đọc hoặc ghi bởi host và liên tục giữa các lần thực thi nhân bởi cùng một ứng dụng. Các vùng nhớ toàn cục, hằng số và kết cấu được tối ưu hóa cho các cách sử dụng bộ nhớ khác nhau. Vùng nhớ kết cấu cũng đưa ra các cơ chế đánh địa chỉ khác, cũng như lọc dữ liệu, cho một số loại dữ liệu đặc biệt. CUDA có đặc tính lưu dữ liệu đệm song song và và bộ nhớ chia sẽ trên chip với tốc độ đọc ghi rất cao, các luồng dùng bộ nhớ này để chia sẻ dữ liệu với nhau. Ứng dụng có thể đạt kết quả tốt với việc tối thiểu việc lấy/trả dữ liệu từ DRAM, từ đó trở giảm phụ thuộc băng thông truyền bộ nhớ DRAM.

IV. Ứng dụng thực tế Bài toán N body và tính toán hiệu năng cao GPU

Bài toán N-body là một bài toán kinh điển trong vật lý học và thiên văn học, liên quan đến việc mô phỏng sự tương tác hấp dẫn giữa N vật thể. Bài toán này có thể được sử dụng để mô phỏng các hệ thiên hà, các cụm sao và các hệ hành tinh. Bài toán N-body là một bài toán tính toán nặng, đặc biệt khi số lượng vật thể N lớn. GPU có thể được sử dụng để tăng tốc đáng kể quá trình mô phỏng N-body. Kiến trúc song song của GPU cho phép tính toán lực hấp dẫn giữa tất cả các cặp vật thể đồng thời. Các thuật toán tối ưu hóa, như thuật toán Barnes-Hut và thuật toán Fast Multipole Method (FMM), có thể được sử dụng để giảm độ phức tạp tính toán của bài toán N-body. GPU đã được sử dụng thành công để mô phỏng các hệ thống N-body với hàng triệu hoặc thậm chí hàng tỷ vật thể.

4.1. Xây dựng thuật toán N body trên CPU và GPU So sánh hiệu năng

Việc xây dựng thuật toán N-body trên CPU thường sử dụng các vòng lặp lồng nhau để tính toán lực hấp dẫn giữa tất cả các cặp vật thể. Thuật toán này có độ phức tạp tính toán là O(N^2). Trên GPU, thuật toán N-body có thể được song song hóa bằng cách gán mỗi cặp vật thể cho một luồng riêng. Các luồng có thể tính toán lực hấp dẫn giữa các cặp vật thể đồng thời. Việc sử dụng các thuật toán tối ưu hóa, như thuật toán Barnes-Hut và thuật toán FMM, có thể giảm độ phức tạp tính toán của bài toán N-body. Thuật toán Barnes-Hut sử dụng một cây tứ phân hoặc cây bát phân để nhóm các vật thể ở xa và tính toán lực hấp dẫn từ các nhóm này. Thuật toán FMM sử dụng các khai triển đa cực để tính toán lực hấp dẫn từ các vật thể ở xa. So sánh hiệu năng giữa CPU và GPU cho thấy GPU có thể đạt được tốc độ vượt trội trong việc mô phỏng N-body, đặc biệt khi số lượng vật thể N lớn.

4.2. Kết quả thử nghiệm và phân tích Ưu điểm của GPU trong N body

Kết quả thử nghiệm cho thấy GPU có thể tăng tốc đáng kể quá trình mô phỏng N-body. Tốc độ có thể đạt được cao hơn từ 10 đến 100 lần so với CPU, tùy thuộc vào số lượng vật thể N và thuật toán được sử dụng. Ưu điểm của GPU trong bài toán N-body đến từ kiến trúc song song của GPU, cho phép tính toán lực hấp dẫn giữa tất cả các cặp vật thể đồng thời. Các thuật toán tối ưu hóa, như thuật toán Barnes-Hut và thuật toán FMM, có thể được thực hiện hiệu quả trên GPU. Việc sử dụng bộ nhớ dùng chung trên GPU có thể cải thiện hiệu năng bằng cách giảm thiểu truyền dữ liệu giữa các luồng. Phân tích kết quả cho thấy GPU là một công cụ hiệu quả để mô phỏng các hệ thống N-body lớn.

V. Kết luận và hướng phát triển trong tính toán hiệu năng cao GPU

Tính toán hiệu năng cao trên GPU đã chứng minh là một lĩnh vực đầy tiềm năng, mang lại hiệu quả vượt trội trong nhiều ứng dụng. Với sự phát triển không ngừng của công nghệ phần cứng và phần mềm, GPU sẽ tiếp tục đóng vai trò quan trọng trong việc giải quyết các bài toán phức tạp, đòi hỏi tính toán lớn. Các hướng phát triển trong tương lai bao gồm việc cải thiện khả năng lập trình, tăng cường hiệu năng, mở rộng phạm vi ứng dụng và phát triển các kiến trúc GPU chuyên dụng cho các bài toán cụ thể.

5.1. Tương lai của GPGPU và vai trò của GPU trong khoa học

Tương lai của GPGPU rất hứa hẹn. GPU sẽ tiếp tục đóng vai trò quan trọng trong nhiều lĩnh vực khoa học, như vật lý, hóa học, sinh học, thiên văn học và khoa học máy tính. GPU sẽ được sử dụng để mô phỏng các hệ thống phức tạp, phân tích dữ liệu lớn và phát triển các thuật toán mới. Sự phát triển của các kiến trúc GPU chuyên dụng, như GPU dành cho trí tuệ nhân tạo và GPU dành cho học sâu, sẽ mở ra những cơ hội mới cho việc ứng dụng GPU trong khoa học. Việc tích hợp GPU vào các hệ thống điện toán đám mây sẽ giúp các nhà khoa học dễ dàng truy cập và sử dụng sức mạnh của GPU.

5.2. Nghiên cứu và phát triển các thuật toán và kiến trúc GPU mới

Nghiên cứu và phát triển các thuật toán và kiến trúc GPU mới là rất quan trọng để tiếp tục cải thiện hiệu năng và mở rộng phạm vi ứng dụng của GPU. Các thuật toán mới cần được thiết kế để tận dụng tối đa kiến trúc song song của GPU. Các kiến trúc GPU mới cần được phát triển để đáp ứng nhu cầu của các bài toán cụ thể. Việc phát triển các công cụ và thư viện tối ưu hóa sẽ giúp các nhà phát triển dễ dàng viết và tối ưu hóa các ứng dụng GPU. Sự hợp tác giữa các nhà nghiên cứu, các nhà phát triển và các nhà sản xuất phần cứng là rất quan trọng để thúc đẩy sự phát triển của tính toán hiệu năng cao trên GPU.

24/09/2025

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

Chương 1. TỔNG QUAN VỀ TÍNH TOÁN SONG SONG VÀ GPU 1. Tổng quan về tính toán song song Khoa học kỹ thuật ngày càng phát triển, đặt ra nhiều bài toán với khối lượng tính toán rất lớn. Trong số đó có những bài toán mà kết quả chỉ có ý nghĩa nếu được hoàn thành trong khoảng thời gian cho phép.

Ví dụ như các tính toán trong thời gian thực, mô phỏng các hoạt động ở mức lượng tử, tính quĩ đạo chuyển động của vật thể trong không gian, mô phỏng vụ nổ của vũ trụ, dự báo thời tiết. Để giải quyết những bài toán này, người ta đã nghiên cứu tăng tốc độ tính toán bằng hai phương pháp hay kết hợp cả hai: Phương pháp 1: Cải tiến công nghệ, tăng tốc độ xử lý của máy tính. Công việc này đòi hỏi nhiều thời gian, công sức và tiền của, nhưng tốc độ cũng chỉ đạt được đến một giới hạn nào đó. Phương pháp 2: Chia bài toán ra thành những công việc nhỏ để có thể chạy song song trên nhiều bộ xử lý.

Việc phát triển công nghệ tính toán theo phương pháp 2 đã cho ra đời công nghệ tính toán song song, đó là việc sử dụng đồng thời nhiều tài nguyên tính toán để giải quyết một bài toán. Các tài nguyên tính toán có thể bao gồm một máy tính với nhiều bộ vi xử lý, một tập các máy tính kết nối mạng hay là một sự kết hợp của hai dạng trên. Công nghệ tính toán song song cho phép giảm thời gian thực thi bài toán tùy thuộc cách phân chia và số bộ xử lý thực thi chương trình. Nguyên tắc quan trọng nhất của tính toán song song chính là tính đồng thời hay xử lý nhiều tác vụ cùng một lúc.

Trong tính toán song song hiện nay, có hai công nghệ chính: Thứ nhất là sử dụng các siêu máy tính với rất nhiều bộ xử lý được tích hợp bên trong được thiết kế đồng bộ cả về phần cứng và phần mềm. Các công nghệ được áp dụng trong các siêu máy tính thường là các công nghệ tiên tiến làm cho giá thành của hệ thống siêu máy tính tăng rất cao.Vì thế các siêu máy tính thường được sử dụng trong các lĩnh vực mà vấn đề tính toán phức tạp, nhạy cảm và yêu cầu thời gian thực như mô phỏng thực hiện của các động cơ máy bay, quốc phòng, vũ trụ. Cách thứ hai là kết nối các máy tính lại với nhau và cùng thực hiện bài toán. Hệ thống các máy tính kết nối này chính là hệ thống tính toán song song phân cụm.

Hệ thống này có ưu điểm là giá thành rẻ hơn rất nhiều so với siêu máy tính có cùng sức mạnh (do sử dụng các thiết bị thông thường) và tính linh hoạt của hệ thống (số nút, số bộ TIEU LUAN MOI download : skknchat@gmail.com 3 xử lý, bộ nhớ, thiết bị mạng. đều mang tính tuỳ biến cao). Sự phát triển mạnh mẽ của mạng máy tính, các công nghệ mạng hiện nay đã lấp đi hạn chế về truyền thông trong hệ thống máy tính song song phân cụm làm cho nó được phát triển rộng rãi. Các lĩnh vực sử dụng hệ thống tính toán song song phân cụm thường yêu cầu tính toán không quá lớn, không yêu cầu thời gian thực như xử lý ảnh, nhận dạng vân tay, tính toán kết cấu công trình, mô phỏng các thí nghiệm.

Các mô hình máy tính song song Một hệ thống máy tính song song là một máy tính với nhiều hơn một bộ xử lý cho phép xử lý song song. Định nghĩa này có thể bao quát được tất cả các siêu máy tính với hàng trăm bộ xử lý, các mạng máy tính trạm, hay các hệ thống nhúng … Thậm chí trong mấy năm gần đây các máy tính có vi xử lý áp dụng công nghệ mới multicore cho phép nhiều nhân trong một bộ xử lý cũng được coi là hệ thống máy tính song song [35]. Dựa vào sự phân biệt ở kết nối giữa các bộ xử lý (hay thành phần xử lý), giữa bộ xử lý và bộ nhớ mà có rất nhiều loại kiến trúc máy tính song song khác nhau. Nhưng theo nguyên tắc phân loại của Flynn thì có hai kiến trúc máy tính song song song thông dụng sau [35]: SIMD - Single Instruction Multiple Data: đơn lệnh đa dữ liệu MIMD - Multiple Instruction Multiple Data: đa lệnh đa dữ liệu Sự phân chia này được dựa trên kiến trúc bộ nhớ của các máy tính song song.

Các máy tính song song có bộ nhớ dùng chung (shared memory) có nhiều bộ xử lý cùng được truy nhập đến một vùng nhớ tổng thể dùng chung. Tất cả các sự thay đổi nội dung bộ nhớ do một bộ xử lý tạo ra sẽ được nhận biết bởi các bộ xử lý khác. Máy tính song song có bộ nhớ dùng chung Trong lớp máy tính này có thể phân chia làm 2 lớp nhỏ hơn: Lớp UMA (Uniform Memory Access – Truy cập bộ nhớ đồng nhất) cho phép thời gian truy cập bộ nhớ đối TIEU LUAN MOI download : skknchat@gmail.com 4 với mỗi bộ xử lý là như nhau; Lớp NUMA (Non-Uniform Memory Access – Truy cập bộ nhớ không đồng nhất) có thời gian truy cập bộ nhớ không phải lúc nào cũng như nhau. Còn lại, các máy tính song song có bộ nhớ phân tán cũng có nhiều bộ xử lý nhưng với mỗi bộ xử lý chỉ có thể truy cập đến bộ nhớ cục bộ của nó, không có một vùng nhớ dùng chung nào cho tất cả các bộ xử lý.

Các bộ xử lý hoạt động độc lập với nhau và sự thay đổi trong vùng nhớ cục bộ không làm ảnh hưởng đến vùng nhớ của các bộ xử lý khác. Máy tính song song có bộ nhớ phân tán 1. Mô hình đơn lệnh đa dữ liệu - SIMD Hình 3. Hoạt động của hệ thống SIMD SIMD là một kiểu máy tính song song có tất cả các bộ xử lý chỉ thực hiện một lệnh duy nhất.

Tuy nhiên lệnh này được thực hiện trên các bộ dữ liệu khác nhau ứng với từng bộ xử lý khác nhau. Mô hình này có ưu điểm là đơn giản trong phần cứng cũng như phần mềm nhưng chỉ phù hợp để giải quyết các vấn đề tương đối đặc thù có tính cân đối cao trong xử lý như xử lý ảnh … Các giải thuật cho các đa máy tính thường chạy không hiệu quả trên các máy SIMD. TIEU LUAN MOI download : skknchat@gmail. Mô hình đa lệnh đa dữ liệu - MIMD.

MIMD là một mô hình kiến trúc máy tính song song thông dụng hiện nay. Với mô hình này thì tất cả các bộ xử lý sẽ thực hiện các lệnh khác nhau với các dữ liệu riêng khác nhau. Sự thực thi các lệnh có thể theo cơ chế đồng bộ hoặc không đồng bộ (synchronous or asynchronous), xác định hay không xác định (deterministic or non-deterministic). Điều này giúp cho mô hình MIMD rất linh hoạt trong việc xử lý song song.

Hoạt động của hệ thống MIMD Tuy nhiên, cùng với tính linh hoạt của mình, mô hình MIMD cũng mang theo một sự phức tạp nhất định. Việc lập trình được những bài toán song song theo mô hình này đòi hỏi nhiều công sức nghiên cứu, phân tích bài toán để tìm ra một cách phân rã tối ưu. Để lập trình theo mô hình này, lập trình viên cần có trình độ cao trong cả chuyên môn và trong kỹ thuật lập trình song song. Mô hình lập trình song song Công việc lập trình song song bao gồm việc thiết kế, lập trình các chương trình máy tính song song sao cho nó chạy được trên các hệ thống máy tính song song.

Hay có nghĩa là song song hoá các chương trình tuần tự nhằm giải quyết một vấn đề lớn hoặc làm giảm thời gian thực thi hoặc cả hai. Lập trình song song tập trung vào việc phân chia bài toán tổng thể ra thành các công việc con nhỏ hơn rồi định vị các công việc đó đến từng bộ xử lý (processor) và đồng bộ các công việc để nhận được kết quả cuối cùng. Nguyên tắc quan trọng nhất ở đây chính là tính đồng thời hoặc xử lý nhiều tác vụ cùng một lúc. Do đó, trước khi lập trình song song bạn cần phải biết được rằng bài toán có thể được song song hoá hay không (có thể dựa trên dữ liệu hay chức năng của bài toán).

Có hai hướng chính trong việc tiếp cận lập trình song song: TIEU LUAN MOI download : skknchat@gmail.com 6 ƒ Song song hoá ngầm định (implicit parallelism): bộ biên dịch hay một vài chương trình khác tự động phân chia các công việc đến các bộ xử lý. ƒ Song song hoá bằng tay (explicit parallelism): người lập trình phải tự phân chia chương trình của anh ta đế nó có thể thực thi song song. Ngoài ra trong lập trình song song, người lập trình viên cần phải tính đến yếu tố cân bằng tải (load balancing) trong hệ thống. Phải làm cho các bộ xử lý thực hiện số công việc như nhau, nếu có một bộ xử lý có tải quá lớn thì cần phải di chuyển công việc đến bộ xử lý có tải nhỏ hơn.

Việc truyền thông giữa các bộ xử lý là một công việc không thể thiếu của lập trình song song. Có hai kỹ thuật truyền thông chủ yếu là: dùng bộ nhớ dùng chung (shared memory) hoặc truyền thông điệp (message passing). Một mô hình lập trình song song là sử dụng một tập các kỹ thuật phần mềm để thể hiện các giải thuật song song và đưa ứng dụng vào thực hiện trong hệ thống song song. Mô hình bao gồm các ứng dụng, ngôn ngữ, bộ biên dịch, thư viện, hệ thống truyền thông và vào/ra song song.

Trong thực tế, chưa có một máy tính song song nào cũng như cách phân chia công việc cho các bộ xử lý nào có thể áp dụng có hiệu quả cho mọi bài toán. Do đó, người lập trình phải lưa chọn chính xác mô hình lập trình song song hoặc pha trộn các mô hình đó để phát triển các ứng dụng song song trên một hệ thống riêng biệt. Hiện nay có rất nhiều mô hình lập trình song song: Đa luồng (Threads), Truyền thông điệp (Message Passing), Song song dữ liệu (Data Parallel), Lai (Hybird) [11]. Mô hình đa luồng Trong mô hình đa luồng (Threads), một luồng có thể có rất nhiều luồng xử lý.

Ví dụ, một chương trình chính a.out được đưa vào hệ thống để chạy. Nó sẽ thực hiện một vài công việc tuần tự rồi tạo ra một số luồng con. Mỗi luồng có dữ liệu cục bộ riêng của mình nhưng cũng có thể truy cập đến các tài nguyên chung của chương trình a. Mỗi luồng có thể được coi là một chương trình con của chương trình chính và có thể được thực hiện song song với các luồng khác.

TIEU LUAN MOI download : skknchat@gmail.

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