나는 추력을보고있다 그리고 나는 거의 (그러나 확실히)이 내 대답 질문에 발견 :이 질문에 대해 답이 게시 Finding the maximum element value AND its position using CUDA Thrust지수는
예는 잘 작동하지만, 어떻게 원시 포인터를 사용하여 동일한 작업을 수행 할 수 있습니까? 우리가 내가 올바른 생각하는이 코드를 가정 해 봅시다 (커널 구성을 무시, 그것은 편의상의) :
float* d_A;
const unsigned int noElems = 10;
cudaMalloc(&d_A, noElems * sizeof(float));
initDeviceVector<<<1, noElems>>>(d_A);
thrust::device_ptr<float> d_ptr = thrust::device_pointer_cast(d_A);
thrust::device_vector<float>::iterator iter =
thrust::max_element(d_ptr, d_ptr + noElems);
는 꽤 원시 포인터 ITER 를 사용하여 위치를 추출하는 방법을 알아낼 수 없습니다.
감사합니다.
힌트 :
다음 완전히 일 예는이 보여 포인터는 임의 접근 반복자입니다. –
사실, 나는 내가해야 할 일을 이해하고 있다고 생각합니다. (단지 d_ptr에서 iter를 뺍니다), 추측 할 수없는 것은 추력에서 그것을하는 방법입니다. 분명히 iter - d_ptr은 다른 데이터 유형 때문에 간단히 작동하지 않습니다. 예를 들어, iter와 d_ptr 둘 다에서 정수 값을 얻는 방법이 있습니까? 나는 문서를 확인하고 거기에서 정보를 추출 할 수 없었다. – Intri
질문을 올바르게 이해했다면 다음 두 가지 작업이 필요합니다. 1) 원시 포인터로'max_element'를 제공 할 수 있도록 원시 포인터를'device_ptr'로 변환하십시오. 2) 이후에 최대 요소 값을 가리킬 수 있도록 반복기를 포인터로 변환하십시오. 이 두 개의 게시물이 도움이 될 것입니다 : [추력 :: 반복자를 원시 포인터로 변환] (http://stackoverflow.com/questions/12201446/converting-thrustiterators-to-and-from-raw-pointers) 및 [변환 원시 포인터에 STL 벡터 반복자] (http://artins.org/ben/software/converting-an-stl-vector-iterator-to-a-raw-pointer). – JackOLantern