MỤC LỤC
Có thể có nhiều thuật toỏn song song cựng giải một bài toỏn tựy thuộc vào cỏch phừn chia dữ liệu cho cỏc tỏc vụ, cỏch truy xuất dữ liệu, cỏch phừn ró cỏc tỏc vụ và cỏch đồng bộ các tiến trỡnh. - Nguyên lí đường ống: Nguyên lí này được áp dụng trong trường hợp ta muốn thực hiện một dóy cỏc thao tỏc theo trỡnh tự {P1, P2,…, Pn} trong đó một số bước của Pi+1 có thể thực hiên trước khi Pi kết thỳc. - Nguyên lí đồ thị phụ thuộc dữ liệu: Chúng ta xây dựng một đồ thị có hướng trong đó các nút biểu diễn các khối câu lệnh độc lập cũn cỏc cạnh biểu diễn tỡnh huống khối này phụ thuộc kết quả từ việc thực hiện của khối kia.
Nói chung, khi số bộ xử lí giảm thời gian thực hiện của chương trỡnh cú thể tăng và có thể tăng lên một hằng số nào đó nhưng xét theo độ phức tạp của thuật toán thỡ vẫn khụng thay đổi. Truyền thông (Communication): Giai đoạn này nhằm thiết lập sự phối hợp thực hiện giữa các tác vụ và xác định thuật toán và cấu trúc truyền thông thích hợp. Ánh xạ (Mapping): Mỗi tác vụ sẽ được giao cho một bộ xử lí nhằm tối đa hóa sự tận dụng khả năng của các bộ xử lí và giảm thiểu chi phí truyền thông.
Thời gian truyền thụng của một thuật toỏn ( Tcomm) là thời gian mà tất cả các tác vụ của nó sử dụng để gửi và nhận thông điệp.Có hai loại truyền thông: truyền thông giữa các bộ xử lí (interprocessor) và truyền thông trong bộ xử lí (intraprocessor). Đó là bởi vỡ chi phớ của những bản sao và chuyển ngữ cảnh từ bộ nhớ sang bộ nhớ thực hiện trong truyền thụng trong bộ xử lớ thường có thể so sánh được với chi phí của truyền thông giữa các bộ xử lí. Trong kiến trúc đa máy tính lí tưởng, chi phí gửi thông điệp giữa hai tác vụ định vị trên những bộ xử lí khác nhau có thể biểu diễn bằng hai tham số: thời gian khởi động thông điệp ts, là thời gian cần để khởi tạo sự truyền thông, và thời gian truyền một từ ( thường là bốn byte) tw , được xác định bằng băng thông vật lí của kênh truyền thông liên kết bộ xử lí nguồn và đích.
Trước đây, thuật ngữ “máy tính hiệu năng cao” (High- Performance Computing - HPC) thường được dùng để chỉ những máy tính song song hoặc máy tính véc tơ với giá trị lên tới hàng triệu đôla. Nhưng với sự phát triển nhanh chóng của công nghệ phần cứng đặc biệt là những tiến bộ trong việc cải tiến hiệu năng của bộ xử lí và băng thông mạng đó làm thay đổi một cách toàn diện kiến trúc của các máy tính hiệu năng cao. Và khi các máy tính hiệu năng cao được tạo ra bằng cỏch kết nối cỏc mỏy trạm (Workstation – WS) với nhau thỡ thuật ngữ “cụm mỏy tớnh”.
Cụm máy trạm (Workstation Cluster -WSC) là một nhóm các máy trạm được kết nối với nhau thông qua một mạng tốc độ cao. Các máy tính trong một WSC truyền thông qua một trong hai giao thức truyền thông phổ biến đó là: truyền thông dựa trên kết nối và truyền thông không kết nối. Mô hỡnh kết nối dựa trờn giao thức TCP (Tranmission Control Protocol) với độ tin cậy cho việc truyền thông điệp được bảo đảm.
Mô hỡnh khụng kết nối dựa trờn giao thức UDP (User Datagram. Protocol), với giao thức này độ tin cậy cho việc truyền thông điệp được bảo đảm. Về nguyên tắc một cụm máy tính chỉ cần có một màn hỡnh và một bàn phớm nờn giảm được chi phí ban đầu. Đây là ưu điểm của cụm máy tính so với những hệ thống song song khác và nó nói lên tính an toàn cao của hệ thống.
• Các node đượ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 2 GBps và Gethernet.
MPI không phải là chuẩn ISO hay IEEE nhưng trên thực tế nó đó trở thành chuẩn công nghiệp cho việc viết các chương trỡnh truyền thụng điệp trên nền HPC (Hight Performance Computing).
Mặc dự MPI là một hệ thống phức tạp chỳng ta cú thể giải những bài toán thuộc một phạm vi rộng mà chỉ sử dụng 6 hàm cơ bản. Những hàm này khởi tạo và kết thúc một chương trỡnh MPI, xỏc định nhận dạng các tiến trỡnh, gửi và nhận thụng điệp. MPI_Comm_size xác định số các tiến trỡnh MPI_Comm_rank xác định số hạng tiến trỡnh MPI-Send gửi một thông điệp.
Hàm này phải được gọi trong mọi chương trỡnh MPI và trước bất kỳ hàm MPI nào khác, và chỉ được gọi một lần trong một chương trỡnh MPI chương. Với những chương trỡnh C, MPI_Init cú thể được sử dụng để truyền những tham số dũng lệnh tới tất cả cỏc bộ xử lý. Một bộ truyền thụng gồm một tập cỏc tiến trỡnh trong đó các tiến trỡnh cú thể thực hiện truyền thụng với nhau.
Bộ truyền thụng cung cấp một cơ chế nhận dạng tập các tiến trỡnh cho việc phỏt triển những chương trỡnh module và để đảm bảo các thông điệp dành cho những mục đích khác nhau không bị nhầm lẫn. Những tên hàm giống với MPI chuẩn nhưng chỉ MPI được viết hoa và chữ cái đầu tiên của tên hàm được viết hoa. Những tham số của hàm số cú nhón IN được truyền theo giá trị, trong khi những tham số nhón OUT, INOUT truyền theo tham chiếu (như con trỏ).
Biến status thuộc kiểu MPI_Status có trường status.MPI_SOURCE và status.MPI_TAG gồm các thông tin về souce và tag như trong ví dụ sau (số tiến trỡnh cố định bằng 2).
• MPI_Gather(void* sendbuf, int sendcount, MPI_Datatype sendtype, void*. recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) Hàm tổng hợp dữ liệu. • MPI_Scatter(void* sendbuf, int sendcount, MPI_Datatype sendtype, void*. recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) Hàm phừn phối dữ liệu. Hàm này cho phép phân tách hai pha của một chương trỡnh để đảm bảo những thông điệp trong hai pha không bị lẫn lộn với nhau.
Tiến trỡnh gốc (thực thi cỏc hàm này) quảng bỏ, tổng hợp hay phừn phối dữ liệu cho tất cả cỏc tiến trỡnh trong bộ truyền thụng. Tiến trỡnh root gửi dữ liệu giống nhau cho tất cả cỏc tiến trỡnh khỏc và cỏc tiến trỡnh này nhận cựng dữ liệu đó từ tiến trỡnh root. Dữ liệu định vị ở buff của tiến trỡnh root, gồm count phần tử kiểu datatype được sao lại trong buff của tất cả cỏc tiến trỡnh.
Tiến trỡnh này thu thập dữ liệu lưu vào recvbuf theo thứ tự trong đó dữ liệu gửi tiến trỡnh i đứng trước dữ liệu gửi tiến trỡnh i+1. MPI_Scatter ngược lại với MPI_Gather thực hiện việc phân phối dữ liệu từ một tiến trỡnh tới tất cả cỏc tiến trỡnh. Với MPI_Bcast mọi tiến trỡnh nhận cựng 1 trị số từ tiến trỡnh root, cũn với MPI_Scartter mọi tiến trỡnh nhận một trị số khỏc nhau.
Chúng kết hợp trị số trong sendbuf của mỗi tiến trỡnh, sử dụng phộp toỏn op rồi trả về kết quả trong recvbuf của tiến trỡnh root khi sử dụng hàm MPI_Reduce, và của tất cả cỏc tiến trỡnh khi sử dụng MPI_Allreduce.
Phương pháp Successive Overrelaxation (SOR) có công thức lặp:. Khi ω =1, SOR trở thành phương pháp Gass-Seidel. Điều kiện cần để phép lặp SOR hội tụ là detB<1 với ). Phương pháp JOR không có sự phụ thuộc dữ liệu giữa những phần tử của các véc tơ trong mỗi phép lặp; vỡ thế phộp lặp JOR cú khả năng song song hóa dễ dàng. Khi song song hoá thuật toán đũi hỏi một số bộ xử lớ phải đợi trong khi giá trị của X(k+1) được tính toỏn.
Trong cách song song hoá thuật toán ở trên, bước 1 có thể phân tán ( theo hàng) giữa những bộ xử lí theo cách tương tự như phương pháp sử dụng trong phần 3.3.1 cho phương pháp JOR. Ta nhận thấy chỉ duy nhất một lần thời gian thực hiện thuật toỏn Jacobi song song với 1 node 2 tiến trỡnh nhanh hơn thời gian thực hiện với 1 tiến trỡnh, cú hệ số gia tốc là 1,18. Lượng thời gian giảm đi do giảm được tính toán không bù đắp nổi chi phí truyền thông khi có nhiều tiến trỡnh cựng tham gia.
Chứng tỏ thời gian truyền thông giữa các node là đáng kể và lâu hơn thời gian truyền thụng trờn một node. Rừ ràng khi bậc của ma trận A tăng lên, lượng tính toán tăng lên, lúc này khi chia xẻ công việc giữa cỏc tiến trỡnh thỡ thời gian giảm đi do giảm đươc tính toán đó lớn hơn rất nhiều thời gian truyền thông giữa các bộ xử lí và với số tiến trỡnh là. Tiếp tục đánh giá so sánh thời gian hiệu năng thực hiện của thuật toán JOR, SOR song song với thuật toán Jacobi song song.
Tỡm hiểu và thử nghiệm một số phương pháp lặp khác để đưa về song song hoá giải hệ đại số tuyến tính, như R/B SOR, JSOR, PSOR.
Chương trỡnh JOR tương tự như Jacobi nhưng khác phần công thức tính toán do có thêm tham số ω.