2

我正在使用英特尔至强融核。我像这样编译程序

icpc -mmic -S xxxx.cpp

汇编代码中有一些我不理解的语法。

     vgetmantpd $0, %zmm2, %zmm9{%k3}                        #85.59 c79
     vsubpd    %zmm11, %zmm10, %zmm12{%k3}                   #85.59 c83
     vpminsd   %zmm14{aaaa}, %zmm12, %zmm13                  #85.59 c87
     vcvtpd2ps {rz-sae}, %zmm9, %zmm6{%k3}                   #85.59 c91
     vpminud   %zmm14{bbbb}, %zmm13, %zmm15                  #85.59 c95

%zmm12{%k3} 中的 "{"/"}" 是什么意思。什么是 %k3?什么是 %zmm14{bbbb} ?

4

1 回答 1

3

迈克尔在所有三点上都是正确的:

1) {aaaa} 和 {bbbb} 是操作数限定符,指示输入寄存器(zmm14,在这两种情况下)的每个“通道”以特定方式“混合”(“{aaaa}”表示低阶元素每个车道的每个车道都要复制到车道的所有四个“元素”,所以如果包含zmm14,从高位到低位,160、150、140、130、120、110、100、90、80、70 , 60, 50, 40, 30, 20, 10; 那么 zmm14{aaaa} 将是 130, 130, 130, 130, 90, 90, 90, 90, 50, 50, 50, 50, 10, 10, 10, 10; 和 zmm14{bbbb} 将是 140, 140, 140, 140, 100, 100, 100, 100, 60, 60, 60, 60, 20, 20, 20, 20. zmm14{dcba} 是默认调酒,即和刚才说的 zmm14 一样,根本不是 swizzle。)

2) {k3} 操作数限定符意味着只改变那些在 k3 掩码寄存器中设置了相应位的输出寄存器(zmm9,在最上面的指令中)的元素;保持 zmm9 中的所有其他元素不变。

3)迈克尔也完全瞄准了你真的无法预测所有这些东西的目标。您将需要研究架构文档,因为 Xeon Phi VPU 架构与 MMX 和 SSE 有很大不同。引入掩码寄存器(用作控制哪些元素被修改的谓词)、混合、广播以及上下转换。在 Michael 链接的文档中,介绍此级别 Xeon Phi 架构的相关章节是第 7 章。您可能会阅读的另一个文档是:http: //software.intel.com/en-us/articles/intel-至强 phi 协处理器矢量微架构

在您的确切查询或迈克尔的回复中没有提到 {rz-sae} 指令限定符意味着该指令应该执行向零舍入,并且应该静默处理算术异常。

问候,布赖恩河尼克森

于 2013-06-26T18:44:47.930 回答