1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng tính toán song song màu hóa ảnh

88 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 88
Dung lượng 2,96 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ứng dụng tính toán song song màu hóa ảnh Ứng dụng tính toán song song màu hóa ảnh Ứng dụng tính toán song song màu hóa ảnh luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp

Trang 1

MỤC LỤC

MỤC LỤC 1

Tóm tắt luận văn 1

Lời cảm ơn 2

Lời cam đoan 3

Danh mục các ký hiệu, chữ viết tắt 4

Danh mục các bảng biểu 5

Danh mục các hình vẽ, đồ thị 6

PHẦN MỞ ĐẦU 8

1 Lý do chọn đề tài 8

2 Ý nghĩa, mục đích của đề tài 8

3 Đối tượng và phạm vi nghiên cứu 9

3.1 Đối tượng nghiên cứu 9

3.2 Phạm vi nghiên cứu 9

4 Phương pháp nghiên cứu 9

5 Phương tiện nghiên cứu 10

6 Ý nghĩa khoa học và thực tiễn của đề tài 10

7 Những vấn đề sẽ giải quyết 10

8 Kết quả đạt được 10

9 Bố cục của luận văn 11

NỘI DUNG 12

CHƯƠNG 1: TỔNG QUAN VỀ TÍNH TOÁN SONG SONG 12

1.1 Khái niệm "Tính toán song song" 12

1.2 Lý do phải tính toán song song? 12

Trang 2

1.4 Định luật Amdahl 17

1.5 Tính toán song song trên card đồ họa (GPU) 19

CHƯƠNG 2: TỔNG QUAN VỀ KIẾN TRÚC XỬ LÝ SONG SONG CUDA 22

2.1 Giới thiệu kiến trúc CUDA 22

2.2 Kiến trúc phần cứng 23

2.2.1 Thế hệ thứ nhất: Kiến trúc G80 24

2.2.2 Thế hệ thứ hai: Kiến trúc GT200 25

2.2.3 Thế hệ thứ ba: Kiến trúc Fermi 25

2.2.4 Thế hệ thứ tư: Kiến trúc Kepler 28

2.2.5 So sánh các kiến trúc 30

2.3 Cấu trúc logic trong lập trình CUDA 30

2.4 Cơ chế phân công công việc 32

2.5 Cấu trúc lưu trữ, truy xuất dữ liệu bộ nhớ trong lập trình CUDA 34

2.5.1 Bộ nhớ toàn cục 35

2.5.1.1 Bộ nhớ Global 35

2.5.1.2 Bộ nhớ const 38

2.5.1.3 Bộ nhớ CUDA array 39

2.5.2 Bộ nhớ cục bộ và bộ nhớ dùng chung 41

2.6 Lập trình ứng dụng CUDA mở rộng với C/C++ 44

2.6.1 Mở rộng với ngôn ngữ lập trình C 44

2.6.2 Biên dịch với NVCC (Nvidia’s CUDA Compiler) 45

2.6.3 Từ khóa phạm vi kiểu hàm và kiểu biến 46

2.6.4 Các ràng buộc 48

2.6.5 Thực hiện cấu hình 49

2.6.6 Các biến built-in và vector built-in 49

2.6.7 Hàm đồng bộ 50

Trang 3

2.6.8 Các hàm chuyển đổi kiểu 51

2.6.9 Các hàm ép kiểu 51

2.6.10 Hàm thời gian 52

2.6.11 Các hàm kết cấu 52

2.7 Các chương trình mẫu 54

2.7.1 Cách xây dựng một chương trình CUDA đơn giản bằng Visual Studio 54

2.7.2 Cộng ma trận 55

2.7.3 Sàng số nguyên tố 57

CHƯƠNG 3: ỨNG DỤNG TÍNH TOÁN SONG SONG TRÊN GPU TRONG MÀU HÓA ẢNH 59

3.1 Thuật toán màu hóa ảnh 59

3.1.1 Bài toán AX=B 64

3.1.2 Một số phương pháp giải bài toán AX=B 66

3.1.2.1 Phương pháp khử Gauss (Gaussian Elimination) 66

3.1.2.2 Phương pháp khử Gauss-Jordan (Gauss-Jordan Elimination) 68

3.2 Cài đặt thuật toán 69

3.2.1 Cài đặt thuật toán khử Gauss 69

3.2.1.1 Cài đặt thuật toán trên CPU 69

3.2.1.2 Cài đặt thuật toán trên GPU 70

3.2.2 Giới thiệu thư viện ViennaCL 71

3.2.3 Sử dụng thư viện ViennaCL để giải bài toán Ax=b và áp dụng vào thuật toán màu hóa ảnh 72

3.2.3.1 Sử dụng thư viện ViennaCL chạy GPU 72

3.2.3.2 Sử dụng thư viện CSparse chạy CPU 75

3.3 Thử nghiệm 75

3.3.1 Môi trường thử nghiệm 75

Trang 4

3.3.2.1 So sánh thời gian thực hiện thuật toán khử Gauss (Gaussian

Elimination) trên CPU và GPU 76

3.3.2.2 So sánh thời gian thực hiện trên CPU với thư viện CSparse và GPU với thư viện ViennaCL 76

3.3.3 Kết luận 79

PHỤ LỤC 80

Phụ lục 1: Code chương trình cộng ma trận 80

Phụ lục 2: Code chương trình sàng số nguyên tố 81

Phụ lục 3: Kiểm tra GPU 81

DANH MỤC TÀI LIỆU THAM KHẢO 84

Trang 5

Tóm tắt luận văn

Họ và tên học viên: Đỗ Bảo Sơn

Chuyên ngành: Công Nghệ Thông Tin

Cán bộ hướng dẫn: TS Lã Thế Vinh

Tên đề tài: Ứng dụng tính toán song song trong màu hóa ảnh

Tóm tắt: Nghiên cứu tổng quan về tính toán song song; các đặc trưng về phần cứng và phần mềm của công nghệ tính toán song song CUDA trên GPU; ngôn ngữ lập trình sử dụng trong tính toán song song CUDA; Phương pháp xây dựng bài toán song song trên GPU từ bài toán tuần tự; Phương pháp màu hóa ảnh số thực hiện trên ảnh tĩnh Xây dựng ứng dụng màu hóa ảnh dựa trên công nghệ tính toán song song

Nội dung luận văn

Chương 1: Tổng quan về tính toán song song

Tìm hiểu khái niệm, đặc điểm của tính toán song song nói chung và tính toán song song trên card đồ họa nói riêng

Chương 2: Tổng quan về kiến trúc xử lý song song CUDA

Tìm hiểu kiến trúc phần cứng CUDA

Tìm hiểu mô hình bộ nhớ CUDA

Tìm hiểu ngôn ngữ lập trình dung trong CUDA

Chương 3: Ứng dụng tính toán song song trong màu hóa ảnh

Phân tích kỹ thuật màu hóa ảnh số

Xây dựng ứng dụng tính toán song song để màu hóa ảnh số, đánh giá các kết quả đã đạt được

