Lập trình thử nghiệm tìm tập con

Một phần của tài liệu Tính toán song song và ứng dụng vào bài toán tổ hợp (Trang 51 - 61)

5. Ý nghĩa khoa học và thực tiễn của đề tài

4.3. Lập trình thử nghiệm tìm tập con

Như đã trình bày ở chương 2 và chương 3, bài toán tập con chúng ta đưa về dạng dùng dãy nhị phân để biểu diễn. Theo các thuật toán ta tiến hành xây dựng chương trình để thực hiện bài toán trên môi trường Java, và tiến hành thử nghiệm đối với hai trường hợp sử dụng thuật toán tuần tự và thuật toán song song.

Thử nghiệm được tiến hành trên máy tính có các thông số kĩ thuật sau : - CPU: Intel core i5-4460 3.2GHz với 4 nhân, 4 luồng

- RAM: 1 thanh DDR3 8GB

- Ổ cứng: HDD Seagate 1 TB, Sata 3, tốc độ quay 7200 Rpm, bộ nhớ đệm 64MB cache, tốc độ truyền dữ liệu 6GB/s

Với dữ liệu đầu vào là giá trị số lượng phần tử n thay đổi từ 20 đến 25. Ta có kết quả thực hiện với thuật toán tuần tự như sau:

Các kết quả được ghi lại trên ổ đĩa bằng các tập tin văn bản. Kết quả càng nhiều thì việc sinh ra các tập tin càng nhiều. Ở đây ta không nhập vào các phần tử con ban đầu và kết quả hiển thị là chuỗi nhị phân t. Trong chuỗi nhị phân t, giá trị t[i]=1 có ý nghĩa là phần tử thứ i của tập hợp ban đầu có mặt trong tập con, với giá trị t[i]=0 có ý nghĩ phần tử thứ i trong tập hợp ban đầu không có mặt trong tập con. Sau đây là kết quả ghi lại thời gian thuật tuán tìm tập con tuần tự với giá trị n tăng dần từ 20 đến 25.

Hình 4.4. Kết quả thời gian tìm tập con theo thuật toán tuần tự

Với giá trị số phần tử n như trong thuật toán tuần tự, ta tiến hành thử nghiệm với thuật toán song song. Sau đây là kết quả thử nghiệm với giá trị phần tử n=20 số bộ xử lý là 2 ta có kết quả :

Hình 4.6. Kết quả thời gian tìm tập con bằng thuật toán song song

Vì bài toán tìm tập con của tập hợp có số phần tử là 10 và bộ xử lý là 2 nên bài thuật toán sẽ chia ra đều cho cho 2 bộ xử lý thực hiện cùng lúc thế nên tổng số lượng kết quả tìm được sẽ bằng tổng số kết quả ở các bộ xử lý.

Tương tự ta thay đổi giá trị số lượng phần tử n và số bộ xử lý thay đổi lần lượt là 2, 4, 8 ta có bản thống kê như sau :

Bảng 4.1. Kết quả thời gian tính toán tuần tự và song song

Số lượng phần tử n= Thời gian tính toán tuần tự (t)

Tính toán song song Thời gian tính toán

trên 2 bộ xử lý (t2)

Thời gian tính toán trên 4 bộ xử lý (t4) 20 2084 4008 4016 21 4304 6027 4023 22 8811 8023 6016 23 20087 18067 13009 24 42621 36008 28020 25 91399 61029 51360

Từ bảng số liệu trên ta có biểu đồ so sánh thời gian tính toán trong các trường hợp:

Biểu đồ 4.1. Biểu đồ thời gian tính toán tuần tự, tính toán song song

Qua biểu đồ ta có những nhận xét sau:

- Đối với các bài toán có số lượng phần tử nhỏ, bài toán đơn giản: thời gian tính toán tuần tự là thấp hơn so với tổng thời gian tính toán song song trên cùng một bài toán vì các hao tốn thời gian trao đổi dữ liệu giữa các bộ xử lý. - Đối với các bài toán có số lượng phần tử lớn, bài toán phức tạp: thời gian

tính toán tuần tự là cao hơn so với tổng thời gian tính toán song song, bài toán càng lớn thì sự chênh lệch về thời gian càng tăng dần.

- Trong tính toán song song, khi số bộ xử lý tăng thời gian tính toán giảm.

4.4. Lập trình thử nghiệm bài toán tìm hoán vị n phần tử

Như đã trình bày tại chương 2, chương 3 và chương 4 ta tiến hành xây dựng chương trình tính toán trên môi trường lập trình Java và sử dụng thư viện thread để ứng dụng song song hóa. Trong thử nghiệm này ta xây dựng chương trình hiện thực thuật toán tuần tự và song song hóa qua kết quả thực tế so sánh hiệu xuất về mặt thời gian.

Thử nghiệm được tiến hành trên máy tính có các thông số kĩ thuật sau : - CPU: Intel core i5-4460 3.2GHz với 4 nhân, 4 luồng

- RAM: 1 thanh DDR3 8GB

- Ổ cứng: HDD Seagate 1 TB, Sata 3, tốc độ quay 7200 Rpm, bộ nhớ đệm 64MB cache, tốc độ truyền dữ liệu 6GB/s

