标签: avx512

AVX 512与AVX2的性能,适用于简单的阵列处理循环

我目前正在进行一些优化并比较DSP应用的矢量化可能性,这似乎是AVX512的理想选择,因为它们只是简单的不相关的阵列处理循环.但是在新的i9上,与AVX2相比,使用AVX512时没有任何合理的改进.有什么指针吗?有什么好结果吗?(顺便说一句.我试过MSVC/CLANG/ICL,没有明显的区别,很多时候AVX512代码实际上看起来比较慢)

performance x86 micro-optimization avx2 avx512

2
推荐指数
2
解决办法
4409
查看次数

AVX512BW:使用 bsf / tzcnt 处理 32 位代码中的 64 位掩码?

这是我在 AVX512BW 中的“strlen”函数的代码

vxorps          zmm0, zmm0, zmm0   ; ZMM0 = 0
vpcmpeqb        k0, zmm0, [ebx]    ; ebx is string and it's aligned at 64-byte boundary
kortestq        k0, k0             ; 0x00 found ?
jnz             .chk_0x00
Run Code Online (Sandbox Code Playgroud)

现在对于'chk_0x00',在x86_64系统中,没有问题,我们可以这样处理:

chk_0x00:
kmovq   rbx, k0
tzcnt   rbx, rbx
add     rax, rbx
Run Code Online (Sandbox Code Playgroud)

这里我们有一个 64 位寄存器,因此我们可以将掩码存储到其中,但我的问题是关于 x86 系统,我们没有任何 64 位寄存器,因此我们必须使用“内存”保留(8 字节)并检查两者掩码的DWORD一一对应(其实这是我的方式,我想知道有没有更好的方式)

chk_0x00:
kmovd   ebx, k0       ; move the first dword of the mask to the ebx
test    ebx, ebx      ; 0x00 found in the first dword ?
jz …
Run Code Online (Sandbox Code Playgroud)

x86 assembly 32-bit micro-optimization avx512

2
推荐指数
1
解决办法
606
查看次数

是否有 x86 内在函数从内存中的 32 位浮点值生成 AVX512 广播操作到 512 位寄存器?

该指令存在 ( vbroadcastss zmm/m32) 但似乎没有生成它的内在指令。

我可以将其编码为

static inline  __m512 mybroadcast(float *x) {
    __m512 v;
    asm inline ( "vbroadcastss %1,%0 "
                 : "=v" (v)
                 : "m" (*x)
                 );
    return v;
}

Run Code Online (Sandbox Code Playgroud)

有没有办法在没有内联 asm 的情况下做到这一点?

c intrinsics avx512

2
推荐指数
1
解决办法
329
查看次数

AVX2 和 AVX-512 有什么区别?

在SIMD和并行化方面,AVX2和AVX-512有什么区别?它们是相同的还是不同的?我刚刚看到在 AVX-512 中使用了 double8,而在 AVX2 中使用了 double4?

我正在使用 PyOpenCL 用 C 编写内核代码,但不确定有什么区别。

simd opencl avx avx2 avx512

2
推荐指数
1
解决办法
2492
查看次数

在编译时启用 AVX512 支持会显着降低性能

我有一个使用静态库的 C/C++ 项目。该图书馆是为“skylake”建筑而建的。该项目是一个数据处理模块,即它执行许多算术运算、内存复制、搜索、比较等。

CPU为至强金牌6130T,支持AVX512。我试图编译我的项目既-march=skylake-march=skylake-avx512,然后用链接库。

在使用-march=skylake-avx512的情况下,与使用-march=skylake.

这怎么解释?可能是什么原因?

信息:

  • Linux 3.10
  • 海湾合作委员会 9.2
  • 英特尔至强金牌 6130T

linux performance gcc x86-64 avx512

2
推荐指数
1
解决办法
1537
查看次数

为什么 glibc memcpy 不选择 avx512 版本?

我编译了以下示例代码:

 #cat array_addition.c 
 #define MAX 1000000
 #define S 1024
 #include <string.h>
int a[S], b[S], c[S];

