내 커널 스레드가 병합 된 방식으로 선형 문자 배열에 액세스합니다. 배열을 텍스처로 매핑하면 속도가 향상되지 않습니다. 실행 시간은 과 거의 같습니다. 저는 컴퓨팅 능력 2.0을 갖춘 Tesla C2050을 개발 중이며 어딘가에 글로벌 액세스가 캐싱되어 있습니다. 그게 사실이야? 아마도 그것이 내가 실행 시간의 차이를 보지 못하는 이유입니다.CUDA : 통합 된 전역 메모리와 비슷한 텍스처 메모리의 액세스 시간입니까?
메인 프로그램 배열
char *dev_database = NULL;
cudaMalloc((void**) &dev_database, JOBS * FRAGMENTSIZE * sizeof(char));
이고 I는
cudaBindTexture(NULL, texdatabase, dev_database, JOBS * FRAGMENTSIZE * sizeof(char));
각 스레드는 다음 ID 가 threadIdx.x + blockIdx.x * blockDim.x
및 p
이다 ch = tex1Dfetch(texdatabase, p + id)
는 오프셋 문자를 판독하여 texture<char> texdatabase
텍스처 바인딩 .
나는 한 번만 바인딩되며 dev_database
은 큰 배열입니다. 사실 크기가 너무 큰 경우 을 찾았습니다. 바인드가 실패합니다. 배열 의 크기에 제한이 있습니까? 매우 감사합니다.
감사! 당신이 준 링크가 도움이됩니다. 내 코드의 분기가 분기점 인 것 같아서 이제는 병목 현상을 제거하려고합니다. 어떤 조언을 부탁드립니다 :) – Ross
어떻게 분기점 분기점이 병목 현상이라고 판단 했습니까? BTW 답변이 맞다고 생각한다면 그것을 수락하십시오. – harrism
나는 두 가지 방법으로 프로그램을 시한했다. 먼저 모든 글로벌 메모리 읽기 및 측정 된 시간을 주석 처리했습니다. 그런 다음 전역 메모리 읽기를 주석 처리하고 if-else 및 측정 된 시간을 포함하여 설명을 주석 처리했습니다. 첫 번째 방법을 사용한 시간은 전체 시간과 거의 같았으며 후자는 훨씬 낮았다. 이 방법을 사용하여 발산을 일으키는 정확한 if 문을 정확히 찾아 낼 수있었습니다. – Ross