繁体   English   中英

用c ++并行编程openMp

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM