Trong phần này, chúng ta sẽ giới thiệu một kỹ thuật xử lý song song gọi là đường ống, chúng được ứng dụng rộng rãi trong nhiều bài toán. Tính toán đường ống là cần thiết để tăng cường khả năng thi hành.
1.4.4.1 Kỹ thuật đường ống
Trong kỹ thuật đường ống, bài toán được chia thành một loạt những nhiệm vụ phải được hoàn thành theo cách: nhiệm vụ này hoàn tất sau những nhiệm vụ khác. Thật ra đây điều là cơ bản của lập trình tuần tự. Trong kỹ thuật đường ống, mỗi nhiệm vụ được thực thi bởi một tiến trình khác nhau. Chúng ta thỉnh thoảng đề cập đến một tiến trình đường ống như là một giai đoạn đường ống. Mỗi giai đoạn góp phần hoàn thành bài toán và chuyển thông tin cần thiết cho giai đoạn kế tiếp. Tính song song có thể nhận thấy như là một hình thức phân tán chức năng. Bài toán được chia thành nhiều giai đoạn khác nhau và được thực thi. Nhưng trong trường hợp này những chức năng được thực thi liên tiếp. Như chúng ta sẽ thấy, dữ liệu đầu vào thường được phân ly và xử lý khác nhau.
Hình 1.18 Xử lý đường ống
Một ví dụ của chương trình tuần tự có thể được trình bày rõ ràng như là một đường ống, xem xét vòng lặp sau:
for (i=0;i<n;i++) sum=sum+a[i];
Với tổng của các phần tử của mảng a, vòng lặp có thể được tháo ra như sau: sum=sum+a[0];
sum=sum+a[1]; sum=sum+a[2];
sum=sum+a[3]; sum=sum+a[4];
Một giải pháp đường ống là mỗi giai đoạn riêng biệt cho mỗi câu lệnh. Mỗi giai đoạn tính tổng với đầu vào của nó, sin
Và với một phần tử a[] tạo ra một tổng cho đầu ra của nó, sout
Do đó giai đoạn i thực thi: Sout=sin+a[i];
Thay vì những câu lệnh đơn, một loạt các chức năng có thể được thực thi theo phong cách đường ống. Một bộ lọc tần số là một ví dụ thực sự trong đó bài toán được chia thành một loạt các chức năng. Mục tiêu ở đây là di chuyển những tần số đặc biệt (f0,f1,f2,f3 v.v) từ một tín hiệu. Tín hiệu có thể tham gia vào đường ống từ bên trái. Mỗi giai đoạn sẽ đáp lại bằng cách dịch chuyển một tần số.
Hình 1.19 Đường ống trong vòng lặp
Hình 1.19 Đường ống trong bộ lọc tần số
Cách tiếp cận đường ống có thể cung cấp việc tăng tốc theo 3 kiểu tính toán sau: 1. Nếu có nhiều hơn một yêu cầu để hoàn tất bài toán là được thi hành.
2. Nếu một loạt những mục dữ liệu phải được xử lý, những mục dữ liệu này đòi hỏi nhiều thao tác tính toán.
3. Nếu thông tin để bắt đầu cho tiến trình kế tiếp được chuyển lên sau khi một tiến trình hoàn tất những thao tác bên trong của nó.
Sự sắp xếp theo kiểu 1 được sử dụng rộng rãi trong thiết kế phần cứng Kiểu đường ống 1 được minh họa như hình dưới:
Hình 1.20 Sơ đồ không gian thời gian của một ống dẫn
Trong hình này, mỗi tiến trình được giả định là cho cùng thời gian để hoàn tất những nhiệm vụ của nó. Mỗi giai đoạn thời gian là một chu kì đường ống. Mỗi yêu cầu của bài toán đòi hỏi 6 tiến trình liên tiếp, P0 P1 P2 P3 P4 và P5
Những thông tin tương tự có thể thấy như hình sau:
Hình 1.21 Sơ đồ không gian thời gian luân phiên
Dạng tương tự của biểu đồ này thỉnh thoảng hữu ích nếu nó cần thiết để cho thấy thông tin được chuyển từ một yêu cầu của nhiệm vụ này đến nhiệm vụ khác.
Với p tiến trình lập thành đường ống và m yêu cầu của bài toán để thực thi, số lượng các chu kì đường ống để thực thi tất cả m yêu cầu được cho bởi m+p-1 chu kì.
Sự sắp xếp theo kiểu 2: Một loạt những mục dữ liệu phải được xử lý trong một chuỗi, xuất hiện trong thuật toán tính toán, ví dụ như: nhân những phần tử của một mảng, ở đây những phần tử đơn lẻ tham gia vào đường ống như là một loạt các số
tuần tự. Kiểu sắp xếp này được thể hiện như hình sau: ở đây 6 tiến trình thiết lập đường ống và 6 phần tử d0 đến d5 được xử lý. Với p tiến trình và m mục dữ liệu, tất cả thời gian thực thi là (p-1)+n chu kì đường ống.
(a) Kiến trúc đường ống
(b) Sơ đồ thời gian
Hình 1.22 Đường ống đang xử lý với 6 phần tử dữ liệu
Thông dụng nhất là kiểu sắp xếp thứ 3, nó được ứng dụng nhiều trong lập trình song song. Ở đây chỉ có một yêu cầu của bài toán được thi hành nhưng mỗi tiến trình có thể chuyển thông tin của yêu cầu này đến tiến trình tiếp theo trước khi yêu cầu được hoàn tất. Hình 1.23 cho thấy khoảng thời gian khi mà thông tin có thể chuyển từ một tiến trình đến một tiến trình khác trước khi nó kết thúc việc thi hành của một tiến trình.
Hình 1.23 Xử lý đường ống mà ở đó thông tin được chuyển đến giai đoạn tiếp theo sau khi một tiến trình kết thúc
Nếu số lượng các giai đoạn lớn hơn số lượng các tiến trình trong đường ống, một nhóm các giai đoạn có thể được gán đến mỗi tiến trình( có thể thấy như hình 1.23) . Tất nhiên, những giai đoạn đường ống giới hạn trong một tiến trình phải được thi hành tuần tự.
Hình 1.23 Phân chia sự thi hành cho nhiều tiến trình