먼저 CUDA를 사용하는 응용 프로그램을 설명해야합니다.GPU에서 메모리 액세스 속도를 높이려면 어떻게해야합니까? (CUDA)
이것은 표준 열 흐름 시뮬레이션입니다. 나는 float (변형 가능한 온도와 열, 상수 k 값, sar_value 및 기타 몇 가지)의 3D 배열을 가져 와서 GPU에 할당 된 선형 배열로 복사합니다. 이들 모두는 전역 메모리에 있습니다.
다음으로 열 흐름을 계산하는 커널 함수를 시작합니다. 이 커널을 2 차원 블록 구조와 1D 스레드 구조로 시작합니다. 블록은 열 흐름 계산을 수행하는 시뮬레이션 큐브의 x 및 y 좌표에 해당합니다. 스레드는 z 좌표에 해당합니다. 모든 스레드/블록 좌표는 성능을 극대화하기 위해 전체 큐브 크기의 배수입니다.
다음으로 각 셀에 대해 긴 계산을 수행합니다. 모든 배열은 선형이므로 z, y 및 x 방향으로 다음 셀을 계산하기 위해 오프셋을 미리 준비했습니다. 공간 지역성의 대부분은 쓰기/읽기 메모리에서 발생하므로 텍스처 메모리는 옵션이 아닙니다. 총 계산에서 큰 배열에 2 개의 쓰기, 6 개의 상수 큰 배열 읽기 (300 MB 배열의 부동 소수점), 8 개의 큰 배열 읽기, 6 개의 작은 정수 배열 읽기 (300의 큐브 루트와 같이) MB). 이 모든 것은 두 줄의 코드에서 발생합니다. 필자는 캐시 된 것으로 가정하므로 별도의 읽기와 동일한 메모리 위치에 대해 여러 번 읽지 않았습니다.
두 번째로 나는이 계산으로 얻은 결과에 대해 설명 할 것입니다.
나는 테슬라 C1060에서 약 2 억 2500 만 개의 세포를 얻는다. 대용량 데이터 세트 (40 ~ 60 백만 셀)에서 셀 당 스레드 1 개를 실행하는 것과 셀 4 개당 스레드 1 개를 처리하는 것 사이의 성능 차이는 없습니다. 이것은 나에게 계산의 제한 요소가 실제 메모리 페치임을 나타냅니다. 여러 블록에 대해 하나의 스레드를 실행하면 시스템의 메모리 과부하가 없어져서 계산이 덜 빠르지 만 각 계산이 빨라지므로 성능 향상, + 또는 - 백분율로 계산되지 않습니다.
무엇을 시도 했습니까? 3D 공간 메모리에 가장 공간적으로 일정한 대형 배열을 넣으려고했지만 비참한 3-4 배의 속도 저하를 보았습니다. 데이터 액세스 패턴은 대형 배열의 각 인덱스가 한 두 번 액세스되는 것과 같은 것인데도 컴파일 타임에 입력 크기를 반드시 알 필요가 없기 때문에 상수 메모리를 사용할 수 없다고 생각했습니다. 큰 상수 배열에 대해 1D 텍스처를 시도했습니다. 나쁘다.
더 많은 작업이 있습니까? 또한 초 당 바이트 페치 수 (225 백만/초 * 100 바이트 정도)를 볼 수 있다면 테슬라 C1060의 메모리 대역폭은 약 10 배 정도입니다. 왜 메모리가 제한 요소입니까? 어떤 사람이 유사한 열 흐름 계산을 위해 데이터 세트를 "바둑판 식으로 배열"한 것을 보았습니다 ("민트"뒤에있는 사람들이 종이로 생각했습니다). 이것이 의미하는 바는 무엇입니까?
답변 해 주셔서 감사합니다. 의견 섹션에서 질문하십시오.
질문에 대한 진술을 너무 감사드립니다. CUDA 프로파일 러에서 프로그램을 실행 했습니까? Compute Visual Profiler는 프로그램을 분석하고 일련의 권장 사항을 생성합니다. 권장 사항은 무엇입니까? 각 스레드가 다른 셀에 있습니까? 어떤 종류의 메모리 액세스 패턴이 워프에 의해 생성되었는지 확인하려고 시도 했습니까? –
CUDA의 3D 고차 유한 차분 스키마에 대한 [이 문서] (http://developer.download.nvidia.com/CUDA/CUDA_Zone/papers/gpu_3dfd_rev.pdf)를 읽고 [이 슬라이드] (http : //mc.stanford.edu/cgi-bin/images/0/0a/M02_4.pdf) (p 25)? – talonmies
Roger, 아직 CUDA 프로파일 러를 통해 실행하지는 않았지만 제안 할 것입니다. 어떤 쓰레드도 같은 시간 단계에서 같은 셀에 쓰지 않습니다 (나는 당신이 묻고있는 것이라고 생각합니다). 큐브에서 서로 옆에있는 경우 다른 스레드에 의해 배열의 위치가 우연히 읽습니다. 각 워프의 메모리 액세스 패턴은 내가 신경을 쓰지 않은 것입니다. 나는이 대답에서 언급 한 것을들은 후에 지금 할 것이다. 감사. –