关于Linux环境下进行OpenCL开发的几个问题 (以类Red Hat系的Linux为例进行说明)

AMD异构开发 2014-11-17 10:17:53
写在之前:

欢迎大家关注AMD社区http://hc.csdn.net/及论坛,本文原作者是 AMD公司 张前锋。非常感谢开发者一直以来将自己好的文章在这里分享和推荐。也希望更多的朋友加入到社区,您可以随时将建议和意见发到我的邮箱liuyp@csdn.com。

-------------------------------------- 我是分割线 ----------------------

1. 如何在Linux上安装Catalyst 驱动

1)从developer.amd.com下载Catalyst 的驱动安装包。 该安装包一般是一个.zip 文件,如amdcatalyst-14-4-linux-x86-x86-64.zip。用unzip解开后目录下有一个括展名为.run的安装器程序,可直接执行。这个安装器程序既可在图形环境执行,也可在字符console界面下执行。

2)执行安装器程序,在界面上选择 Generate distribution specific install package 并选择RedHat/RedHat6_64a。 如果当前系统中已经安装了rpmbuild 环境,则安装器就会成功创建一个名为fglrx64_p_i_c的rpm包,如fglrx64_p_i_c-14.10.1006.1001-1.x86_64.rpm; 否则说明系统中没有安装rpmbuild工具,需要用 #>yum install rpm-build 命令先安装rpm-build及相关的包,然后再运行安装器。

3) 执行#> rpm -ihv fglrx64_p_i_c-xxx.rpm 命令安装catalyst驱动。 这一步对于刚刚装好的Linux来说,一般不会一次直接成功,因为这个fglrx64_p_i_c的包所依赖的很多包,通常都没有安装,需要先进行安装,比如libX11 这个包是安装fglrx64_p_i_c所需要的,一般系统中没事先安装,需要用 #>yum install libX11.i686 进行安装。当前所缺乏的包, #>rpm -ihvfglrx64_p_i_c-xxxx.rpm 命令都会进行提示, 用户需要分别按提示用#>yum install命令安装完所有需要的包。 然后再运行 #> rpm -ihv fglrx64_p_i_c-xxx.rpm安装catalyst驱动。

4) Catalyst的驱动虽然是私有驱动,但有一部分和Linux内核接口的代码,是需要进行编译的。所以很多情况下,#> rpm -ihv fglrx64_p_i_c-xxx.rpm 似乎已经执行成功了,但驱动未必安装成功。用户需要用#> modinfo fglrx 命令确认驱动是否安装成功。如果modinfo命令不能找到fglrx 内核模块,则说明驱动的安装没有成功。驱动安装的失败通常是由于系统上安装的Linux内核版本和所下载的Catalyst安装包版本不兼容导致的。这种不兼容的问题,在Fedora上发生更多,在CentOS或RHEL上更少,因为Fedora的内核更新太快, Catalyst的驱动包可能没及时跟进。本人当前用的是 Fedora 19, 内核版本是 3.12.5-200,更新的内核版本及Fedora20我都试过了, 没法成功安装fglrx64_p_i_c-14.10.1006.1001-1.x86_64.rpm。正式的用户我建议还是用CentOS7或RHEL7。

5) 对于失败的安装,用户可进入到/lib/modules/fglrx/build_mod/ 目录下确认一下,执行#>./make.sh, 这个命令无法成功编译出一个fglrx.ko 模块。你可尝试下载不同版本的Linux 内核,如果make.sh 命令能成功编译出一个fglrx.ko 模块,一般你的安装是成功的。用户在执行下一次fglrx64_p_i_c 包安装之前需要卸载掉上一次安装的文件,方法是执行#>rpm -efglrx64_p_i_c 命令

6) Catalyst 驱动安装成功后,你可以配置你的X-windows 系统来使用catalyst 驱动,执行#>aticonfig –adapter=ALL –initial 产生一个/etc/X11/xorg.conf 文件,并修改这个文件让图形系统使用正确的AMD显卡。这一步对OpenCL用户通常来说不是必要的,对OpenGL的用户,则希望使用Catalyst的驱动来提升其3D应用的性能。用户可以用#>lspci -vn |grep “VGA”命令显示系统中的GPU及对应的PCI ID。 配置X-windows系统使用Catalyst驱动的另外一个好处是可以让普通用户(non-root)的OpenCL程序使用GPU, 而root用户的OpenCL程序则不需要依赖X-windows 可直接使用catalyst驱动支持的OpenCL功能。

7) Catalyst驱动安装成功后。一般操作系统在启动过程中会直接根据机器中所安装的GPU设备的PCI IDs 自动加载fglrx.ko 模块。用户可以用#>clinfo 命令查看一下系统中有哪些可运OpenCL的GPU设备。

2. 在Linux上如何使用一个保留的GPU进行X-Window图形显示,而其他GPU用于OpenCl开发

很多进行OpenCL开发的用户希望使用系统主板中自带的一个能力相对较弱GPU做图形显示,而用外插的高端显卡做OpenCL 计算。下面的步骤以一个带有AMD 的Radeon 集成GPU 和
Radeon 独立GPU 的笔记本为例,让X-windows 使用集成GPU 并使用vesa 驱动做显示。在Linux 上, vesa 驱动能被几乎所有图形卡支持。另外在 CentOS, RHEL 等企业级 Linux 上,
matrox, ast 等显卡驱动都不被支持,需要用vesa驱动来运行X-windows。 下面的配置步骤也适合集成显卡是非AMD的GPU的情况, X-windows 可以用vesa也可用Linux自带的开源显卡驱
动:

