gpuを使用して配列の最小値を検索したいと思いますthrust :: min_elementを使用したいデータがデバイスに格納されていますので、 :「場所0x0000000701240000からの読み込み中にアクセス違反」とtuple.inl機能に取っていますデバイスが、私は持っている:thrust :: min_element場所からの読み取り中にアクセス違反が発生しました
inline __host__ __device__
cons(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5,
T6& t6, T7& t7, T8& t8, T9& t9, T10& t10)
が、私は推力::ホストを使用している場合、それは動作します!これは私のコードです。何かが間違っている場合は教えてください。
#include <thrust/extrema.h>
#include <thrust/execution_policy.h>
#include <time.h>
int main()
{
int nx=200;
int ny=200;
float cpt=0;
clock_t start,end;
double time;
float *in,*d_in;
float moy,*d_moy;
in=(float*)malloc(nx*ny*sizeof(float));
moy=0.0f;
cudaMalloc((void**)&d_in,nx*ny*sizeof(float));
cudaMalloc((void**)&d_moy,sizeof(float));
for(int i=0;i<nx*ny;i++){in[i]=i+0.07;cpt+=in[i];}
cudaMemcpy(d_in,in,nx*ny*sizeof(float),cudaMemcpyHostToDevice);
start=clock();
//float result= thrust::reduce(thrust::device, d_in, d_in + nx*ny);
float *result=thrust::min_element(thrust::device, d_in , d_in+ nx*ny);
end=clock();
time=((double)(end-start))/CLOCKS_PER_SEC;
printf("result= %f and correct result is %f time= %lf \n",*result,in[0],time);
system("pause");
}
'result'は' min_element'呼び出しの後に有効なホストポインタではありません。このためにデバイスから 'result'で値ポインタをコピーする必要があります – talonmies
あなたの答えはThnxですが、結果が有効なポインタではないことを理解できませんでしたか?これはドキュメントの例であり、私がthrust :: min_elementを呼び出すと問題になります。 –
'thrust :: device'実行ポリシーを使用しています。これは、結果を含むすべてのポインタがデバイスポインタであることを意味します – talonmies