上手く行ってないけど。
テスト用のコードをメモ。
#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 件のコメント:
コメントを投稿