Trang 6

Lời đầu tiên, tôi xin bày tỏ lòng biết ơn sâu sắc nhất tới thầy giáo Lã Thế Vinh, người thầy đã trực tiếp quan tâm và tận tình hướng dẫn giúp tôi hoàn thành luận văn này

Tôi xin bày tỏ lời cảm ơn chân thành tới các thầy, cô giáo, cán bộ trong trường Đại học Bách khoa Hà Nội đã tạo điều kiện thuận lợi và nhiệt tình giúp đỡ cho tôi trong thời gian học tập tại trường

Xin chân thành cảm ơn tất cả các bạn bè, đồng nghiệp đã động viên, giúp đỡ nhiệt tình và đóng góp nhiều ý kiến quý báu để tôi hoàn thành luận văn này

Tôi xin tỏ lòng biết ơn sâu sắc tới gia đình đã nuôi nấng, luôn là chỗ dựa vững chắc cho tôi, kịp thời động viên, khích lệ, giúp đỡ tôi vượt qua những khó khăn trong cuộc sống

Do thời gian nghiên cứu có hạn, luận văn của tôi chắc hẳn không thể tránh khỏi những sơ suất, thiếu sót, tôi rất mong nhận đuợc sự đóng góp của các thầy cô giáo cùng toàn thể bạn đọc

Xin chân thành cảm ơn!

Hà Nội, tháng 9 năm 2016

Tác giả luận văn

Đỗ Bảo Sơn

Trang 7

Lời cam đoan

Tôi xin cam đoan đây là công trình nghiên cứu của bản thân, được xuất phát từ yêu cầu phát sinh trong công việc để hình thành hướng nghiên cứu Các số liệu có nguồn gốc rõ ràng tuân thủ đúng nguyên tắc và kết quả trình bày trong luận văn được thu thập trong quá trình nghiên cứu là trung thực chưa từng được ai công bố trước đây

Tôi xin cam đoan rằng mọi sự giúp đỡ cho việc thực hiện luận văn đã được cám

ơn, các thông tin trích dẫn trong luận văn này đều được chỉ rõ nguồn gốc

Hà Nội, tháng 9 năm 2016 Tác giả luận văn

Đỗ Bảo Sơn

Trang 8

Trang 4

Danh mục các ký hiệu, chữ viết tắt

ALU Bộ tính toán số học logic Arithmetic Logic Unit

API Giao diện chương trình ứng

dụng

Application Program Interface

CPU Bộ xử lý trung tâm Central Processing Unit

CTM Kiến trúc tính toán song song

của AMD

Close to Metal

CUDA Kiến trúc thiết bị thống nhất cho

tính toán của Nvidia

Compute Unified Device Architecture

DP Bộ tính toán dấu chấm động độ

chính xác kép

Double precision processor

DRAM Bộ nhớ truy cập ngẫu nhiên

động

Dynamic random access memory

Flops Đơn vị đo số thao tác dấu chấm

Floating point unit

GPGPU Tính toán đa năng trên GPU General purpose graphics

processing unit GPU Bộ xử lý đồ họa Graphics processing unit

NVCC Trình biên dịch CUDA Nvidia’s CUDA compiler

SDK Bộ phát triển phần mềm Software development kit

SFU Bộ tính toán hàm chức năng đặc

biệt

Special function unit

SIMD Đơn lệnh đa dữ liệu Single instruction multiple data

SM Bộ xử lý đa luồng Streaming multiprocessor

SMX Bộ xử lý đa luồng thế hệ mới Next Generation Streaming

Multiprocessor

SP Bộ xử lý luồng Streaming processor

TPC Cụm xử lý luồng trong CUDA Thread Processing Clusters

Trang 9

Danh mục các bảng biểu

Bảng 2.1 So sánh các thể hệ kiến trúc phần cứng 30 Bảng 2.2 So sánh thời gian sàng số nguyên tố 58

Bảng 3.1 Bảng kết quả thử nghiệm thuật toán khử Gauss trên CPU Intel(R) Core(TM)

i5 1.7GHz và GPU Nvidia GeForce GT 820M 76 Bảng 3.2 Bảng kết quả thử nghiệm trên CPU với thư viện CSparse và GPU với thư viện ViennaCL 79

Trang 10

Trang 6

Danh mục các hình vẽ, đồ thị

Hình 1.1 Tính toán song song 12

Hình 1.2 Biểu đồ định luật Moore (1971-2004) 14

Hình 1.3 Ba nhà khoa học tiên phong trong tính toán song song, từ trái sang phải là Gene Amdahl, Daniel Slotnick, John Cocke 15

Hình 1.4 Máy tính ILLIAC IV 17

Hình 1.5.Tối ưu hóa từng thành phần khác nhau 18

Hình 1.6 Biểu diễn định luật Amdahl 19

Hình 1.7 So sánh số lượng core giữa CPU và GPU 19

Hình 1.8 Siêu máy tính Tianhe-2 20

Hình 1.9 GPU Tesla Kepler K20X 21

Hình 2.1 Sơ đồ kiến trúc phần mềm CUDA 22

Hình 2.2 Các thao tác thu hồi và cấp phát bộ nhớ 23

Hình 2.3 Vùng nhớ dùng chung trên GPU 23

Hình 2.4 Kiến trúc phần cứng G80 24

Hình 2.5 Kiến trúc phần cứng GT200 25

Hình 2.6 Kiến trúc phần cứng Fermi 26

Hình 2.7 Cấu tạo phần cứng của một SM thuộc thế hệ Fermi 27

Hình 2.8 Kiến trúc phần cứng Kepler 28

Hình 2.9 Cấu tạo phần cứng của 1 SMX thuộc thế hệ Kepler 29

Hình 2.10 Sơ đồ hoạt động truyền dữ liệu giữa Host và Device 31

Hình 2.11 Kiến trúc phần mềm tương ứng với kiến trúc phần cứng 33

Hình 2.12 Mô hình grid, block, thread 34

Hình 2.13 Mô hình bộ nhớ CUDA 35

Hình 2.14 Bộ nhớ shared memory 43

Hình 3.1 Mặt phẳng U-V khi Y = 0.5, nằm trong phổ màu RGB 59

Hình 3.2 (a) ảnh đầu vào, (b) ảnh được phân vùng và tô màu, (c) ảnh đầu ra 60

Hình 3.3 Tương quan giữa các điểm ảnh trên miền không gian và thời gian 61

Hình 3.4 Trên miền không gian và thời gian 62

Hình 3.5 Ma trận trọng số tương quan 62

Hình 3.6 Chuyển ma trận được tô màu thành ma trận cột 63

Hình 3.7 Ma trận phương trình AX=B 63

Trang 11

Hình 3.8 Thử nghiệm 1 76

Hình 3.9 Thử nghiệm 2 77

Hình 3.10 Thử nghiệm 3 78

Hình 3.11 Thử nghiệm 4 79

Trang 12

