高性能计算网发布首款国人开发的支持GPU的OpenCL通用计算测试程序GPCBenchmark(中文版下载,英文版下载)。
首款国人开发的支持GPU的OpenCL通用计算测试程序OpenCL General Purpose Computing Benchmark
(简称GPCBenchMarkOCL)是由国内几名高性能计算从业人员和爱好者合作编写的,目的是为了评估在不同的OpenCL平台上一些基本算法和应
用的性能。与目前流行的一些OpenCL、DirectCompute通用计算测试程序的不同在于,目前这些测试程序测试项目过于单一,基本上就是某一两
种算法的性能测试,甚至干脆就是理论峰值计算性能的测试。而实际上,OpenCL计算设备包括GPU的计算性能是受非常多因素影响的,除了计算单元的频率
和数量之外,还有计算单元架构、Global memory(显存)带宽、Local
memory(GPU内的片上存储器,NVIDIA称为Shared memory,AMD称为Local Data Share)带宽和Bank
conflict、存储器合并访问情况、存储器同步成本、缓存等各种因素。因此某些纸面计算性能非常高的GPU执行某些计算时性能却不一定好;又或者,某
GPU在执行某种计算时虽然性能落后于另一架构的GPU,但是在执行另一种计算时性能反而超前。GPCBenchMarkOCL集合了高性能计算领域多种
常见的基础算法和应用,能比较全面地评估GPU及其它OpenCL计算设备在通用计算应用中的性能。
目前GPCBenchMarkOCL的测试项目包括: 1、Global Memory带宽(读、写、拷贝以及PCI-E总线带宽) - 主要考察不同传输尺寸下各种访存操作的性能 2、Local Memory带宽(带宽和Bank conflict) - 分析Local memory带宽与数据类型、Bank conflict的关系 3、32位整数性能(加法、乘法、乘加和位运算) - 分析处理器32位整数处理性能 4、单精度浮点性能(加法、乘法、乘加和特殊函数如sqrt、sin等) - 分析处理器单精度浮点数处理性能 5、 双精度浮点性能(加法、乘法、乘加和特殊函数如sqrt、sin等) - 分析处理器双精度浮点数处理性能 6、常用计算(单精度和双精度浮点的大 矩阵乘法、大矩阵转置、归约、DCT8x8) - 分析处理器在进行一些常用矩阵与信号处理运算中的表现 7、图像处理(亮度直方图、2维卷积、降 噪、双立方插值缩放) - 分析处理器在进行一些常用图像处理中的表现 8、密码学(目前只有SHA-1 Hash Loop,以后将加入盒型加密和彩虹表) - 分析处理器在密码学应用中的性能 在GPCBenchMarkOCL中,所有测试都会在 CPU和GPU(包括其它OpenCL设备)上运行并给出性能结果,不过CPU上运行的并非OpenCL代码而是用常规C语言实现的并行算法(会调度全部 的CPU核)。而GPU上运行的OpenCL代码经过试验能正确运行在NVIDIA GTX285和AMD HD5870上。各算法的OpenCL实现有部分修改自NVIDIA和AMD的SDK,部分是由相关从业人员和爱好者提供的。由于NVIDIA和AMD的 GPU架构上有很大区别,对于某些算法也许能专门针对NVIDIA或AMD的GPU架构写出非常难看的比较极端优化的OpenCL代码,但考虑编程难度、 程序的可读性和普遍意义,GPCBenchMarkOCL只使用了一般的GPU编程优化方法做了简单优化(例如使用Local memory暂存数据、利用合并访问规则等),并且在不同的OpenCL计算设备上也是运行相同的OpenCL代码来进行测试。 GPCBenchMarkOCL 支持AMD RV770及Evergreen系列,以及NVIDIA G8x、G9x、GT200、GT21x、GF100等GPU的OpenCL平台。 运行环境要求: 操作系统: Windows XP 32/64bit Windows Vista 32/64bit Windows 7 32/64bit 驱动程序: AMD GPU:催化剂10.2或以上版本,且需安装AMD Stream SDK 2.01或以上版本(目前AMD GPU的驱动程序还没有正式加入OpenCL支持) NVIDIA GPU:只需安装197.14或以上版本的驱动程序 注意事项: AMD OpenCL平台目前(催化剂10.3 + Stream SDK 2.01)仍不支持双精度浮点数操作,但实际上经过试验,该平台是可以执行部分双精度浮点数操作的(特殊函数及乘加指令等除外)。如果需要在AMD OpenCL平台上测试双精度浮点性能,必须在配置页打开“强制支持双精度浮点(强制cl_khr_fp64)”选项。 AMD OpenCL平台目前(催化剂10.3 + Stream SDK 2.01)尚未添加对Image访问(通过纹理访问数据)的支持,限制了AMD OpenCL平台在图像处理应用方面的性能。 |