▶ 在 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. jquery,从后台查数据,给页面上添加树形。

    前台jquery+ajax请求往页面上添加树形的js代码 //传入当前点击节点的id,在后台代码查询出parentid=当前节点id的记录数,从而实现点击当前节点,往后台发送ajax请求,查询出子节点 ...

  2. 剑指offer-int类型负数补码中1的个数-位操作

    在java中Interger类型表示的最大数是 System.out.println(Integer.MAX_VALUE);//打印最大整数:2147483647 这个最大整数的二进制表示,头部少了一 ...

  3. 自制数据结构(容器)-java开发用的最多的ArrayList和HashMap

    public class MyArrayList<E> { private int capacity = 10; private int size = 0; private E[] val ...

  4. Java 中的语法糖(7/15整个周六上午总结)

    语法糖定义指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会:但是这种语法对语言的功能并没有影响.Java中的泛型,变长参数,自动 ...

  5. 转 Katana 项目入门

    Katana 项目入门 Howard Dierking 当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每 ...

  6. vue-cli 下的 webpack 优化

    app bundle 可以通过组件懒加载优化 vender 优化方法: 使用 cdn,然后在 webpack 配置中指定 externals. 利用 webpack 的插件 DllPlugin 和 D ...

  7. netty答题

    1,介绍一下netty netty封装了Java原生的nio,是一个异步和数据驱动的网络编程框架, 与tcp: netty -> Java Runtime Socket (io.nio.nio2 ...

  8. WebClient类

    WebClient类提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法. 其实就相当于创建一个请求客户端.可以获取网页和各种各样的信息,包括交互. 通过MSDN来看看WebC ...

  9. Oracle的静默安装 升级和卸载 参考规范

    Oracle的静默安装 升级和卸载 参考规范 20180912 V1 一.Oracle的安装 Oracle产品的三种安装方式分别为: 1.图形化(Java向导)安装引导 2.使用应答文件静默安装 3. ...

  10. PHP按最大宽高等比例缩放图片类 http://www.oschina.net/code/snippet_876708_21113

    PHP按最大宽高等比例缩放图片类 http://www.oschina.net/code/snippet_876708_21113 php 等比例缩小图片 http://www.111cn.net/p ...