分支和选择指令之间的区别

时间:2012-09-27 00:24:03

标签: compiler-optimization computer-architecture isa

The 'select' instruction is used to choose one value based on a condition, without branching.

我想知道分支和选择指令之间的区别(最好是x86架构和PTX)。据我所知,与分支指令相比,select更为理想,但我没有清晰的图像。

1 个答案:

答案 0 :(得分:2)

分支是一种用于重定向控制流的通用机制。它用于实现大多数形式的if语句(当特定的优化不适用时)。

Selection是一些可用于某些指令集的专用指令,可以实现某些形式的条件表达式

z = (cond) ? x : y;

if(cond) z = x;

如果xy是普通值(如果它们是表达式,则它们都必须在select之前计算,这可能会导致性能损失或不正确的副作用评估)。这样的指令必然比分支更有限,但具有指令指针不改变的明显优点。因此,处理器不需要在分支错误预测上刷新其管道(因为没有分支)。因此,选择指令(如果可用)更快。

在某些超标量体系结构上,例如CUDA,分支在性能方面非常昂贵,因为并行单元必须保持完美同步。例如,在CUDA上,块中的每个执行单元必须采用相同的执行路径;如果一个线程分支,那么每个单元都会遍历两个分支(但是将在未采用的分支上执行无操作)。但是,选择指令不会产生这种惩罚。

请注意,如果给出足够简单的cmov语句,大多数编译器都会使用合适的选项生成“{1}}之类的”选择“式指令。此外,在某些情况下,可以使用按位操作或逻辑运算将布尔条件值与表达式值组合,而不执行分支。