đã ra đời với khả năng tận dụng nhiều nguồn tài nguyên máy tính cùng đồng thời giải quyết nhiều bài toán lớn mà vẫn đảm bảo tăng hiệu năng và tiết kiệm năng lượng

Một trong những công nghệ tính toán song song mới hiện nay đó là sử dụng bộ xử

lý đồ họa (GPU) để tính toán song song GPU ban đầu được chế tạo để phục vụ chủ yếu cho các ngành công nghiệp giải trí Nhưng GPU hiện đại thì không chỉ dùng để xử

lý đồ họa mà còn có thể thực hiện được các thao tác tính toán khác ngoài đồ họa như thực hiện phép tính dấu chấm động Từ cơ sở đó, GPU có thể trở thành công cụ hữu ích phục vụ cho tính toán song song Và vào năm 2007, công nghệ CUDA (Compute Unified Device Architecture – kiến trúc thiết bị hợp nhất cho tính toán) của Nvidia ra đời đánh dấu bước ngoặt trong tính toán song song trên GPU CUDA giúp cho việc ứng dụng GPU vào tính toán song song trở nên thuận lợi hơn Đây là bộ công cụ phát triển phần mềm dựa trên ngôn ngữ lập trình C Nhờ CUDA, các nhà lập trình viên có thể điều khiển GPU, có thể xây dựng các ứng dụng tính toán song song trên GPU với lượng dữ liệu lớn, đạt hiệu năng cao trên nhiều lĩnh vực: mô phỏng các mô hình vật lý, khai thác dầu khí, khí tượng thủy văn, chuẩn đoán y khoa, di truyền học, kĩ thuật điện

tử,

Với những ý nghĩa đó, tôi đã lựa chọn đề tài luận văn : “ỨNG DỤNG TÍNH TOÁN SONG SONG TRONG MÀU HÓA ẢNH”

2 Ý nghĩa, mục đích của đề tài

Mục đích chính của đề tài là: nghiên cứu về công nghệ tính toán song song trên GPU, nghiên cứu về phương pháp màu hóa ảnh Trên cở sở đó xây dựng ứng dụng tính toán song song để màu hóa ảnh đảm bảo việc xử lý và thời gian tính toán được hiệu quả

Về mặt lý thuyết

Trang 13

- Giới thiệu tổng quan về tính toán song song

- Giới thiệu công nghệ tính toán song song CUDA trên GPU

- Trình bày một số phương pháp màu hóa ảnh số

Về mặt thực tiễn

- Thực hiện chuyển đổi một số giải thuật tuần tự xử lý trên CPU sang giải thuật tính toán song với tốc độ xử lý nhanh hơn, cài đặt và giải quyết bài toán trên thiết bị xử lý

đồ họa GPU bằng ngôn ngữ lập trình CUDA và một số thư viện hỗ trợ

3 Đối tượng và phạm vi nghiên cứu

3.1 Đối tượng nghiên cứu

Đối tượng nghiên cứu chính là:

- Công nghệ tính toán song song CUDA trên GPU

- Phương pháp xây dựng bài toán song song trên GPU

- Phương pháp màu hóa ảnh số

3.2 Phạm vi nghiên cứu

Phạm vi nghiên cứu giới hạn:

- Các đặc trưng về phần cứng và phần mềm của công nghệ CUDA

- Kỹ thuật chuyển đổi từ bài toán tuần tự trên CPU sang bài toán song song trên GPU

- Kỹ thuật màu hóa ảnh số thực hiện trên các ảnh tĩnh

4 Phương pháp nghiên cứu

Để thực hiện đề tài đã nêu ra, cần kết hợp mềm dẻo giữa hai phương pháp nghiên cứu: phương pháp nghiên cứu lý thuyết và phương pháp nghiên cứu thực nghiệm, được thực hiện theo các bước sau:

Nghiên cứu lý thuyết về tính toán song song và công nghệ tính toán song song CUDA:

- Nghiên cứu tài liệu về tính toán song song

Trang 14

- Nghiên cứu tài liệu công nghệ tính toán song song CUDA trên GPU: kiến trúc phần cứng, kiến trúc phần mềm

- Ngôn ngữ lập trình sử dụng trong tính toán song song CUDA

Nghiên cứu lý thuyết màu hóa ảnh và phương pháp màu hóa ảnh số:

- Nghiên cứu tài liệu về quá trình màu hóa ảnh số

- Các kỹ thuật màu hóa ảnh số

5 Phương tiện nghiên cứu

Trong quá trình làm luận văn tôi đã tham khảo các tài liệu từ các nguồn sau: các giáo trình, các sách tham khảo, các bài báo tạp chí về tính toán song song, các tài liệu trên mạng Internet, các luận văn thạc sĩ và các đồ án tốt nghiệp kỹ sư có liên quan, các phần trợ giúp của các phần mềm, ứng dụng có liên quan Tất cả các nguồn này đã được ghi trích dẫn trong luận văn và liệt kê đầy đủ trong phần tài liệu tham khảo

6 Ý nghĩa khoa học và thực tiễn của đề tài

Trong luận văn đã sử dụng công nghệ tính toán song song trên GPU để song song hóa quá trình màu hóa ảnh tĩnh để tăng thời gian tính toán và xử lý trên khối lượng dữ liệu lớn giúp tiết kiệm thời gian, công sức, tiền bạc

7 Những vấn đề sẽ giải quyết

Để đáp ứng các mục đích đề ra ở trên, trong luận văn này tôi tập trung giải quyết các nội dung chính sau:

- Nghiên cứu chi tiết về công nghệ tính toán song song CUDA trên GPU

- Nghiên cứu các kỹ thuật màu hóa ảnh số

- Đề xuất kỹ thuật song song hóa quá trình màu hóa ảnh số trên GPU

- Xây dựng được module thực hiện màu hóa ảnh dựa trên công nghệ tính toán song song trên GPU

8 Kết quả đạt được

- Xây dựng ứng dụng tính toán song song trên GPU thực hiện màu hóa ảnh số

Trang 15

9 Bố cục của luận văn

Ngoài phần mở đầu, kết luận, tài liệu tham khảo và phụ lục trong luận văn gồm

có các chương như sau:

Chương 1: Tổng quan về tính toán song song Chương này trình bày những kiến thức

cơ bản về tính toán song song và bước đầu giới thiệu tính toán song song trên GPU

Chương 2: Tổng quan về kiến trúc xử lý song song CUDA Chương này cung cấp

những kiến thức lý thuyết về kiến trúc CUDA, lập trình CUDA và một số ví dụ mẫu

Chương 3: Ứng dụng tính toán song song trên GPU trong màu hóa ảnh Chương

này tìm hiểu phương pháp màu hóa ảnh số, thử nghiệm song song hóa quá trình màu hóa ảnh số trên GPU

Trang 16

NỘI DUNG CHƯƠNG 1: TỔNG QUAN VỀ TÍNH TOÁN SONG SONG

1.1 Khái niệm "Tính toán song song"

