我试图运行这个代码,但在编译英特尔devcloud使用这些命令:
icpx -qopenmp -fopenmp-targets=spir64 openmp_target_offload_clause_ordering.cpp
export OMP_TARGET_OFFLOAD=MANDATORY
显示运行时错误。
#include <stdio.h>
int main() {
double *V = reinterpret_cast<double*>(0xdeadbeef);
printf("pointer=%pn", V);
#pragma omp target parallel for simd is_device_ptr(V) if(true)
for(int i = 0; i < 1; ++i) {
printf("pointer=%pn", V);
}
#pragma omp target parallel for simd if(true) is_device_ptr(V)
for(int i = 0; i < 1; ++i) {
printf("pointer=%pn", V);
}
return 100;
}
您输入的设备指针无效。将main函数第一行的(0xdeadbeef)
替换为(omp_target_alloc(size, 0))
,如下所示:
doubleptr = reinterpret_cast
>(omp_target_alloc(size, 0));
希望这对你有帮助!