我正在尝试了解ngOnInit() {
this.players = this.teamService.players;
this.statUser();
}
statUser() {
this.players.forEach(function(element) {
console.log(element.id);
this.getStats('element.id');
});
}
getStats(idUser) {
this.http.get(this.urlIdTest + idUser).subscribe((data) => {
this.getStat = data;
});
}
的作用,但无法完全理解intel's code-example。
_mm256_permute2f128_ps()
具体来说,我不明白:
DEFINE SELECT4(src1, src2, control) {
CASE(control[1:0]) OF
0: tmp[127:0] := src1[127:0]
1: tmp[127:0] := src1[255:128]
2: tmp[127:0] := src2[127:0]
3: tmp[127:0] := src2[255:128]
ESAC
IF control[3]
tmp[127:0] := 0
FI
RETURN tmp[127:0]
}
dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
dst[MAX:256] := 0
表示法。他们是否将其用作4字节掩码?
But I've seen people invoke imm8[3:0]
,其中imm8用作数字(数字5)。
在_mm256_permute2f128_pd(myVec, myVec, 5)
函数内部,SELECT4
是什么意思?控制是字节掩码还是用作数字?它由多少字节组成?
control[1:0]
。是否会撤消IF control[3]
内部的选择3:
?如果我们一直将CASE
设置为零,为什么还要将其设置为零?答案 0 :(得分:1)
在这种情况下,[x:y]
表示法始终引用位数。例如,如果您将5作为imm8
参数传递,那么(因为5==0b00000101
)imm8[3:0]==0b0101==5
,并且如果它作为control
传递给SELECT4
宏,则您将得到control[3]==0==false
和control[1:0]==0b01==1
。 control[2]
位将被忽略。
全面评估,您会得到
dst[127:0] := SELECT4(a[255:0], b[255:0], 5) == a[255:128]
dst[255:128] := SELECT4(a[255:0], b[255:0], 0) == a[127:0]
这意味着这将切换a
寄存器的上半部分和下半部分,并将其存储到dst
寄存器中。
dst[MAX:256] := 0
仅与具有较大寄存器(如果您具有AVX-512)的体系结构有关,即,它将位255上方的所有内容都设置为零。这与传统的SSE指令相反(如果在具有AVX支持的CPU上执行),则上半部分将保持不变(并产生错误的依赖关系,请参见this related question)。