OpenACC Hello World
▶ 在 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的更多相关文章
- 7.OpenACC
OpenACC: openacc 可以用于fortran, c 和 c++程序,可以运行在CPU或者GPU设备. openacc的代码就是在原有的C语言基础上进行修改,通过添加:compiler di ...
- PGI Compiler for OpenACC Output Syntax Highlighting
PGI Compiler for OpenACC Output Syntax Highlighting When use the PGI compiler to compile codes with ...
- OpenACC 云水参数化方案
▶ 书上第十三章,用一系列步骤优化一个云水参数化方案.用于熟悉 Fortran 以及 OpenACC 在旗下的表现 ● 代码,文件较多,放在一起了 ! main.f90 PROGRAM main US ...
- OpenACC 绘制曼德勃罗集
▶ 书上第四章,用一系列步骤优化曼德勃罗集的计算过程. ● 代码 // constants.h ; ; ; ; const double xmin=-1.7; ; const double ymin= ...
- OpenACC 梯度下降法求解线性方程的优化
▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...
- OpenACC 优化矩阵乘法
▶ 按书上的步骤使用不同的导语优化矩阵乘法 ● 所有的代码 #include <iostream> #include <cstdlib> #include <chrono ...
- OpenACC 简单的原子操作
▶ OpenACC 的原子操作,用到了 C++ 的一个高精度计时器 ● 代码,直接的原子操作 #include <iostream> #include <cstdlib> #i ...
- OpenACC 与 CUDA 的相互调用
▶ 按照书上的代码完成了 OpenACC 与CUDA 的相互调用,以及 OpenACC 调用 cuBLAS.便于过程遇到了很多问题,注入 CUDA 版本,代码版本,计算能力指定等,先放在这里,以后填坑 ...
- OpenACC Julia 图形
▶ 书上的代码,逐步优化绘制 Julia 图形的代码 ● 无并行优化(手动优化了变量等) #include <stdio.h> #include <stdlib.h> #inc ...
- OpenACC 异步计算
▶ 按照书上的例子,使用 async 导语实现主机与设备端的异步计算 ● 代码,非异步的代码只要将其中的 async 以及第 29 行删除即可 #include <stdio.h> #in ...
随机推荐
- HDU 4638 树状数组 想法题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 解题思路: 题意为询问一段区间里的数能组成多少段连续的数.先考虑从左往右一个数一个数添加,考虑当 ...
- Linux regulator系统
1. 概念:Regulator : 电源芯片, 比如电压转换芯片Consumer : 消费者,使用电源的部件, Regulator是给Consumer供电的machine : 单板,上面焊接有Regu ...
- Oracle删除归档文件
归档文件过大,会导致数据库出现异常,无法登陆. 1.D盘下新建一个delete_arch.txt文件 connect target / run { DELETE ARCHIVELOG ALL COMP ...
- 【转】【iOS】动态更换App图标
原文网址:http://www.cocoachina.com/ios/20170619/19557.html 前言 动态更换App图标这件事,在用户里总是存在需求的:有些用户喜欢“美化”自己的手机.至 ...
- RAC 修改 spfile 参数
我们知道数据库的参数文件有spfile 和pfile. RAC 的参数文件比较特殊. 因为默认情况下,RAC的spfile 是放在共享设备上(RAW设备或者ASM磁盘组).而在各节点的pfile文件里 ...
- java 创建子类
当程序创建子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为他从父类继承得到的所有实例变量分配内存,即使子类中定义了与父类中同名的实例变量. 如: class Parent { privat ...
- Telnet 工具远程连接服务器
1.启动tomcat 2. 使用telnet命令 打开CMD,输入telnet localhost 8080 3.显示如下界面,说明已经连接成功 4. 复制如下代码到连接成功的界面 HEAD / ...
- java GUI(忽略)
觉得学起来很鸡肋.就不学这玩意了
- react-native在mac上执行gradlew命令报错 ./gradlew: command not found
这是因为react-native项目是windows上初始化,通过git clone到mac机器上后gradlew这个文件没有可执行权限,如图: 所以只需要给gradlew这个文件增加可执行权限就可以 ...
- 【转】深入理解java异常处理机制
深入理解java异常处理机制 ; int c; for (int i = 2; i >= -2; i--) { c = b / i; System.out.println("i=&qu ...