Phương án song song thứ nhất

Một phần của tài liệu Song song hoá bài toán JSP trên một số môi trường tính toán song song và phân tán luận văn thạc sĩ (Trang 101)

6. Phương pháp nghiên cứu

3.3.1.Phương án song song thứ nhất

Do quá trình phân nhánh đều xuất phát từ tập Ω’, thuật toán sẽ tiến hành như sau:

- Phân hoạch tập Ω’ đầu tiên tìm được trên Master thành các tập con Ω’’.

- Gửi tập con Ω’’ về cho các Slave. Các Slave sau khi nhận được phần tử trong tập con Ω’’ thì sẽ bắt đầu quá trình phân nhánh từ tập con Ω’’. - Quá trình mở rộng nhánh này sẽ thực hiện trên Slave cho đến khi tập

Ω rỗng và tất cả các phần tử trong tập con Ω’’ đều đã được duyệt. - Sau khi quá trình phân nhánh kết thúc, Slave sẽ gửi kết quả thu được

về cho Master.

Thuật toán:

Master:

- Tập Ω = {các công đoạn đầu tiên thực hiện của mỗi công việc} - Gửi tập Ω về cho các Slave

- rij = 0 for all (i,j) ∈ Ω

- Tính t(Ω) = min(i,j)∈ Ω { rij + pij}

- Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện - Tập Ω’ = { (i∗, j)|ri∗j <t(Ω) }

- Phân hoạch tập Ω’ thành các tập con Ω’’ và gửi về Slave - Nhận kết quả từ Slave gửi về giữ lại kết quả tối ưu nhất

Slave:

Bước 1:

- Nhận tập Ω từ Master - Nhận tập Ω’’ từ Master Bước 2:

- Trên tất cả (i, j) ∈ Ω’’, mở rộng một phần lịch bằng cách lên lịch (i,j) trên máy i

- Với mỗi (i, j) được chọn thì ta tiến hành tính cận LB

- So sánh cận (LB) vừa tính với chi phí (CP) thực hiện trên các nhánh. ▪ Nếu LB < CP: Quay lại bước 2 thực hiện

▪ Nếu LB > CP: tiếp tục mở rộng nhánh. - Xóa (i, j) khỏi tập Ω.

- Thêm một công đoạn kế tiếp sau (i, j) vào Ω. - Tính t(Ω) = min(i,j)∈ Ω { rij + pij}

- Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện - Tập Ω’’ = Ω’’ ∪ {(i∗, j)|ri∗j < t(Ω)}

- Nếu Ω rỗng và các phần tử trong Ω’’ đều đã được duyệt: Dừng thuật toán

Ngược lại

Quay lại bước 2 để thực hiện.

3.3.2. Phướng án song song thứ hai

Trong phương án này công việc sẽ thực hiện như sau:

- Máy master sẽ phân hoạch tập Ω’ thành các tập con Ω’’.

- Các tập con Ω’’ này sẽ được phân chia về cho các Slave để tiến hành lập lịch.

- Sau khi đã mở rộng xong nhánh đồng nghĩa với tập Ω rỗng và trong quá trình mở rộng nhánh thì tập Ω’ sẽ được thêm các phần tử mới chưa duyệt. Khác với phương án thứ nhất, trong phương án thứ nhất thì tập Ω’ lúc này sẽ tiếp tục được xét và mở rộng nhánh trên chính Slave đó. Ở phương án thứ hai, tập Ω’ sẽ được gửi về Master.

- Master tiếp tục phân hoạch tập Ω’ mới sinh ra thành các tập con Ω’’ và tiếp tục gửi lại cho các Slave để mở rộng nhánh mới.

- Lăp lại quá trình trên cho đến khi Ω rỗng và các phần tử trong Ω’ đều đã duyệt qua. (adsbygoogle = window.adsbygoogle || []).push({});

Thuật toán:

Master:

Bước 1: Tập Ω = {các công đoạn đầu tiên thực hiện của mỗi công việc} Bước 2: Gửi tập Ω về cho các Slave

Bước 3: rij = 0 for all (i,j) ∈ Ω

Bước 4: Tính t(Ω) = min(i,j)∈ Ω { rij + pij} Bước 5: Tìm tập Ω’

- Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện - Tập Ω’ = { (i∗, j)|ri∗j <t(Ω) }

Bước 6: Phân hoạch tập Ω’ thành các tập con Ω’’ và gửi về Slave để tìm kiếm nhánh

Bước 7:

- Nhận nhánh tìm được từ Slave gửi về giữ lại nhánh có kết quả tối ưu nhất.

- Nếu các phần tử Ω’’ từ Slave gửi về đều đã được xét thì dừng thuật toán. Trong trường hợp ngược lại, tiếp tục thực hiện phân hoạch tập Ω’’ và gửi về cho Slave phân nhánh.

Slave:

Bước 1:

- Nhận tập Ω từ Master - Nhận tập Ω’’ từ Master Bước 2:

- Trên tất cả (i, j) ∈ Ω’’, mở rộng một phần lịch bằng cách lên lịch (i,j) trên máy i

- Với mỗi (i, j) được chọn thì ta tiến hành tính cận LB

- So sánh cận (LB) vừa tính với chi phí (CP) thực hiện trên các nhánh. ▪ Nếu LB < CP: Quay lại bước 2 thực hiện

▪ Nếu LB > CP: tiếp tục mở rộng nhánh. - Xóa (i, j) khỏi tập Ω.

- Thêm một công đoạn kế tiếp sau (i, j) vào Ω. - Tính t(Ω) = min(i,j)∈ Ω { rij + pij}

- Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện - Tập Ω’’ = Ω’’ ∪ {(i∗, j)|ri∗j < t(Ω)}

- Nếu Ω rỗng và các phần tử trong Ω’’ đều đã được duyệt: Dừng thuật toán

Ngược lại

Quay lại bước 2 để thực hiện. Bước 3:

- Gửi kết quả các nhánh thu được về cho Master - Gửi tập Ω’’ về cho Master tiếp tục phân hoạch

3.3.3. Triển khai thuật toán trên môi trường tính toán song song

Triển khai trên môi trường nhiều máy tính sử dụng hàm thư viện MPI để truyền thông dữ liệu: Với hai thuật toán tác giả đề xuất ở mục 3.2.1 và mục 3.2.2

đều triển khai thành công trên môi trường nhiều máy tính. Trong thuật toán thì mỗi máy tính con có nhiệm vụ mở rộng nhánh từ tập dữ liệu gửi từ máy tính cha và quá trình thực hiện mở rộng nhánh trên các máy tính con này đều thực hiện song song cùng thời điểm.

Triển khai trên môi trường GPU và CPU sử dụng hàm thu viện CUDA: Trên

môi trường GPU và CPU thì hai thuật toán đề xuất ở mục 3.2.1 và mục 3.2.2 không triển khai thành công. Nguyên nhân do quá trình song song phân nhánh diễn ra đồng thời ở các tiến trình con. Với môi trường GPU và CPU thì việc các tiến trình song song diễn ra tại GPU. Do đó theo thuật toán thì mỗi tiến trình trên GPU sẽ đảm nhân công việc mở rộng một nhánh. Kết quả khi thực hiện của thuật toán trên môi trường GPU và CPU chỉ có thể chạy với dữ liệu từ 5 công việc và 5 máy trở xuống. Khi thực hiện với dữ liệu lớn hơn thì GPU không thể hoạt động được.

Một số nguyên nhân tìm hiểu được:

