相关疑难解决方法(0)

bool转换为int

这种转换有多便携.我可以确定两个断言都通过了吗?

int x = 4<5;
assert(x==1);

x = 4>5;
assert(x==0);
Run Code Online (Sandbox Code Playgroud)

不要问为什么.我知道这很难看.谢谢.

c c++ c99

118
推荐指数
3
解决办法
12万
查看次数

分支差异真的那么糟糕吗?

我看到很多问题散布在互联网上,关于分支差异,以及如何避免分歧.然而,即使在阅读了几篇关于CUDA如何工作的文章之后,我似乎也无法看到在大多数情况下如何避免分支差异.在有人用伸出的爪子抓住我之前,请允许我描述我认为是"大多数情况".

在我看来,大多数分支差异实例涉及许多真正不同的代码块.例如,我们有以下场景:

if (A):
  foo(A)
else:
  bar(B)
Run Code Online (Sandbox Code Playgroud)

如果我们有两个线程遇到这种分歧,线程1将首先执行,采用路径A.接下来,线程2将采用路径B.为了消除分歧,我们可能会将上面的块更改为如下所示:

foo(A)
bar(B)
Run Code Online (Sandbox Code Playgroud)

假设foo(A)在线程2和bar(B)线程1上调用是安全的,可能会期望性能得到改善.但是,这是我看到它的方式:

在第一种情况下,线程1和2串行执行.调用这两个时钟周期.

在第二种情况下,线程1和2 foo(A)并行执行,然后bar(B)并行执行.这仍然看起来像两个时钟周期,区别在于在前一种情况下,如果foo(A)涉及从内存中读取,我想线程2可以在该延迟期间开始执行,这导致延迟隐藏.如果是这种情况,分支发散代码更快.

performance branch cuda

33
推荐指数
1
解决办法
2万
查看次数

分支和谓词指令

"CUDA C编程指南" 第5.4.2节规定,分支差异由"分支指令"处理,或者在某些条件下由"预测指令"处理.我不明白两者之间的区别,以及为什么一个导致比另一个更好的性能.

该评论表明,分支指令导致更多数量的执行指令,由于"分支地址解析和获取"而导致停止,以及由于"分支本身"和"发散保留"导致的开销,而预测指令仅产生"指令执行延迟,以进行条件测试并设置谓词".为什么?

cuda simd

14
推荐指数
1
解决办法
3241
查看次数

CUDA中的整数最小值/最大值

我在CUDA Math API文档中看到,有单精度和双精度min/max操作的函数(例如fminf()).我认为这些是高度优化的,等等.似乎没有像这样的函数用于整数.这是真的?这有什么理由吗?

cuda

8
推荐指数
1
解决办法
1万
查看次数

处理CUDA中的大型switch语句

我知道不建议在CUDA中进行分支,因为它会对性能产生负面影响.在我的工作中,我发现自己必须实现包含几十个案例的大型switch语句.

有没有人知道这会对性能造成多大影响.(官方文档不是很具体)也有人有更有效的方式来处理这部分吗?

parallel-processing cuda switch-statement statements

5
推荐指数
2
解决办法
3455
查看次数