トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

C言語で並列処理

http://www.atmarkit.co.jp/fcoding/articles/parallel/01/para01c.html

OpenMP で並列処理

001: /*
002:  * Array のインクリメント(OpenMP版)
003:  */
004: 
005: #include<stdio.h>
006: #include<stdlib.h>
007: #include<omp.h>
008: #define N 16
009: 
010: int main (int argc, char *argv[])
011: {
012:   int i;
013:   int *rootBuf;
014:   int num_of_threads;
015: 
016:   if(argc!=2){
017:     printf("usage: a.out <number of threads>\n");
018:     return(1);
019:   }
020: 
021:   num_of_threads = atoi(argv[1]);
022:   omp_set_num_threads(num_of_threads);
023:   
024:   rootBuf = (int *)malloc(N * sizeof(int));
025: 
026:   /* 配列Initialize */
027:   for(i=0;i<N;i++){
028:     rootBuf[i] = i;
029:   }
030: 
031:   /* 並列処理の開始 */
032: #pragma omp parallel
033:   printf("Exec by thread 0 (total 0 threads)\n",omp_get_thread_num(), omp_get_num_threads());
034: #pragma omp for
035:   /* Incriment */
036:   for (i = 0; i < N; i++) {
037:     rootBuf[i] = rootBuf[i] + 1;
038:   }
039: 
040:   /* 演算結果の出力 */
041:   printf("\n");	 
042:   for (i = 0; i < N; i++) printf("rootbuf[%d] = %d\n",i,rootBuf[i]);
043:   
044:   /* 終了処理 */
045:   free(rootBuf);
046: 
047:   return(0);
048: }

コンパイル

gcc -fopenmp list3.c
[カテゴリ: プログラミング言語 > C]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2009年12月25日 18時38分41秒