[英]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.