该软件使用CUDA(或OPENCL)测试GPU内存是否存在硬件错误和软错误。
这是https://sourceforge.net/projects/cudagpumemtest/上的原始但长期未受到的项目的叉子。
在2013年的叉子(v1.2.3)之后,我们主要关注对新的CUDA版本的支持,并支持新的NVIDIA硬件。尽管如此,仍然欢迎维护OPENCL版本的拉装。
伊利诺伊州开源许可证
伊利诺伊大学/NCSA大学
开源许可证
版权所有2009-2012,伊利诺伊大学。版权所有。
版权2013-2019,helmholtz-Zentrum Dresden-Rossendorf的Picongpu的开发商
开发者:
创新系统实验室
国家超级计算申请中心
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
自2013年以来,通过:
Axel Huebl和Rene Widera
计算辐射物理组
Helmholtz-Zentrum Dresden-Rossendorf
https://www.hzdr.de/crp
特此免费授予任何获得此软件副本和相关文档文件(“软件”)的人,以无限制处理该软件,包括无限制的使用权,复制,修改,修改,合并,发布,分发,分布和/或出售该软件的副本,并允许提供该软件的人,但要遵守以下条件:
源代码的再分配必须保留上述版权通知,此条件列表和以下免责声明。
二进制形式的重新分配必须复制上述版权通知,此条件列表以及文档中的以下免责声明和/或与分发所提供的其他材料。
未经具体的事先书面许可,均不能使用创新系统实验室的名称,国家超级计算应用中心的名称,也不能使用其贡献者的姓名来认可或推广从该软件中衍生的产品。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,贡献者或版权持有人均不应对任何索赔,损害或其他责任责任,无论是在合同,侵权诉讼中还是其他责任,与软件,使用或与使用或与其他交易有关软件。
在源目录中,运行:
mkdir build
cd build
# build for NVIDIA architecture sm_35
cmake -DCMAKE_CUDA_ARCHITECTURES=35 ..
make
在源目录中,运行:
mkdir build
cd build
# build for NVIDIA architecture MI2XX
cmake -DCUDA_MEMTEST_BACKEND=hip -DGPU_TARGETS=gfx90a ..
make
笔记:
..
是通往源目录的路径。我们还在Spack软件包管理器中提供了cuda-memtest
软件包。
cuda_memtest
默认行为正在无限无限的所有GPU上运行测试。有其他选择可以更改默认行为。
cuda_memtest --disable_all --enable_test 10
cuda_memtest --stress
这将运行测试10(应力测试)。 --stress
相当于--disable_all --enable_test 10 --exit_on_error
cuda_memtest --stress --num_iterations 100 --num_passes 1
这是一项简短的测试10进行快速理智检查。
请参阅帮助消息
cuda_memtest --help
目录中有一个简单的脚本sanity_check.sh
。该脚本是否可以快速检查一个GPU或所有GPU是否身体不好。
示例用法:
# copy the cuda_memtest binary first into the same location as this script, e.g.
cd ..
mv build/cuda_memtest .
./sanity_check.sh 0 //check GPU 0
./sanity_check.sh 1 //check GPU 1
./sanity_check.sh //check All GPUs in the system
叉注:我们只能直接运行cuda_memtest
二进制。将此脚本视为灵感的来源。
即使您使用AMD髋关节编译,工具二进制也将被命名为cuda_memtest
。
如果您通过臀部在AMD GPU上运行,则该工具将在CUDA而不是髋关节上提及。
我们没有维护此代码库的OpenCL版本。欢迎恢复和更新OpenCL功能的拉请求。
跑步
cuda_memtest --list_tests
将打印出所有测试及其简短描述,从2009年6月18日开始,我们实施了11个测试
Test0 [Walking 1 bit]
Test1 [Own address test]
Test2 [Moving inversions, ones&zeros]
Test3 [Moving inversions, 8 bit pat]
Test4 [Moving inversions, random pattern]
Test5 [Block move, 64 moves]
Test6 [Moving inversions, 32 bit pat]
Test7 [Random number sequence]
Test8 [Modulo 20, random pattern]
Test9 [Bit fade test] ==disabled by default==
Test10 [Memory stress test]
首先,启动了一个内核来编写模式。然后我们退出内核,以便可以冲洗内存。然后,我们启动一个新的内核,以读取并检查该值是否与模式匹配。如果每个内存位置不匹配错误,则会记录错误。在同一内核中,图案的补充是在检查后写的。启动第三个内核以再次读取值,并根据模式的补充进行检查。
测试0 [Walking 1 bit]
此测试在内存地址中更改了一个时间,以查看其转移到其他内存位置。它旨在测试地址线。
测试1 [Own address test]
每个内存位置都有自己的地址。下一个内核检查每个内存位置中的值是否仍然与地址一致。
测试2 [Moving inversions, ones&zeros]
该测试使用具有所有模式和零的模式的移动反转算法。
测试3 [Moving inversions, 8 bit pat]
这与测试1相同,但使用了8宽的“行走”模式和零模式。该测试将更好地检测“宽”内存芯片中的细微错误。
测试4 [Moving inversions, random pattern]
测试4使用与测试1相同的算法,但数据模式是一个随机数,并且是补充。该测试对于难以检测数据敏感错误的发现特别有效。随机数序列在每次通过时都不同,因此多个通过提高了效率。
测试5 [Block move, 64 moves]
该测试通过移动块记忆来强调内存。记忆以每8个字节反转的转移模式初始化。然后将内存块移动。移动完成后,检查了数据模式。由于仅在内存移动完成后才检查数据,因此不可能知道发生错误的位置。报告的地址仅适用于发现不良模式的地方。
测试6 [Moving inversions, 32 bit pat]
这是移动反转算法的一种变体,该算法会移动数据模式为每个连续的地址留下一点点。每次通过的起始位置位置向左移动。要使用所有可能的数据模式,需要32个通过。该测试在检测数据敏感错误方面非常有效,但执行时间很长。
测试7 [Random number sequence]
该测试将一系列随机数写入内存。以随机模式初始化了一个(1 Mb)的块(1 MB)。这些模式及其补充用于与其余内存的移动反转测试。
测试8 [Modulo 20, random pattern]
生成随机模式。此模式用于在内存中设置每个20个内存位置。内存位置的其余部分设置为模式的补充。重复20次,每次设置模式的内存位置右移动。
测试9 [Bit fade test, 90 min, 2 patterns]
位淡出测试以图案初始化所有内存,然后睡90分钟。然后检查内存以查看是否有任何内存位更改。使用了所有和所有零模式。该测试需要3个小时才能完成。默认情况下禁用位淡出测试
测试10 [memory stress test]
尽可能多地压力记忆。生成一个随机模式,并启动大型网格大小和块大小的内核,以将所有内存设置为模式。在上一个写入内核之后,立即启动了一个新的读取和写入内核,以检查内存中是否存在任何错误并将内存设置为补充。对于一种模式,将此过程重复1000次。编写内核是为了实现全局内存和GPU之间的最大带宽。这将增加捕获软件错误的机会。在实践中,我们发现该测试对冲洗硬件错误也非常有用。