__attribute__((target_clones("avx512f", "avx2","arch=atom","default")))
void foo(int argc){
    int i,x;

for (x=0; x<1024; x++){
    for (i=0; i<S; i++){
        a[i] = b[i] + c[i];
    }
}
    b[0] = argc;
    memcpy(&a[0], &b[0], argc *sizeof(int));
}
int main(int argc, char** argv) {
    foo(argc);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

其中调用 memcpy;

从 objdump 中,我们可以发现它会调用 GLIBC memcpy:

#readelf -r a.out 

Relocation section '.rela.dyn' at offset 0x418 contains 1 entry:
  Offset          Info           Type           Sym. Value    Sym. …
Run Code Online (Sandbox Code Playgroud)

c glibc compiler-optimization avx512

2
推荐指数
1
解决办法
325
查看次数

任何方法将基于AVX512 cpu intrinics的unsigned char转换为short?

我只是在Xeon Phi处理器中读取AVX内置的AVX512集,但似乎sse中的传统数据类型转换方法在avx512中不起作用,所以我可以问一下avx512中是否有任何类似的cpu设置可以转换unsigned char数组到短数据类型数组?提前致谢!

sse simd xeon-phi avx512

1
推荐指数
1
解决办法
159
查看次数

Xcode Apple Clang 启用 avx512

在 Xcode(Version 10.1 (10B61)) 中,我使用如下宏来检测 AVX512 支持。

#ifdef __SSE4_1__
#error "sse4_1"
#endif

#ifdef __AVX__
#error "avx"
#endif

#ifdef __AVX2__
#error "avx2"
#endif

#ifdef __AVX512__
#error "avx512"
#endif
Run Code Online (Sandbox Code Playgroud)

在默认构建设置中,SSE4_1处于活动状态,但 avx、avx2 未处于活动状态。当我在 Building Settings-->Apple Clang-Custom Compiler Flags-->Other C Flags 中添加-mavx时,启用AVX,进一步添加-mavx2以启用AVXAVX2,但未知参数:'-mavx512'。你如何启用avx512并检测它?似乎很少有宏来检测avx512。

#define __AVX512BW__ 1  
#define __AVX512CD__ 1  
#define __AVX512DQ__ 1  
#define __AVX512F__ 1  
#define __AVX512VL__ 1   
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别?

xcode clang avx avx2 avx512

1
推荐指数
1
解决办法
2441
查看次数

从 Intel Xeon Phi 上的 AVX512 迁移到 Intel i5-8259U 上的 AVX2 会损失什么?

在尝试学习Coursera 上的课程时,我尝试为我的 CPU 优化示例 C++ 代码Intel i5-8259U,我相信它支持AVX2SIMD 指令集。现在,AVX2每个内核提供 16 个寄存器(称为YMM0, YMM1, ..., YMM15),宽度为 256 位,这意味着每个内核最多可以同时处理 4 个双精度浮点数。利用AVX2SIMD 指令应该可以优化我的代码,使其运行速度比标量指令快 4 倍。

在链接的课程中,您可以尝试在Intel Xeon Phi 7210 (Knights Landing)支持AVX512使用 512 位宽寄存器的处理器上运行相同的数值积分代码。这意味着我们应该期望双精度运算的速度提高 8 倍。实际上,讲师使用的代码获得了高达 14 倍的优化,几乎是 8 的 173%。额外的优化归功于 OpenMP。

为了在我的 CPU 上运行相同的代码,我唯一改变的是传递给英特尔编译器的优化标志:-xMIC-AVX512我使用了 ,而不是-xCORE-AVX2。我获得的加速仅为 2 倍,仅是由于 256 位寄存器上的 SIMD 矢量化而产生的预期加速的 50%。将此 50% 与英特尔至强融核处理器上获得的 173% 进行比较。

为什么我仅仅从 转到 就看到性能的巨大AVX512损失AVX2?当然,除了 …

icc compiler-optimization avx2 xeon-phi avx512

1
推荐指数
1
解决办法
1408
查看次数

禁用 g++ 构建的所有 AVX-512 指令

你好我试图建立一个没有任何avx512指令通过使用这些标志: -march=native -mno-avx512f。但是,我仍然得到一个二进制文件,其中vmovss生成了AVX512 ( ) 指令(我正在使用 elfx86exts 进行检查)。知道如何禁用这些吗?

x86 gcc g++ avx512

1
推荐指数
1
解决办法
501
查看次数