[英]parallel programming openMp with c++
float dist ( Point p1, Point p2, int dim )
{
int i;
float result=0.0;
for ( i=0; i<dim; i++ )
result += ( p1.coord[i] - p2.coord[i] ) * ( p1.coord[i] - p2.coord[i] );
return ( result );
}
我想使用線程來使它並行化,但是我不斷出錯。我正在做這樣的事情
float dist(Point p1,Point p2,int dim){
int id;
int i,tnum,istart,iend;
id=omp_get_thread_num();
tnum=omp_get_num_threads();
istart=id*dim/tnum;
iend=(id+i)*dim/tnum;
float result=0.0;
#pragma omp parallel for reduction (+:result)
{ for ( i=istart; i<iend;i++ )
result += ( p1.coord[i] - p2.coord[i] ) * ( p1.coord[i] - p2.coord[i] );
return ( result );}
}
謝謝
只要dim
不大於(至少)10 ^ 6,您使用OpenMP極有可能看不到任何速度提升。
以下代碼應該可以工作,但對於DIM值較低的情況不是很有用。
#include <iostream>
const int DIM = 3;
struct point {
float coord[DIM];
};
float dist(point p1, point p2, int dim)
{
float result = 0.0;
#pragma omp parallel for reduction(+:result)
for (int i=0; i<dim; i++ )
result += ( p1.coord[i] - p2.coord[i] ) * ( p1.coord[i] - p2.coord[i] );
return (result);
}
using namespace std;
int main()
{
point a = {0.0, 0.0, 0.0}, b = {2.0, 2.0, 2.0};
cout << dist(a, b, DIM) << endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.