草庐IT

avx_signbit

全部标签

windows - 是否有可能在 AVX/SSE 中获得多个正弦波?

我正在尝试编写一个C++程序,它启动一个我在x64汇编器中编写的函数。我想稍微加快速度(并使用CPU功能),所以我选择使用矢量运算。问题是,我必须将正弦乘以一个整数,所以我必须先计算正弦。是否可以在SSE/AVX中执行此操作?我知道指令fsin,但它不仅在FPU中,而且一次只计算1个正弦。所以我必须将它压入FPU,调用fsin,将它从FPU弹出到内存,然后将它放入AVX寄存器。在我看来,这不值得麻烦。 最佳答案 是的,有一个使用SSE/AVX的矢量版本!但问题是必须使用IntelC++编译器。这叫做Intel小型矢量数学库(内在函数

java - 如何在 Java 中使用英特尔 AVX?

如何使用Java中的英特尔AVXvector指令集?这是一个简单的问题,但似乎很难找到答案。 最佳答案 据我所知,大多数当前的JavaJVMJITter不支持自动矢量化或者只支持非常简单的循环,所以你运气不好。在Mono的.NET实现中,有用于手动vector代码发射的Mono.Simd,后来MS引入了System.Numeric.Vectors。不幸的是,Java中没有类似的东西。我不知道Java的vector类是否使用SIMD进行了矢量化,但我认为不是。如果您想使用AVX等特定于CPU的功能,那么您唯一的选择就是JNI。用C或C

c++ - AVX、SSE 总和比 gcc 自动向量化慢

我有一个奇怪的现象,无法真正解释。我正在尝试编写一些数字代码,从而对一些实现进行基准测试。我只是想用SSE和AVX以及gcc自动矢量化来对一些vector加法进行基准测试。为了测试这一点,我使用并修改了下面的代码。代码:#include#include#include"../../time/timer.hpp"voidser(double*a,double*b,double*res,intsize){for(inti(0);i对于计时和计算的GFLOP/S,我得到:./test3AVX1892ms0.338266GFLOP/sSSE408ms1.56863GFLOP/sSER396ms

c++ - 英特尔 C++ 编译器 ICC 似乎忽略了 SSE/AVX 设置

我最近下载并安装了适用于Linux的英特尔C++编译器ComposerXE2013,可免费用于非商业开发。http://software.intel.com/en-us/non-commercial-software-development我在Ivy桥系统(具有AVX)上运行。我有两个版本的函数做同样的事情。一个不使用SSE/AVX。另一个版本使用AVX。在GCC中,AVX代码比标量代码快大约四倍。但是,使用IntelC++编译器时性能要差得多。使用GCC我这样编译gccm6.cpp-om6_gcc-O3-mavx-fopenmp-Wall-pedantic使用Intel我这样编译ic

c++ - AVX:数据对齐:store crash,storeu,load,loadu 没有

我正在修改RNNLM一个神经网络来研究语言模型。但是考虑到我的语料库的大小,它运行得非常慢。我试图优化矩阵*vector例程(这是一个占小数据集总时间63%的例程(我预计它在大数据集上会更糟))。现在我坚持使用内在函数。for(b=0;b此示例崩溃于:_mm256_store_ps(&(dest.ac[b*8+from+0]),t4);但是如果我改成_mm256_storeu_ps(&(dest.ac[b*8+from+0]),t4);(我想你是未对齐的)一切都按预期进行。我的问题是:为什么load可以工作(而如果数据未对齐,它不应该工作)而store却不能。(此外,两者都在同一个地址

c++ - AVX2 根据条件将连续元素扩展为稀疏 vector ? (如 AVX512 VPEXPANDD)

有谁知道如何向量化以下代码?uint32_tr[8];uint16_t*ptr;for(intj=0;j这基本上是一个屏蔽的收集操作。自动矢量化器无法处理这个问题。如果ptr是一个uint32_t*它应该可以直接用_mm256_mask_i32gather_epi32实现.但即便如此,你如何生成正确的索引vector?并且无论如何只使用打包加载并洗牌结果(需要类似的索引vector)会不会更快? 最佳答案 更新答案:主要代码段已重写为函数和解决方案添加了适用于AMD处理器的内容。正如PeterCordes在评论中提到的,AVX-51

c++ - GCC 无法矢量化 64 位乘法。可以在 AVX2 上矢量化 64 位 x 64 位 -> 128 位加宽乘法吗?

我尝试对使用64位加宽乘法的CBRNG进行向量化。static__inline__uint64_tmulhilo64(uint64_ta,uint64_tb,uint64_t*hip){__uint128_tproduct=((__uint128_t)a)*((__uint128_t)b);*hip=product>>64;return(uint64_t)product;}这样的乘法在AVX2中是否以vector形式存在? 最佳答案 没有。没有64x64->128位算术作为vector指令。也没有vectormulhi类型的指令(乘

c++ - 紧凑型 AVX2 寄存器,因此所选整数根据掩码是连续的

这个问题在这里已经有了答案:AVX2whatisthemostefficientwaytopackleftbasedonamask?(6个答案)关闭6年前。在问题OptimizingArrayCompaction,最佳答案是:SSE/AVXregisterswithlatestinstructionsetsallowabetterapproach.WecanusetheresultofPMOVMSKBdirectly,transformingittothecontrolregisterforsomethinglikePSHUFB.Haswell(AVX2)可以做到这一点吗?或者它是否需

c++ - 有符号的 8 位元素的 AVX2 整数乘法,产生有符号的 16 位结果?

我有两个__m256ivector,填充了32个8位整数。像这样:__int8*a0=new__int8[32]{2};__int8*a1=new__int8[32]{3};__m256iv0=_mm256_loadu_si256((__m256i*)a0);__m256iv1=_mm256_loadu_si256((__m256i*)a1);我如何使用类似_mm256_mul_epi8(v0,v1)(不存在)或任何其他方式来乘以这些vector?我想要2个结果vector,因为输出元素宽度是输入元素宽度的两倍。或者类似于_mm_mul_epu32的东西也可以,只使用偶数输入元素(0、

c++ - 使用 AVX 指令实现 _mm256_permutevar8x32_ps

AVX2内在_mm256_permutevar8x32_ps可以跨channel执行洗牌,这对于长度为8的数组排序非常有用。现在我只有AVX(IvyBridge)并且想在最少的周期内做同样的事情。请注意,数据和索引都是输入的,并且在编译时是未知的。例如,数组是[1,2,3,4,5,6,7,8],索引是[3,0,1,7,6,5,2,4],输出应该是[4,1,2,8,7,6,3,5]。大多数方便的内部函数的控制掩码必须是常量(没有“var”后缀),因此不适合这种情况。提前致谢。 最佳答案 要在AVX中跨channel置换,您可以在cha