[問題] OpenMP
遇到的問題: (題意請描述清楚)
在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
04/28 20:11, 1F
推
04/28 20:25, , 2F
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
04/28 21:48, 7F
→
04/28 22:10, , 8F
04/28 22:10, 8F
推
04/28 22:55, , 9F
04/28 22:55, 9F
推
04/28 23:39, , 10F
04/28 23:39, 10F
推
04/29 17:47, , 11F
04/29 17:47, 11F
→
04/29 17:47, , 12F
04/29 17:47, 12F
→
04/29 18:07, , 13F
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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章