Kiến trúc hệ thống tính toán không đồng nhất CPU-GPU

Một phần của tài liệu Giải pháp thiết kế và đánh giá hiệu năng siêu máy tính sử dụng CPU GPU (Trang 51)

3.3.1. Kiến trúc tính toán CPU-GPU riêng biệt

Hệ thống máy tính cũ (những năm 1990)

Hình 22 là sơ đồ khối tầng cao một máy tính thông thƣờng vào những năm 1990. Cầu phía bắc (North Bridge) chứa các giao diện tốc độ cao kết nối CPU, bộ nhớ và đƣờng bus PCI. Cầu phía nam (South Bridge) bao gồm các giao diện và thiết bị kiểu cũ: đƣờng bus ISA (âm thanh, mạng LAN), điều khiển ngắt, điều khiển DMA, bộ đếm/thời gian. Trong hệ thống này, việc hiển thị đƣợc điều khiển bởi một hệ thống con đệm khung đơn giản gọi là dãy đồ họa video (VGA – Video Graphics

Array) đƣợc gắn vào đƣờng bus PCI. Hệ thống đồ họa này với các thành phần xử lý (GPU) chƣa tồn tại trong hệ thống PC những năm 1990.

53

Hình 22: Kiến trúc máy tính những năm 1990

(a)

(b)

Hình 23: Sơ đồ khối máy tính với GPU. (a) Sơ đồ khối máy tính với CPU Intel. (b): Sơ đồ khối máy tính với CPU AMD

54

Hệ thống máy tính ngày nay

Hình 23 mô tả hai dạng máy tính CPU-GPU đƣợc sử dụng ngày nay. Chúng đều bao gồm một GPU và một CPU với các bộ nhớ tƣơng ứng. Trong hình 23(a), với một chip CPU Intel và GPU đƣợc kết nối với CPU qua kết nối PCI-Express 2.0 16 đƣờng với tốc độ truyền dữ liệu cao nhất lên tới 16GB/s (8Gb/s mỗi chiều)

Hình 23(b) là mô hình máy tính sử dụng chip CPU AMD, GPU đƣợc gắn vào bảng mạch qua kết nối PCI-Express với cùng một tốc độ. Trong cả hai kịch bản, CPU và GPU đều có thể truy cập bộ nhớ của nhau mặc dù với băng thông thấp hơn nhiều so với băng thông chúng truy cập bộ nhớ trực tiếp. Trong trƣờng hợp của AMD, cầu phía bắc hay bộ điều khiển bộ nhớ đƣợc tích hơp ngay trên CPU.

Một biến thể chi phí thấp của hệ thống trên là hệ thống bộ nhớ hợp nhất (UMA-

Unified Memory Architecture), chỉ sử dụng bộ nhớ của CPU, loại bỏ bộ nhớ của GPU ra khỏi hệ thống. Hệ thống này có hiệu năng GPU tƣơng đối thấp vì hiệu năng đạt đƣợc bị giới hạn bởi băng thông bộ nhớ của hệ thống và tăng độ trễ truy cập bộ nhớ trong khi bộ nhớ chuyên dụng của GPU có băng thông cao và độ trễ thấp.

Một biến thể khác có hiệu năng cao là hệ thống CPU-GPU sử dụng nhiều GPU, thông thƣờng là hai đến bốn GPU. Một chuẩn kết nối cho các hệ thống đa GPU là NVIDIA SLI (Scalable Link Interconect), đƣợc thiết kế cho các hệ thống chơi game và máy trạm.

Theo truyền thống thì GPU luôn đƣợc kết nối với hệ thống quả cổng PCI Express (PCIe) và một quá trình DMA – Direct Memory Access là cần thiết để truyền dữ liệu giữa bộ nhớ hệ thống của host và bộ nhớ thiết bị của GPU. Mặc dù GPU có thể thực hiện hàng tỷ phép tính dấu phẩy động một giây nhƣng liên kết PCIe chỉ có thể truyền khoảng một gigaword một giây. Do giới hạn này nên từ trƣớc đến nay, các lập trình viên các ứng dụng GPU luôn luôn phải cố gắng tái sử dụng dữ liệu trên GPU càng nhiều càng tốt để sau khi trừ bớt đi hao phí do phải

