首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算着色器中的循环使我的显卡驱动程序崩溃

计算着色器中的循环使我的显卡驱动程序崩溃
EN

Stack Overflow用户
提问于 2015-09-17 22:07:11
回答 1查看 1.4K关注 0票数 0

我正在尝试使用HLSL在计算着色器中实现二进制搜索。这不是经典的二进制搜索,因为搜索键和数组值都是float。如果没有与搜索键匹配的数组值,搜索将返回最后一个索引(此时minIdxmaxIdx匹配)。这是经典的二进制搜索的最坏情况,因为它需要最大数量的操作,我知道这一点。

所以我的问题是:

我的实现如下所示:

代码语言:javascript
复制
uint BinarySearch (Texture2D<float> InputTexture, float key, uint minIdx, uint maxIdx)
{
    uint midIdx = 0;
    while (minIdx <= maxIdx)
    {
        midIdx = minIdx + ((maxIdx + 1 - minIdx) / 2);
        if (InputTexture[uint2(midIdx, 0)] == key)
        {
            // this might be a very rare case
            return midIdx;
        }

        // determine which subarray to search next
        else if (InputTexture[uint2(midIdx, 0)] < key)
        {
            // as we have a decreasingly sorted array, we need to change the
            // max index here instead of the min
            maxIdx = midIdx - 1;
        }

        else if (InputTexture[uint2(midIdx, 0)] > key)
        {
            minIdx = midIdx;
        }
    }

    return minIdx;
}

这导致我的视频驱动程序在程序执行时崩溃。我没有得到编译错误。

但是,如果我使用if而不是while,我可以执行它,并且第一次迭代按预期工作。

我已经做了几次搜索,我怀疑这可能与计算着色器中的动态循环有关。但我之前没有计算着色器的经验,也只有很少的HLSL经验,这就是为什么我感觉有点迷茫的原因。

我正在用cs_5_0编译这段代码。

有没有人能解释一下我做错了什么,或者至少能提示我一些文档/解释?任何可以让我开始解决和理解这个问题的东西都会非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 01:41:12

在这种情况下,它可能是一个bug,但它是需要注意的。

在Windows8.0或更高版本中,可以在创建设备时使用D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT来允许长时间运行的着色器。但是,这将应用于所有着色器,而不仅仅是DirectCompute,因此在一般情况下使用此选项时应小心。

对于特殊用途的系统,您还可以使用registry keys禁用TDR。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32632409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档