2018年3月16日金曜日

openmp offloading のメモ

llvm clangがgpuのoffloadingに対応してるっぽいので確かめている。
上手く行ってないけど。
テスト用のコードをメモ。
#include<stdlib.h>
#include<stdio.h>
#include<omp.h>

int main(){

   int i;
   int N=100000;
   float *vec;
   float sum=0.0;

   int isDevInit = -1;
#pragma omp target map(from:isDevInit)
{
   isDevInit = omp_is_initial_device();
}

if (!isDevInit) {
   printf("run on acc. %d\n",isDevInit);
}

   vec=(float *)malloc(sizeof(float)*N);
   for(i=0;i<N;i++){
      vec[i] = (float)i;
   }
#pragma omp target map(to:vec) map(tofrom:sum)
{
   fprintf(stdout,"num dev %d\n",omp_get_num_devices());
#pragma omp parallel for reduction(+:sum)
   for(i=0;i<N;i++){
      sum += vec[i];
   }
}
   fprintf(stdout,"sum: %e\n",sum);

   free(vec);

}

0 件のコメント:

コメントを投稿