55

truyền dữ liệu trên kết nối PCIe có tốc độ chậm nhƣng tổng thể hệ thống vẫn đạt đƣợc những cải thiện về hiệu năng khi sử dụng GPU để tính toán.

Tuy nhiên, không phải việc tái sử dụng dữ liệu ở mọi ứng dụng đều khả thi do đó sẽ có những ứng dụng mà thời gian thực thi trên GPU ít hơn thời gian truyền dữ liệu cần thiết lên GPU để GPU tính toán hoặc các ứng dụng mà việc truyền dữ liệu DMA phải thực hiện nhiều lần. Khi đó, việc truyền dữ liệu qua đƣờng PCIe chính là một nút thắt cổ chai lớn nhất của hệ thống tính toán CPU-GPU.

Để giải quyết vấn đề này, cả NVIDIA, AMD và Intel đều nghiên cứu và liên tục công bố những phát minh mới. Hiện nay, trong cấu trúc GPU mới nhất của mình NVIDIA Pascal mà hãng dự định sẽ công bố vào năm 2016 sẽ triển khai công nghệ NVLink. Theo những tài liệu mà NVIDIA công bố thì NVLink là một kênh kết nối băng thông rộng và tiết kiệm năng lƣợng. Nó chỉ tiêu tốn một phần ba năng lƣợng nhƣng lại cung cấp tốc độ nhanh hơn từ 5 tới 12 lần so với đƣờng truyền PCIe Gen3x16 [29]. NVLink sẽ cải thiện việc liên lạc giữa GPU và GPU, CPU và GPU . Nếu những gì NVIDIA công bố trở thành sự thật vào năm sau thì đây sẽ là một công nghệ đóng vai trò then chốt trong việc phát triển các siêu máy tính dựa trên mô hình tính toán không đồng nhất. NVLink sẽ xóa đi ranh giới ngăn cách dữ liệu giữa CPU và GPU nối với GPU bằng liên kết tốc độ cao.Vì cả CPU và GPU đều có bộ điều khiển bộ nhớ riêng và hệ thống bộ nhớ đƣợc tối ƣu theo chiều hƣớng khác biệt nhau (nhƣ đã nói ở trên – CPU theo kiểu tối thiểu hóa độ trễ còn GPU là tối ƣu hóa băng thông) nhƣng qua công nghệ NVLink thì cả hai sẽ đƣợc “hiểu” nhƣ một hệ thống bộ nhớ duy nhất với cả hai bộ xử lý. Trong khi chờ đợi sự phổ biến của công nghệ này thì hiện tại kết nối giữa CPU và GPU của NVIDIA vẫn dựa trên kết nối PCIe

56

Hình 24: Liên kết NVLink

3.3.2. Kiến trúc tính toán CPU-GPU hợp nhất

Trong khi đó thì AMD và Intel lại đƣa ra kiến trúc hợp nhất giữa CPU và GPU lên trên cùng một bảng mạch, ví dự nhƣ AMD Fusion và Intel Knight Ferry với mong muốn sẽ gỡ bỏ đƣợc nút thắt cổ chai ở PCIe.

Hình 25 mô tả nguyên nhân xảy ra tình trạng thắt cổ chai ở kết nối PCIe với hệ thống có GPU riêng biệt. Nhƣ đã nói ở trên, CPU x86 có quyền truy cập bộ nhớ hệ thống cũng nhƣ việc khởi tạo các tác vụ tính toán trên GPU.. Mặc dù GPU có thể thực thi hàng trăm tỷ phép tính dấu phẩy động một giây nhƣng hiện tại kết nối PCIe chỉ có thể truyền tải khoảng một gigaword một giây [23]. Việc tái sử dụng dữ liệu không phải lúc nào cũng khả thi do đó sẽ có những trƣờng hợp mà thời gian thực thi tính toán trên GPU nhỏ hơn thời gian để truyền dữ liệu đến GPU hoặc có những ứng dụng mà quá trình DMA phải thực hiện nhiều lần. Đối với những ứng dụng nhƣ vậy thì việc sử dụng mô hình CPU-GPU riêng biệt không đảm bảo sẽ đem lại hiệu năng cần thiết.