Tính toán song song hay xử lý song song là quá trình xử lý thông tin trong đó nhiều đơn vị dữ liệu được xử lý đồng thời bởi một hay nhiều bộ xử lý để giải quyết một bài toán

 Vấn đề được chia thành các phần riêng biệt có thể giải quyết đồng thời

 Các phần được thực hiện đồng thời trên nhiều CPU

 Có cơ chế kiểm soát, điều phối quá trình tính toán

Hình 1.1 Tính toán song song

Trên hình 1.1 là mô tả cách thức tính toán song song, từ 1 bài toán chia thành 4 phần Sau đó mỗi phần, bao gồm n dòng lệnh được được thực hiện đồng thời trên mỗi CPU

1.2 Lý do phải tính toán song song?

 Tiết kiệm thời gian và tiền bạc:

Về mặt lý thuyết, trong tính toán song song khi tăng thêm nguồn lực vào một nhiệm vụ sẽ rút ngắn thời gian để hoàn thành nó với chi phí tiết kiệm Máy tính song song có thể được xây dựng từ những thành phần, linh kiện rẻ hơn Tận dụng được các nguồn tài nguyên tính toán trên mạng diện rộng

Trang 17

 Xử lý các bài toán lớn:

Có nhiều vấn đề rất lớn hoặc rất phức tạp, mà nó là không thực tế hoặc không thể giải quyết trên một máy tính duy nhất, đặc biệt là khi bộ nhớ máy tính bị hạn chế Tính toán song song (được coi là bước phát triển cao nhất của tính toán) hoàn toàn có thể giải quyết được những vấn đề này

Ví dụ:

- Mô hình hóa và mô phỏng diễn biến của một hiện tượng tự nhiên và trong nhiều

lĩnh vực khoa học kĩ thuật như vật lý, hóa học, sinh học, …

- Dự báo thời tiết, động đất, sóng thần

- Các bài toán thiên văn học vũ trụ, tính toán quỹ đạo, sự chuyển động của các

hành tinh

- Điều khiển tên lửa

- Công cụ tìm kiếm web, dịch vụ kinh doanh dựa trên web, xử lý đồng thời hàng

triệu yêu cầu trong một giây trên Internet

- Đồ họa và các môi trường ảo trong ngành công nghiệp giải trí

- Vấn đề xử lý ngôn ngữ tự nhiên, trí tuệ nhân tạo, di truyền học

- Các vấn đề toán học: như tìm số pi, …

- …

 Khả năng cung ứng đồng thời:

Một nguồn lực tính toán chỉ có thể làm một việc tại một thời điểm Nhiều nguồn tài nguyên tính toán có thể làm nhiều việc cùng một lúc

 Tận dụng được các nguồn tài nguyên phân tán:

Sử dụng được các nguồn tài nguyên tính toán trên mạng diện rộng hay qua Internet trong khi nguồn tài nguyên cục bộ ít hoặc không đáp ứng được nhu cầu

 Giới hạn của tính toán tuần tự

Về lý thuyết: tốc độ tính toán của CPU là hữu hạn vì phải chịu nhiều giới hạn về

Trang 18

.thước bóng bán dẫn không thể nhỏ hơn nguyên tử), vấn đề làm nguội khi công suất của chip tăng lên

Định luật Moore [13] được xây dựng bởi Gordon Moore - một trong những sáng lập viên của tập đoàn sản xuất chip máy tính nổi tiếng Intel Định luật được phát biểu như sau:

“Mật độ transistor sẽ tăng lên gấp đôi sau 18 tháng”

Tuy nhiên, trong thời gian gần đây định luật Moore đã có nhiều biểu hiện bị thay đổi và kéo dài dần thời gian tăng đôi số transistor trên một đơn vị diện tích Tại thời điểm năm 2007, khoảng thời gian để tăng đôi số transistor là xấp xỉ 60 tháng Trong tương lai không xa khi mà các áp dụng kỹ thuật đã không thể rút nhỏ kích cở của một transistor xuống hơn được (cụ thể là khi kiến trúc của transistor đã được rút xuống đến mức độ phân tử) thì định luật Moore sẽ không còn đúng nữa

Hình 1.2 Biểu đồ định luật Moore (1971-2004)

Mở rộng tần số là nguyên nhân chủ yếu trong việc làm tăng tốc độ khả năng xử lý của máy tính Thời gian chạy của một chương trình được tính bằng số câu lệnh nhân với thời gian trung bình của một câu lệnh Như vậy nếu duy trì tất cả những thứ khác

ổn định, gia tăng tần số xung nhịp sẽ làm giảm thời gian trung bình để thực thi một câu

Trang 19

.lệnh Như vậy tần số tăng sẽ giảm đi thời gian chạy của những chương trình giới hạn tính toán [13]

Tuy nhiên, mức tiêu hao năng lượng của một con chip được tính bởi công thức

P = C × V2 × F (1.1) trong đó P là năng lượng, C là capacitance (điện dung) được chuyển mỗi chu kỳ xung nhịp (tỷ lệ thuận với số lượng bán dẫn có đầu vào thay đổi), V là voltage (điện áp), và

F là tần số của bộ xử lý (số chu kỳ mối giây) Như vậy tăng tần số cũng làm năng lượng sử dụng của bộ xử lý tăng theo, việc làm mát chip cũng trở nên khó khăn hơn và kích thước quạt gió cũng phải tăng theo Việc tăng tiêu hao năng lượng này đã dẫn đến quyết định ngừng phát triển bộ xử lý Tejas and Jayhawk của Intel tháng 5 năm 2004, được cho là sự chấm dứt của nỗ lực tăng tần số hệ thống máy tính [13]

1.3 Lịch sử của tính toán song song

Vào tháng Tư năm 1958, S Gill (Ferranti) thảo luận về lập trình song song và nhu cầu phân nhánh và chờ đợi Cũng trong năm 1958, hai nhà nghiên cứu của IBM John Cocke và Daniel Slotnick lần đầu tiên thảo luận về việc sử dụng song song trong các tính toán số học Tập đoàn Burroughs đã giới thiệu D825 năm 1962, một máy tính bốn

bộ xử lý có thể truy cập lên đến 16 module bộ nhớ thông qua một bộ chuyển mạch thanh ngang Năm 1967, Amdahl và Slotnick công bố một cuộc tranh luận về tính khả thi của xử lý song song tại của Hội nghị xử lý thông tin xã hội Liên bang Mỹ Từ cuộc tranh luận này mà định luật Amdahl đã được đặt ra để xác định giới hạn sự tăng tốc do song song [13]

Hình 1.3 Ba nhà khoa học tiên phong trong tính toán song song, từ trái sang phải là

Trang 20

.Năm 1969, công ty của Mỹ Honeywell giới thiệu hệ thống Multics đầu tiên của mình, một hệ thống đa xử lý đối xứng có khả năng chạy đến tám bộ xử lý song song C.mmp, một dự án bộ đa xử lý ở Đại học Carnegie Mellon những năm 1970, là "một trong những bộ đa xử lý đầu tiên với hơn một vài bộ vi xử lý"