- Nhiệm vụ thực của GPU là hỗ trợ CPU trong quá trình tính toán mà không thể thay thế CPU được. Với việc áp dụng thuật toán song song đề ra ở mục 3.2.1 và mục 3.2.2 thì mỗi tiến trình đảm nhận công việc mở rộng một nhánh, do đó nếu dữ liệu đầu vào ngày càng lớn thì chi phí để mở rộng nhánh trên mỗi tiến trình của GPU sẽ tăng vì vậy việc phân nhánh trên từng tiến trình là không khả thi. (adsbygoogle = window.adsbygoogle || []).push({});

- Trong trường hợp triển khai trên môi trường nhiều máy, mỗi máy tính trong môi trường này đều có vi xử lý riêng và bộ nhớ riêng, do đó khi master phân tập dữ liệu về máy slave thì quá trình phân nhánh diễn ra độc lập trên các máy và các dữ liệu này bị thay đổi và không ảnh hưởng lẫn nhau, khi thu được kết quả thì slave tiến hành gửi kết quả về máy master để tổng hợp. Còn trên môi trường GPU - CPU thì tất cả các dữ liệu xử lý đều là dữ liệu chung nằm trên VRAM, bản chất của GPU là các tiến trình sẽ làm công việc xử lý dữ liệu trên từng phần tử của mảng, những thay đổi dữ liệu trên từng phần tử mảng thì không ảnh hưởng lẫn nhau, nhưng với những dữ liệu khác không phải là mảng thì một tiến trình làm thay đổi sẽ đồng thời làm ảnh hưởng đến dữ liệu của các tiến trình khác.

- Ngoài ra, các tập lệnh của các GPU được chuyên biệt hóa phục vụ cho đồ họa do đó phạm vi ứng dụng cho các ứng dụng tính toán song song cũng bị giới hạn.

Từ hạn chế trên của GPU tác giả đề xuất một phương pháp khác để triển khai thuật toán nhánh cận trên môi trường GPU và CPU. Từ thuật toán tuần tự cải tiến, quá trình xử lý song song không diễn ra ở việc phân chia dữ liệu đến các tiến trình

và thực hiện phân nhánh trên các tiến trình nữa. Việc xử lý song song trên GPU sẽ diễn ra tại các mảng có thể xử lý song song trong thuật toán nhánh cận cải tiến. Tác giả xử lý song song công việc trong thuật toán nhánh cận cải tiến sau:

o Tìm t có giá trị nhỏ nhất trong tập Ω : t(Ω) = min{rij + pij}

o Tìm máy i* là máy có (rij + pij)bằng với t

Thuật toán phân nhánh cải tiến xử lý trên GPU và CPU:

 Xử lý trên CPU:

- Ω = {Tập các công đoạn bắt đầu} - rij = 0 cho các (i, j) ∈ Ω

- minLB = +∞ Do

Do

If (Ω ≠ ∅) then

o t(Ω) = min{rij + pij}

o Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện

o Tập Ω’ = { (i∗, j)|ri∗j <t(Ω) }

▪ Xử lý trên GPU: Trên tất cả (i∗, j) ∈ Ω’, mở rộng một phần lịch bằng cách lên lịch (i*,j) trên máy i*. ▪ Với mỗi (i*, j) được chọn thì ta tiến hành tính cận

cho nút (i*,j).

▪ If minLB < Giá trị cận (i*, j) then

o Bỏ qua nhánh này và không xét các phần tử kế tiếp nữa

o Quay lại xét những phần tử còn lại chưa được duyệt trong tập Ω’

o Thoát khỏi vòng lặp while + Xóa (i*, j) khỏi tập Ω

+ Thêm một công đoạn kế tiếp sau (i*, j) vào Ω Else

Begin

minLB = chi phí thực hiện của nhánh End if

End If While (Ω ≠ ∅)

While (Ω’ còn phần tử chưa được duyệt )

Diễn giải: Tại thời điểm CPU thực hiện công việc: o t(Ω) = min{rij + pij}

o Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện

