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

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin 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 (Trang 104 - 115)

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

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.

- 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 (Ω ≠ ∅) (adsbygoogle = window.adsbygoogle || []).push({});

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:

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 (adsbygoogle = window.adsbygoogle || []).push({});

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.

- 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

Thuật toán song song triển khai trên

GPU và CPU

Thuật toán song song triển khai trên môi trường

nhiều máy tính 3 công việc/3 máy 0.003456 0.218000 0.779147

4 công việc/4 máy 0.058664 0.718000 9.377534 5 công việc/5máy 0.490766 1.560000 37.634233 6 công việc/6 máy 9.916246 6.833000 369.530780 7 công việc/7 máy 77.56584 27.75200 1663.936657 8 công việc/8 máy 89.629005 41.71400 *

9 công việc/9 máy 141.547706 57.56400 * 10 công việc/10 máy 477.874597 59.17100 *

Hình 4.2: Đồ thị biểu diễn thời gian xử lý các thuật toán 2

477,874597 59.17100 1663,936657 0 200 400 600 800 1000 1200 1400 1600 1800 3/3 4/4 5/5 6/6 7/7 8/8 9/9 10/10

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

Thuật toán song song triển khai trên GPU và CPU Thuật toán song song triển khai trên môi trường nhiều máy tính

Nhận xét kết quả:

Thuật toán tuần tự cải tiến thực hiện nhanh hơn thuật toán song song khi dữ liệu đầu vào nhỏ, cụ thể từ 5 công việc – 5 máy trở xuống thì việc thực hiện bằng tuần tự cải tiến là tốt hơn. Nhưng nếu dữ liệu đầu vào từ 6 công việc – 6 máy trở lên thì thuật toán tuần tự cải tiến có thời gian hoàn thành bài toán chậm hơn thuật toán song song.

Với kết quả thu được khi tiến hành kiểm thử thuật toán trong bảng 4.2, thuật toán được đề xuất ở mục 3.2.3 triển khai trên hai môi trường CPU-GPU (truyền thông dữ liệu bằng hàm thư viện CUDA) và môi trường nhiều máy tính (truyền thông dữ liệu bằng hàm thư viện MPI). Thuật toán chỉ hiệu quả khi chạy trên môi trường gồm CPU – GPU mà không hiệu quả khi triển khai trên môi trường nhiều máy tính. Vì với thuật toán mục 3.2.3, trong quá trình tìm kiếm nhánh sẽ trải qua các lần lặp liên tục để có thể mở rộng nhánh, Nếu thực hiện trên CPU-GPU thì trong mỗi lần lặp thuật toán phải trải qua giai đoạn mất thời gian sao chép dữ liệu từ RAM đến VRAM để GPU thực hiện thông qua bus do đó chi phí thời gian này không đáng kể, còn thực hiện trên môi trường nhiều máy tính thì với mỗi lần lặp đó trải qua giai đoạn mất thời gian sao chép dữ liệu từ master đến slave thông qua đường truyền mạng nên chi phí thời gian sẽ lớn và đây là yếu tố làm cho thuật toán đề xuất ở mục 3.2.3 chỉ hiệu quả trên môi trường CPU-GPU mà không hiệu quả trên môi trường nhiều máy tính.

KẾT LUẬN

Với mục tiêu chính là tìm ra thuật toán có thể cho ra một lịch trình thực hiện các công việc trên các máy chính xác với thời gian ngắn, thì thuật toán nhánh cận đã được áp dụng để triên khai thực hiện. Thuật toán nhánh cận đã được cải tiến lại và cho ra lịch trình thực hiện các công việc với thời gian hoàn thành nhanh hơn. Bằng cách cải tiến lại quá trình tìm kiếm nhánh, thuật toán nhánh cận cải tiến góp phần loại bỏ nhiều nhánh không khả thi trong quá trình thực hiện. Ngoài ra thuật toán nhánh cận cải tiến còn được phát triển thành thuật toán song song để triển khai trên môi trường tính toán song song và phân tán. Qua quá trình song song thuật toán, điều rút ra được trong quá trình làm luận văn là cần đến hai thuật toán nhánh cận song song để triển khai trên hai môi trường nhiều máy tính và môi trường CPU- GPU không. Do hai môi trường tính toán song song này khác nhau về bản chất nên cùng một thuật toán không thể hiệu quả khi triển khai trên cả hai môi trường CPU- GPU và môi trường nhiều máy tính.

TÀI LIỆU THAM KHẢO Tài liệu tiếng việt

[1] Nguyễn Thị Thùy Linh (2009), “Tính toán hiệu năng cao với bộ xử lý đồ họa

GPU và ứng dụng”, luận văn thạc sĩ, trường Đại học Công nghệ Hà Nội.

[2] Nguyễn Thị Bích Nhật và cộng sự (2008), “Thuật toán nhánh cận trên môi

trường song song”, báo cáo khoa học, trường Đại học Sư phạm Hà Nội.

[3] Lê Minh Hoàng (2002), “Giải thuật & Lập trình”, Bài giảng chuyên đề, Đại học Sư phạm Hà Nội. (adsbygoogle = window.adsbygoogle || []).push({});

[4] Từ Minh Phương, Trịnh Hữu Kiên, Nguyễn Nam Phong (2002), “Thuật toán lập lịch trong môi trường phân tán theo tiếp cận agent”.

[5] Nguyễn Giang Sơn (2000), “Môi trường tính toán song song trên mạng phân

tán không đồng nhất”, luận án thạc sĩ khoa học, trường Đại học Khoa học Tự nhiên

Thành phố Hồ Chí Minh.

[6] Nguyễn Đức Thành, “Áp dụng giải thuật di truyền và tìm kiếm cục bộ để giải

quyết bài toán sắp Thời Khóa Biểu cho khoa Công Nghệ Thông Tin”.

[7] Bùi Minh Giao Tiên (2002), “Áp dụng mô hình job shop linh động trong hệ hỗ

trợ lập lịch sản xuất”, luận văn thạc sĩ tin học, trường Đại học Khoa học Tự nhiên

Thành phố Hồ Chí Minh

[8] Huỳnh Bá Tùng, Trần Việt Cường (2005), “Nghiên cứu tính toán lưới và thử

nghiệm một số thuật toán lý thuyết đồ thị”, khóa luận cử nhân tin học. Trường Đại

học Khoa học Tự nhiên Thành phố Hồ Chí Minh.

Tài liệu tiếng anh

[9] Brian Patrick Ivers (2006), “Job shop optmization through multiple independent

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin 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 (Trang 104 - 115)