配列内の最小要素を見つけようとしました:
thrust::device_ptr<float> devPtr(d_ary);
int minPos = thrust::min_element(devPtr.begin(), devPtr.end()) - devPtr.begin();
そして、コンパイル時に上記のエラーが発生しました。
この問題を解決するにはどうすればよいですか? ありがとう
特定した特定のエラーは、デバイス ポインターがコンテナーではないため、.begin()
または.end()
メンバーがないためです。yourdevPtr
はコンテナではなく、Thrust で使用できるデバイス ポインタです。生のポインタをラップして devPtr を作成しましたが、生のポインタには、それが指しているデータ領域のサイズに関する情報が含まれていません。
ポインターには、begin や end のようなメンバーはありません。
次のいずれかの方法で問題を解決できます。
上記の後者のアイデアに沿ったコードの例を次に示します。
#include <thrust/device_ptr.h>
#include <thrust/extrema.h>
#define N 256
int main()
{
float *d_a;
cudaMalloc((void **) &d_a, N*sizeof(float));
thrust::device_ptr<float> dPbeg(d_a);
thrust::device_ptr<float> dPend = dPbeg + N;
thrust::device_ptr<float> result = thrust::min_element(dPbeg, dPend);
}
興味のあるスラスト クイックスタート ガイドがあります。(わかりやすくするために、cudaMalloc 呼び出しをエラー チェックでラップしていません。cuda 呼び出しをエラー チェックでラップすることをお勧めします。)