Thì công việc này sẽ không thực hiện trên CPU mà CPU sẽ tiến hành sao chép tập Ω từ RAM vào VRAM (device memory). DO GPU chỉ tính toán trên bộ nhớ của VRAM.

 Xử lý trên GPU: (adsbygoogle = window.adsbygoogle || []).push({});

Khi tập Ω đã được sao chép vào VRAM thì GPU sẽ khởi tạo các tiến trình và mỗi tiến trình xử lý một phần tử trong tập Ω. Như vậy mỗi tiến trình sẽ thực hiện công việc tính các giá trị (rij + pij) của từng phần tử. Sau khi tính được các giá trị (rij+pij) của các phần tử, mỗi tiến trình của GPU tiến hành so sánh để tìm ra được giá trị min bằng giá trị (rij+pij) nhỏ nhất đồng thời máy i* sẽ được ghi nhận lại để thực hiện công việc tiếp theo.

CHƯƠNG 4: ĐÁNH GIÁ KẾT QUẢ THỰC NGHIỆM

4.1. Kết quả thử nghiệm thuật toán nhánh cận song song giải quyết bài toán

lập lịch công việc trên môi trường nhiều máy tính.

Thuật toán được thử nghiệm trên hệ thống gồm hai máy ảo cài hệ điều hành Cent OS. Cấu hình mỗi máy: RAM 256 MB, bộ vi xử lý 1.

Ngôn ngữ sử dụng: Thuật toán được triên khai bằng ngôn ngữ C, sử dụng các hàm trong thư viện MPI để trao đổi dữ liệu giữa các máy.

Thử nghiệm:

Tác giả tiến hành cài đặt thuật toán tuần tự ban đầu, thuật toán tuần tự cải tiến, thuật toán nhánh cận song song 1 và thuật toán nhánh cận song song 2 trên tập các dữ liệu với số lượng các máy và số lượng công việc thay đổi, các thuật toán song song thử nghiệm với 3 tiến trình. kết quả chạy thử nghiệm trong bảng 4.1:

Bảng 4.1: Bảng mô tả kết quả thực hiện công việc 1

Công việc/Máy Thuật toán tuần tự ban đầu Thuật toán tuần tự cải tiến Thuật toán song song 1 Thuật toán song song 2 3 công việc/ 3 máy 0.005532 0.003456 0.439290 0.706385 4 công việc/ 4 máy 0.123183 0.058664 0.535645 1.162296 5 công việc/ 5 máy 3.471250 0.490766 0.912148 8.144447 6 công việc/ 6 máy 141.143496 9.916246 5.028870 196.756763 7 công việc/ 7 máy * 77.56584 21.485825 *

8 công việc/ 8 máy * 89.629005 55,020864 * 9 công việc/ 9 máy * 141.547706 71.993723 * 10 công việc/10

máy

Hình 4.1: Đồ thị biểu diễn thời gian xử lý các thuật toán 1 Nhận xét kết quả:

Thuật toán tuần tự và thuật toán tuần tự cải tiến

Từ kết quả thực nghiệm với số lượng công việc và số máy thay đổi, có thể đưa ra kết luận thuật toán tuần tự cải tiến có tốc độ thực hiện nhanh hơn thuật toán tuần tự ban đầu. Do đó áp dụng thuật toán tuần tự cải tiến để triển khai thành thuật toán song song là hợp lý.

Thuật toán tuần tự cải tiến so với thuật toán song song 1 và thuật toán song

song 2

Với số lượng công việc và số lượng máy khác nhau thì thuật toán song song 2 có tốc độ thực hiện chậm hơn thuật toán tuần tự cải tiến và thuật toán song song 1. Nguyên nhân do trong quá trình phân nhánh trải qua các lần lặp tìm kiếm nhánh, với mỗi lần lặp thì thuật toán lại trao đổi các tập dữ liệu Ω và Ω’ về các tiến trình khác nhau nên khối lượng dữ liệu truyền thông trên mạng quá lớn và làm chậm tốc độ hoàn thành của bài toán.

