응용 프로그램은 두 개의 정렬 된 정수 목록 (교차 설정)을 말합니다 (예 : list1과 list2).CUDA를 사용하여 이진 탐색의 분기 차이를 줄이는 방법
list1의 각 요소에는 GPU 스레드가 할당되고, 이진 검색을 통해 list2에 나타나는지 확인합니다. 이 응용 프로그램에는 엄청난 양의 스레드 차이가 있음을 쉽게 알 수 있습니다. thread divergences를 줄이기위한 좋은 접근법이 있는지 궁금합니다. 이 응용 프로그램을 구현하기 위해 CUDA를 사용하고 있습니다.
P-ary 검색이라고하는 방법이 있지만 바이너리 검색의 스레드 차이를 줄이는 것이 중요합니다. 또한 추력이라는 라이브러리가 있다는 것을 알고 있습니다. 그러나 그 차이를 줄이려는 시도는없는 것 같습니다.
이 얼마나 큰의 집합입니다 범위의 메모리가 액세스하여 예외를 생성 할 수 정수? divergences에서, 길이가 n 인 두리스트를 합치는 것은 O (n) 비교를 포함하는데, 각각의 차이는 발산 될 것입니다. 나는 당신이 많은 갈등을 가질 것이라는 점을 받아 들여야한다고 생각한다. (더 큰 문제는 병렬로 메모리 블록을로드하는 것입니다.) – btilly
동의합니다 - 메모리 액세스는 발산과 관련된 더 큰 문제입니다. 이진 탐색 단계와 종료 - 내가 볼 수있는 한 두 가지 발산 원천이 있습니다. 그 스레드는 어쨌든 끝났기 때문에 종료에 대해서는별로 신경 쓰지 않고 루프의 바이너리 단계는 if/else 만 인덱스를 업데이트하는 것입니다. 그보다 훨씬 더 나쁜 것은 두 번째 목록의 모든 곳에서 읽는 것입니다. 나는 두 목록을 먼저 정렬하는 것이 조금 도움이 될 것 같아요. –
duh. 정렬 list1. –