0
내가 CUDA에서 sort_by_key()와 가 sort_by_key 동안 다시 주문 처리되지 않습니다 키, 단지 값 tiled_range을 사용하고
... 예를 들어추력 - 주문한 다시하지
: 키를 나타내는 벡터가 하나 있습니다 :
Keys 0 1 2 3 4 5
나중에 tiled_range를 사용하여 값이 복제 된 새 벡터가 있습니다.
Keys 0 1 2 3 4 5 0 1 2 3 4 5
그리고 값을 나타내는 또 다른 벡터 :
Keys 0 0 1 1 2 2 3 3 4 4 5 5
Values 0 3382 3382 0 1863 251 470 1394 311 5651 2017 257
내 코드 재 주문 키에 : 주문 다시
values 0 3382 1863 470 311 2017 3382 0 251 1394 5651 257
내가 sort_by_keys로 기대되었다 같은 키 이쪽으로 ...
Keys 3 3 4 4 5 5 3 3 4 4 5 5
Values 0 3382 3382 0 1863 251 470 1394 311 5651 2017 257
궁금 해서요. 왜 이런 식으로 주문을 다시하는 것이고 올바른 주문을 받기 위해 무엇을 할 수 있습니까?
#include <iterator>
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
#include <thrust/sort.h>
using namespace thrust::placeholders;
template<typename Iterator>
class tiled_range
//Code of tiled_range....
//
int main(void)
{
thrust::device_vector<int> data(6);
data[0] = 0; data[1] = 1; data[2] = 2; data[3] = 3; data[4] = 4; data[5] = 5;
thrust::device_vector<float> values(12);
values[0] = 0; values[6] = 3382;
values[1] = 3382; values[7] = 0;
values[2] = 1863; values[8] = 251;
values[3] = 470; values[9] = 1394;
values[4] = 311; values[10] = 5651;
values[5] = 2017; values[11] = 257;
tiled_range<thrust::device_vector<int>::iterator> keys(data.begin(), data.end(), 2);
std::cout << "Keys: " << std::endl;
thrust::copy(keys.begin(), keys.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
thrust::sort_by_key(keys.begin(), keys.end(), values.begin());
std::cout << "Keys: " << std::endl;
thrust::copy(keys.begin(), keys.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::cout << "Values: " << std::endl;
thrust::copy(values.begin(), values.end(), std::ostream_iterator<int> (std::cout, " "));
std::cout << std::endl;
return 0;
}
당신은'tiled_range를 정렬 할 수 없습니다 다음 sort_by_keys에 대한 입력으로 tiled_range의 반복자를 넣어 그 위에 같은 혼란을 일으키는 이유를 나는 아직도 여기
코드입니다 ... 이해하지 않는다 '는 변경할 수 없으므로 값은 실제로 메모리의 어느 곳에도 존재하지 않습니다. 왜 예제 코드를 컴파일 할 수 있는지 모르겠다 - 그렇게해서는 안된다. 코드를 작동 시키려면 정렬을하기 전에 임시 저장 공간에'tiled_range '를 복사해야합니다. –감사합니다. 설명에 대해 자레드 (Jared). 내가 왜 컴파일하는지 이유를 모르겠다. –