Nói về những mô hình tính toán song song đầu tiên, ta có thể kể đến Daniel Slotnick - Đại học Illinois – người đã thiết kế hai mẫu máy tính song song từ rất sớm:

- Máy Solomon chế tạo tại công ty Westinghouse Electric vào đầu những năm 60

- Máy ILLIAC IV lắp đặt tại tổ hợp Buroughs vào đầu những năm 70

Năm 1964, Slotnick đã đề xuất xây dựng một máy tính song song hàng loạt cho Phòng thí nghiệm quốc gia Lawrence Livermore Thiết kế của ông được tài trợ bởi Không quân Hoa Kỳ, đây là nỗ lực tính toán song song SIMD đầu tiên, ILLIAC IV Chìa khóa cho việc thiết kế của nó là một song song khá cao, lên đến 256 bộ xử lý, cho phép máy làm việc trên bộ dữ liệu lớn mà sau này được biết đến như là xử lý liên hợp Tuy nhiên, ILLIAC IV được gọi là "nổi tiếng nhất trong các siêu máy tính", vì dự án chỉ hoàn thành được một phần tư, nhưng tốn 11 năm và chi phí gấp gần bốn lần so với ước tính ban đầu Khi nó cuối cùng cũng có thể chạy ứng dụng đầu tiên vào năm 1976,

nó đã hoàn toàn thua kém so với những siêu máy tính thương mại lúc đó như Cray-1 [13]

Trang 21

Hình 1.4 Máy tính ILLIAC IV

Tại đại học Carnegier – Mellon, hai kiểu máy tính song song C.mmp và Cm+ cũng

đã được chế tạo vào đầu những năm 70 Vào đầu thập kỷ 80, các nhà nghiên cứu của

tổ hợp Caltech đã xây dựng Cosmic Cube, hình mẫu nguyên thủy cho các loại máy song song sau này của Intel, Ametek

Tuy nhiên phải đến giữa những năm 80, máy tính song song dựa trên các bộ vi xử

lý (microprocessor) mới trở thành hiện thực Có được điều đó là nhờ tốc độ phát triển của công nghệ chế tạo bộ vi xử lý đã phát triển vượt bậc, đạt tới 35% mỗi năm, trong khi tốc độ phát triển của các siêu máy tính truyền thống chỉ là 20%

Tháng 6/1993, các giáo sư Hans Meuer (Đại học Mannheim – Đức), Jack Dongarra (Đại học Tennessee – Hoa Kỳ) cùng Eric Strohmaier và Horst Simon (Phòng thí nghiệm quốc gia Lawrence Berkeley – Hoa Kỳ) đã thiết lập bảng xếp hạng các siêu máy tính hàng đầu thế giới Top 500 Supercomputer (top500.org) Top500 thống kê danh sách các siêu máy tính trên thế giới vào tháng 6 và tháng 11 hàng năm Bảng xếp hạng này cung cấp 1 cái nhìn đầy đủ về các siêu máy tính hiện đại nhất trên thế giới, bao gồm các thông số về khả năng tính toán của các hệ thống (Rmax, Rpeak) được đo bởi hệ thống LINPACK và thông tin thời sự xung quanh chủ đề “Các máy tính và kiến trúc song song”

Trang 22

.Speedup (hệ số tăng tốc): speedup của thuật toán song song là tỷ số giữa thời gian thực hiện trong tình huống xấu nhất của thuật toán tuần tự tốt nhất và thời gian thực hiện cũng công việc đó của thuật toán song song Trong trường hợp thông thường, có thể hình dung một cách tương đối như sau:

Hình 1.5.Tối ưu hóa từng thành phần khác nhau

Giả sử một công việc có hai bộ phận độc lập, A và B Phần B chiếm khoảng 25% thời gian của toàn bộ tính toán, nếu ta làm cho phần việc này nhanh gấp 5 lần thì điều này chỉ làm giảm thời gian của toàn bộ tính toán đi một chút Ngược lại, nếu ta làm cho phần A nhanh gấp hai lần thì sẽ làm cho tính toán nhanh hơn bằng cách tối ưu phần B, mặc dù B có tốc độ tăng lớn hơn (5× với 2×) [13]

Một chương trình giải quyết một vấn đề khoa học/ công nghệ thường bao gồm một

bộ phận song song và phần còn lại không song song (tuần tự) Khi đó phần không thể được song song của chương trình, dù nó nhỏ đến đâu đi nữa, cũng sẽ hạn chế khả năng tăng tốc tổng thể của việc song song hóa Năm 1967 Gene Amdahl đã phát biểu định

lý sau đây:

Định luật Amdahl:

Gọi f là tỷ lệ thao tác tuần tự trên tổng số thao tác phải làm, trong đó 0  f  1 Tốc độ tối đa S của một máy tính song song với p bộ xử lý luôn nhỏ hơn

Hệ quả : Ngưỡng cực đại của S là 1/f

thời gian thực hiện trên máy tính tuần tự

thời gian thực hiện trên máy tính song

song

p f f

S

/ ) 1

Trang 23

.Chẳng hạn, giả sử phần tuần tự của một chương trình là 10% thời gian chạy, khi

đó hệ số tăng tốc (speedup) sẽ không thể đạt được quá 10 lần, bất kể ta huy động bao nhiêu bộ xử lý đi nữa Điều này đặt ra một giới hạn về tính hữu ích của việc thêm các đơn vị thực hiện song song với nhau nhiều hơn

Hình 1.6 Biểu diễn định luật Amdahl

1.5 Tính toán song song trên card đồ họa (GPU)

Hình 1.7 So sánh số lượng core giữa CPU và GPU

Trang 24

.Hiện nay, số lượng nhân tính toán trong CPU chỉ ở mức 4, 8 hay 16 nhân trên 1 chip Để tính toán song song đạt hiệu năng cao cần có một hệ thống gồm nhiều chip, nhiều nhân tính toán Điều này dẫn tới phải giải quyết vấn đề về chi phí, cách thức điều khiển, truyền thông giữa các chip Nhưng với công nghệ GPU hiện đại, ta có thể tính hợp hàng trăm, thậm chí hàng nghìn nhân chỉ phục vụ cho mục đích tính toán trên cùng 1 chip, giúp giảm chi phí sản xuất, việc điều khiển, truyền thông trong 1 chip thuận lợi hơn so với nhiều chip

Dựa trên cấu trúc phần cứng, tính toán đa năng trên các đơn vị xử lý đồ họa (GPGPU) đã ra đời Đây là một xu hướng khá phổ biến gần đây trong nghiên cứu kỹ thuật máy tính GPUs là các bộ xử lý động bộ được tối ưu hóa mạnh cho việc xử lý đồ họa máy tính Xử lý đồ họa máy tính là một lĩnh vực bị chi phối bởi các thao tác dữ liệu song song – đặc biệt là các thao tác ma trận đại số tuyến tính

