我有这个示例代码:
#include <stdio.h>
#include <stdlib.h>
#ifdef _OPENACC
#include <openacc.h>
#endif
#define N 1000
int main() {
#ifdef _OPENACC
acc_init(acc_device_not_host);
printf(" Compiling with OpenACC support \n");
#endif
double * a;
int n = 100;
a = (double *) malloc(n * sizeof(double));
for (int i = 0; i < n; i++)
a[i] = 1.0f;
#pragma acc data copy_in(a[0:n])
{
#pragma acc kernels loop
for (int i = 0; i < n; i++)
a[i] = (double) i + a[i];
}
#ifdef _OPENACC
acc_shutdown(acc_device_not_host);
#endif
printf("Value of a[10]: %lf\n", a[10]);
return 0;
}
老师告诉我输出是1.0,因为我有copy_in;然后,a 被复制到 acceñeratpr 上,但是当它结束时,a 在每个位置都包含 1.0;但是如果我运行这段代码,我会得到 11.0,为什么?