▶ 在 windows 10 上搭建 OpenACC 环境

● 安装顺序:Visual Studio(PGI 18.04 不支持 VS 2017,PGI 19.04 已经支持到 VS 2019 啦!);CUDA Toolkite(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*)

● PGI 自带的 pgaccinfo.exe 抓取设备信息:

CUDA Driver Version:           

Device Number:
Device Name: GeForce GTX
Device Revision Number: 6.1
Global Memory Size:
Number of Multiprocessors:
Concurrent Copy and Execution: Yes
Total Constant Memory:
Total Shared Memory per Block:
Registers per Block:
Warp Size:
Maximum Threads per Block:
Maximum Block Dimensions: , ,
Maximum Grid Dimensions: x x
Maximum Memory Pitch: 2147483647B
Texture Alignment: 512B
Clock Rate: MHz
Execution Timeout: Yes
Integrated Device: No
Can Map Host Memory: Yes
Compute Mode: default
Concurrent Kernels: Yes
ECC Enabled: No
Memory Clock Rate: MHz
Memory Bus Width: bits
L2 Cache Size: bytes
Max Threads Per SMP:
Async Engines:
Unified Addressing: Yes
Managed Memory: Yes
Concurrent Managed Memory: No
Preemption Supported: Yes
PGI Default Target: -ta=tesla:cc60

● 编写代码

 #include <stdio.h>
#include <openacc.h> int main()
{
#ifdef _OPENACC
printf("%d device found!\n", acc_get_num_devices(acc_device_not_host));
#else
printf("OpenACC not support.\n");
#endif
getchar();
return ;
}

● 直接在 Visual Studio 2015 编译遇到了一些问题,最后是用 PGI 的命令行来进行编译的,这里只记录一下问题。先是要求添加 openacc.h 的路径(C:\Program Files\PGICE\win64\18.4\include),然后报错:

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

  这是因为在 <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)。如果将该头文件中

 ...
#if defined __PGI_TOOLS14
#include <sal14.h>
...

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

 ...
#if defined __PGI_TOOLS12
#include <vadefs12.h>
...

  前面强行添上  #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

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

● 代码在 PGI 的命令行中正确的编译和执行

 PGI Community Edition 18.4
Microsoft Windows [版本 10.0.17134.1]
(c) Microsoft Corporation。保留所有权利。 C:\Users\cuan>D: D:\>cd D:\Code\OpenACC\OpenACCProject\OpenACCProject D:\Code\OpenACC\OpenACCProject\OpenACCProject>pgcc -o main-no-acc.exe main.c D:\Code\OpenACC\OpenACCProject\OpenACCProject>main-no-acc.exe
OpenACC not support. D:\Code\OpenACC\OpenACCProject\OpenACCProject>pgcc -acc -o main.exe main.c D:\Code\OpenACC\OpenACCProject\OpenACCProject>main.exe
device found! D:\Code\OpenACC\OpenACCProject\OpenACCProject>

▶ 在 Ubuntu16.04LTS 上搭建 OpenACC 环境

● 安装顺序:CUDA Toolkite(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*)

cuan@CUAN:~/pgilinux-2019-194-x86-64$ sudo su
root@CUAN:/home/cuan/pgilinux-2019-194-x86-64# ./install Welcome to the PGI Linux installer! You are installing PGI 2019 version 19.4 for Linux.
Please note that all Trademarks and Marks are the properties
of their respective owners. Press enter to continue... # 回车 NVIDIA ... Do you accept these terms? (accept,decline) # accept ... 1 Single system install
2 Network install Please choose install option: # ... Installation directory? [/opt/pgi] # /usr/local/pgi ... JRE Press enter to continue... # 回车 ... Do you accept these terms? (accept,decline) # accept ... Do you wish to update/create links in the 2019 directory? (y/n) # y ... MPI ... Do you want to install Open MPI onto your system? (y/n) # y
Do you want to enable NVIDIA GPU support in Open MPI? (y/n) # y ... License Key Management ... Do you wish to obtain permanent license key or configure license service? (y/n) # y ... Press enter to continue... # 回车 ... 1 Generate or update a license key for this computer
** Option 1 IS NOT AVAILABLE.
Requires properly configurd curl and internet access.
2 Configure and start a license service on this computer
4 I have a functioning license key - what type is it? (beta)
5 Quit What do you want to do? # Please enter the location of the license key file.
For example: /usr/local/pgi/license.dat
Answer? # /usr/local/pgi/license.dat Should license services start when the system boots? (y/n) # y
Master daemon (lmgrd) is not running
Vendor daemon (pgroud) is not running The PGI license tool can be re-started by running the script located at: /usr/local/pgi/linux86-64-llvm/19.4/bin/pgi_license_tool The license key file is located at /usr/local/pgi/license.dat. ...

● 添加路径到 .bashrc,并执行 source .bashrc

#for pgi
export PATH=$PATH:/usr/local/pgi/linux86-/18.4/bin
export MANPATH=$MANPATH:/usr/local/pgi/linux86-/18.4/man
export LM_LICENSE_FILE=/usr/local/pgi/license.dat

● 编写代码同上,编译执行:

cuan@CUAN:~$ pgcc --version

pgcc 18.4- -bit target on x86- Linux -tp haswell
PGI Compilers and Tools
Copyright (c) , NVIDIA CORPORATION. All rights reserved.
cuan@CUAN:~$ cd Temp/
cuan@CUAN:~/Temp$ pgcc -o main-no-acc.exe main.c
cuan@CUAN:~/Temp$ pgcc -acc -o main.exe main.c
cuan@CUAN:~/Temp$ ./main-no-acc.exe
OpenACC not support. cuan@CUAN:~/Temp$ ./main.exe
device found! cuan@CUAN:~/Temp$