Đối với thuật toán tuần tự chương trình yêu cầu nhập vào số lượng phần tử của 0 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 n=20 n=21 n=22 n=23 n=24 n=25 t t2 t4

dãy số cần tìm hoán vị. Chương trình tính toán và trả kết quả dưới dạng tập tin văn bản. Đối với lượng kết quả lớn chương trình sẽ chia ra thành nhiều file nhỏ. Ta thử nghiệm với giá trị số phần từ n tăng dần từ 8 đến 12. Ta thấy thời gian tính toán tăng lên đáng kể, tăng mạnh với số lượng phần tử lớn.

Hình 4.7. Thời gian xử lý bài toán liệt kê hoán vị theo thuật toán tuần tự

Hình 4.9. Kết quả cụ thể trong từng tập tin

Đối với thuật toán song song ta xây dựng theo mô hình client-server ứng dụng cơ chế socket như đã nêu ở mục trên. Trước tiên ta chạy chương trình SSHoanViServer để nhập các thông tin ban đầu như: địa chỉ server serverIP, cổng kết nối port, số lượng phần tử n, số lượng bộ xử lý sẽ được tính toán theo công thức ở chương 3 đã trình bày k=p! (1<p<n) và trình diễn trên giao diện chương trình theo danh sách. Sau đó chọn bắt đầu để tạo server tính toán song song. Lúc này chương trình sẽ chờ các máy trạm kết nối đến rồi mới bắt đầu tính toán.

Sau đó cần mở chương trình liêt kê hoán vị client cho máy trạm với số lượng tương ứng với số bộ xử lý đã chọn. Sau đó chọn kết nối để thực hiện trao đổi thông tin với server và tiến hành tính toán.

Hình 4.11. Giao diện phần client của chương trình tính toán song song tìm hoán vị

Khi số lượng bộ xử lý con kết nối để máy chủ đã đủ, chương trình sẽ tự động thực hiện các bước tính toán theo thuật toán và hiển thị kết quả thời gian xử lý của các bộ xử lý phụ cũng như tổng thời gian chi phí.

Hình 4.14. Nội dung tập tin kết quả của bài toán liệt kê hoán vị song song

Tương tự, ta thử nghiệm với các trường hợp số lượng phần tử n nằm trong khoản 7<n<13 và số lượng bộ xử lý không thay đổi lần lượt là 2, 6. Thống kê các kết quả ghi lại ở bảng sau:

Bảng 4.3. Kết quả thử nghiệm tính toán song song

Số lượng phần tử n= Thời gian tính toán tuần tự (t)

Tính toán song song Thời gian tính toán

trên 2 bộ xử lý (t2)

Thời gian tính toán trên 6 bộ xử lý (t6) 8 72 1833 4018 9 382 2012 4025 10 3919 4215 4114 11 49275 31420 22704 12 662828 369148 293274

Sau đây là biểu đồ so sánh thời gian xử lý giữa thuật toán tuần tự và thuật toán song song:

Biểu đồ 4.2. Biểu đồ so sánh thời gian tính toán giữa hai thuật toán

Qua biểu đồ ta có những nhận xét sau:

- Đối với các bài toán có số lượng phần tử nhỏ, bài toán đơn giản: thời gian tính toán tuần tự là thấp hơn so với tổng thời gian tính toán song song trên cùng một bài toán vì các hao tốn thời gian trao đổi dữ liệu giữa các bộ xử lý. Nhất là ở những bài toán nhỏ thì thời gian tính toán tuần tự gần như là không đáng kể ví dụ ở trường hợp n=8, n=9.

- Đối với các bài toán có số lượng phần tử lớn, bài toán phức tạp: thời gian tính toán tuần tự là cao hơn so với tổng thời gian tính toán song song, bài toán càng lớn thì sự chênh lệch về thời gian càng tăng dần. Như ta thấy ở n=11, n=12 số lượng phần tử tăng lên 1 nhưng số lượng kết quả cũng như số phép tính bùng nổ. Chính lúc này tính toán song song phát huy được thế mạnh của nó, thời gian tính toán tuần tự lớn hơn 2 lần so với thời gian tính toán song song 6 bộ xử lý.

- Trong tính toán song song, khi số bộ xử lý tăng thời gian tính toán giảm. Qua các thử nghiệm trên ta thấy đối với những bài toán có độ phức tạp nhỏ, các thuật toán song song mất đi 1 khoản thời gian trao đổi dữ liệu giữa các bộ xử lý nên thời gian tính toán chậm hơn so với thuật toán song song. Thế nhưng đối với những bài toán lớn phức tạp thì thuật toán tính toán song phát huy được thế mạnh của nó. Từ việc chia nhỏ các công việc, phân công đồi đều với nhau để thực hiện đồng thời trên các bộ xử lý khiến cho thời gian tính toán giảm đi lượng lớn so với ban đầu.

0 100000 200000 300000 400000 500000 600000 700000 n=8 n=9 n=10 n=11 n=12 (t) (t2) (t6)

CHƯƠNG 5 TỔNG KẾT

Một phần của tài liệu Tính toán song song và ứng dụng vào bài toán tổ hợp (Trang 51 - 61)

Tải bản đầy đủ (PDF)

(71 trang)