はじめてのOpenMP(1)
OpenMPを使って簡単なプログラムを書いてみました。
- #pragma omp parallel num_threads(4):OpenMPの始まりとスレッド数の指定する。
- #pragma omp for:OpenMPを使って、forを各スレッドに分割する。
- omp_get_thread_num():スレッドの番号を取得する。
- omp_get_num_threads():総スレッド数を取得する。
- #pragma omp for内でprintfできない。これはprintf()関数がスレッドセーフでないからかな?
#include <stdio.h> #include <omp.h> int main(void){ int a[10]; int b[10]; int c[10]; int d[10]; int i; for(i=0;i<10;i++){ a[i]=i; b[i]=0; c[i]=i; d[i]=0; } #pragma omp parallel num_threads(4) { #pragma omp for for(i=0;i<10;i++){ b[i]=a[i]; //printf("i=%d,thread=%d,num_thuread=%d\n",i,omp_get_thread_num(),omp_get_num_threads()); c[i]=omp_get_thread_num(); d[i]=omp_get_num_threads(); } } for(i=0;i<10;i++) printf("i=%d,thread=%d,num_thuread=%d\n",i,c[i],d[i]); return 0; }
結果
i=0,thread=0,num_thuread=4 i=1,thread=0,num_thuread=4 i=2,thread=0,num_thuread=4 i=3,thread=1,num_thuread=4 i=4,thread=1,num_thuread=4 i=5,thread=1,num_thuread=4 i=6,thread=2,num_thuread=4 i=7,thread=2,num_thuread=4 i=8,thread=2,num_thuread=4 i=9,thread=3,num_thuread=4