OpenMP를 사용한 이전 시도의 결과로 실제로 더 빠르게 실행되는 코드 조각의 예가 없음을 깨달았습니다. 내 시스템에서 직렬화에 비해 병렬화 할 때. 아래는 시도가 실패한 짧은 예입니다. 먼저 두 개의 코어가 있음을 보여 주며, openMP가 사용 중이며 두뇌가 죽은 두 가지 작업을 테스트합니다. 하나는 openMP를 사용하고 다른 하나는 그렇지 않습니다. 테스트 할 작업에 뭔가 문제가있을 가능성이 큽니다. 누군가 다른 정성 테스트를 수행 할 수 있다면 감사하게 생각합니다. 내 눈으로 볼 때 멀티 스레딩 CAN을 볼 수 있습니다. 작업 :내 시스템에서 openMP 속도 향상을 보여주는 최소한의 예제를 만드는 데 도움이 필요합니다.
#include <iostream>
#include <vector>
#include <ctime>
#include <cmath>
using namespace std;
#include <omp.h>
int main(int argc, char *argv[])
{
//Below code will be run once for each processor (there are two)
#pragma omp parallel
{
cout << omp_get_thread_num() << endl; //this should output 1 and 0, in random order
}
//The parallel example:
vector <double> a(50000,0);
clock_t start = clock();
#pragma omp parallel for shared(a)
for (int i=0; i < 50000; i++)
{
double StartVal=i;
for (int j=0; j<2000; ++j)
a[i]=(StartVal + log(exp(exp((double) i))));
}
cout<< "Time: " << ((double) (clock() - start)/(double)CLOCKS_PER_SEC) <<endl;
//The serial example:
start = clock();
for (int i=0; i < 50000; i++)
{
double StartVal=i;
for (int j=0; j<2000; ++j)
a[i]=(StartVal + log(exp(exp((double) i))));
}
cout<< "Time: " << ((double) (clock() - start)/(double)CLOCKS_PER_SEC) <<endl;
return 0;
}
출력은 다음과 같습니다
1
0
Time: 4.07
Time: 3.84
OpenMP를이 밖으로 빠져 forloop 최적화 함께 할 수있는 뭔가 될 수 있을까? 아니면 시간을 측정하는 방법에 문제가 있습니까? 이 경우 다른 시험에 대한 아이디어가 있습니까?
은 사전에 감사합니다 :)편집 : 그것은 참으로 내가 나쁜 방법으로 시간을 측정 한 것으로 판명했다. omp_get_wtime()
사용하여 출력된다 : 내가 더 나은 돌아가서 다음 내 오래된 질문에서 또 다른 모습을 거라고 생각
1
0
Time: 4.40776
Time: 7.77676
...
는 두 가지 가능성이 있습니다
J 작게 내부 루프와 코드 3 속도의 요인에 대해 일어나 (I 실제 6가)와 리눅스 버추얼 박스를 사용하십니까? – Mysticial