57

Hình 25: Sơ đồ khối CPU GPU riêng biệt

Nhận thấy sự hạn chế trên nên AMD đã đƣa ra kiến trúc Fusion hay còn gọi là kiến trúc CPU-GPU hợp nhất. Nếu nhìn một cách tổng quát nhất thì kiến trúc Fusion là sự kết hợp bộ xử lý vô hƣớng dùng cho tính toán chung với bộ xử lý véc tơ trên cùng một bảng mạch tạo thành một bộ xử lý tính toán không đồng nhất. Kiến trúc này nhắm tới việc đƣa ra một giải pháp “tốt cả cho hai thế giới” nghĩa là những tác vụ vô hƣớng nhƣ xử lý từ, duyệt web sẽ đƣợc xử lý bởi nhân CPU x86 còn các tác vụ dạng véc tơ nhƣ xử lý dữ liệu song song thì sẽ đƣợc nhân GPU xử lý.

Hình 26 là sơ đồ khối của kiến trúc Fusion. Điểm đáng chú ý trong mô hình này là nhân CPU x86 và engine SIMD cùng nối với bộ nhớ hệ thống qua chung một đƣờng bus tốc độ cao và bộ điều khiển bộ nhớ. Nhớ vào yếu tố trên mà kiến trúc Fusion của AMD đã loại bỏ đƣợc sự phụ thuộc vào kết nối PCIe mà từ trƣớc tới giờ luôn là điểm hạn chế lớn làm giảm hiệu năng của hệ thống CPU-GPU riêng biệt. Ngoài việc tích hợp các bộ xử lý trên cùng một bo mạch, kiến trúc Fusion còn tích hợp bộ điều khiển bộ nhớ, bộ điều khiển I/O, bộ giải mã video, đầu ra hiển thị và các giao diện bus trên cùng một bo mạch.

58

Tuy nhân x86 và các engine SIMD cùng chia sẻ một đƣờng bus tới bộ nhớ hệ thống nhƣng thế hệ đầu tiên của kiến trúc Fusion lại chia bộ nhớ hệ thống ra thành hai phần: một phần khả dụng và điều khiển bởi nhân x86 và phần còn lại quản lý bởi phần mềm chạy trên các engine SIMD. Do đó, ngay cả kiến trúc Fusion, dữ liệu vẫn phải chuyển từ phần của hệ điều hành sang phần dành cho GPU. Tuy nhiên dữ liệu này không phải đi qua kết nối PCIe và AMD sử dụng cơ chế chuyển khối dữ liệu tốc độ cao để chuyển dữ liệu giữa hai vùng nhớ. Vì vậy kiến trúc Fusion của AMD hứa hẹn là một giải pháp cải thiện hiệu năng cho các ứng dụng GPGPU đang phải chịu tình trạng thắt cổ chai ở kết nối PCIe.

Hình 26: Kiến trúc Fusion của AMD

Trong tƣơng lai, kiến trúc Fusion đƣợc kì vọng sẽ sử dụng bộ nhớ liền một khối giữa hai vùng nhớ, tức là sẽ không có công đoạn chuyển dữ liệu từ vùng nhớ của CPU sang vùng nhớ của GPU [23]. Mô hình lập trình trên kiến trúc Fusion theo chuẩn của OpenCL nên tất cả những ứng dụng cho hệ thống CPU-GPU riêng biệt trên nền OpenCL đều có thể chạy mà không cần chỉnh sửa trên các hệ thống theo kiến trúc Fusion.

59

Hình 27: Kiến trúc hợp nhất giữa CPU và GPU trên một bảng mạch

3.4 Cơ chế làm việc giữa GPU và GPU trong hệ tính toán không đồng nhất CPU-GPU CPU-GPU

Trong đó khi thực thi tính toán thì CPU sẽ đóng vai trò “host” chịu trách nhiệm điểu khiển và thực thi tiến trình tính toán. Khi phải thực hiện các tác vụ có tính song song cao thì CPU sẽ chuyển dữ liệu cần thiết đến GPU (đóng vai trò thiết bị “device”). Trong mô hình này, GPU hoạt động nhƣ một bộ tăng tốc xử lý. Nó sẽ hỗ trợ thực thi các công việc cho CPU đƣợc điều khiển bởi CPU. Dữ liệu sẽ đƣợc CPU chuyển đến cho GPU và chỉ thị cho GPU sẽ chạy các nhân GPU (kernel) để tận dụng lợi thế song song dữ liệu đa nhân của mình. Tiến trình điều khiển sẽ ràng buộc một GPU khả dụng và chuyển các dữ liệu đầu vào cần thiết vào bộ nhớ của GPU rồi GPU sẽ chạy một hoặc nhiều nhân và trả lại kết quả đầu ra cho tiến trình điều khiển. Trong mô hình tính toán không đồng nhất CPU và GPU, GPU đóng vai trò một đơn vị tăng tốc để hỗ trợ thực hiển các công việc đƣợc khởi chạy trên host. Một phần công việc sẽ đƣợc khởi tạo, bắt đầu, thực thi và kết thúc trên GPU. Có thể có một hoặc nhiều công việc đƣợc thực hiện trên một hoặc nhiều GPU.

Nếu đi sâu vào mặt phần cứng hơn thì CPU là host nơi tiến trình gốc đƣợc thực thi, CPU trao đổi dữ liệu giữa bộ nhớ của nó và GPU và chỉ thị cho GPU thực thi các nhân GPU để tận dụng ƣu điểm tính toán song song của GPU. Tiến trình điều

60

khiển (hoặc gọi là luồng) sẽ gán cho một hoặc nhiều GPU khả dụng sẽ tham gia vào tính toán rồi chuyển dữ liệu cần thiết tới bộ nhớ của GPU và chỉ thị GPU thực thi một hoặc nhiều nhân GPU rồi lấy kết quả từ GPU trả về cho CPU.

Hình 28: Phƣơng thức hoạt động giữa host và device

Khi một nhân GPU đƣợc phát động, GPU sẽ thực thi các công việc của nó một cách không đồng bộ với tiến trình trên host.Về mặt kĩ thuật thì việc phát động một nhân GPU chỉ đơn giản là xếp một con trỏ chức năng vào danh sách các nhân để chạy trên GPU. Giao diện của GPU thông thƣờng theo cơ chế không khóa, cho phép CPU có thể phát động nhiều nhân liên tục để thực thi tuần tự. Tính chất không đồng bộ này của GPU cũng xuất hiện khi chuyển dữ liệu.

Hơn nữa, GPU có thể phát động và thực thi nhiều nhân cùng một lúc bằng cách phát động nhiều nhân không phụ thuộc lẫn nhau vào các hàng đợi để đƣợc thực thi. Khi đó, bộ lập lịch của GPU sẽ chọn mỗi nhân ở đầu các hàng đợi để cố gắng thực thi cùng một lúc đồng thời cân bằng tài nguyên giữa các luồng. Đây chính là ví dụ cho nhiều GPU đƣợc điều khiển và thực thi dƣới sự điều khiển của nhiều luồng CPU.

61

Hình 29: Lịch trình cho các kịch bản CPU-GPU. (a): đơn luồng, một nhân GPU với một GPU. (b): đơn luồng, hai nhân GPU với một GPU; (c): đa nhân

62

CHƢƠNG 4: SIÊU MÁY TÍNH VÀ MÔ HÌNH SIÊU MÁY TÍNH SỬ DỤNG KIẾN TRÚC TÍNH TOÁN CPU-GPU

Cụm từ siêu máy tính, hay supercomputer nhằm để chỉ một loại máy tính có kiến trúc hoàn toàn khác biệt với những chiếc desktop, laptop mà bạn sử dụng hằng ngày. Về bản chất nó là một hệ thống các máy tính đƣợc tập hợp lại nhƣ một máy tính đơn lẻ duy nhất nên nó có sức mạnh vƣợt trội hơn rất nhiều lần so với các máy tính cá nhân. Siêu máy tính dùng để giải quyết các vấn đề phức tạp nhƣ sự thay đổi thời tiết, hoạt động của phân tử, phân tích dữ liệu trong các lĩnh vực nhƣ thiên văn học, chuỗi di truyền, thông tin tình báo an ninh quốc gia. Việc sử dụng các siêu máy tính ảnh hƣởng đến an ninh quốc gia cũng nhƣ cho các nghiên cứu và phát triển ở nhiều lĩnh vực khoa học kĩ thuật. Siêu máy tính có thể tìm ra những tri thức mà bình thƣờng không thể tìm đƣợc hoặc không thể hiểu đƣợc trong một khoảng thời gian giới hạn. Các giả lập trên siêu máy tính có thể củng cố hoặc thay thế những thí nghiệm đắt tiền hoặc nguy hiểm, chúng có thể giúp chúng ta thực hiện những thí nghiệm ảo để kiểm thử các lý thuyết vƣợt ra khỏi các tham số mà thực tế có thể cung cấp. Để hiểu rõ hơn các hệ thống siêu máy tính, ta sẽ nhắc lại một chút kiến thức về phân loại các hệ thống máy tính.

4.1. Phân loại hệ thống máy tính

Hệ thống máy tính số có thể đƣợc phân loại thành 4 loại theo khả năng đa dòng lệnh và đa luồng dữ liệu. Michael J. Flynn giới thiệu mô hình phân loại hệ thống máy tính này vào năm 1966. Về cơ bản thì việc tính toán là quá trình thực thi một chuỗi chỉ thị trên một tập dữ liệu. Theo phân loại của Flynn thì có 4 kiểu hệ thống máy tính nhƣ sau [13]:

 Đơn lệnh đơn dữ liệu (SISD – Single Instruction Single Data)

 Đơn lệnh đa dữ liệu (SIMD – Single Instruction Multiple Data)

63

 Đa lệnh đa dữ liệu (MIMD – Multiple Instruction Multiple Data)

Các hệ thống máy tính phân tán có thể xếp vào loại MIMD nhƣng mỗi một nút lại có thể thuộc loại SISD. Phần lớn các máy tính là máy tính tuần tự tức là các chỉ thị lệnh đƣợc thực thi lần lƣợt nhƣng khoảng thời gian thực thi có thể chồng lấn lên nhau nhờ sử dụng cơ chế đƣờng ống dẫn. Hầu hết các bộ xử lý đơn nhân đều sử dụng cơ chế đƣờng ống dẫn. Phần lớn các bộ xử lý ngày nay đều có nhiều nhân do đó các hệ thống máy tính gồm nhiều máy tính đƣợc xếp vào loại MIMD. Các bộ xử lý trong hệ thống MIMD tƣơng tác với nhau qua khoảng không bộ nhớ đƣợc chia sẻ giữa toàn bộ các bộ xử lý hoặc bằng cách trao đổi bản tin.

Hệ thống MIMD có các tính chất sau:

 Mỗi bộ xử lý sẽ chạy chuỗi lệnh của riêng nó.

 Mỗi bộ xử lý làm việc trên một phần của bài toán đầu vào.

 Mỗi bộ xử lý tin trao đổi thông tin với các bộ xử lý khác.

 Các bộ xử lý có thể phải chờ để truy cập dữ liệu đang đƣợc xử lý bởi bộ xử lý khác.

Nếu n luồng dữ liệu đầu vào từ các vị trí rời rạc không phụ thuộc vào nhau của bộ nhớ chia sẻ thì ta sẽ có một hoạt động đa SISD tức là chỉ là một hệ thống nhiều bộ xử lý đơn lẻ tuần tự (MSISD). Một hệ thống MIMD có tần suất tƣơng tác giữa các bộ xử lý cao thì thuộc loại hệ thống MIMD liên kết mức cao còn nếu không hệ

Một phần của tài liệu Giải pháp thiết kế và đánh giá hiệu năng siêu máy tính sử dụng CPU GPU (Trang 51)

Tải bản đầy đủ (PDF)

(126 trang)