在内存位置插入:: sort_by_key system_error

时间:2016-05-18 12:09:00

标签: c++ cuda thrust

我正在使用cuda编写程序。 问题如下: 我在* cu文件中有两个数组:

particle* particles;
int* grid_ind;

为GPU分配了位置:

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);
}

问题是sort方法正在导致

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

出于某种原因。我试图解决这个问题几天没有任何运气。为什么会发生这种异常?

1 个答案:

答案 0 :(得分:0)

所以我在其他PC上尝试了这个代码,它没有任何问题。 其他人建议我的电脑上的问题可能是CUDA版本/视频驱动程序和其他任何问题。 无论如何,那太疯狂了...... 对不起,我不会尝试重新安装那些要检查的东西,因为我发现自定义排序方法的工作时间不比thrust :: sort长。