首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让gcc使用SSE4.1 pminuq/pminud/etc操作码向量化代码?

如何让gcc使用SSE4.1 pminuq/pminud/etc操作码向量化代码?
EN

Stack Overflow用户
提问于 2019-09-23 23:08:52
回答 1查看 93关注 0票数 2

我一直在使用优秀的godbolt.org来确定gcc做了什么,但是没有把它向量化成一个min(X,Y)函数,等等。

看一下gcc源代码中的sse.md机器描述语言文件,我可以看到第12355行前后的一个街区提到了p,在我看来,它应该输出p等。所以我看不出为什么用-msse4 -msse4.1为这个模式编译不应该只是工作。

然而,md的这一部分也有一个"&&“行在里面,看起来(?)暗示此操作码仅适用于AVX样式的宽目标。

因此,我无法判断这是硬件限制、编译器/md错误、godbolt.org与-msse4.1的问题,还是其他问题。有人能帮我把这个缩小一点吗?

代码语言:javascript
复制
gcc -msse4 -msse4.1 -msse4.2 -O3 -fopt-info-vec-all

#include <stdint.h>

#define MAX_LOOPS 10000

uint64_t in_array[MAX_LOOPS];
uint64_t shift_array[MAX_LOOPS];

void do_max(uint64_t maxval)
{
    for (int i=0; i<MAX_LOOPS; i++)
        out_array[i] = (in_array[i] < maxval) ? in_array[i] : maxval;
}

godbolt.org告诉我.

代码语言:javascript
复制
    pcmpeqq xmm0, xmm1
    pandn   xmm0, xmm2

...when我希望..。

代码语言:javascript
复制
    pminuq  xmm0, xmm1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-23 23:11:13

vpminuq需要AVX512。(https://www.felixcloutier.com/x86/pminud:pminuq)

SSE4.1 / AVX2只有pminub/w/d。尝试使用32位元素的数组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58071182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档