Trong những ngày đầu, các chương trình GPGPU sử dụng đồ họa thông thường APIs để chạy Tuy nhiên, một số ngôn ngữ và nền tảng lập trình mới đã được xây dựng để thực hiện tính toán đa năng trên GPU với cả Nvidia và AMD, tạo ra môi trường lập trình với CUDA và CTM tương ứng Các ngôn ngữ lập trình GPU khác là BrookGPU, PeakStream và RapidMind [13]

Hình 1.8 Siêu máy tính Tianhe-2

Trong danh sách Top 500 Supercomputer (top500.org) được công bố tháng 11/2015, có đến 104/500 hệ thống có sử dụng GPU tính toán hiệu năng cao, tính riêng top 10 có 5 hệ thống có tích hợp thêm GPU Tiêu biểu là siêu máy tính Tienhe-2 (hình 1.8) đặt tại trung tâm siêu máy tính quốc gia Quảng Châu – Trung Quốc đang chiếm lĩnh vị trí số 1 Tienhe-2 có khả năng tính toán cao nhất theo lý thuyết là 54,902

Trang 25

.TeraFlop/s và trên thực tế là 33,862 TeraFlop/s (nghĩa là có hệ thống có thể thực hiện được 33.862 triệu tỷ phép tính trong một giây) Điều đặc biệt ở siêu máy tính Tienhe-2

đó là sức mạnh của nó được tạo nên bởi 32,000 CPU Xeon và 48,000 GPU Xeon Phi (hình 1.9)

Hình 1.9 GPU Xeon Phi

Đứng thứ hai trong top 10 tính đến thời điểm 11/2015 cũng là một siêu máy tính

có trang bị GPU để xử lý song song là Titan của Hoa Kỳ Siêu máy tính đặt tại phòng thí nghiệm quốc gia Hoa Kỳ - Oak Ridge thuộc tiểu bang Tennessee này gồm 18,688 CPU và 18,688 GPU Nvidia Tesla Kepler K20X có khả năng tính toán lên đến 17,590 TeraFlop/s

Tesla Kepler K20X là một đại diện tiêu biểu cho dòng GPU Tesla chuyên về tính toán hiệu năng cao, của Nvidia – nhãn hiệu sản xuất GPU phổ biến thế giới K20X được trang bị 2496 nhân, khả năng tính toán là 1.31 TFlop/s cùng với bộ nhớ 6 GB Ngoài ra còn có thể kể đến dòng GPU tính toán hiệu năng cao AMD FireStream của AMD Trong đó, đại diện tiêu biểu là Radeon HD5870 với khả năng tính toán 544

GFlop/s

Trang 26

CHƯƠNG 2: TỔNG QUAN VỀ KIẾN TRÚC XỬ LÝ SONG SONG CUDA

2.1 Giới thiệu kiến trúc CUDA

CUDA là từ viết tắt 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 xuất hiện 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 Bây giờ 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òng Tesla cho tính toán hiệu năng cao

Bộ phần mềm CUDA có các lớp mô tả trong Error! Reference source not found.gồm: Bộ điều khiển (dirver) cho phần cứng, API lập trình, môi trường thực thi

và hai thư viện toán học mức cao hơn của các hàm thường dùng: CUFFT và CUBLAS Phần cứng được thiết kế để hỗ trợ bộ điều khiển hạng nhẹ và lớp môi trường thực thi

Từ đó cho tốc độ cao

Hình 2.1 Sơ đồ kiến trúc phần mềm CUDA

Thư viện lập trình CUDA bao gồm các hàm mở rộng của ngôn ngữ C CUDA

cung cấp cách đánh địa chỉ DRAM thường dùng như mô tả trong Error! Reference source not found.cho việc lập trình linh hoạt hơn, bao gồm cả thao tác cấp phát và thu

hồi bộ nhớ Từ góc độ lập trình, điều đó tương ứng với khả năng đọc và ghi dữ liệu tại bất kỳ địa chỉ nào trong DRAM, giống như CPU

Trang 27

Hình 2.2 Các thao tác thu hồi và cấp phát bộ nhớ

CUDA có đặc tính lưu dữ liệu đệm song song, bộ nhớ chia sẽ trên bộ vi xử lý 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 Như mô

tả trong Error! Reference source not found., ứng dụng có thể đạt kết quả tốt bằng

cách tối thiểu việc lấy/trả dữ liệu từ DRAM Từ đó giảm phụ thuộc băng thông truyền

bộ nhớ DRAM

Hình 2.3 Vùng nhớ dùng chung trên GPU

Trang 28

.Hiện nay, NVIDIA đã phát triển được 4 thế hệ kiến trúc phần cứng tính toán cho CUDA Các kiến trúc đó là:

Card đồ họa CUDA GPGPU có các bộ xử lí 32-bit (thread processors, streaming

processor core, hay scalar processor- SP) – đơn vị xử lí nhỏ nhất

Ở thế hệ 1 chưa có bộ xử lí kép Từ thế hệ 2 trở đi mới có thêm có thêm bộ xử lí tính toán dấu chấm động độ chính xác kép (64-bit) double precision processor (DP) Trong kiến trúc G80, cứ mỗi 8 SP, cùng với các đơn vị phần cứng khác (1 I-cache,

1 MT-issue, 1 C-cache, 2 SFU, 1 shared memory) được gộp thành một nhóm, tương ứng là 1 multiprocessors (streaming multiprocessor – SM) Cứ mỗi 2 SM (hoặc nhiều hơn tuỳ vào kiến trúc), cùng với các đơn vị phần cứng khác (1 Texture unit, 1 Geometry controller (aka TPC controller), 1 SMC), tạo thành 1 group, tương ứng là 1

Thread Processing Clusters (TPC)

Hình 2.4 Kiến trúc phần cứng G80

Trang 29

so với G80

Hình 2.5 Kiến trúc phần cứng GT200

2.2.3 Thế hệ thứ ba: Kiến trúc Fermi

Trang 30

Hình 2.6 Kiến trúc phần cứng Fermi

Kiến trúc GPU Tesla thế hệ 3 (Hình 2.1) có những đặc điểm sau:

 Streaming processors (CUDA cores): số lượng là 448 hoặc 512

 Double precision processors (DP): số lượng là 224 hoặc 256 (bằng một nửa SP)

 Streaming multiprocessors (SM) : số lượng là 14 hoặc 16, mỗi SM bao gồm 32 CUDA cores, GigaThread: phân phối các blocks cho các SM và quản lý chuyển mạch thiết bị giữa các thread trong quá trình thực hiện

 Host Interface: có nhiệm vụ kết nối GPU với CPU thông qua giao tiếp Express v2 bus (tối độ truyền tối đa là 8GB/s)

PCI- DRAM: hỗ trợ tối đa 6 GB bộ nhớ GDDR5 DRAM với băng thông tối đa là

192 GB/s

 Hiệu năng tối đa: 1,5 TFlop/s

 Có 64 KB constant cache (lưu trữ các giá trị hằng số) và instruction cache (lưu các lệnh của kernel)

 L2 Cache: 768 KB dùng chung cho toàn bộ SM Nó có nhiệm vụ tải, lưu trữ từ

