gpt4 book ai didi

在没有分支的情况下在 CUDA 中进行比较

转载 作者:行者123 更新时间:2023-12-03 22:55:55 25 4
gpt4 key购买 nike

我正在尝试在 CUDA 中实现以下功能:

int compare(unsigned a, unsigned b) {
if (a == b) {
return 0;
} else {
if (a < b) return -1;
else return 1;
}
}

我目前正在使用一个非常简单的宏

#define CMP(X, Y) (((X) == (Y)) ? 0 : (((X) < (Y)) ? -1 : 1))

但我想知道它是否由于分支而导致分歧。有没有更好的方法在CUDA中实现这个功能?

最佳答案

您可以使用无分支等效项,即:

(a > b) - (a < b)

这解决了潜在的扭曲分歧。

在您的代码中,nvcc 编译器无论如何都可以通过使用分支谓词 来消除分歧。但是,即使使用这种技术,经线中的某些线程也可能处于非事件状态。对于代码中的特定语句,您可能会在 NSight Visual Studio 探查器的线程执行效率 列中观察到这一点。

关于在没有分支的情况下在 CUDA 中进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682132/

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