小编use*_*981的帖子

C++和CUDA:为什么代码每次都返回不同的结果?

更新:我发现了这个错误.由于我之前发布的代码非常复杂,我简化了它们,只在出现问题时才保留部分.

if (number >= dim * num_points)
    return;
Run Code Online (Sandbox Code Playgroud)

但实际上,我只有num_points,我想使用num_points线程,所以正确的方法应该是

if (number >= num_points)
    return;
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助.


我正在从CPU到GPU重写一些C++代码.代码粘贴在下面.对不起,这很长,因为我觉得这样的问题更容易被发现.

在代码中,对于每个线程我都需要一些矩阵格式的中间结果,所以我为这些中间结果分配设备内存,例如d_dir2,d_R,d_Stick,d_PStick.结果证明不是我所期望的,所以为了调试,我尝试以这种方式输出一些中间结果R:

if (k == 0)
 {
 results[tmp_int1 + i * dim + j] = R[tmp_int1 + i * dim + j];
 }

后来在C++中,我打印结果.但是,我发现结果每次都会给出不同的值.有时它会给出正确的答案R,有时候是PStick的值,有时是R和PStick的组合,有时是R和0的组合(结果在开始时初始化为0).

我很困惑是什么导致了这个问题.任何的想法?非常感谢你 :)

__global__ void stickvote(const int dim, const int num_points, const int gridx, float Sigma, float* input, float* dir2, float* R, float* Stick, float* PStick, float* results) {
  float threshold = 4 * Sigma;
  float c = (- 16 * log(0.1f) …
Run Code Online (Sandbox Code Playgroud)

c++ cuda

5
推荐指数
1
解决办法
1077
查看次数

标签 统计

c++ ×1

cuda ×1