1) 修改/etc/modprobe.d/blacklist-fglrx.conf,将radeon和fglrx加入驱动的blacklist中。这个设置是必须的,因为现在的Linux上 Xorg提供的vesa驱动,只有当其他驱动没有关联到用于显示的GPU时,才能正常启动; 否则,如果 radeon或fglrx已经被加载了,vesa就会认为自己不能去驱动那个GPU。将radeon和fglrx加入blacklist能阻止Linux的驱动自动加载机制主动加载radeon或fglrx,这样我们可以让X-windows用vesa运行起来后再加载fglrx。

2) 创建一个/etc/X11/xorg.conf 文件,具体可参考下图的内容。这里只使用了一个Device,Monitor和Screen, 更复杂的情况需要修改该内容。当然,由于这里是使用vesa驱动,Device部分的驱动是vesa, 如果是使用intel的设备,则驱动名也可以是intel。配置该文件时需要注意所使用的GPU的PCI ID。 一般用 #>lspci -vn |grep “VGA” 确认一下你的GPU的PCI ID。



3) 执 行 两 个 命 令 #>/usr/lib64/fglrx/switchlibGL intel#>/usr/lib64/fglrx/switchlibglxintel。fglrx_p_i_c的包在安装过程中会将系统中的libGL.so及libGLX.so库链接到AMD提供的fglrx私有库上。由于现在配置的X-windows要使用非AMD的驱动,所以需要将这些库还原成系统原有的库。上述命令的参数intel就是指Linux系统自带的开源的库,如果使用参数amd,则是指AMD提供的fglrx 私有库。如果不恢复到系统自带的库,则使用vesa 的Xwindows环境下,某些 桌面应用的启动就会导致问题。

4) 重启系统。重启后的系统进入桌面环境后, AMD的fglrx驱动不会主动加载,这时无法使用OpenCL, 用户可以用#>modprobe fglrx 命令手工加载 fglrx 模块,或者将该命令加入到
/root/.bashrc 中, 在root用户登录时会自动加载fglrx模块。

5) fglrx模块加载后,用户可以在字符console或远程程通过ssh登录到系统上运行OpenCL程序,当然只能使用root用户。普通用户登录到图形环境后, 也可 su切换到root用运行OpenCL
程序,但需要运行 #>unset DISPLAY 命令关闭DISPLAY的设置,否则运行OpenCL程序时会出现故障。用户可以将 unset DISPLAY这个命令加入到 /root/.bashrc脚本中

3. 如何用CodeXL远程测试OpenCL程序

CodeXL工具具有远程测试OpenCL程序的能力, 这一点在服务器环境部署OpenCL应用时非常重要, 因为让单个的服务器连接显示器,启动图形再在其本地运行CodeXL工具可能会很不方便。CodeXL的远程测试能力可以让我们在个人的笔记本电脑的图形环境下开发OpenCL程序,远程部署到服务器上,利用服务器上性能强大的AMD独立显卡进行性能测试。用CodeXL进
行远程OpenCL程序测试的步骤如下:

1) 在客户端笔记本及服务器端直接安装从developer.amd.com下载的CodeXL的rpm包。这个安装过程很简单,如果有依赖的包,直接用#>yum installl 命令进行安装解决依赖。CodeXL的安装不要求任何AMD的环境,完全可以在只有Intel或Nvidia图形卡的环境安装。但我们要求在客户端安装的 CodeXL 和服务器端安装的 CodeXL 版本必须一致, 否则CodeXL启动远程测试时会报错。

2) 将客户端开发好的 OpenCL代码传到服务器端root用户的某目录下(通常在服务器上需要以root 用户运行OpenCl 代码)。服务其端需要已经建立好OpenCL 代码的运行环境,包括OpenCL程序可能依赖的库,如clAmdBlas等。

3) 在客户端启动的CodeXL 图形界面上创建一个项目。项目设置中选择 Remote Host 模式,并设置服务器端的IP 地址和端口号27015。Executable Path, Working Directory, Kernel Source
Files Directory的设置都应该指向服务器端的目录或文件位置。命令行参数的设置和通常情况一样。

4) 关闭服务器端的防火墙。目前的Red Hat系列的Linux上可能有两个防火强软件,firewalld和iptables,要确保两个防火墙软件都处于关闭状态。运行#>systemctl disable firewalld#>systemctl stop firewalld 命令可确保firewalld防火墙完全关闭,iptables防火墙操作类似。用#>systemctl status firewalld 可查看firewalld的状态。当然会配置防火墙的用户也可以不用关闭防火墙, 直接配置防火墙开放27015端口即可。

5) 在服务器端以root用户执行CodeXLRemoteAgent程序启动用于远程CodeXL测试的Agent。该Agent保留情况会使用端口号27015。CodeXLRemoteAgent是由安装的CodeXL包提供的,
在安装CodeXL包后一般需要在/root/.bashrc中设置PATH变量以确保CodeXLRemoteAgent程序可被bash找到。

6) 在客户端的CodeXL 下选择GPU:Performance Counters 或GPU:Application Trace 可进行用户需要的远程profiling。如果有异常,客户端的CodeXL 会报告故障信息,服务器端的
CodeXLRemoteAgent输出中也会报告信息,用户可根据这个解决配置上的问题。
...全文
2331 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fronteer 2014-11-24
  • 打赏
  • 举报
回复
http://hc.csdn.net/contents/content_details?type=1&id=470 有了
zenny_chen 2014-11-22
  • 打赏
  • 举报
回复
好文!!话说,这类文章是否能放到Wiki上去?方便查阅~

603

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