Parallel processing OpenCL-GPU向量数学(指令级并行)

Parallel processing OpenCL-GPU向量数学(指令级并行),parallel-processing,opencl,gpu,Parallel Processing,Opencl,Gpu,本文讨论了代码的优化,并讨论了指令级并行性。他们给出了一个GPU向量数学的例子,其中float4向量数学可以在向量而不是单个标量上执行。举例如下: float4 x_neighbor = center.xyxy + float4(-1.0f, 0.0f, 1.0f, 0.0f); 现在我的问题是,它也可以用于比较目的吗?因此,在缩减示例中,我可以这样做: accumulator.xyz = (accumulator.xyz < element.xyz) ? accumulator.xyz

本文讨论了代码的优化,并讨论了指令级并行性。他们给出了一个GPU向量数学的例子,其中float4向量数学可以在向量而不是单个标量上执行。举例如下:

float4 x_neighbor = center.xyxy + float4(-1.0f, 0.0f, 1.0f, 0.0f);
现在我的问题是,它也可以用于比较目的吗?因此,在缩减示例中,我可以这样做:

accumulator.xyz = (accumulator.xyz < element.xyz) ? accumulator.xyz : element.xyz;
acculator.xyz=(acculator.xyz
谢谢。

说明逻辑运算符:

运营商[6.3] 这些运算符的行为与C99中的类似,只是 操作数可能包括向量类型: + - * % / -- ++ == != & ~^><>=>表示逻辑运算符:

运营商[6.3] 这些运算符的行为与C99中的类似,只是 操作数可能包括向量类型: + - * % / -- ++ == != &
正如Austin比较运算符所述,~^><>=>也适用于向量

d点。本标准第6.3节为您的相关部分。它说:


Austin比较运算符已经说明的大于(>)、小于(=)和小于或等于()的关系运算符也适用于向量

本标准第6.3节中的d点是您的相关部分。它说:


大于(>)、小于(=)和小于或等于的关系运算符(除非逐元素比较,否则无法将一个向量与另一个向量进行比较。如果要在距离上进行比较,请首先使用长度运算符。我认为上面的代码逐元素进行比较。不是吗?对我来说,该代码没有意义,如果它在“==”处,则可以。但是“你不能将一个向量与另一个向量进行比较,除非你逐元素进行比较。如果你想在距离上进行比较,那么首先使用长度运算符。我认为上面的代码会逐元素进行比较。不是吗?对我来说,该代码没有意义,如果它在“==”处,那就可以了。但是“谢谢你,船长。这并不明显!@captainobsible:如果条件为真,标量返回1,向量返回-1,这有点令人恼火。为什么会有不对称性?如果没有不对称性,你就可以对n=1,2,4…使用相同的intn,而不是int1(int)必须以不同于所有其他的方式处理。谢谢船长。这并不明显!@captainobsible:如果条件为真,标量返回1,向量返回-1,这有点恼人。为什么会有不对称?如果没有不对称,你就可以对n=1,2,4…使用相同的intn,而不是int1(int)必须以不同于所有其他答案的方式处理。这实际上是非常误导的,请参见其他答案。这实际上是非常误导的,请参见其他答案。
int2 vect = (int2)(0, -1);
if(vect.y){
    //Do something 
}
if(vect){
    //do something
}
if(any(vect){
    //this will evaluate to true in our example
}
int any (Ti x): 1 if MSB in component of x is set; else 0
int4 vect = (int4)(75, 3, 42, 105);
int ref = 50;
int4 result = (vect < ref) & vect;