2016-05-18 42 views
-1

私はcudaを使ってプログラムを書いています。 問題は以下の通りです:GPU上thrust :: sort_by_keyメモリ位置のsystem_error

particle* particles; 
int* grid_ind; 

場所が彼らのために割り当てられている:私は* CUはファイル内の2つのアレイ持っ 両方のアレイが満たされている

void mallocCUDA(int particlesNumber) { 
    cudaMalloc((void**)&particles, particlesNumber * sizeof(particle)); 
    cudaMalloc((void**)&grid_ind, particlesNumber * sizeof(int)); 
} 

を(確認)。独自のinitメソッドとgrid_ind中の粒子:

__global__ void findParticleCell(particle* particles, int particlesNumber, int* grid_ind) { 
    int index = blockDim.x*blockIdx.x + threadIdx.x; 
    if (index < particlesNumber) { 
     int x, y, z; 
     x = (int)(2.0f * (particles[index].predicted_p.x + 2)); 
     y = (int)(2.0f * (particles[index].predicted_p.y + 2)); 
     z = (int)(2.0f * (particles[index].predicted_p.z + 2)); 

     int grid_index = (BOX_X + 2) * 2 * (BOX_Y + 2) * 2 * z + y * 2 * (BOX_X + 2) + x; 
     grid_ind[index] = grid_index; 
    } 
} 

以下の方法で呼び出されます。

void findNeighbors(int particlesNumber) { 
    dim3 blocks = dim3((particlesNumber + threadsPerBlock - 1)/threadsPerBlock); // threadsPerBlock = 128 if that matters at all 
    dim3 threads = dim3(threadsPerBlock); 

    findParticleCell << <blocks, threads >> > (particles, particlesNumber, grid_ind); 

    thrust::device_ptr<int> t_grid_ind = thrust::device_pointer_cast(grid_ind); 
    thrust::device_ptr<particle> t_particles = thrust::device_pointer_cast(particles); 

    thrust::sort_by_key(t_grid_ind, t_grid_ind + particlesNumber, t_particles); 
} 

問題は、ソート方法が何らかの理由で

Microsoft C++ exception: thrust::system::system_error at memory location 

を引き起こしているということです。私はこれを数日前に解決しようとしました。その例外はなぜ発生するのですか?

+3

[mcve]を追加してください –

+0

コンパイル時にCudaバックエンドを有効にしましたか? '-DTHRUST_DEVICE_SYSTEM = THRUST_DEVICE_SYSTEM_CUDA' – Dimaleks

+0

@dimaleks正直言って、私はどこでそれを行うべきなのか、それが何を意味するのか分かりません。明確にするために、私は素早くソートして(推力なしで)ソートを試み、すべてが働いた。だから、メソッドの呼び出しやポインタについて間違っている何か? – Alexander

答えて

0

私はこのコードを他のPCで試してみましたが、問題なく動作しました。 私のPC上の問題は、CUDAバージョン/ビデオドライバなどにある可能性があります。 とにかく、thats crazy ... カスタムソート方法がthrust :: sortよりもはるかに長く動作することがわかったので、私はチェックするためにそれらのものを再インストールしようとしません。

関連する問題