2014-04-22 1 views
2

정렬 용 추력 예제를 실행했습니다. 문제는 thrust::sort 다음에 출력에 모두 0이 포함되어 있다는 것입니다.CUDA - thrust :: sort on device는 0 만 반환합니다.

제발, 여기서 뭐가 잘못 됐는지 말해줘.

#include <thrust/host_vector.h> 
#include <thrust/device_vector.h> 
#include <thrust/copy.h>  
#include <thrust/sort.h> 
#include <cstdlib> 
#include <iostream> 

using namespace std; 

int main(void) 
{ 

    thrust::host_vector<int> h_vec(32 << 20); 
    thrust::generate(h_vec.begin(), h_vec.end(), rand); 


    thrust::device_vector<int> d_vec=h_vec; 

    for(int i = 0; i<32;i++) 
     cout<<d_vec[i]<<endl; 

    cout<<endl<<endl<<endl; 
    thrust::sort(d_vec.begin(), d_vec.end()); 

    for(int i = 0; i<32;i++) 
     cout<<d_vec[i]<<endl; 

    cout<<endl<<endl<<endl; 

    thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin()); 


    for(int i = 0; i<32;i++) 
     cout<<h_vec[i]<<endl; 


    return 0; 
} 
+1

* 완전한 * 코드를 제공하십시오 (왜'# include' 문을 제거해야합니까?) 다른 사람이 당신을 도우려고 어려워집니다. 실행중인 GPU와 사용중인 컴파일 명령을 확인하십시오. 귀하의 코드는 나를 위해 잘 실행, 전체 예제는 [여기] (http://pastebin.com/a6N5JrYJ)입니다. 실행하려는 컴퓨터에 문제가 있거나 사용중인 GPU에 대해 컴파일 명령이 잘못되었을 수 있습니다. –

+0

#INCLUDE <스러스트/host_vector.h> #INCLUDE <스러스트/device_vector.h> #INCLUDE <스러스트/copy.h> #INCLUDE <스러스트/sort.h> #INCLUDE 사용법 #include "iostream" 이들은 포함 문입니다 – Roshan

+0

GPU는 GT 610 이고 런타임 라이브러리 멀티 스레드 디버그 DLL (/ MDd) – Roshan

답변

2

모든 0 년대를 관찰하는 이유는 당신이 0RAND_MAX 사이, 즉, 32 << 20 = 33554432, 임의의 숫자의 큰 숫자를 생성하는, 당신이 그들을 orderning하고 있지만 만의 32를 표시하는 것입니다 그들.

Windows 컴퓨터에서 Robert Crovella가 언급 한 것처럼 (OP는 Windows에서 작동 중임) RAND_MAX = 2^15-1 = 32767. 따라서 032767 사이에 33554432 개의 정수가 생성됩니다. 즉, 원래 배열에 0의 수가 많으므로 0이 첫 번째 32 개의 정렬 된 배열 번호에 포함됩니다. 나는 개인적으로이 모두 발생 verifyed 한

, 윈도우 3264 비트 컴퓨터, 즉, 두 창 3264 비트 시스템 RAND_MAX = 32767합니다. 로버트에 의해 지적

다시 말하지만,이 효과는 리눅스에 32 비트 시스템을 보여 주지만,하지 않습니다 그 경우에, RAND_MAX32 << 20보다 훨씬 큰, 이후 어떤 RAND_MAX = 2^31-1 리눅스 64 비트 컴퓨터에. 로버트에 의해 제안

, 하나는 모든 0의 쇼를 피하기 위해

thrust::host_vector<int> h_vec(min(32 << 20,RAND_MAX)); 

에 지시

thrust::host_vector<int> h_vec(32 << 20); 

을 변경할 수 있습니다.

+0

감사합니다. 이제 제대로 작동합니다. – Roshan