OpenMP
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
-----
#contents
-----
CENTER:&ref(openmp_vc2005.jpg,nolink);
#include <omp.h>
*OpenMP [#cab0453c]
#code(C){{
#ifdef _OPENMP
...
#endif
}}
#code(C){{
#ifdef _OPENMP
cout << "OpenMP : On, threads =" << omp_get_max_threads(...
#endif
}}
int omp_get_thread_num(void);
#pragma omp parallel num_threads(4)
#code(C){{
#pragma omp parallel for
for(int i = 0; i < n; ++i){
}
}}
#code(C){{
#pragma omp parallel
{
#pragma omp for
for(int i = 0; i < n; ++i){
}
#pragma omp for
for(int i = 0; i < n; ++i){
}
#pragma omp for
for(int i = 0; i < n; ++i){
}
}
}}
#code(C){{
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{
printf("thread %d\n", omp_get_thread_num());
}
#pragma omp section
{
printf("thread %d\n", omp_get_thread_num());
}
}
}}
***reduction [#j4705668]
#code(C){{
#pragma omp for reduction(+:s)
for(int i = 0; i < n; ++i){
s += i;
}
}}
#code(C){{
double x;
#pragma omp parallel for private(x)
for(long i = 0; i < n; ++i){
}
}}
#pragma omp threadprivate(g_x, g_y)
#pragma omp barrier
#pragma omp flush
#code(C){{
omp_lock_t lock0;
omp_init_lock(&lock0);
#pragma omp parallel num_threads(4)
{
int tid = omp_get_thread_num();
omp_set_lock(&lock0);
for(int i = 0; i < 3; ++i){
cout << "Thread " << tid << endl;
}
omp_unset_lock(&lock0);
}
omp_destroy_lock(&lock0);
}}
Thread 0
Thread 0
Thread 0
Thread 1
Thread 1
Thread 1
Thread 2
Thread 2
Thread 2
Thread 3
Thread 3
Thread 3
#code(C){{
#include <stdio.h>
#include <windows.h>
#include <omp.h>
volatile DWORD g_dwStart;
double CalPI(long n)
{
double x, pi, sum = 0.0, step;
step = 1.0/(double)n;
#pragma omp parallel for reduction(+:sum) private(x)
for(long i = 1; i <= n; ++i){
x = (i-0.5)*step;
sum = sum+4.0/(1.0+x*x);
}
pi = step*sum;
return pi;
}
int main(void)
{
#ifdef _OPENMP
printf("OpenMP : On, threads = %d\n", omp_get_max_thread...
#endif
long n = 100000000;
for(int i = 0; i < 3; ++i){
g_dwStart = GetTickCount();
double pi = CalPI(n);
printf("pi = %.15f, %d [msec]\n", pi, GetTickCount()-g_...
}
return 0;
}
}}
-[[OpenMP.org:http://openmp.org/wp/about-openmp/]]
終了行:
-----
#contents
-----
CENTER:&ref(openmp_vc2005.jpg,nolink);
#include <omp.h>
*OpenMP [#cab0453c]
#code(C){{
#ifdef _OPENMP
...
#endif
}}
#code(C){{
#ifdef _OPENMP
cout << "OpenMP : On, threads =" << omp_get_max_threads(...
#endif
}}
int omp_get_thread_num(void);
#pragma omp parallel num_threads(4)
#code(C){{
#pragma omp parallel for
for(int i = 0; i < n; ++i){
}
}}
#code(C){{
#pragma omp parallel
{
#pragma omp for
for(int i = 0; i < n; ++i){
}
#pragma omp for
for(int i = 0; i < n; ++i){
}
#pragma omp for
for(int i = 0; i < n; ++i){
}
}
}}
#code(C){{
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{
printf("thread %d\n", omp_get_thread_num());
}
#pragma omp section
{
printf("thread %d\n", omp_get_thread_num());
}
}
}}
***reduction [#j4705668]
#code(C){{
#pragma omp for reduction(+:s)
for(int i = 0; i < n; ++i){
s += i;
}
}}
#code(C){{
double x;
#pragma omp parallel for private(x)
for(long i = 0; i < n; ++i){
}
}}
#pragma omp threadprivate(g_x, g_y)
#pragma omp barrier
#pragma omp flush
#code(C){{
omp_lock_t lock0;
omp_init_lock(&lock0);
#pragma omp parallel num_threads(4)
{
int tid = omp_get_thread_num();
omp_set_lock(&lock0);
for(int i = 0; i < 3; ++i){
cout << "Thread " << tid << endl;
}
omp_unset_lock(&lock0);
}
omp_destroy_lock(&lock0);
}}
Thread 0
Thread 0
Thread 0
Thread 1
Thread 1
Thread 1
Thread 2
Thread 2
Thread 2
Thread 3
Thread 3
Thread 3
#code(C){{
#include <stdio.h>
#include <windows.h>
#include <omp.h>
volatile DWORD g_dwStart;
double CalPI(long n)
{
double x, pi, sum = 0.0, step;
step = 1.0/(double)n;
#pragma omp parallel for reduction(+:sum) private(x)
for(long i = 1; i <= n; ++i){
x = (i-0.5)*step;
sum = sum+4.0/(1.0+x*x);
}
pi = step*sum;
return pi;
}
int main(void)
{
#ifdef _OPENMP
printf("OpenMP : On, threads = %d\n", omp_get_max_thread...
#endif
long n = 100000000;
for(int i = 0; i < 3; ++i){
g_dwStart = GetTickCount();
double pi = CalPI(n);
printf("pi = %.15f, %d [msec]\n", pi, GetTickCount()-g_...
}
return 0;
}
}}
-[[OpenMP.org:http://openmp.org/wp/about-openmp/]]
ページ名: