문제

정렬 할 배열은 약 1 백만 개의 문자열을 가지고 있으며, 여기서 모든 문자열은 최대 100 만 자입니다.

GPU 용 알고리즘을 구현하는 구현을 찾고 있습니다.

크기가 약 1MB 크기의 데이터가 있고 접미어 배열 를 구축해야합니다.이제 정말 소량의 메모리에 100 만 개의 문자열을 가질 수있는 방법을 볼 수 있습니다.

도움이 되었습니까?

해결책

GPU 분류의 기술의 상태는 특히 고무적이지 않습니다.

32 비트 정수를 정렬하기 위해 2009 년부터 다음 용지 (NVIDIA에서의 연구원 인 2 명의 저자가있는 경우)는 4 코어 요크 필드에서 최고의 CPU 정렬에 비해 GTX280에서 최고의 CUDA 정렬에 대해 23 % 증가합니다.

http://www.mgarland.org/files/papers/gpusort. -IPDPS09.PDF

GPU에서 RADIX 정렬을 사용하고 CPU에서 정렬을 병합합니다. GPU Radix 대신에 GPU 기수 정렬의 절반 절반 (1 백만)의 속도를 달성 한 GPU 기반 정렬이 아닌 GPU Radix 정렬이 아닌 GPU 기간 종류가 아닌 GPU Radix 정렬이 아닌 GPU Radix 정렬이 가능합니다 (1 백만 키) - 즉, CPU 병합 정렬보다 약 40 % 느 림.

가변 길이 키를 추가하면 WARP에서 스레드가 GPU에서 동기화되지 않으므로 CPU보다 GPU의 성능이 저하됩니다.

전반적으로의 목적이 효율적인 시스템을 구축하는 것이 더 빠르고 쉽게 작성하기 쉽기 때문에이 문제에 대해 CPU 구현을 사용하는 것이 좋습니다.

그러나 당신의 목적이 GPU에 대해 실험하거나 그냥 배우기위한 것이라면, CUDA SDK의 용지에서 병합 종류의 CUDA 구현을 찾을 수 있습니다.

http : //developer.download.nvidia .com / compute / cuda / sdk / website / data-parallel_algorithms.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top