2013-04-20 60 views
0
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); 
     } 

我想這parallize使用線程,但我不斷收到errors.I正在做這樣的事情並行編程的OpenMP與C++

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);} 
     } 

謝謝

+3

你不應該自己計算'start','end'等,或者用omp庫來計算這樣一個簡單的程序。 – 2013-04-20 19:07:18

回答

0

至於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; 
} 
+0

非常感謝!我會嘗試! – 2013-04-20 22:44:22