使用CUDA实现并行奇偶排序并使用性能分析工具分析
Contents
配置目标环境
由于基于 VMware 的虚拟机不支持调用 Host 的 GPU 卡,除非装双系统。因为网上已经有在真机上配置环境的教程了,又因为有大量的同学使用的是白嫖百度 GPU 的方法,为了增加文化的多样性,俺先考虑在 windows 下配置 CUDA 环境。
到官网下载安装包,慢慢安装。
一路按照默认的安装来,最终安装程序很贴心地显示了哪些是安装的,哪些没安装。俺的偏好是在 Mingw-w64 下用 Atom 编辑器写代码。偏好其它环境的,可以参考这篇文章
由于之前 Visual Stdio 耗尽了俺系统盘的存储空间,而且卸载残留严重,因为怕影响系统,有些组件都不敢卸载,就一直处于给系统盘瘦身的操作中,终于下定决心重装。总之,是很不愉快的体验。因此,俺是抵制安装 VS 所有产品的。
然而,用 nvcc 编译源代码,报错如下:
解决报错的方法根据 stackoverflow 或 官网教程只有安装恶心的 VS :(
俺用的是 VS 2019,从工作负载标签下选择【使用C++的桌面开发】
mlgj安装还要重启,中途如果遇到 NVIDIA 需要更新就更新一下,俺的原则是凡是只要有最新的,就更新到最新,和 Ubuntu 的原则差不多,默认最新就是最好的。然后找到 cl.exe 将它添加到环境变量中去。另外,基于我对 VS 的偏见,推荐大家备份环境变量,可以用此脚本。
编译:
运行:
看来环境是勉强配好了。
总结一下,对于 VS 我只是用到了它的 cl.exe,这个 exe 文件可能用到了 VS 的其它文件,所以我建议还是把 VS 装上比较好。先决条件是安装了 Mingw 的 C/C++ 运行环境,当然,NVIDIA 的 GPU 卡肯定要有,可以 win + r 后输入 dxdiag 查看卡的型号。
接下来还需解决两个问题:一个是自动化运行,一个是解决warning。
解决 warning:
虽然说 warning 没事,但俺有强迫症啊~
要去除 warning,就要将报错所在文件的 Unicode 变成带签名的,详见这里,首先要取得文件的完全控制权限,参考
我一共修改了两个文件的编码类型,然后运行之前的命令,warning 消失
之后别忘了将文件夹的权限改回来。
自动化运行:
优先寻找:根据文件后缀名的差异执行不同的命令的插件。 其次寻找:快捷键执行批处理等脚本的插件。
战略放弃。
性能分析工具
之前装 VS 已经让俺的节操碎了一地。这次,根据官网指示:Visual Profiler 和 nvprof 将在以后的 CUDA 版本中弃用.建议使用下一代工具 NVIDIA Nsight Compute 进行 GPU 配置,使用 NVIDIA Nsight Systems 进行 GPU 和 CPU 采样和跟踪。我就坚定地开始了装 NVIDIA Nsight Compute 的征程。
进入下载界面,发现还要注册,注册界面卡得雅匹,我只能开了全局,再不断尝试下载各个版本的 Nsight Compute,终于试出一个不用注册的,还下载得非常慢。
经过无数次下载失败,结合最近上外网有时很卡,再结合最近的朝鲜化趋势,我怀疑我的 V2Ray + tls + ws 的翻墙流量被干扰得太严重了。尝试用tg群里别人推荐的 rixcloud,说是一直很稳。当然,我是买不起 richcloud, 只能用它的原理:ssr,也是之前我为了装B而弃用的方法。费了很长时间才找到一个不在黑名单里的 IP,搭建完成后,继续使用 IDM 下载。之前用 V2Ray 不能断点续传的文件居然可以多线程下载了!
看来还是 ssr 的功能强大,开销小啊,虽然带来的是它的不安全。看来以后的主力就是 ssr,V2Ray 作为备用。ssr 的流畅让我明白了技术是为了适应生产场景而变化的,不是为了装B的。这里给出一个对 ssr 讨论比较专业的网站。
安装 Nsight Compute 这个包时,系统显示我已经安装了。这时就没必要再安装一遍了,因为如果安装的版本不是最新的系统会推荐你装最新的。参考官网教程中的命令
|
|
以管理员的身份运行 nv-nsight-cu-cli 命令,得
略去中间的输出
之后用 nv-nsight-cu <MyReport.nsight-cuprof-report>,得出
至此,性能分析部分任务完成。
如果喜欢用图形化界面,可以参考这篇教程,命令行输入 nv-nsight-cu 后直接 Enter,即可启动。 如果追寻更加高级的可视化的性能分析结果,可以参考这个文档。
下面用 CLI 和相应的图形化界面进行性能分析。
并行奇偶排序
|
|
CLI 性能分析
图形化界面
显然,图形化界面不但直观,还有许多控件,可以选择不同层次的视图类型,甚至可以把结果保存成PDF、图片等多种类型,功能强大。