簡體   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