【发布时间】:2014-10-06 03:57:31
【问题描述】:
在这个例子中,我有 3 个浮点数组,query_points[]、initial_array[] 和 final_array[]。 query_points[] 中的值被四舍五入并成为索引值,我想将这些索引处的数据复制到 initial_array[] 到 result_array[]。
我遇到的问题是每隔几百个值,与正常工作的 c++ 代码相比,我得到的值不同。我是 CUDA 的新手,不确定发生了什么。如果您能指出我的解决方案,请告诉我。谢谢!
CUDA 代码:
int w = blockIdx.x * blockDim.x + threadIdx.x; // Col // width
int h = blockIdx.y * blockDim.y + threadIdx.y; // Row // height
int index = h*width+w;
if ((w < width) && (h < height)){
int piece = floor(query_points[index]) - 1;
int piece_index = h*width+piece;
result_array[index] = initial_array[piece_index];
}
【问题讨论】:
-
请提供一个简短、完整的可编译代码,用于演示问题/不匹配。 SO 期望这一点:“寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题的问题声明对其他读者没有用。请参阅:How to create a Minimal, Complete, and Verifiable example."。您是否使用
cuda-memcheck运行过您的代码? -
@RobertCrovella 我不确定如何创建一个最小的示例,因为它需要大型数组才能发生错误。该代码在最小数组上运行良好。 Cuda-memcheck 显示 0 个错误。奇怪的是,在我重新启动系统后,问题就停止了,现在似乎工作正常,尽管我仍然对其可靠性持怀疑态度。我还认为这可能与我将相同的输入和输出数组传递给函数,试图进行就地操作有关。
-
“我还认为这可能与我将相同的输入和输出数组传递给函数,试图进行就地操作有关。”是的,这可能是一个问题,而且从您发布的代码或您的问题/描述中都看不出来,这当然听起来像是 3 个数组是不同的。提供一个完整的代码可以说明你实际上是在原地做事。如果您无法/不愿意提供完整的代码,我认为您的问题只会引发很多猜测,并且不适合 SO。