[問題] OpenMP

看板C_and_CPP (C/C++)作者時間15年前 (2010/04/28 18:44), 編輯推噓8(807)
留言15則, 7人參與, 最新討論串2/4 (看更多)
遇到的問題: (題意請描述清楚) 在Linux上練習OpenMP撰寫比較有用openMP與沒有用OpenMP 發現到有使用OpenMP部份並將其指定為多個執行緒會比沒有用OpenMP還慢 但是若在OpenMP區塊將其執行序指定數量改為1時 速度反而比沒有使用OpenMP時還要快 應理這說 當這兩個部份在單執行緒時(一個有OpenMP一個沒有) 速度應該要一樣快 而在Windows上時 OpenMP區塊在多執行緒與單執行緒時 都會比沒有使用OpenMP之區塊要來的快 有請高人解答... 謝謝 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) gcc 4.2.1, CentOS5.4; Windows, Visual C++ 2008 有問題的code: (請善用置底文標色功能) #include <omp.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #define MAX_THREAD 2 //define the thread number int element[100000000]; int main( int argc, char *argv ) { int counter; double stageStartTime; srand(( unsigned ) time ( NULL )); omp_set_num_threads( MAX_THREAD ); printf( "Entering non-OpenMP Stage...\n" ); stageStartTime=omp_get_wtime(); for( counter=omp_get_thread_num(); counter<100000000; counter+=omp_get_num_threads()) element[counter]=rand()%100; printf( "Exiting non-OpenMP Stage...:%.3fs\n\n", omp_get_wtime()-stageStartTime ); printf( "Entering OpenMP Stage...\n" ); stageStartTime=omp_get_wtime(); #pragma omp parallel for private (counter) for( counter=omp_get_thread_num(); counter<100000000; counter+=omp_get_num_threads()) element[counter]=rand()%100; printf( "Exiting OpenMP Stage...:%.3fs\n", omp_get_wtime()-stageStartTime ); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.136.144.13 ※ 編輯: cywec 來自: 140.136.144.13 (04/28 18:45)

04/28 20:11, , 1F
我建議你自D吧
04/28 20:11, 1F

04/28 20:25, , 2F
你可以想想 rand() 到底可不可以平行化
04/28 20:25, 2F

04/28 20:26, , 3F
說平行化不太對 平行執行才對
04/28 20:26, 3F

04/28 20:47, , 4F
正想敲樓上水球
04/28 20:47, 4F

04/28 20:48, , 5F
不太懂
04/28 20:48, 5F

04/28 20:48, , 6F
能否詳細解釋一下
04/28 20:48, 6F

04/28 21:48, , 7F
如果把rand()拿掉改用一般數字呢?
04/28 21:48, 7F

04/28 22:10, , 8F
rand改為數字的話是有平行化者佳
04/28 22:10, 8F

04/28 22:55, , 9F
下openmp的參數 compiler會幫你做最佳化 即使thread=1
04/28 22:55, 9F

04/28 23:39, , 10F
rand() 不能平行執行??
04/28 23:39, 10F

04/29 17:47, , 11F
rand() 有一個內部變數記錄狀態 (所謂的"種子")
04/29 17:47, 11F

04/29 17:47, , 12F
那麼這種函式當平行執行時這個地方的值的讀寫會如何呢?
04/29 17:47, 12F

04/29 18:07, , 13F

04/29 18:07, , 14F
剛剛找到的,可以參考看看
04/29 18:07, 14F

04/29 19:23, , 15F
感恩!!
04/29 19:23, 15F
文章代碼(AID): #1Bs16A_d (C_and_CPP)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 4 篇):
2
5
4
18
15年前, 01/17
8
15
15年前, 04/28
0
2
文章代碼(AID): #1Bs16A_d (C_and_CPP)