Home > Programming > Chạy chương trình OpenMP với Visual Studio 2008

Chạy chương trình OpenMP với Visual Studio 2008

OpenMP [1] là một thư viện hỗ trợ lập trình song song mà trong đó các thread chia sẻ bộ nhớ với nhau, rất thích hợp với CPU có nhiều nhân (multicore processor). Sau đây chúng ta sẽ chạy thử một chương trình OpenMP trên Visual Studio 2008.

Đầu tiên tạo một project c++ có tên tùy thích, ví dụ omp_1. Kế tiếp vào Project–>omp_1 properties chọn như hình sau:

Tạo một file main.cpp và copy đoạn code sau paste vào:

#include<stdio.h>

#include <omp.h>

int main(int argc, char* argv[])

{

#pragma omp parallel for

for (int i = 0; i < 10; i++ )

{

printf(” thread: %d\n”, omp_get_thread_num());

}

return 0;

}

Chạy chương trình và được kết quả sau (chú ý là thứ tự các giá trị i của bạn có thể khác, mỗi lần chạy cũng có thể cho ra một thứ tự khác):

i=5 on thread: 1

i=6 on thread: 1

i=7 on thread: 1

i=8 on thread: 1

i=0 on thread: 0

i=1 on thread: 0

i=2 on thread: 0

i=3 on thread: 0

i=4 on thread: 0

i=9 on thread: 1

Press any key to continue . . .

Từ kết quả trên có thể thấy rằng vòng lặp for đã được chia thành 2 thread, mỗi thread xử lí một phần (không giao nhau) của vòng lặp. So với chương trình c++ bình thường, đoạn code trên có thêm dòng #pragma omp parallel for. Chính dòng này chỉ định vòng lặp for tự động chạy song song (ở đây cpu máy tôi có 2 nhân nên có tự động có 2 thread chạy).

Chạy tiếp đoạn code sau:

#include<stdio.h>

#include <omp.h>

#include<time.h>

int main(int argc, char* argv[])

{

int a=0;

clock_t t1 = clock();

for (int i = 0; i < 2000000000; i++ )

{

a+=1;

}

printf(“Time = %d\n”, clock()-t1);

return 0;

}

Cho kết quả là:

Time = 9843

Press any key to continue . . .

Và:

#include<stdio.h>

#include <omp.h>

#include<time.h>

int main(int argc, char* argv[])

{

int a=0;

clock_t t1 = clock();

#pragma omp parallel for

for (int i = 0; i < 2000000000; i++ )

{

a+=1;

}

printf(“Time = %d\n”, clock()-t1);

return 0;

}

Với kết quả

Time = 4929

Press any key to continue . . .

Hai kết quả trên chứng tỏ sử dụng OpenMP đã giúp rút ngắn đáng kể thời gian chạy của chương trình với speed up lên đến gần 2 lần. Với các CPU có nhiều nhân hơn thì speed up sẽ còn cao hơn nữa. Cuối cùng lưu ý rằng, nếu máy tính của bạn đang chạy nhiều chương trình thì rất có thể sẽ ảnh hưởng đến kết quả, speed up có thể thấp hơn 2 rất nhiều.

Tham khảo:

[1] http://en.wikipedia.org/wiki/OpenMP

Categories: Programming Tags:
  1. No comments yet.
  1. February 22, 2012 at 11:27 PM

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: