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 ...
随机推荐
- 蓝桥杯 BASIC-3:字母图形
基础练习 字母图形 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCD ...
- 《DSP using MATLAB》Problem 3.21
模拟信号经过不同的采样率进行采样后,得到不同的数字角频率,如下: 三种Fs,采样后的信号的谱 重建模拟信号,这里只显示由第1种Fs=0.01采样后序列进行重建,采用zoh.foh和spline三种方法 ...
- com.fasterxml.jackson.databind.ObjectMapper. .readValue .convertValue
String str="{\"student\":[{\"name\":\"leilei\",\"age\": ...
- java基本数据类型和引用类型
这些基本的数据类型是点不出东西来的 3种引用类型 类class 接口interface 数组array 第一个 : 类 Integer Long Boolean Byte Characte ...
- 如何取出word文档里的图片
在生活当中,Word办公是必不可少的.但是在工作中也会遇到一些麻烦,比如说如何取出word文档里的图片呢?有的人会通过复制粘贴,通过画图保存,可是这种方法未免太繁琐了吧.下面我就来分享一下我的经验. ...
- Linux下的Nginx部署禅道
基本思路:先安装好nginx和mysql和php,上传禅道的源码.把禅道的源码包扔到 nginx/apache 的工程路径内或者nginx/apache内的配置文件指向nginx的路径,然后将ngin ...
- CountDownLatch、CyclicBarrier、Semaphore 区别
CountDownLatch.CyclicBarrier.Semaphore 区别: CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同: Coun ...
- Elasticsearch 知识点
Elasticsearch 知识点 table th:first-of-type { width: 200px; } table th:nth-of-type(2) { } 功能 curl命令 运行 ...
- MySQL中drop,truncate 和delete的区别
注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: truncate和 del ...
- maven 指定 jdk 版本
方法1:直接修改 本地 settings.xml 文件 <profiles> </profiles> 之间加入 下面的 <profile> <id> ...