● 几个坑:

■ linux 上要先装了 gcc/g++ 才能安装 pgi, apt-get install build-essential

■ .bashrc 中加入 export 时,等号两边不能有空格

■ 误删了 .bashrc,从备份中去找, cp /etc/skel/.bashrc ~/

■ 在 Win10 WSL 上安装有点问题,核心问题是 Nvidia 的驱动安装不了,而 CUDA SDK 对其有依赖,强行安装 pgi 以后可以正常用 pgcc 编译,但是运行如上的代码时总是显示 0 device found! 它到底有没有调用 CUDA 核进行计算有待进一步探究,暂时折腾不动了

■ 删除 cygwin 用的 .bat,就是获得其文件的所有权。参考【https://www.cnblogs.com/litifeng/p/9996909.html】

 SET DIRECTORY_NAME="D:\cygwin64"
C:\windows\system32\TAKEOWN /f %DIRECTORY_NAME% /r /d y
C:\windows\system32\ICACLS %DIRECTORY_NAME% /grant administrators:F /t
PAUSE

OpenACC Hello World的更多相关文章

  1. 7.OpenACC

    OpenACC: openacc 可以用于fortran, c 和 c++程序,可以运行在CPU或者GPU设备. openacc的代码就是在原有的C语言基础上进行修改,通过添加:compiler di ...

  2. PGI Compiler for OpenACC Output Syntax Highlighting

    PGI Compiler for OpenACC Output Syntax Highlighting When use the PGI compiler to compile codes with ...

  3. OpenACC 云水参数化方案

    ▶ 书上第十三章,用一系列步骤优化一个云水参数化方案.用于熟悉 Fortran 以及 OpenACC 在旗下的表现 ● 代码,文件较多,放在一起了 ! main.f90 PROGRAM main US ...

  4. OpenACC 绘制曼德勃罗集

    ▶ 书上第四章,用一系列步骤优化曼德勃罗集的计算过程. ● 代码 // constants.h ; ; ; ; const double xmin=-1.7; ; const double ymin= ...

  5. OpenACC 梯度下降法求解线性方程的优化

    ▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...

  6. OpenACC 优化矩阵乘法

    ▶ 按书上的步骤使用不同的导语优化矩阵乘法 ● 所有的代码 #include <iostream> #include <cstdlib> #include <chrono ...

  7. OpenACC 简单的原子操作

    ▶ OpenACC 的原子操作,用到了 C++ 的一个高精度计时器 ● 代码,直接的原子操作 #include <iostream> #include <cstdlib> #i ...

  8. OpenACC 与 CUDA 的相互调用

    ▶ 按照书上的代码完成了 OpenACC 与CUDA 的相互调用,以及 OpenACC 调用 cuBLAS.便于过程遇到了很多问题,注入 CUDA 版本,代码版本,计算能力指定等,先放在这里,以后填坑 ...

  9. OpenACC Julia 图形

    ▶ 书上的代码,逐步优化绘制 Julia 图形的代码 ● 无并行优化(手动优化了变量等) #include <stdio.h> #include <stdlib.h> #inc ...

  10. OpenACC 异步计算

    ▶ 按照书上的例子,使用 async 导语实现主机与设备端的异步计算 ● 代码,非异步的代码只要将其中的 async 以及第 29 行删除即可 #include <stdio.h> #in ...

随机推荐

  1. SUST OJ 1641: 电子狗的心事

    1641: 电子狗的心事 时间限制: 1 Sec  内存限制: 128 MB提交: 192  解决: 14[提交][状态][讨论版] 题目描述 计算机程序世界中有一位孤独的电子狗,这个电子狗每次只能执 ...

  2. 《DSP using MATLAB》Problem 4.20

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  3. 93服务器上获取json数据

    jdf u -p上传html文件,上传到page域名下:jdf u 上传css和js 上传到misc域名下: json数据放在html下,因为ajax请求是按照html路径走的,所以json数据放在h ...

  4. day20 python sys os time json pickl 正则

    字符组 : [字符组] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 字符分为很多类,比如数字.字母.标点等等. 假如你现在要求一个位置....9这10个数之一. 量词 几 ...

  5. SELENIUM如何调用FIREFOX时加载插件

    当selenium调用firefox时,会发现这个firefox里干净的如同一盆清水,自己定制安装的那些插件都不翼而飞了,这个时候那些插件自然就不能使用了,但是当前又必须使用插件该如何是好呢? 解决办 ...

  6. c++中的流

    streambuf类为缓冲区提供内存,并提供了用于填充缓冲区,访问缓冲区,刷新新缓冲区和管理缓冲区内存的类方法. ios_base类表示流的一般特征,如是否可读,是二进制还是文本流等. ios类基于i ...

  7. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  8. centos 使用mutt发送邮件带附件

    1.安装mutt工具 yum install -y mutt 2.使用mutt发邮件并带附件echo "统计日志" | /usr/bin/mutt -s "统计日志&qu ...

  9. Microsoft Dynamics CRM2011 导入解决方案时,失败的原因小结

    将大的自定义文件导入到 Microsoft Dynamics CRM 时发生超时? 如图: 首先: a.首先需要确认两面的CRM 环境是一致,比如都是Roll up 11等. b.然后确认导出解决方案 ...

  10. Python——面向对象、绑定对象、组合

    1. 面向过程VS面向对象 (1)面向过程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂 ...