Chương 1 Kiến thức chuẩn bị
1.1. Nguyên lý tính toán song song
1.1.1. Kiến trúc máy tính song song
Máy tính song song là một tập các phần tử tính tốn có khả năng truyền thơng và kết hợp với nhau để giải quyết các bài toán lớn trong khoảng thời gian chấp nhận được [13].
Mặc dù đều dựa trên nguyên lý phối hợp nhiều tài ngun tính tốn để giải quyết bài tốn, các máy tính song song có thể có nhiều kiến trúc khác nhau. Nguyên tắc phân loại kiến trúc máy tính song song theo Flynn dựa trên hai yếu tố cơ bản là lệnh và dữ liệu: Đơn lệnh đơn dữ liệu (SISD - Single Instruction Single Data), đơn lệnh đa dữ liệu (SIMD - Single Instruction Multiple Data), đa lệnh đơn dữ liệu (MISD- Multiple Instruction Single Data) và đa lệnh đa dữ liệu (MIMD-Multiple Instruction Multiple Data). Trong các kiến trúc trên, kiến trúc SISD tương ứng với máy tính tuần tự. Cho tới thời điểm này, kiến trúc MISD vẫn chưa có một phiên bản chính thức nào được xây dựng hay nghiên cứu phát triển. Các máy tính song song chủ yếu thuộc một trong hai kiến trúc SIMD hoặc MIMD.
• Kiến trúc SIMD: Các máy tính SIMD gồm nhiều bộ vi xử lý (các máy tính
hiện đại có hàng ngàn bộ vi xử lý). Tại một thời điểm, các bộ vi xử lý đều hoạt động dựa trên cùng một nhịp đồng hồ và thực hiện cùng một phép toán tác động trên các dữ liệu khác nhau.
Lớp kiến trúc SIMD gồm 2 loại chính: Máy tính với bộ xử lý mảng và máy tính với bộ xử lý véctơ.
Máy tính với bộ xử lý mảng
Cấu trúc của máy tính song song (SIMD) với bộ xử lý mảng bao gồm một máy tính điều khiển đầu cuối và tập các bộ vi xử lý (có thể gồm hàng trăm hoặc hàng ngàn bộ vi xử lý) được ghép lại thành mảng. Mỗi bộ vi xử lý trong mảng có bộ nhớ cục bộ riêng.
Máy tính điều khiển đầu cuối gồm một bộ vi xử lý điều khiển, bộ nhớ chương trình, vi xử lý truy nhập đầu cuối. Tại mỗi thời điểm bộ vi xử lý điều khiển có nhiệm vụ chuyển các câu lệnh chương trình được lưu trữ tại bộ nhớ chương trình cho các vi xử lý trong mảng, vi xử lý truy nhập đầu cuối điều khiển các truy nhập đầu-cuối, các kết nối giữa vi xử lý điều khiển với các đường dữ liệu. Ngoài ra các lệnh không thể thực hiện bởi vi xử lý điều khiển hay mảng các vi xử lý sẽ được chuyển cho vi xử lý điều khiển truy nhập đầu cuối xử lý.
Các bộ vi xử lý trong mảng có thể được ghép với nhau theo kiểu lưới 2 chiều (2-D grid), nối vòng, nối chéo, lưới 3 chiều hoặc phức tạp hơn. Các máy tính với bộ vi xử lý mảng thường được chế tạo và sử dụng cho các mục đích đặc biệt, khi bài tốn được song song hóa tối đa, khơng cần trao đổi thông tin giữa các vi xử lý, thường phù hợp với các chương trình xử lý tín hiệu số, xử lý ảnh, mơ phỏng Monte-Carlo.
Một số máy song song có kiến trúc bộ vi xử lý mảng như: Kết nối máy CM-2, MasPar MP-1 và MP-2, ILLIAC IV.
Hình 1.1: Kiến trúc của máy tính với bộ xử lý mảng
Máy tính với bộ xử lý véctơ
Cấu trúc của máy tính song song véctơ bao gồm một bộ vi xử lý véctơ hoạt động theo nguyên lý hình ống. Mỗi câu lệnh thực hiện được chia thành các giai đoạn (nạp câu lệnh, giải mã, xác định tốn hạng, vv...) và tại mỗi thời điểm có thể có nhiều câu lệnh được thực hiện theo những giai đoạn khác nhau. Các giai đoạn khác nhau của mỗi câu lệnh có thể được thực hiện gối đầu nhau, đầu ra của giai đoạn này là đầu vào của giai đoạn tiếp theo.
Một trong những đặc điểm của đa số máy tính véctơ với bộ vi xử lý véctơ (vector processing unit – VPU) là khơng có bộ nhớ cache. Một thực tế là dung lượng của bộ nhớ cache không đủ để nạp các dữ liệu kiểu véctơ, do đó dẫn đến thường xuyên bị tràn bộ nhớ. Đa số máy tính véctơ thế hệ trước cho phép các toán hạng và kết quả được đọc và ghi trực tiếp trên bộ nhớ (CDC Cyber 205, ETA-10). Tuy nhiên, các máy tính véctơ hiện nay đều sử dụng thanh ghi véctơ (vector register).
Kiểu kiến trúc với bộ xử lý véctơ: IBM 9000, Cray X-MP, Cray Y-MP và Fujitsu VP, NEC SX-2, Hitachi S820, ETA10.
Hầu hết các máy tính hiện đại, đặc biệt là với máy xử lý đồ họa (GPUs) sử dụng kiểu máy tính SIMD.
• Kiến trúc MIMD:Các máy tính MIMD là một hệ thống đa bộ xử lý hoặc đa máy tính. Mỗi bộ xử lý trong hệ thống này có một bộ điều khiển riêng và
thực thi những chương trình của riêng chúng. Tùy theo cách thức mà các bộ xử lý truy cập vào bộ nhớ của nhau, máy tính MIMD được chia thành hai loại sau: Máy tính với bộ nhớ dùng chung (SM-MIMD) và máy tính với bộ nhớ phân tán (DM-MIMD)
Máy tính với bộ nhớ dùng chung: Cấu trúc của máy tính với bộ nhớ dùng chung gồm một số vi xử lý hoặc bộ vi xử lý đa lõi (cores), bộ nhớ và một mạng liên kết giữa các vi xử lý với bộ nhớ. Các vi xử lý trong kiến trúc này cùng nhau chia sẻ một bộ nhớ chung.
Một trong những khó khăn chính khi thiết kế máy tính có bộ nhớ dùng chung là giải quyết vấn đề kết nối giữa các vi xử lý và giữa các vi xử lý với bộ nhớ. Băng thông tổng cộng truy cập đến bộ nhớ tăng tỷ lệ thuận với số lượng vi xử lý. Các vi xử lý được thiết kế tương tác trực tiếp với nhau nhờ cơ chế chuyển mạch tập trung: dùng cách chuyển mạch chéo (Crossbar Switch), dùng mạng đa giai đoạn (Multi stage Network), sử dụng chung đường dẫn (Common Bus). Mỗi giải pháp đều có ưu điểm và nhược điểm riêng.
Với các máy MIMD, có thể cùng một lúc nhiều tiến trình khác nhau được thực hiện trên các vi xử lý. Do đó, cần phải đồng bộ hóa các tiến trình. Các bộ vi xử lý đều có các thanh ghi riêng đóng vai trị truyền thơng và trao đổi trực tiếp với nhau thông qua các thanh ghi này. Việc đồng bộ hóa có thể thơng qua vùng nhớ dùng chung, tuy rằng chậm hơn trao đổi trực tiếp. Việc truyền thông giữa các vi xử lý và trao đổi dữ liệu được thực hiện trên các đường dẫn (bus) khác nhau nhằm đảm bảo tốc độ cho q trình đồng bộ hóa.
Máy tính song song SM-MIMD có thể được chia thành 2 loại:
Máy tính song song với bộ nhớ chia sẻ truy cập ngang quyền UMA (Uniform Memory Acces): Đây là máy tính có nhiều bộ vi xử lý. Các vi xử lý truy cập vào vùng nhớ chung với thời gian như nhau nên các máy này cũng thường được gọi là các máy đa xử lý đối xứng SMP (Symmetric Multi Processor).
Hình 1.2: UMA
Các máy tính song song Sun Startfire servers, HP V series, và Compaq AlphaServer GS đều sử dụng cấu trúc UMA.
Máy tính song song với bộ nhớ chia sẻ truy cập không ngang quyền NUMA (Non-Uniform Memory Access) là tên gọi loại máy tính song song được tạo thành từ một mạng các nút tính tốn với bộ nhớ phân tán về mặt vật lý, nhưng theo mơ hình chia sẻ về mặt lơgic (trong hầu hết các máy tính NUMA, các nút tính tốn là những máy tính SMP). Trong hệ thống NUMA, các phần tử dữ liệu được xem như thuộc về bộ nhớ dùng chung, do đó NUMA được phân loại thuộc kiến trúc SM-MIMD. Các máy tính song song với kiến trúc NUMA được bán trên thị trường bao gồm BBN TC-2000, Cray 3TE, và SGI Origin 3000. Về mặt vật lý, các phần tử dữ liệu nằm trong vùng nhớ của các nút tính tốn khác nhau, do đó thời gian để các vi xử lý truy cập cùng một phần tử dữ liệu sẽ khác nhau phụ thuộc vào khoảng cách của bộ xử lý.
Hình 1.3: NUMA
Để tăng tốc độ truy cập bộ nhớ của các vi xử lý, các vi xử hiện đại ngày nay thường trang bị thêm một hệ thống bộ nhớ cache với dung lượng nhỏ nhưng thời gian truy cập nhanh. Tuy nhiên một yêu cầu quan trọng đó là giá trị của các biến nằm trong bộ nhớ cache của các vi xử lý phải đồng nhất với nhau (Cache Coherent). Giải pháp đồng bộ cache được sử dụng phổ biến là dùng giao thức snoopy bus, trong đó các bộ nhớ cache sẽ theo dõi việc truyền các biến giữa các vi xử lý và cập nhật giá trị, nếu trong cache chứa biến tương ứng hoặc sử dụng vùng nhớ để theo dõi và cập nhật các bản sao của biến, gọi là directory memory.
Một số máy song song với kiến trúc này bao gồm: Bull NovaScale, HP Superdome và SGI Altix3000, các máy tính cá nhân gồm một bộ xử lý đa lõi.
Máy tính với bộ nhớ phân tán: Cấu trúc gồm một số nút tính tốn và một
mạng liên kết giữa các nút tính tốn cũng như hỗ trợ q trình truyền thơng giữa các nút tính tốn. Mỗi nút tính tốn hoạt động độc lập bao gồm một số bộ xử lý, mỗi bộ xử lý trong mỗi nút tính tốn có bộ nhớ riêng khơng chia sẻ với bất cứ bộ xử lý nào khác. Kiến trúc này còn được gọi là hệ thống bộ nhớ phân tán hay hệ thống đa máy tính.
Dữ liệu chương trình thường được lưu trữ tại bộ nhớ cục bộ của một hay một số nút. Do bộ nhớ cục bộ là bộ nhớ riêng của bộ xử lý cục bộ tương ứng nên khi một bộ xử lý nào đó yêu cầu truy cập vào dữ liệu trong bộ nhớ cục bộ của bộ xử lý khác, thường đó là tác vụ mà lập trình viên cần phải xác định một cách rõ ràng và chính xác: Dữ liệu được truyền như thế nào
và khi nào được truyền và ở vùng nhớ nào. Việc đồng bộ hóa giữa các tác vụ cũng là trách nhiệm của lập trình viên.
Hình 1.4: Máy tính với bộ nhớ phân tán
Ưu điểm các máy tính DM-MIMD giải quyết được nhược điểm cố hữu về băng thông khi truy cập bộ nhớ của các bộ vi xử lý. Một trong những vấn đề đáng quan tâm khi cải thiện hiệu năng của các kiến trúc chia sẻ bộ nhớ là tốc độ của bộ nhớ. Để đạt được tốc độ tính tốn tương đương với các máy tính DM-MIMD, các vi xử lý trong các máy tính bộ nhớ chia sẻ phải có tốc độ rất cao và do vậy, địi hỏi tốc độ truy cập bộ nhớ cũng phải cao tương ứng.
Nhược điểm của các máy tính DM-MIMD so với các máy SM-MIMD là tốc độ truyền thông giữa các bộ vi xử lý và trao đổi dữ liệu giữa các vi xử lý rất chậm. Với các bài toán cần nhiều thao tác truyền thống, hiệu năng thực sự của các máy DM-MIMD rất nhỏ so với hiệu năng cực đại.
Tôpô kết nối giữa các vi xử lý và tốc độ đường truyền dữ liệu ảnh hưởng rất lớn đến hiệu năng hệ thống. Giải pháp phổ biến nhất là khối đa diện (hypercube). Điểm nổi bật của cấu trúc khối đa diện với 2d nút là số bước cực đại kết nối hai nút bất kỳ là d. Do đó, độ phức tạp kết nối lưới sẽ tăng lên theo hàm logarit của số nút. Về lý thuyết, các tôpô khác như: cây, vịng, mạng 2-D, mạng 3-D đều có thể mơ phỏng được với cấu trúc khối đa diện. Tùy mục đích cụ thể sẽ chọn tơpơ kết nối tối ưu. Ví dụ, với bài tốn mơ phỏng vật lý, thích hợp nhất là kiểu mạng 2-D hoặc mạng 3-D. Trong các máy tính có số bộ vi xử lý nhỏ (ít hơn 64), kiểu kết nối thích hợp nhất là crossbars.
Ví dụ về các máy thuộc kiến trúc máy DM-MIMD: Meiko CS-2, nCUBE/2, iPSC/2, iPSC/860, CM-5.
Các bó máy tính, hệ thống tính tốn lưới cũng đều dựa trên kiến trúc DM-MIMD. Cụ thể như kiến trúc bó IBM 1600 của Trung tâm Tính tốn Hiệu năng Cao, Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia Hà nội:
– 5 nút tính tốn pSeries 655, mỗi nút gồm 8 CPU Power 4+ 64 bit RISC 1.7 GHz của IBM, cache 5.6MB ECC L2, 128MB ECC L3, băng thông: 72.3 GBps, 32GB RAM, băng thông bộ nhớ 51.2 GBps, 6x36 GB HDD. Năng lực tính tốn tổng cộng khoảng 240 GFlops (mở rộng tối đa 768 GFlops/16 nút).
– 1 nút quản lý phần mềm CSM p630: Power4+ 64 bit 1.2 GHz, cache 1.5 MB ECC L2, 8MB ECC L3, băng thông: 12.8 GBps, 1GB RAM, băng thông: 6.4 GBps, 6x36 GB HDD, DVD ROM.
– 1 nút điều khiển phần cứng HCM: Intel Xeon 3.06 GHz, 1GB RAM, 40 GB HDD, DVD RAM.
– Các nút được kết nối với nhau thông qua HPS (High Performance Switch – Switch hiệu năng cao), băng thông 2GBps và GEthernet.
– Hệ thống lưu trữ chung: IBM DS4400 và EXP700 kết nối với cụm IBM 1600 thông qua cáp quang với băng thông 2Gbps.
– Các nút chạy HĐH AIX 5L phiên bản 5.2.
Kiến trúc của bó IBM 1350 của Trung tâm TTHNC, Trường ĐHKHTN, ĐHQGHN:
– 8 nút tính tốn, mỗi nút gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 2GB RAM, 1x36 GB HDD, DVD ROM. Tổng năng lực tính tốn của 8 nút là khoảng 51.2 GFlops.
– 2 nút phục vụ lưu trữ, mỗi nút gồm 2 chip Intel Xeon Dual Core 3.2 GHz, 3 GB RAM, 4x72 GB HDD.
– 1 nút đóng vai trị quản lý bao gồm chip Intel Xeon Dual Core 3.2, 3 GB RAM, 2x36 GB HDD.
– Năng lực lưu trữ: thiết bị lưu trữ dùng chung EXP400 với 10x73 GB HDD SCSI 320 MBps 15KRpm, dùng hệ thống chia sẻ file: GPFS cho Linux v2.3.0.5.
– Các nút chạy hệ điều hành Redhat Enterprise Linux 3.0 và được kết nối với nhau thông qua mạng GEthernet.
(a) IBM Cluster 1350 (b) IBM Cluster 1600
Hình 1.5: Kiến trúc bó máy tính IBM1350 và IBM1600.