当前位置: 首页 > 知识库问答 >
问题:

Intel Xeon Phi中的置换

朱令
2023-03-14

假设我在Xeon Phi寄存器中有以下4个双向量:

A-> |a8|a7|a6|a5|a4|a3|a2|a1|
B-> |b8|b7|b6|b5|b4|b3|b2|b1|
C-> |c8|c7|c6|c5|c4|c3|c2|c1|
D-> |d8|d7|d6|d5|d4|d3|d2|d1|
A_new ->|d2|d1|c2|c1|b2|b1|a2|a1|
B_new ->|d4|d3|c4|c3|b4|b3|a4|a3|
C_new ->|d6|d5|c6|c5|b6|b5|a6|a5|
D_new ->|d8|d7|c8|c7|b8|b7|a8|a7|

目标是:

O = _mm512_add_pd(_mm512_add_pd(A_new,B_new),_mm512_add_pd(C_new,D_new));

我怎样才能用最少的指令/周期实现上述目标?

共有1个答案

梁锋
2023-03-14

Evgueni Petrov在英特尔论坛上回答:

__m512i a1 = (__m512i)_mm512_mask_blend_pd(0x33, B, _mm512_swizzle_pd(A, _MM_SWIZ_REG_BADC));
__m512i a0 = (__m512i)_mm512_mask_blend_pd(0xcc, A, _mm512_swizzle_pd(B, _MM_SWIZ_REG_BADC));
__m512i a3 = (__m512i)_mm512_mask_blend_pd(0x33, D, _mm512_swizzle_pd(C, _MM_SWIZ_REG_BADC));
__m512i a2 = (__m512i)_mm512_mask_blend_pd(0xcc, C, _mm512_swizzle_pd(D, _MM_SWIZ_REG_BADC));

__m512d C_new = (__m512d)_mm512_mask_alignr_epi32(a2, 0x00ff, a0, a0, 8);
__m512d A_new = (__m512d)_mm512_mask_alignr_epi32(a0, 0xff00, a2, a2, 8);
__m512d D_new = (__m512d)_mm512_mask_alignr_epi32(a3, 0x00ff, a1, a1, 8);
__m512d B_new = (__m512d)_mm512_mask_alignr_epi32(a1, 0xff00, a3, a3, 8);

在撰写本文时,《英特尔C用户指南》中未提及\u mm512\u mask\u blend\u pd()内在特性,但应尽快更正。它存在于“zmmintrin.h”头文件中。

 类似资料:
  • 问题内容: 我的项目有3个Maven模块,它们是由nodejs脚本构建的。 现在,我想与Jenkin和Nexus集成。我的Jenkin构建配置如下所示: 我还在“ 构建”* 部分的“ 提供配置文件 构建”步骤中添加了我的Maven ,但这没有用。Maven仍然失败,无法解析我的Nexus回购中的依赖项。 *** 在我的本地专家中,我为Nexus存储库和另一个存储库添加了一些配置。 你能把这种情况告

  • 问题内容: 我知道它不需要两次获取数据。但是我的主要问题是如何在PDO中重置光标位置? 问题答案: AFAIK无法使用PDO重置光标位置-这可能与某些数据库的兼容性有关,这些数据库不支持重置内部光标。 如果要对结果进行两次迭代,请将其提取到数组并在此数组上进行迭代: 编辑 某些数据库支持可滚动游标。要使用该标记,请向方法添加标记(请参见PDOFetch文档页面上的示例)。但这只会增加前进或后退的可

  • 我用一个xml文件配置log4j,但我不确定在哪里添加格式msgnolookups=true?

  • 在Spring Hibernate XML配置中,我有 我知道SpringJava配置的等价物如下:LocalSessionFactoryBuilder(dataSource())。AddAnnotatedClass(Foo.class)。buildSessionFactory(); 我的问题是,如果我不使用LocalSessionFactoryBuilder类,而是使用HibernateJpaV

  • 问题内容: 每当我尝试在mongodb中存储位置时,它都不会显示,所以我想我做错了什么。我找不到有关如何在猫鼬中存储位置的任何文档,所以我只想在这里问一下。 我首先创建我的模型: 然后,我尝试将其添加到我的数据库中: 当我查看数据库时,除了位置以外,所有内容都被存储了。 问题答案: 我自己修好了。 我在模型中这样做: 在下面,我将其设为2dsphere索引。 并向其中添加数据:

  • 我试图使用Spring-boot Java和SteelToe ASP.NET创建微服务 步骤1:我使用Java创建了一个完整的服务(一个带有UI和API的服务。它托管在PCF上)。API内部定义了ClassesControler。 编辑:我修改了这个问题,使其更加清楚。流量的流动是从Java服务到.NET服务。.NET服务请求来自JAVA服务中的控制器的类列表(ClassesController.