bộ nhớ toàn cục, bao gồm cả copy dữ liệu đến CPU hoặc từ CPU đi

Trang 31

Hình 2.7 Cấu tạo phần cứng của một SM thuộc thế hệ Fermi

Kiến trúc một SM của GPU Tesla thế hệ 3 (Hình 2.2) có các đặc điểm sau:

 Có 32 SP (CUDA cores), mỗi CUDA cores có một đơn vị tính toán số học logic (ALU) và đơn vị tính toán số thực dấu chấm động độ chính xác đơn (FPU)

 Có 16 DP (2 SP hợp thành 1 DP) phục vụ tính toán số thực dấu chấm động độ chính xác kép

 16 đơn vị load/store: tải và lưu trữ dữ liệu từ cache, DRAM hoặc đến cache, DRAM

 4 SFU (Special Function Unit): là hàm tính toán chức năng đặc biệt, có khả năng tính toán nhanh hơn SP, DP nhưng độ chính xác thì thấp hơn

 32768 thanh ghi (registers) 32 bit: mỗi thread có quyền truy cập đến tối đa 63 thanh ghi của thread đó Các thanh ghi có băng thông rất cao lên đến 8000 GB/s

 64KB L1 cache/Shared memory: L1 cache dùng để lưu trữ dữ liệu cho mỗi thread trong khi shared memory lữu trữ dữ liệu được chia sẻ cho một vài thread

Có thể có 48 KB L1 cache + 16 KB shared memory hoặc 16KB L1 cache + 48

KB shared memory Bộ nhớ chia sẻ (shared memory) cho phép một vài thread trong cùng block cùng truy cập đến nó Bộ nhớ này cung cấp truy cập với độ trễ

Trang 32

bộ nhớ Số lượng thanh ghi và bộ nhớ chia sẻ trên mỗi SMX cũng được mở rộng hơn Phần cứng được thiết kế để hỗ trợ các mô hình lập trình mới

Trang 33

Hình 2.9 Cấu tạo phần cứng của 1 SMX thuộc thế hệ Kepler

Hình là kiến trúc SM mới được gọi là SMX, trong đó bao gồm:

 Có 192 SP (CUDA cores), mỗi CUDA cores giống như ở kiến trúc Fermi

 Có 64 DP

 32 bộ load/store

 32 SFU

 65536 thanh ghi (registers) 32 bit với GK110 và 131072 thanh ghi với GK210

 64KB L1 cache/Shared memory với GK110 và 128KB với GK210

 4 warp scheduler và 8 dispatch unit

Trang 34

L1 Cache (1 SM) None None 16, 48 KB 16, 32, 48 KB

L2 Cache None None 768 KB 1536 KB

Load/Store Address Width 32-bit 32-bit 64-bit 64-bit

Bảng 2.1 So sánh các thể hệ kiến trúc phần cứng

2.3 Cấu trúc logic trong lập trình CUDA

Trong kiến trúc CUDA, CPU được xem là host, GPU được xem là device Có thể

có nhiều hosts và nhiều devices trên một máy tính Cả hai đều có bộ nhớ riêng với tên gọi tương ứng là host memory và device memory, không có bộ nhớ dùng chung Vì thế khi thực hiện tính toán, cần copy qua dữ liệu qua lại giữa CPU và GPU Ở mẫu lệnh cơ bản việc copy dữ liệu chỉ được diễn ra khi không có đoạn code nào đang chạy trên GPU, tuy nhiên với kiến trúc CUDA kiểu mới cho phép copy dữ liệu và thực hiện lệnh trên GPU diễn ra đồng thời

Trang 35

Hình 2.10 Sơ đồ hoạt động truyền dữ liệu giữa Host và Device

Điểm cốt lõi đặc biệt quan trọng trong lập trình với kiến trúc CUDA là hiểu và xử

lí tốt thread Thuật ngữ thread trong CUDA được hiểu là phần tử cơ bản của dữ liệu

được xử lí song song

Các nhà phát triển kiến trúc CUDA đã cung cấp cho lập trình viên phát triển một

số phần mềm cho phép kiểm tra việc copy và thực hiện tính toán trong GPU Kết quả kiểm thử cho thấy copy từ GPU sang CPU nhanh hơn so với CPU sang GPU GPU phù hợp để thực thi 1 tác vụ gọi nhiều lần, mỗi lần áp dụng trên các dữ liệu đầu vào

khác nhau Đoạn code cho tác vụ như vậy khi thực thi trên GPU được gọi là kernel Như vậy, kernel được hiểu là 1 đoạn mã do người lập trình viết ra chỉ để thực hiện

tính toán trên thiết bị hay còn gọi là GPU

Khi có lệnh gọi kernel từ chương trình chính được CPU quản lí, chương trình sẽ kiểm tra thông qua 1 cú pháp gọi kernel được qui định sẵn trong trình biên dịch của CUDA xem có bao nhiêu threads chạy song song trong kernel đó

Điểm hạn chế cho tới thế hệ 2 của Tesla là tại mỗi thời điểm trên mỗi GPU chỉ có

1 kernel được thực thi tuy nhiên số lượng threads trong kernel đó là rất lớn Để dễ

quản lí một số lượng lớn threads như vậy, cũng đồng thời giúp ánh xạ (mapping) dễ

dàng từ dữ liệu sang các threads, kiến trúc blocks và grids được sử dụng Threads,

blocks, grids được gọi là hệ thống phân cấp logic các luồng của CUDA theo thứ tự từ cấp thấp đến cao Khi gọi 1 kernel thực thi, ta phải qui định tường minh số chiều của

block và của grid

 Để dễ quản lí, phân chia dữ liệu, các thread được gộp thành từng nhóm gọi là

blocks theo kích thước 1-, 2- hoặc 3- chiều, và số lượng tối đa threads trong

Trang 36

.trọng trong việc lập trình CUDA bởi lẽ nếu cấp phát >512 threads trên 1 block thì kernel sẽ thực hiện sai ý đồ của người lập trình

Ví dụ: một 3D block thì chỉ có thể có kích thước tối đa là 8x8x8

Để tăng số lượng threads song song có thể thực hiện cho 1 kernel, các blocks có thể gộp thành 1 grid của các blocks với cách sắp xếp có thể theo dạng 1 chiều, 2

chiều với kích thước tối đa của grid ≤ 232 blocks/grid Như vậy, tối đa, ta có thể

có 232 * 29 = 241 threads tổng cộng chạy song song trong 1 kernel

Các threads của GPU là light-weight Mỗi threads đều có bộ nhớ chứa dữ liệu của

riêng nó (bao gồm thanh ghi – register – và local memory)

Các threads trong cùng 1 block có thể chia sẽ dữ liệu qua shared memory, nhưng điều này không thể xảy ra với hai threads ở hai blocks khác nhau Muốn làm được

điều này ta cần lưu trữ dữ liệu ở device memory – global memory)

Tốc độ truy xuất đến dữ liệu trong shared memory là cực kì nhanh Dữ liệu của

