OpenACC Hello World (win10)

▶ 在 windows 10 上搭建 OpenACC 环境,挺麻烦

● 安装顺序:Visual Studio 2015(PGI 编译器不支持 Visual Studio 2017);CUDA Toolkite 9.1(https://developer.nvidia.com/cuda-downloads);PGI 编译器(https://www.pgroup.com/products/community.htm?*utm*_campaign=CE&utm_source=dev_nvidia_oacc&utm_medium=web_link&utm_term=*get_ce_text*)

● 编写代码

 1 #include <stdio.h>
 2 #include <openacc.h>
 3 
 4 int main()
 5 {
 6 #ifdef _OPENACC
 7     printf("%d device found!\n", acc_get_num_devices(acc_device_not_host));
 8 #else
 9     printf("OpenACC not support.\n");
10 #endif
11     getchar();
12     return 0;
13 }

● 在 Visual Studio 2015 上死活不能编译,先是要求添加 openacc.h 的路径(C:\Program Files\PGICE\win64\18.4\include),然后报错:

严重性    代码    说明                            项目            文件                                                行
错误      C1021  无效的预处理器命令“include_next”  OpenACCProject c:\program files\pgice\win64\18.4\include\sal.h     28    

  这是因为在 <sal.h> 中第 28 行有  #include_next <sal.h>  ,意思是该 <sal.h> 中没有找到对应的头文件,要求预处理器去包含搜索路径的下一个 <sal.h>。但是 include_next 不是标准 C 的预处理器语句,在 Visual Studio 中无法执行(据说有办法解决,看起来有点麻烦,https://stackoverflow.com/questions/24638855/how-to-use-arduino-with-microsoft-visual-studio-due-to-include-next-precompil)。如果将该头文件中

1 ...
2 #if defined __PGI_TOOLS14
3 #include <sal14.h>
4 ...

  前面强行添上  #include <sal4.h> (该目录下确实有 <sal14.h> 这个头文件)并删除 #include_next 行,则会引起 vadefs.h 中的相同类型的错误,再把 vadefs.h 中

1 ...
2 #if defined __PGI_TOOLS12
3 #include <vadefs12.h>
4 ...

  前面强行添上  #include <C:/Program Files/PGICE/win64/18.4/include_acc/OT_14/vadefs.h> ,则没有了 #include_next 错误,但会有链接阶段报错:

严重性    代码        说明            项目            文件                                                行
错误      LNK1158    无法运行“rc.exe” OpenACCProject D:\Code\OpenACC\OpenACCProject\OpenACCProject\LINK  1    

  说到底这是 MS 编译器不支持 OpenACC 的原因,缺少宏 _OPENACC 的定义

 ● 代码在 pgi 编译器下正确的编译和执行

 1 PGI Community Edition 18.4
 2 Microsoft Windows [版本 10.0.17134.1]
 3 (c) 2018 Microsoft Corporation。保留所有权利。
 4 
 5 C:\Users\cuan>D:
 6 
 7 D:\>cd D:\Code\OpenACC\OpenACCProject\OpenACCProject
 8 
 9 D:\Code\OpenACC\OpenACCProject\OpenACCProject>pgcc -o main-no-acc.exe main.c
10 
11 D:\Code\OpenACC\OpenACCProject\OpenACCProject>main-no-acc.exe
12 OpenACC not support.
13 
14 
15 D:\Code\OpenACC\OpenACCProject\OpenACCProject>pgcc -acc -o main.exe main.c
16 
17 D:\Code\OpenACC\OpenACCProject\OpenACCProject>main.exe
18 1 device found!
19 
20 
21 D:\Code\OpenACC\OpenACCProject\OpenACCProject>

猜你喜欢

转载自www.cnblogs.com/cuancuancuanhao/p/8991334.html