477,874597 389.455488 >477.874597 0,0019531 0,0039063 0,0078125 0,015625 0,03125 0,0625 0,125 0,25 0,5 1 2 4 8 16 32 64 128 256 512 3/3 4/4 5/5 6/6 7/7 8/8 9/9 10/10

Thuật toán tuần tự ban đầu

Thuật toán tuần tự cải tiến Thuật toán song song 1 Thuật toán song song 2

Thuật toán song song 1 so với thuật toán song song 2: thuật toán song song 1

không bị nhược điểm lượng dữ liệu truyền thông trên mạng giữa các tiến trình lớn như thuật toán song song 2, do trong quá trình thực hiện thì thuật toán song song 1 phân chia tập dữ liệu Ω’ đầu tiên và gửi về cho các tiến trình khác thực hiện phân nhánh đến khi các tiến trình thu được kết quả sẽ gửi trở lại cho tiến trình chính do đó quá trình truyền thông trên mạng chỉ xảy ra ở giai đoạn đầu tiên và giai đoạn cuối cùng sau khi đã thu được kết quả. Vì vậy thuật toán song song 1 thích hợp nhất để giải quyết bài toán lập lịch công việc bằng phương pháp nhánh cận.

Từ nhận xét trên ta tiến hành đánh giá kết quả của thuật toán song song 1 với thuật toán tuần tự cải tiến. Nhận thấy rằng với đầu vào bài toán ở mức từ 5 công việc và 5 máy trở xuống thì tốc độ thực hiện thuật toán cải tiến nhanh hơn thuật toán song song thứ nhất, do với tập dữ liệu nhỏ thì sẽ nằm trong khả năng xử lý của 1 bộ xử lý do đó thuật toán tuần tự cải tiến sẽ thực hiện mau hơn do không tốn chi phí thời gian truyền thông dữ liệu. Nhưng từ 6 công việc và 6 máy trở lên thì thuật toán song song 1 thực hiện nhanh hơn thuật toán tuần tự cải tiến, bởi vì với khối lượng dữ liệu càng lớn thì khả năng xử lý trên 1 bộ xử lý mất càng nhiều chi phí để thực hiện lần lượt quá trình tìm kiếm tất cả các nhánh của bài toán, nhưng với thuật toán song song 1 thì lượng dữ liệu lớn đó sẽ được chia đều về các tiến trình và tiến thánh thực hiên tìm kiếm nhánh song song đến khi đạt kết quả. Như vậy có thể tóm lại rằng với thuật toán song song 1 sẽ cải thiện đáng kể thời gian để hoàn thành bài toán lập lịch công việc so với thuật toán tuần tự.

4.2. Kết quả thử nghiệm thuật toán nhánh cận song song giải quyết bài toán

lập lịch công việc trên môi trường CPU - GPU.

Thuật toán được thử nghiệm trên hệ thống một máy tính Intel Core 2 Duo 2.66 GHz, RAM 2 GB, card đồ họa GeForce GTX 250 .

Ngôn ngữ sử dụng: Thuật toán được triên khai bằng ngôn ngữ C, sử dụng các hàm trong thư viện CUDA để truyền thông dữ liệu giữa CPU và GPU.

Thử nghiệm:

- Môi trường gồm nhiều máy tính, truyền thông dữ liệu thông qua hàm thư viện MPI. (adsbygoogle = window.adsbygoogle || []).push({});

- Môi trường máy tính gồm CPU và GPU, truyền thông dữ liệu thông qua hàm thư viện CUDA. Thu được một số kết quả như bảng 4.2: Bảng 4.2: Bảng mô tả kết quả thực hiện công việc 2

Công việc/Máy

Thuật toán tuần tự cải

tiến

Một phần của tài liệu Song song hoá bài toán JSP trên một số môi trường tính toán song song và phân tán luận văn thạc sĩ (Trang 101)