threads lưu ở shared memory sẽ mất khi thread kết thúc Nếu với dữ liệu quá lớn ( >

16KB), nó sẽ tự động được lưu trữ ở device memory - chính là DRAM (kích thước có thể đến 4GB, hoặc thậm chí 6GB với Tesla M2070)

Dữ liệu lưu ở device memory sẽ tồn tại trong suốt thời gian chương trình hoạt

động (hoặc khi mà nó bị giải phóng) Vì thế, dữ liệu lưu ở device memory có thể được truy xuất từ mọi thread trong mọi kernel Đồng thời, dữ liệu ở device memory của

chương trình đang chạy sẽ là nơi trao đổi qua lại với host memory để rồi cuối cùng trả lại cho chương trình chính

2.4 Cơ chế phân công công việc

Trang 37

Hình 2.11 Kiến trúc phần mềm tương ứng với kiến trúc phần cứng

Hệ thống phân cấp logic các luồng của CUDA được ánh xạ tới hệ thống phân cấp của bộ vi xử lý trên GPU như hình 2.3 Một GPU sẽ thực thi một hoặc nhiều grid Một

SM sẽ thực thi một hoặc nhiều blocks Một CUDA cores và các đơn vị khác trong SM

sẽ thực thi một hoặc nhiều threads

Mỗi SM sẽ thực thi một tập hợp gồm 32 threads gọi là warp Như vậy 32 là kích thước tối thiểu để xử lí song song bởi 1 SM theo kiểu SIMD

Để thuận lợi, thay vì tương tác trực tiếp với các warp, CUDA đưa ra khái niệm block Ở thế hệ 3 (kiến trúc Fermi), một block có tối đa là 1024 thread và kích thước lớn nhất của block 3 chiều là 1024 x 1024 x 64 Số lượng thread trong mỗi block nên

là bội của 32

Tiếp đến, việc nhóm các blocks vào trong 1 grid cho phép gọi và thực thi hàng ngàn threads chỉ bằng 1 lệnh gọi đơn, và không cần quan tâm đến tài nguyên của phần cứng Trong GPU Tesla thế hệ 3, kích thước lớn nhất của grid 3 chiều là 65535 x

65535 x 65535

Trang 38

Hình 2.12 Mô hình grid, block, thread

Các threads thuộc cùng 1 warp thì bắt đầu cùng lúc, cùng thực hiện một lệnh, tuy nhiên chúng có thể hoạt động độc lập, rẽ nhánh (branching) có thể xảy ra Nếu branching xảy ra, ví dụ theo 2 hướng A và B, thì một số threads sẽ thực hiện A trước,

và các threads còn lại thực hiện B sẽ đợi cho tới khi A xong sẽ thực hiện Chính vì thế, chúng có thể được đồng bộ với nhau [14]

Ví dụ: để đảm bảo là mọi threads đều đã đọc xong dữ liệu của nó trước khi cho

phép mỗi thread thực hiện tiếp tác vụ, hay là các threads cần phải kết thúc trước khi trở lại chương trình gọi

2.5 Cấu trúc lưu trữ, truy xuất dữ liệu bộ nhớ trong lập trình CUDA

Vì tốc độ chậm trong truy xuất bộ nhớ là nguyên nhân chủ yếu gây ra hiện tượng nghẽn cổ chai (bottleneck) trong các chương trình song song Tesla tạo ra nhiều lớp (layer) bộ nhớ khác nhau với tốc độ truy cập khác nhau phù hợp cho các nhu cầu cụ thể Quyền truy cập đến mỗi loại bộ nhớ cũng tuỳ vào cấp độ phần cứng sử dụng Trước hết cần nắm được nguyên tắc chung khi thao tác với bộ nhớ trong lập trình CUDA Dữ liệu muốn được tính toán trên GPU thì cần phải được copy từ Host

Trang 39

.memory sang Device memory, dữ liệu sau khi tính toán xong thì phải copy trở lại Host memory (dữ liệu chỉ dùng được khi nó nằm trên host memory)

Bộ nhớ Device memory ra thành 3 loại: bộ nhớ toàn cục (global), bộ nhớ cục bộ (Local), bộ nhớ chia sẻ (Share memory)

Phân loại bộ nhớ theo cấp độ truy cập

- Bộ nhớ toàn cục(Global) mọi thread trên GPU có thể truy cập, bao gồm:

Trang 40

.Dung lượng bộ nhớ này chính là thông số dung lượng “total memory” nhà sản xuất ghi trên GPU

Ví dụ: Card geforce 8800 GT có 256MB global memory

Card geforce 8800 GTS có 512 MB

Cách thức khai báo và sử dụng bộ nhớ Global:

 Trước tiên cần phải khai báo một vùng nhờ trên device memory

Dùng hàm cuda malloc

//ví dụ tạo 1 mảng số integer chứa 200 phần tử trên global memory

int *d_Data = NULL;

 Câu lệnh trên copy dữ liệu từ bộ nhớ host sang bộ nhớ device

 Kiểu của dữ liệu được chuyển đổi có kích thước sizeof(int)*200

 Tính toán trên thiết bị xong thì trả lại dữ liệu cho Host

cudaMemcpy(h_Array, d_Array, sizeof(int) * 200,

cudaMemcpyDeviceToHost);

Giải thích ý nghĩa :

 Câu lệnh trên copy dữ liệu từ bộ nhớ device sang bộ nhớ host

 Kiểu của dữ liệu được chuyển đổi có kích thước sizeof(int) * 200

Tầm vực và thời gian tồn tại của các biến khai báo trong bộ nhớ toàn cục:

- Tầm vực của biến: Các biến là public đối với mọi thread trên GPU

- Thời gian tồn tại: Thời gian tồn tại của các biến khai báo trong vùng nhớ này là lâu và tồn tại đến khi chương trình chấm dứt

Cách thức truy xuất bộ nhớ

Ngày đăng: 13/02/2021, 18:30

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[8] NVIDIA Corporation (2009), NVIDIA’s Next Generation CUDA TM Compute Architecture: Fermi TM - v1.1 Sách, tạp chí
Tiêu đề: NVIDIA’s Next Generation CUDA"TM" Compute Architecture: Fermi"TM
Tác giả: NVIDIA Corporation
Năm: 2009
[10] Sanders Jason, Kandrot Edward (2010), CUDA by Example: An introduction to general-purpose GPU programming, NVIDIA Corporation Sách, tạp chí
Tiêu đề: CUDA by Example: An introduction to general-purpose GPU programming
Tác giả: Sanders Jason, Kandrot Edward
Năm: 2010
[3] Anat Levin, Dani Lischinski and Yair Weiss, Colorization using Optimization Khác
[5] NVIDIA Corporation (2015), CUDA Runtime API v7.5 Khác
[6] NVIDIA Corporation (2015), NVIDIA C Best Practices Guide v7.5 Khác
[7] NVIDIA Corporation (2015), NVIDIA CUDA C Programming Guide v7.5 Khác
[9] NVIDIA Corporation (2016), nvidia-smi 364.00 Khác

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w