이 소프트웨어는 CUDA (또는 OpenCL)를 사용하여 하드웨어 오류 및 소프트 오류에 대한 GPU 메모리를 테스트합니다.
이것은 https://sourceforge.net/projects/cudagpumemtest/에서 원본이지만 오랫동안 유지되지 않은 프로젝트의 포크입니다.
2013 년 포크 (v1.2.3) 이후, 우리는 주로 새로운 CUDA 버전에 대한 지원과 새로운 NVIDIA 하드웨어의 지원에 중점을 두었습니다. 그럼에도 불구하고 OpenCL 버전을 유지하는 풀 평가는 여전히 환영받습니다.
일리노이 오픈 소스 라이센스
일리노이 대학교/NCSA
오픈 소스 라이센스
일리노이 대학교 저작권 2009-2012. 모든 권리 보유.
Copyright 2013-2019, Helmholtz-Zentrum Dresden-Rossendorf의 Picongpu 개발자
개발자 :
혁신적인 시스템 실험실
국립 슈퍼 컴퓨팅 응용 프로그램 센터
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
2013 년부터 새로운 NVIDIA GPUS를위한 포크 및 유지 관리자 :
Axel Huebl과 Rene Widera
전산 방사선 물리 그룹
Helmholtz-Zentrum Dresden-Rossendorf
https://www.hzdr.de/crp
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게 허가가 무료로 부여되어 제한없이 소프트웨어를 처리 할 수 있도록 소프트웨어를 처리, 복사, 수정, 합병 할 권한을 포함합니다. , 소프트웨어의 사본을 게시, 배포, 서브 리센스 및/또는 판매하고, 소프트웨어가 제공하도록하는 사람을 다음과 같은 조건에 따라 할 수 있도록합니다.
소스 코드의 재분배는 위의 저작권 통지,이 조건 목록 및 다음 면책 조항을 유지해야합니다.
이진 형식의 재분배는 위의 저작권 통지,이 조건 목록 및 문서의 다음 면책 조항 및 배포와 함께 제공되는 기타 자료를 재현해야합니다.
National SuperComputing 응용 프로그램 센터 인 Innovative Systems Lab의 이름이나 기고자의 이름은 특정 사전 서면 허가 없이이 소프트웨어에서 파생 된 제품을 보증하거나 홍보하는 데 사용될 수 없습니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 기고자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타, 기타 책임에 대해 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다. 소프트웨어.
소스 디렉토리 내부에서 실행 :
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
메모:
..
는 소스 디렉토리의 경로입니다. 또한 스팩 패키지 관리자에 패키지 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의 단기가있는 GPU에 대한 빠른 정신 점검을 수행합니다. 나중에 더 자세히 설명합니다.
도움말 메시지를 참조하십시오
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
Fork Note : cuda_memtest
바이너리를 직접 실행합니다. 이 스크립트를 영감의 소스로 간주하십시오.
AMD HIP로 컴파일하더라도 공구 바이너리는 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]
이 테스트는 모든 것과 0의 패턴과 함께 움직이는 반전 알고리즘을 사용합니다.
테스트 3 [Moving inversions, 8 bit pat]
이것은 테스트 1과 동일하지만 8 비트 폭의 "걷기"패턴과 0 패턴을 사용합니다. 이 테스트는 "넓은"메모리 칩에서 미묘한 오류를 더 잘 감지합니다.
테스트 4 [Moving inversions, random pattern]
테스트 4는 테스트 1과 동일한 알고리즘을 사용하지만 데이터 패턴은 랜덤 숫자이며 보완됩니다. 이 테스트는 데이터 민감한 오류를 감지하기가 어렵다는 사실을 발견하는 데 특히 효과적입니다. 임의의 숫자 시퀀스는 각 패스마다 다르므로 다중 패스는 효과를 증가시킵니다.
테스트 5 [Block move, 64 moves]
이 테스트는 블록 메모리를 움직여 메모리를 강조합니다. 메모리는 8 바이트마다 반전되는 이동 패턴으로 초기화됩니다. 그런 다음 메모리 블록이 움직입니다. 이동이 완료된 후 데이터 패턴이 확인됩니다. 메모리 이동이 완료된 후에 만 데이터가 점검되므로 오류가 어디에서 발생했는지 알 수 없습니다. 보고 된 주소는 나쁜 패턴이 발견 된 곳에만 해당됩니다.
테스트 6 [Moving inversions, 32 bit pat]
이것은 각 연속 주소에 대해 1 비트를 남긴 데이터 패턴을 이동시키는 이동 반전 알고리즘의 변형입니다. 시작 비트 위치는 각 패스마다 왼쪽으로 이동됩니다. 가능한 모든 데이터 패턴을 사용하려면 32 패스가 필요합니다. 이 테스트는 데이터 민감한 오류를 감지하는 데 매우 효과적이지만 실행 시간은 길다.
테스트 7 [Random number sequence]
이 테스트는 일련의 임의 숫자를 메모리에 씁니다. 메모리의 블록 (1MB)은 임의의 패턴으로 초기화됩니다. 이러한 패턴과 보완은 나머지 메모리로 이동 반전 테스트에 사용됩니다.
테스트 8 [Modulo 20, random pattern]
임의의 패턴이 생성됩니다. 이 패턴은 20 번째 메모리 위치를 메모리에 설정하는 데 사용됩니다. 나머지 메모리 위치는 패턴의 보완으로 설정됩니다. 이것을 20 번, 그리고 패턴을 설정하기위한 메모리 위치가 오른쪽으로 이동할 때마다 이것을 반복하십시오.
테스트 9 [Bit fade test, 90 min, 2 patterns]
비트 페이드 테스트는 패턴으로 모든 메모리를 초기화 한 다음 90 분 동안 잠을 자게됩니다. 그런 다음 메모리 비트가 변경되었는지 확인하기 위해 메모리를 검사합니다. 모든 것과 모든 제로 패턴이 사용됩니다. 이 테스트는 완료하는 데 3 시간이 걸립니다. 비트 페이드 테스트는 기본적으로 비활성화됩니다
테스트 10 [memory stress test]
우리가 할 수있는 한 많은 스트레스 메모리. 임의의 패턴이 생성되고 큰 그리드 크기와 블록 크기의 커널이 시작되어 모든 메모리를 패턴으로 설정합니다. 이전 쓰기 커널 직후에 새로운 읽기 및 쓰기 커널이 시작되어 메모리에 오류가 있는지 확인하고 메모리를 보완에 설정합니다. 이 과정은 하나의 패턴에 대해 1000 회 반복됩니다. 커널은 글로벌 메모리와 GPU 사이의 최대 대역폭을 달성하기 위해 작성되었습니다. 이렇게하면 소프트웨어 오류가 발생할 가능성이 높아집니다. 실제로, 우리는이 테스트가 하드웨어 오류를 플러시하는 데 매우 유용하다는 것을 알았습니다.