Yêu cầu của bài toán đánh giá hiệu năng

Một phần của tài liệu Đánh giá hiệu năng phần mềm xử lý song song trên hệ thống kết hợp CPU và GPU (Trang 40 - 45)

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

1.4.3.Yêu cầu của bài toán đánh giá hiệu năng

Đối với phần mềm được lập trình tuần tự, việc đánh giá hiệu năng cần đưa ra những thông số cụ thể phản ánh tốc độ tính toán, tốc độ truy cập bộ nhớ trong khi thực hiện bài toán trên CPU đơn của máy tính. Từ những thông số cụ thể, người lập trình có thể đưa những đánh giá về năng lực tính toán cũng như kích thước của bài toán là bao nhiêu thì sẽ phù hợp.

Đối với phần mềm lập trình song song trên hệ thống kết hợp CPU và GPU, việc đánh giá hiệu năng không chỉ dừng lại ở việc đo tốc độ tính toán, tốc độ truy cập bộ nhớ trên CPU mà còn đo các thông số đó trên GPU. Tổng hợp các thông số cho phép đánh giá hiệu năng của ứng dụng đang được triển khai về mức độ tăng tốc, hiệu quả xử lý cũng như khả năng mở rộng của bài toán.

Trên thực tế chưa có một phương pháp cụ thể để đánh giá hiệu năng một phần mềm xử lý song song. Hầu hết người ta dựa vào việc kết hợp nhiều kỹ thuật khác nhau để có thể đánh giá hiệu năng phần mềm xử lý song song. Trong khuôn khổ luận văn này, tác giả

41 nghiên cứu và trình bày các giải pháp kỹ thuật được dùng trong đánh giá hiệu năng một phần mềm xử lý song song trên hệ thống kết hợp CPU và GPU. Sau đó áp dụng các kỹ thuật đó vào đánh giá hiệu năng bài toán N-Body.

42

GIẢI PHÁP KỸ THUẬT ĐÁNH GIÁ HIỆU NĂNG PHẦN MỀM CHƢƠNG 2:

XỬ LÝ SONG SONG

Trong chương này, tác giả sẽ trình bày các giải pháp kỹ thuật chính trong đánh giá hiệu năng phần mềm sử lý song song. Bài toán N-Body được chọn làm mẫu áp dụng giải pháp kỹ thuật được trình bày để đánh giá hiệu năng.

Việc đánh giá hiệu năng của phần mềm xử lý song song trên hệ thống kết hợp CPU và GPU có thể chia làm 4 kỹ thuật chính theo các bước thực hiện như sau:

 Phân tích mô hình (Analytical modelling),

 Mô phỏng chương trình (Simulation),

 Đo lường (Measurement),

 Đánh giá kết quả (Evaluation)

Thông thường việc đánh giá hiệu năng sẽ bắt đầu từ phân tích mô hình hệ thống, tức là thiết lập một mô hình toán học với các phương trình mô tả các trạng thái của hệ thống, sau đó thực hiện mô phỏng, đo các thông số cần thiết như thời gian thực hiện, hiệu quả xử lý và cuối cùng là đánh giá các kết quả đo được để đưa ra các kết luận về hiệu năng của hệ thống.

Kỹ thuật phân tích mô hình bài toán 2.1.

Phân tích mô hình liên quan đến việc tạo ra một mô hình toán học của hệ thống. Trong tính toán song song việc phân tích mô hình là tiền đề cho việc tạo ra các đoạn chương trình xử lý song song khi cài đặt. Khi phân tích mô hình ta sẽ tìm ra được các công việc cần được song song hóa và có thể song song hóa thông qua việc khảo sát; phân tích các công thức toán học giải quyết các nhiệm vụ chính của chương trình. Ví dụ lớp bài toán ma trận thường được sử dụng trong tính toán song song, ta xét bài toán đơn giản là cộng hai ma trận A, B kích thước m x n cho ra một ma trận kết quả C, khi đó ta có công thức sau:

43 Với ví dụ trên, từ công thức cộng hai ma trận ta có thể chỉ ra được bản chất của việc cộng hai ma trận là thực hiện cộng từng phần tử ở cùng vị trí. Như vậy, nếu thực hiện song song hóa bài toán trên, ta sẽ chọn phép cộng Aij + Bij là một Kernel (nhân).

Kỹ thuật mô phỏng chƣơng trình 2.2.

Như đã trình bày trong phần tổng quan về đánh giá hiệu năng phần mềm, lớp bài toán xử lý song song thường là những bài toán xuất phát từ việc xử lý một lượng lớn dữ liệu, để thuận tiện cho việc đo hiệu năng thì mô phỏng là kỹ thuật cần thiết trước đó. Bản chất của kỹ thuật mô phỏng là tạo ra các đoạn chương trình mô tả các thuật toán song song thực hiện các công việc cần thiết của bài toán. Kỹ thuật này đòi hỏi người thực hiện phải hiểu rõ mô hình toán học đã phân tích ở mục trên và có kỹ năng lập trình song song.

Khi thực hiện kỹ thuật mô phỏng, ta có thể xác định được các điểm cần đo hiệu năng và độ đo của bài toán. Quay trở lại bài toán cộng hai ma trận ở trên, ta có thể mô phỏng bài toán đó qua một Kernel như sau:

// Định nghĩa Kernel cộng 2 ma trận

__global__ void MatAdd(float A[M][N], float B[M][N], Float C[M][N]) {

Int i = threadIdx.x; Int j = threadIdx.y; C[i][j] = A[i][j] + B[i][j]; }

Trong đoạn chương trình trên có 1 phép tính dấu phẩy động. Tốc độ xử lý của bài toán sẽ phụ thuộc vào thời gian thực hiện phép cộng các phần tử. Vậy ta có thể chỉ ra được độ đo để đánh giá hiệu năng của bài toán là số phép toán dấu phảy động trên một đơn vị thời gian.

44 Kỹ thuật phân tích mô hình và mô phỏng chương trình đôi khi có thể được kết hợp thành một mô hình duy nhất. Cả hai đều trải qua các mô hình trừu tượng của hệ thống và được định hướng theo hướng dự đoán hiệu suất..

Kỹ thuật đo hiệu năng 2.3.

Để có thể đánh giá được hiệu năng phần mềm xử lý song song, kỹ thuật quan trọng nhất là đo lường sẽ được trình bày trong phần dưới đây. Đo hiệu năng thường được thực hiện với các phép đo trực tiếp bằng cách sử dụng phần mềm hoặc theo dõi phần cứng. Kỹ thuật đo lường chỉ được thực hiện khi hệ thống vận hành, có thể trong môi trường mô phỏng. Khi tiến hành đo hiệu năng của một phần mềm xử lý song song trên hệ thống kết hợp CPU và GPU người ta thường đo: hiệu năng tính toán, hiệu năng truy cập bộ nhớ và hiệu năng truyền thông. Sau khi có kết quả ta có thể sử dụng các định luật đo sự tăng tốc xử lý để có thể đánh giá hiệu năng của ứng dụng.

2.3.1. Đo hiệu năng tính toán

Đo hiệu năng tính toán là việc xác định số phép toán, số lệnh hay tổng số hàm của chương trình thực hiện trên một đơn vị thời gian.

Để tiến hành đo hiệu năng tính toán, ta có thể sử dụng các phần mềm chuyên dụng như: WhetStone, DhryStone, Linpack…Trong đó WhetStone và DhryStone là những phần mềm đo hiệu năng tính toán đầu tiên.

WhetStone đo hiệu năng bằng cách thực hiện một tập các module con, mỗi module con có thể chứa các lệnh tính toán (ví dụ: các phép toán số nguyên, số thực dấu phảy động hay các cấu trúc điều khiển, lời gọi hàm), kết quả được in ra màn hình. Kết quả đo được qua WhetStone có được tính theo đơn vị KWIPS (Kilo Whetstone Instructions Per Second) hoặc MWIPS (Mega Whetstone Instructions Per Second).

DhryStone là công cụ dùng để đo hiệu năng các chương trình tính toán không chứa các phép tính số phải động. Nó thích hợp với các chương trình có kích thước mã nguồn nhỏ như các chương trình hệ thống (liên quan đến số nguyên). Đầu ra của DhryStone là số các DhryStones trên giây (tức là số phép lặp của vòng lặp chính trên giây). Đơn vị đo

45 của DhryStone là MIPS (số triệu lệnh trên giây). Về sau còn sử dụng thêm đơn vị DMIPS (Dhrystone MIPS),

Tuy nhiên cả hai công cụ trên đều thiết kế với mục đích đo hiệu năng của các chương trình xử lý tuần tự CPU. Hiện nay, nhiều chương trình tính toán song song trên hệ thống kết hợp CPU và GPU ra đời kéo theo sự ra đời của các công cụ đo hiệu năng tính toán song song. Một trong những công cụ tiêu biểu về đo hiệu năng tính toán song song trong những năm gần đây là Linpack [8] của tác giả Jack Dongarra trường Đại học Tennesse. Linpack sử dụng chủ yếu các phép toán trên kiểu dữ liệu số thực dấu phẩy động (floating point). Kết quả trả về có thứ nguyên là MFLOPS (hàng triệu phép tính dấu phẩy động trên 1 giây). Công cụ này được sử dụng rất phổ biến và đã được phát triển thêm các phiên bản viết bằng ngôn ngữ C và Java từ phiên bản ban đầu viết bằng ngôn ngữ Fortran.

Gần đây cùng với việc phát triển phần cứng hỗ trợ tính toán song song, tập đoàn NVIDA cũng xây dựng các công cụ và môi trường phần mềm giúp các nhà phát triển phần mềm có thể làm việc dễ dàng trên các thiết bị của hãng. Hệ thống thư viện CUDA đã cũng cấp nhiều bài toán đã được thiết kế với các chế độ benchmark, đo hiệu năng tính toán trên CPU hay kết hợp cả CPU và GPU. Lập trình viên có thể nghiệm đo hiệu năng tính toán bằng các sử dụng trực tiếp các thư viện này thay vì một công cụ khác. Đơn vị đo chính của các bài toán benchmack với CUDA là GFLOPs (Giga Flop Per Second).

Trong khuôn khổ luận văn, tác giả sử dụng chính thư viện benchmark được cung cấp bởi NVIDIA để thực hiện đo hiệu năng tính toán.

Một phần của tài liệu Đánh giá hiệu năng phần mềm xử lý song song trên hệ thống kết hợp CPU và GPU (Trang 40 - 45)