gpt4 book ai didi

c++ - Long Long 数据类型的 Cuda 算术除法错误

转载 作者:行者123 更新时间:2023-11-28 06:44:24 25 4
gpt4 key购买 nike

我在 Cuda 中遇到一个奇怪的整数除法错误,使用 long long 数据类型。这是代码的精简版。

__global__ void Test(bool * d_test_list){

long long index = threadIdx.x + blockIdx.x*blockDim.x;
bool test = false;

if (index / 25 == 5) //Somehow not true when index == 125?
{
test = true;
}

d_test_list[index] = test;
}

在打印出 d_test_list 的所有元素后,125 以及 [125,149] 范围内应该有效的任何数字都没有出现。我唯一的猜测是这与 Cuda 处理整数类型的方式有关。模数也会发生类似的事情,结果不正确,但是(+、- 和 *)都很好用。我正在使用 1024 个线程/ block ,这会是个问题吗?

我正在使用 Cuda v6.5 RC,但我假设他们现在已经弄清楚了整数除法。

最佳答案

想通了。在一个 block 中使用了太多线程。当我将它从 1024 减少到 200 时,问题就解决了。我认为这与内核中的寄存器数量以及软件实现的除法(如果是)有关。

更新:除法的限制是 896 = 2^10-2^7。对于模数,它是 768 = 2^10-2^8

关于c++ - Long Long 数据类型的 Cuda 算术除法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com