Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
828,69 KB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG……………
LUẬN VĂN
Tìm hiểuOpenMP
và ứngdụng
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 1
Lời cảm ơn.
Đầu tiên cho em xin phép được gửi lời cảm ơn chân thành và sâu sắc tới
thầy, thạc sỹ Ngô Trường Giang, thầy đã tận tình chỉ bảo, hướng dẫn, giúp đỡ
em trong suốt quá trình làm tốt nghiệp.
Cho em được gửi lời cảm ơn các thầy cô trong hội đồng phản biện đã chỉ
ra cho em những hạn chế, những vấn đề còn thiếu sót của bài báo cáo, qua đó
giúp em củng cố, bổ sung để bài báo cáo của mình hoàn thiện hơn.
Cho em được gửi lời cảm ơn tới thầy hiệu trưởng, các thầy cô trong ban
lãnh đạo, các thầy cô trong tổ bộ môn Công Nghệ Thông Tin cùng toàn thể quý
thầy cô trong trường đã tạo môi trường đào tạo cho em được rèn luyện, học hỏi,
tận tình truyền đạt những kiến thức quý báu trong suốt bốn năm học tại trường.
Cuối cùng cho em được gửi tới toàn thể quý thầy cô lời chúc sức khoẻ,
thành công và hạnh phúc.
Em xin chân thành cảm ơn quý thầy cô !
Hải Phòng, ngày 26 tháng 06 năm 2009.
SINH VIÊN
Phạm Hải Hưng.
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 2
Mục lục
Lời cảm ơn. 1
Mục lục 2
Mở đầu 5
CHƢƠNG 1: Tổng quan về lập trình song song, tính toán song song. 7
1.1 Định nghĩa: 7
1.1.1 Thế nào là lập trình, tính toán song song ? 7
1.1.2 Tại sao phải lập trình, tính toán song song ? 7
1.1.3 Sử dụng lập trình, tính toán song song để làm gì ? 7
1.1.4 So sánh lập trình tính toán tuần tự và lập trình tính toán song song. 8
1.2 Sự phân chia cấu trúc tính toán song song. 9
1.2.1 Phân chia dựa trên quan hệ giữa chỉ thị lệnh và dữ liệu 9
1.2.2 Sự phân chia dựa trên mối quan hệ giữa bộ xử lý và bộ nhớ. 12
1.3 Các mô hình lập trình song song. 16
1.3.1 Mô hình dùng chung bộ nhớ (Shared Memory) 17
1.3.2 Mô hình luồng (Thread) 17
1.3.3 Mô hình truyền thông điệp (Message Passing) 18
1.3.4 Mô hình song song dữ liệu (Data Parallel). 19
1.4 Một số vấn đề liên quan đến lập trình và tính toán song song. 20
1.4.1 Định luật Amdahl‟s 20
1.4.2 Cân bằng tải. 21
1.4.3 Sự bế tắc. 22
CHƢƠNG 2: Thƣ viện Mã nguồn mở OpenMP 24
2.1 Tổng quan về OpenMP. 24
2.1.1 Giới thiệu 24
2.1.2 Định nghĩa. 24
2.1.3 Lịch sử phát triển 24
2.1.4 Mục đích của OpenMP. 25
2.2 Mô hình lập trình song song trong OpenMP. 25
2.3 Các chỉ thị biên dịch (Compiler Directive). 26
2.3.1 Khuôn dạng của chỉ thị. 26
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 3
2.3.2 Phạm vi của chỉ thị. 27
2.3.3 Cấu trúc vùng song song. 28
2.3.4 Cấu trúc chia sẻ công việc (Work Sharing Construct) 29
2.3.5 Cấu trúc đồng bộ. 37
2.3.6 Chỉ thị THREADPRIVATE 41
2.4 Các mệnh đề trong OpenMP 41
2.4.1 Mệnh đề PRIVATE 41
2.4.2 Mệnh đề FIRSTPRIVATE 42
2.4.3 Mệnh đề LASTPRIVATE 42
2.4.4 Mệnh đề SHARED 42
2.4.5 Mệnh đề DEFAULT 42
2.4.6 Mệnh đề REDUCTION 43
2.4.7 Mệnh đề COPYIN 43
2.5 Thư viện Runtime (Runtime Library Routine). 44
2.5.1 OMP_SET_NUM_THREADS 44
2.5.2 OMP_GET_NUM_THREADS 45
2.5.3 OMP_GET_THREAD_NUM 45
2.5.4 OMP_GET_MAX_THREADS 45
2.5.5 OMP_GET_NUM_PROCS 45
2.5.6 OMP_IN_PARALLEL 45
2.5.7 OMP_SET_DYNAMIC 46
2.5.8 OMP_GET_DYNAMIC 46
2.5.9 OMP_SET_NESTED 46
2.5.10 OMP_GET_NESTED 47
2.5.11 OMP_INIT_LOCK 47
2.5.12 OMP_DESTROY_LOCK 47
2.5.13 OMP_SET_LOCK 47
2.5.14 OMP_UNSET_LOCK 47
2.5.15 OMP_TEST_LOCK 48
2.6 Các biến môi trường (Enviroment Variables). 48
2.6.1 OMP_SCHEDULE 48
2.6.2 OMP_NUM_THREADS 48
2.6.3 OMP_DYNAMIC 48
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 4
2.6.4 OMP_NESTED. 49
CHƢƠNG 3: Thực nghiệm 50
3.1 Bài toán tính giai thừa của một số nguyên lớn. 50
3.1.1 Phát biểu bài toán. 50
3.1.2 Thuật toán thực hiện. 50
3.1.3 Song song hoá thuật toán tính giai thừa của một số nguyên lớn. 51
3.1.4 Thực hiện song song hoá bằng OpenMP. 53
3.1.5 Kết quả thực nghiệm và nhận xét. 54
3.2 Bài toán tìm số nguyên tố có n chữ số. 55
3.2.1 Phát biểu bài toán 55
3.2.2 Thuật toán thực hiện 55
3.2.3 Song Song hoá thuật toán tìm số nguyên tố có n chữ số. 58
3.2.4 Thực hiện song song hoá bằng OmpenMP. 60
3.2.5 Kết quả thực nghiệm và nhận xét 62
Kết luận 64
Tài liệu tham khảo 65
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 5
Mở đầu
Ngày nay với sự phát triển của công nghệ thông tin, các máy tính đa nhân,
đa lõi (multiple processor) đang dần dần thay thế cho bộ xử lý đơn lõi
(single processor) vì các lý do khác nhau như:
Tốc độ của bộ xử lý đơn lõi (single processor) đã đến giới hạn.
Đáp ứng nhu cầu tính toán nhanh của người dùng.
Giải quyết các bài toán lớn mà với bộ xử lý đơn lõi không đáp ứng được.
Giảm chi phí đầu tư nhưng vẫn đạt hiệu quả trong tính toán.
Tuy nhiên với lối lập trình truyền thống là lập trình tuần tự thì hầu hết các
chương trình ứngdụng đều được lập trình, thiết kế trên bộ xử lý đơn lõi
(single processor). Như vậy sẽ không khai thác hết hiệu năng tính toán mà
bộ xử lý đa nhân, đa lõi mang lại đồng thời khó đáp ứng được yêu cầu tính toán
của người dùng.
Một thách thức, một yêu cầu đặt ra là làm thế nào để khai thác được hiệu
năng tính toán mà bộ xử lý đa nhân, đa lõi mang lại. Không còn cách nào khác
là thay vì lập trình, tính toán tuần tự chuyển sang lập trình, tính toán song song.
Lập trình, tính toán song song ra đời nhằm khai thác, phát huy hiệu năng
tính toán của bộ xử lý đa lõi, đồng thời giảm thời gian tính toán của các bài toán
có khối lượng dữ liệu lớn.
Các công cụ hỗ trợ lập trình, tính toán song song có thể kể đến như: Thư
viện MPI (Message Passing Interface), PMV (Parallel Virtual Machine), một số
được tích hợp sẵn thành chuẩn trong các ngôn ngữ lập trình như thư viện
OpenMP (Open Multiple Processing) trong C/C++, FOTRAN. Trong khuôn khổ
bài khoá luận em sẽ đi tìm hiểu, áp dụng lập trình, tính toán song song, trên cơ
sở sử dụng thư viện OpenMP trong việc giảm thời gian tính toán của bài toán
tìm số nguyên tố có số chữ số lớn. Nội dung của bài khoá luận bao gồm:
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 6
Chương 1: Tìmhiểu lập trình song song, tính toán song song.
Chương này giới thiệu một cách tổng quan về lập trình và tính toán song
song như sự phân chia cấu trúc tính toán song song, các mô hình lập trình
tính toán song song.
Chương 2: Giới thiệu về thư viện mã nguồn mở OpenMP.
Chương này sẽ đi sâu, nghiên cứu cấu trúc, các thành phần của thư viện
mã nguồn mở OpenMP như các chỉ thị biên dịch, các hàm thư viện
runtime và các biến môi trường.
Chương 3: Phát biểu, mô tả và cài đặt thực nghiệm bài toán tính giai thừa
và bài toán tìm số nguyên tố có số chữ số lớn.
Chương này sẽ đi vào mô tả, phân tích và cài đặt bài toán tính giai thừa
của một số nguyên lớn và bài toán tìm số nguyên tố có số chữ số lớn theo
cả hai hướng tuần tự và song song. Từ đó đưa ra sự so sánh, đối chiếu về
mặt thời gian của hai bài toán theo hai hướng thực hiện.
Kết luận: Nêu lên những vấn đề đã nghiên cứu và kết quả đạt được, những
hạn chế, thiếu sót và phương hướng phát triển trong tương lai.
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 7
CHƢƠNG 1: Tổng quan về lập trình song song, tính toán song song.
1.1 Định nghĩa:
1.1.1 Thế nào là lập trình, tính toán song song ?
Tính toán song song là sự thực hiện một cách đồng thời hai hoặc nhiều
phép toán, công việc vào một thời điểm, được thực hiện bởi các bộ xử lý khác
nhau.
1.1.2 Tại sao phải lập trình, tính toán song song ?
Theo xu hướng phát triển của công nghệ thông tin, các bộ xử lý đa nhân,
đa lõi (multiple processor) đang dần dần thay thế các bộ xử lý đơn lõi (single
processor) tuy nhiên với lối lập trình truyền thống (lập trình tuần tự), các câu
lệnh, các quá trình xử lý được thực hịên một cách lần lượt, tuần tự như vậy sẽ
không phát huy hết công năng, hiệu năng của bộ vi xử lý đa nhân, đa lõi
(multiple processor). Lập trình, tính toán song song ra đời như một lời giải cho
yêu cầu, thách thức đặt ra là làm thế nào để phát huy công năng, hiệu năng của
bộ đa xử lý (multiple processor).
Trên thực tế, có rất nhiều bài toán với dữ liệu lớn, độ phức tạp tính toán
cao mà đòi hỏi thời gian xử lý ngắn, độ chính xác cao. Vd: các bài toán liên
quan tới xử lý ảnh, xử lý tín hiệu, dự báo thời tiết, mô phỏng giao thông, mô
phỏng sự chuyển động của các phân tử, nguyên tử, mô phỏng bản đồ gen, các
bài toán liên quan đến cơ sở dữ liệu và khai thác cơ sở dữ liệu. . . với bộ xử lý
đơn lõi thì khó có thể thực hiện và cho kết quả như mong muốn được.
Lập trình, tính toán song song là lời giải đáp cho bài toán tăng hiệu năng
xử lý đồng thời rút ngắn thời gian xử lý tính toán của người dùng.
1.1.3 Sử dụng lập trình, tính toán song song để làm gì ?
Phát huy công năng, hiệu năng của bộ xử lý đa nhân, đa lõi.
Giải quyết một số bài toán lớn mà bộ xử lý đơn lõi (single processor)
không thực hiện được
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 8
Tăng hiệu quả tính toán đồng thời giảm thời gian tính toán.
1.1.4 So sánh lập trình tính toán tuần tự và lập trình tính toán song song.
Lập trình tính toán tuần tự
Lập trình tính toán song song
Chương trình ứngdụng chạy
trên bộ xử lý đơn (single
processor).
Các chỉ thị lệnh được bộ xử lý
(CPU) thực hiện một cách lần
lượt, tuần tự.
Mỗi chỉ thị lệnh chỉ thực thiện
trên duy nhất một thành phần
dữ liệu.
Lập trình viên chỉ cần đảm
bảo viết đúng mã lệnh theo
giải thuật chương trình là
chương trình có thể dịch, chạy
và cho ra kết quả.
Thường được áp dụng đối với
các bài toán có dữ liệu nhỏ, độ
phức tạp bình thường và thời
gian cho phép.
Chương trình ứngdụng chạy
trên hai hoặc nhiều bộ xử lý.
Các chỉ thị lệnh được các bộ vi
xử lý thực hiện một cách song
song, đồng thời.
Mỗi chỉ thị lệnh có thể thao tác
trên hai hoặc nhiều thành phần
dữ liệu khác nhau.
Ngoài việc đảm bảo viết đúng
mã lệnh theo giải thuật, lập
trình viên còn phải chỉ ra trong
chương trình đoạn mã nào được
thực hiện song song, đồng thời.
Thường được áp dụng đối với
các bài toán có dữ liệu lớn, độ
phức tạp cao và thời gian ngắn.
Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng
Phạm Hải Hưng - Lớp CT902 Trang 9
1.2 Sự phân chia cấu trúc tính toán song song.
1.2.1 Phân chia dựa trên quan hệ giữa chỉ thị lệnh và dữ liệu
Dựa vào mối quan hệ giữa chỉ thị lệnh và dữ liệu chia làm các loại :
Đơn chỉ thị lệnh, đa dữ liệu SIMD (Single Instruction, Multiple Data).
Đa chỉ thị lệnh, đơn dữ liệu MISD (Multiple Instruction, Single Data).
Đa chỉ thị lệnh, đa dữ liệu MIMD (Multiple Instruction, Multiple Data).
1.2.1.1 Đơn chỉ thị lệnh, đa dữ liệu SIMD (Single Instruction, Multiple
Data).
Hình 1.1 Cấu trúc đơn chỉ thị lệnh, đa dữ liệu
Là một loại của bộ xử lý song song.
Khi một chỉ thị phát ra, tất cả các quá trình xử lý được thực hiện.
Mỗi quá trình xử lý sẽ thực hiện trên một thành phần dữ liệu khác nhau
của cùng một cấu trúc dữ liệu.
Được chia làm hai loại:
Vector SIMD.
Parallel SIM.
[...]... bản 2 0 được Fortran công bố vào năm 2000 và đến năm 2002 C/C++ cũng tung ra phiên bản 2 0 của mình Phạm Hải Hưng - Lớp CT902 Trang 24 Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng Phiên bản 2 5 được cả Fortran và C/C ++ công bố vào năm 2005 Phiên bản 3 0 được công bố vào năm 2008 và nó là phiên bản hiện tại được tích hợp thêm nhiều tính năng mới 2.1.4 Mục đích của OpenMPOpenMP ra đời với mục tiêu cung... nhất ta sử dụng là dò tìm sự bế tắc khi chúng xảy ra và khôi phục lại Một cách khác là sử dụng các thông tin yêu cầu tài nguyên của các tiến trình để phân phối tài nguyên cho hợp lý tránh rơi vào tình trạng bế tắc Cách thứ ba là ngăn cấm không để xảy ra đồng thời ba điều kiện cuối trong các điều kiện nảy sinh bế tắc Phạm Hải Hưng - Lớp CT902 Trang 23 Đồ án tốt nghiệp TìmhiểuOpenMP và ứngdụng CHƢƠNG... Lớp CT902 Trang 21 Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng vậy cần phải có số lượng lớn bộ nhớ trên các bộ xử lý để lưu trữ thông tin Vì vậy các thuật toán thuộc lớp này ít được sử dụng Cân bằng tải phân tán hoàn toàn: Trong chiến lược này mỗi bộ xử lý có một bản sao về thông tin trạng thái của hệ thống Các bộ xử lý trao đổi thông tin trạng thái với nhau và sử dụng các thông tin này để làm thay... chủ Phạm Hải Hưng - Lớp CT902 Trang 25 Đồ án tốt nghiệp TìmhiểuOpenMP và ứngdụng 2.3 Các chỉ thị biên dịch (Compiler Directive) Chỉ thị biên dịch là bắt buộc có đối với mỗi chương trình ứngdụng song song Chỉ thị biên dịch sẽ báo cho trình biên dịch biết sự bắt đầu của khối mã thực hiện song song 2.3.1 Khuôn dạng của chỉ thị Chỉ thị trong OpenMP được cho dưới dạng sau: #pragma omp directive- name... quyền khi sử dụng tài nguyên riêng của nó Không có sự ưu tiên: Mỗi tiến trình không bao giờ giải phóng tài nguyên mà tiến trình đó đang chiếm giữ cho đến khi không còn sử dụng chúng nữa Sự chờ đợi tài nguyên: Mỗi tiến trình đang chiếm giữ tài nguyên trong khi lại đợi tiến trình khác giải phóng tài nguyên cho chúng Phạm Hải Hưng - Lớp CT902 Trang 22 Đồ án tốt nghiệp TìmhiểuOpenMP và ứngdụng Sự chờ... passing) Mô hình song song dữ liệu (Data Parallel) Phạm Hải Hưng - Lớp CT902 Trang 16 Đồ án tốt nghiệp TìmhiểuOpenMP và ứngdụng 1.3.1 Mô hình dùng chung bộ nhớ (Shared Memory) Trong mô hình lập trình dùng chung bộ nhớ, các thao tác, nhiệm vụ sử dụng chung bộ nhớ Chúng truy cập, đọc, ghi vào bộ nhớ một cách đồng bộ Các khoá, cờ hiệu được dùng để điều khiển sự truy cập bộ nhớ Một điểm thuận... thông điệp (Message Passing) Hình 1.11 Mô hình truyền thông điệp Phạm Hải Hưng - Lớp CT902 Trang 18 Đồ án tốt nghiệp TìmhiểuOpenMP và ứngdụng Mô hình truyền thông điệp được định nghĩa là : Đặt quá trình xử lý sử dụng một bộ nhớ cục bộ Các bộ xử lý trao đổi với nhau thông qua việc gửi và nhận các thông điệp Sự di chuyển dữ liệu yêu cầu sự kết hợp thao tác thực hiện của mỗi quá trình xử lý (truyền nhận... OpenMP ra đời với mục tiêu cung cấp một chuẩn chung cho rất nhiều kiến trúc và nền tảng phần cứng Nó là thư viện mã nguồn mở cung cấp rất nhiều các hàm, các chỉ thị giúp cho người lập trình linh động và dễ dàng phát triển ứngdụng song song của mình 2.2 Mô hình lập trình song song trong OpenMP Mô hình sử dụng để lập trình trong OpenMP là mô hình FORK – JOIN Hình 2.1 Mô hình fork - join Trong mô hình... qua truyền và nhận thông điệp (Message Passing) 1.2.2.2 Phân bổ bộ nhớ (Distributed Memory) Hình 1.8 Mô hình phân bổ bộ nhớ Phạm Hải Hưng - Lớp CT902 Trang 14 Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng Phân bổ bộ nhớ (Distributed Memoy) là sự kết nối mạng nhiều bộ nhớ của các bộ vi xử lý Mỗi bộ xử lý có bộ nhớ cục bộ riêng, bộ nhớ cục bộ của bộ xử lý này sẽ không có sự truy cập, sử dụng đối với... vòng lặp được phân chia một cách tĩnh cho các luồng thực hiện dựa vào biến chunk_size, sau đó sẽ gán cho các luồng thực hiện theo kiểu quay vòng dựa vào chỉ số của các luồng Nếu biến chunk_size không được chỉ định thì mặc định hệ thống sẽ gán một giá trị là 1 Phạm Hải Hưng - Lớp CT902 Trang 30 Đồ án tốt nghiệp TìmhiểuOpenMPvàứngdụng Ví dụ: #pragma omp parallel #pragma omp for schedule (static, .
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG……………
LUẬN VĂN
Tìm hiểu OpenMP
và ứng dụng
Đồ án tốt nghiệp Tìm hiểu OpenMP và ứng dụng
Phạm Hải Hưng. khoá luận bao gồm:
Đồ án tốt nghiệp Tìm hiểu OpenMP và ứng dụng
Phạm Hải Hưng - Lớp CT902 Trang 6
Chương 1: Tìm hiểu lập trình song song, tính toán