我在打開MP開放MP - 點積
實現並行積我有這樣的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <omp.h>
#define SIZE 1000
int main (int argc, char *argv[]) {
float u[SIZE], v[SIZE], dp,dpp;
int i, j, tid;
dp=0.0;
for(i=0;i<SIZE;i++){
u[i]=1.0*(i+1);
v[i]=1.0*(i+2);
}
printf("\n values of u and v:\n");
for (i=0;i<SIZE;i++){
printf(" u[%d]= %.1f\t v[%d]= %.1f\n",i,u[i],i,v[i]);
}
#pragma omp parallel shared(u,v,dp,dpp) private (tid,i)
{
tid=omp_get_thread_num();
#pragma omp for private (i)
for(i=0;i<SIZE;i++){
dpp+=u[i]*v[i];
printf("thread: %d\n", tid);
}
#pragma omp critical
{
dp=dpp;
printf("thread %d\n",tid);
}
}
printf("\n dot product is %f\n",dp);
}
我與啓動它:pgcc -B -Mconcur -Minfo -o prog prog.c
,並導致我在控制檯中看到是:
33, Loop not parallelized: innermost
39, Loop not vectorized/parallelized: contains call
48, Loop not vectorized/parallelized: contains call
上午什麼我做錯了?
從我的角度側,一切正常。
你是什麼意思不對,編譯成功?該調用似乎是'printf'。 – 2011-03-20 11:32:25
編譯時得到此信息 – Waypoint 2011-03-20 11:33:54
您看到的消息不是OpenMP信息性消息。您使用了-Mconcur,這意味着您希望編譯器自動協調(或自動並行)代碼。要使用OpenMP,正確的選項是-mp。 – ejd 2011-03-21 01:26:50