trình song song
Mục này trình bày sơ lược một số vấn đề liên quan đến tính toán song song. Như đã nói ở phần mở đầu, nguyên lý chung của tính toán song song là phân chia vấn đề lớn thành các bài toán nhỏ hơn, độc lập lẫn nhau và xử lý chúng trên các bộ vi xử lý song song.
Tuy nhiên, xét theo quy mô, ta có thể chia tính toán song song thành các mức: song song mức bit (bits level), mức kiến trúc lệnh (instruction level), mức dữ liệu (data level) và mức công việc (tasks level parallelism).
Khái niệm độc lập cổ điển được hiểu theo nghĩa, giả sử Pi, Pj là hai tiến trình với đầu vào và đầu ra tương ứng Ii, Ij và Oi, Oj, thì chúng cần thỏa mãn
Ii ∩Oj = ∅, Ij ∩Oi = ∅, Oi ∩Oj = ∅.
Mặt khác, về mặt nguyên tắc, vì các bài toán thành phần độc lập ở trên được tách ra từ một bài toán ban đầu, nên sẽ cần trao đổi dữ liệu giữa các quá trình tính toán song song. Vậy kiến trúc vật lý phục vụ tính toán song song cần yếu tố: nhiều bộ xử lý hoạt động độc lập và khả năng truyền tải thông tin giữa các bộ xử lý với tốc độ tương thích.
Có hai hướng xây dựng các hệ thống tính toán dạng này. Hướng thứ nhất là tích hợp nhiều lõi xử lý (core) lên một bộ vi xử lý hoặc thiết kế các máy tính đa xử lý. Hướng này tạo ra các máy tính nhiều lõi xử lý có thể tính toán song song và tốc độ trao đổi dữ liệu giữa chúng rất cao. Tuy nhiên, do các yếu tố về kích thước không gian, về công nghệ vật liệu, về khả năng tích hợp ... nên hướng phát triển này sẽ sớm đạt đến giới hạn. Hướng xây dựng thứ hai là ghép nối các máy tính với nhau. Mô hình này cho phép thực hiện những bài toán lớn vì nó có thể huy động tài nguyên rộng lớn cho tính toán, cũng như cho phép phát triển hay thu hẹp dễ dàng hơn. Tuy nhiên, tốc độ trao đổi dữ liệu trong mô hình này sẽ không thể cao như mô hình thứ nhất.
Nếu xét theo tiêu chí như trên, ta có thể phân loại các hệ thống tính toán song song thành các lớp như sau: Máy tính với bộ xử lý nhiều lõi (Multicores computing); Hệ thống tính toán đa xử lý đồng bộ (Symmetric
multiprocessing) và lớp hệ thống tính toán phân tán (Distributed comput- ing), trong đó bao gồm bó máy tính (Cluster), hệ thống tính toán song song quy mô lớn (Massive parallel processing- MPPs) và phạm vi lớn hơn là lưới tính toán (Computing Grid) và tính toán đám mây (Cloud computing).
Tuy nhiên, hầu hết các hệ thống tính toán lớn đều cần sự kết hợp giữa các mô hình trên. Ví dụ, các cụm máy tính IBM Linux Cluster 1350 và AIX 1600 tại Trung tâm Tính toán hiệu năng cao - Đại học KHTN - ĐHQG Hà Nội là sự ghép nối (thành bó máy tính) giữa các node tính toán. Mỗi node đó có thể coi là một máy tính với nhiều bộ xử lý (với IBM 1350 là 08 node loại eServer xSeries 33 với mỗi node có 02 CPU). Mỗi bộ xử lý lại được thiết kế đa lõi (dual 2 core với các CPU của IBM 1350).
Năng lực tính toán của hệ thống tính toán lớn được tính theo Giga hoặc Tera Flops (109, 1012 Flops). Ở đây Flops đo bằng số phép tính số thực cơ bản mà 01 lõi xử lý được trong mỗi xung đồng hồ.
Kiến trúc vật lý thứ hai cần quan tâm đó là tài nguyên bộ nhớ phục vụ tính toán. Có hai mô hình bộ nhớ được sử dụng là bộ nhớ phân tán (distributed memory) và bộ nhớ chia sẻ (shared memory). Trong mô hình thứ nhất, các đơn vị xử lý (các CPU hoặc Node tính toán) sử dụng một bộ phận thiết bị nhớ vật lý hoặc một không gian địa chỉ bộ nhớ riêng. Trong lúc đó, với mô hình thứ hai, các đơn vị xử lý sử dụng chung một không gian địa chỉ bộ nhớ.
Quá trình xử lý song song thường xẩy ra một số vấn đề đặc trưng. Vấn đề tương tranh (concurency) xẩy ra khi các tiến trình tranh chấp tài nguyên dẫn đến làm sai lệch dữ liệu lẫn nhau. Trong khi đó, sự loại trừ lẫn nhau (mutual exclusion) xuất hiện nếu một trong các tiến trình chiếm tài nguyên và ngăn chặn sự truy cập của các tiến trình khác. Các vấn đề này thường dẫn đến tắc nghẽn (deadlock), tức là ngưng hẳn việc xử lý, hoặc tinh vi hơn là tạo ra kết quả sai. Vấn đề với đồng bộ hóa (synchronization) cũng thường xẩy ra, khi có sự mất cân đối giữa khối lượng tính toán và trao đổi dữ liệu giữa các đơn vị xử lý. Vấn đề này thường dẫn đến hiện tượng suy giảm tốc độ khi xử lý song song (parallel slowdown).
Do đó, để các chương trình chạy được ở chế độ song song, cần có phần mềm nền điều phối tài nguyên tính toán và bộ nhớ. Ở mức hệ thống, đây là các chức năng hỗ trợ chế độ song song của hệ điều hành và phần mềm dịch vụ. Ở mức công cụ lập trình, đây là hệ thống thư viện hỗ trợ việc
phân rã và chạy song song, cũng như hệ thống biên dịch song song.
Ví dụ về hệ thống thư viện hỗ trợ chế độ song song trong mô hình bộ nhớ phân tán là giao diện truyền thông điệp (Message Passing Interface- MPI). Do được xây dựng hỗ trợ mô hình nhớ phân tán nên MPI khá mạnh trong việc đồng bộ hóa khối lượng xử lý, cũng như cung cấp các chức năng đảm bảo an toàn cho dữ liệu.
Trong khi đó, một hệ thống thư viện hỗ trợ mô hình bộ nhớ chia sẻ là OpenMP (Open Multi-Processing). Hệ thống này cũng cung cấp nhiều khả năng linh động để người lập trình tự xây dựng mô hình và mức độ song song, từ song song theo vòng lặp đến song song toàn bộ công việc.
Cả hai giao diện lập trình này đều hỗ trợ các ngôn ngữ như C/C++ và Fortran. Vì đề tài nghiên cứu của luận án này tập trung vào các phương pháp song song, nên việc so sánh hiệu quả ở mức thuật toán được quan tâm nhiều hơn. Do đó, các chương trình thử nghiệm sử dụng thư viện OpenMP và mô hình song song chủ yếu là theo khối tính toán ứng với bài toán thành phần (song song theo phân đoạn - sectional parallel).
Để đánh giá hiệu quả của phương pháp song song, ta quan tâm đến một số thông số sau. Mức tăng tốc độ Sp (SpeedUp), được đánh giá theo số lần giảm thời gian khi xử lý cùng một công việc trong chế độ song song và trong chế độ tuần tự, bởi một phương pháp:
Sp:= Ts/Tp,
trong đó Ts, Tp lần lượt là thời gian chạy ở chế độ tuần tự và song song. Ngoài cách đo theo thực tế,Spcòn có thể được đánh giá theo các quy tắc lý thuyết. Theo quy tắc Amdahl, Sp phụ thuộc vào tỷ lệ được song song trong chương trình. Nếu tỷ lệ thời gian xử lý các thành phần tuần tự trong chương trình là ρ, thì mức tăng tốc là Sp := 1/ρ, bất kể nó thực sự chạy trên bao nhiêu bộ xử lý. Quy tắc Gustafson cũng có thể được dùng để tính
Sp, theo đó nếu chương trình được chạy trên P bộ xử lý, thì mức tăng tốc là Sp(P) := P −ρ(P −1), với ρ định nghĩa như trong quy tắc Amdahl.
Thông số thứ hai là hiệu năng tính toán song song Ep. Thông số này được đánh giá thông qua đo trực tiếp, và phản ánh hiệu suất sử dụng của mỗi bộ xử lý trong mô hình song song. Công thức tính hiệu năng như sau
với P là số bộ xử lý tham gia tính toán và Sp(P) là mức tăng tốc được tính như trên.
Từ các thông số trên, có thể thấy hiệu suất của việc tính toán song song chỉ cao khi tỷ lệ xử lý bài toán thành phần, tức là phần song song được, cao đáng kể so với công việc trao đổi dữ liệu, là phần thường phải xử lý tuần tự.