avx相关内容

在AVX寄存器内旋转字节的有效方法

摘要/tl; :除了进行2x移位并将结果混合在一起以外,是否有其他方法可以按位旋转YMM寄存器中的字节(使用AVX)? 对于YMM寄存器中的每8个字节,我需要向左旋转7个字节.每个字节需要比前一个向左旋转一位.因此,第一个字节应旋转0位,第七个字节应旋转6位. 当前,我已经实现了一种实现方法,该方法是通过[将1位旋转作为示例]将寄存器左移1位,然后右移7位.然后,我使用混合操作(固有操 ..
发布时间:2020-09-15 05:39:51 其他开发

如何在Java中使用Intel AVX?

如何使用Java中的Intel AVX向量指令集?这是一个简单的问题,但答案似乎很难找到. 解决方案 据我所知,大多数当前的Java JVM JITter不支持自动矢量化,或者只是为了非常简单的循环而这样做,所以您很不走运./p> 在Mono的.NET实现中,有Mono.Simd用于手动矢量代码发射,然后后来MS引入了System.Numeric.Vectors.不幸的是,Java中没有 ..
发布时间:2020-09-15 05:39:47 Java开发

使用较新的SIMD版本时是否可用?

当我可以使用SSE3或AVX时,可以使用较旧的SSE版本作为SSE2或MMX- 还是我仍然需要单独检查它们? 解决方案 通常,它们是可加的,但请记住,多年来,英特尔和AMD在这些方面的支持存在差异. 如果您具有AVX,则也可以假定SSE,SSE2,SSE3,SSSE3,SSE4.1和SSE 4.2.请记住,要使用AVX,还需要验证OSXSAVE CPUID位置1,以确保所使用的OS ..
发布时间:2020-09-15 05:39:45 C/C++开发

RyuJIT没有充分利用SIMD内在函数

我正在运行一些使用System.Numerics.Vector的C#代码,但据我所知,我没有充分利用SIMD内部函数的好处.我正在使用Visual Studio Community 2015和Update 1,我的clrjit.dll是v4.6.1063.1. 我正在相反,我的反汇编包含诸如movups,movupd,addups等的说明以及以下代码: WriteLine($"{ ..
发布时间:2020-09-15 05:39:41 C#/.NET

是否有未针对AVX指令编译的TensorFlow版本?

我正在尝试在我的Chromebook上安装TensorFlow,这不是最好的地方,但我只是想对此有所了解.我在Python开发环境中或在任何开发环境中都没有做太多工作,所以请多多包涵. 弄清楚pip之后,我安装了TensorFlow并尝试将其导入,收到此错误: Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609 ..
发布时间:2020-09-15 05:39:37 Python

MSVC/arch:[指令集]-SSE3,AVX,AVX2

这是显示支持的指令集的类的示例. https://msdn.microsoft.com/en-us/library/hskdteyh.aspx 我想为一个函数编写三个不同的实现,每个实现都使用不同的指令集.但是,例如,由于带有/ARCH:AVX2标志,此应用程序将无法在第四代以上的英特尔处理器上任何地方运行,因此整个检查点毫无意义. 所以,问题是:这个标志究竟是做什么 ?启用 supp ..
发布时间:2020-09-15 05:39:35 其他开发

静态/静态本地SSE/AVX变量阻塞了xmm/ymm寄存器?

使用SSE内部函数时,通常需要零向量.避免在每次调用函数时(每次有效地调用某个xor向量指令)在函数内部创建零变量的一种方法是使用静态局部变量,如 static inline __m128i negate(__m128i a) { static __m128i zero = __mm_setzero_si128(); return _mm_sub_epi16(zero, a); ..
发布时间:2020-09-15 05:38:30 C/C++开发

使用__m256d寄存器

您如何使用__m256d? 说我想使用英特尔AVX指令由于x,y和z是Vector3类的成员,因此_我可以在union中使用__m256d变量声明它们吗? union Vector3 { struct { double x,y,z ; } ; __m256d _register ; // the Intel register? } ; 那我可以去 Vector3 a ..
发布时间:2020-09-15 05:38:24 C/C++开发

AVX中的分散内在函数

我在《英特尔内部指南v2.7》中找不到它们.您知道AVX或AVX2指令集是否支持它们吗? 解决方案 原始AVX指令集中没有分散或收集指令. AVX2添加了收集指令,但没有添加分散指令. AVX512F包括分散指令和收集指令. AVX512PF还提供了收集和分散指令的预取变体. AVX512CD提供了检测分散地址中冲突的说明. Intel MIC(又名Xeo ..
发布时间:2020-09-15 05:38:20 其他开发

使用AVX一次性完成4个水平双精度求和

问题可以描述如下. 输入 __m256d a, b, c, d 输出 __m256d s = {a[0]+a[1]+a[2]+a[3], b[0]+b[1]+b[2]+b[3], c[0]+c[1]+c[2]+c[3], d[0]+d[1]+d[2]+d[3]} 我到目前为止已经完成的工作 这似乎很容易:两个VHADD之间有一些改组,但实 ..
发布时间:2020-09-15 05:38:17 其他开发

生成多种SIMD架构的代码

我编写了一个库,在其中使用CMake验证MMX,SSE,SSE2,SSE4,AVX,AVX2和AVX-512标头的存在.除此之外,我还会检查指令是否存在,如果存在,还会添加必要的编译器标志-msse2 -mavx -mfma等. 这一切都很好,但是我想部署一个单一的二进制文件,该二进制文件可以在一系列处理器中使用. 问题:是否可以告诉编译器(GCC),无论何时使用SIMD优化功能时,都 ..
发布时间:2020-09-15 05:38:13 其他开发

检查运行时是否支持SSE

我想在运行时检查是否支持SSE4或AVX,以便我的程序可以利用特定于处理器的指令,而无需为每个处理器创建二进制文件. 如果我可以在运行时确定它,则可以使用一个接口并在不同的指令集之间进行切换. 解决方案 GCC有一种方法,首先调用__builtin_cpu_init,然后调用__builtin_cpu_is和__builtin_cpu_supports来检查功能. https://g ..
发布时间:2020-09-15 05:38:10 C/C++开发

如何选择AVX比较谓词变体

在高级矢量扩展(AVX)中,比较说明如对于初学者来说,是否出于性能原因选择信令或非信令, 同样,有序或无序比另一个更快? “不发信号"甚至意味着什么? 我根本找不到在文档中. 何时选择什么有什么经验法则吗? 以下是来自avxintrin.h的谓词选择: /* Compare */ #define _CMP_EQ_OQ 0x00 /* Equal (ordered, non- ..
发布时间:2020-09-15 05:38:06 其他开发

英特尔SSE和AVX示例和教程

是否有用于学习英特尔SSE和AVX指令的良好C/C ++教程或示例? 我在Microsoft MSDN和Intel网站上发现的很少,但是从基础知识上理解它将是很棒的. 解决方案 对于视觉倾斜的SIMD程序员而言,Stefano Tommesani的站点是x86 SIMD编程的最佳入门. http://www.tommesani.com/index.php/simd/46 -ss ..
发布时间:2020-09-15 05:38:05 其他开发

_mm_testc_ps和_mm_testc_pd与_mm_testc_si128

您知道,前两个是特定于AVX的内部函数,第二个是SSE4.1内部函数.两组内在函数都可用于检查2个浮点向量的相等性.我的特定用例是: _mm_cmpeq_ps或_mm_cmpeq_pd,然后是 在结果上显示 _mm_testc_ps或_mm_testc_pd,并带有适当的掩码 但是AVX为“旧式"内在函数提供了等效项,因此在将结果转换为__m128i之后,我也许可以使用_mm_tes ..
发布时间:2020-09-15 05:38:01 其他开发

英特尔SIMD-如何检查__m256 *是否包含任何非零值

我正在使用Microsoft Visual Studio编译器.我试图找出一个256位向量是否包含任何非零值.我已经尝试过res_simd = ! _mm256_testz_ps(*pSrc1, *pSrc1);,但是它不起作用. 解决方案 _mm256_testz_ps仅测试符号位-为了测试值,您需要与0比较然后提取生成的蒙版,例如 __m256 vcmp = _mm256_cmp ..
发布时间:2020-09-15 05:37:57 C/C++开发

性能报告显示此功能"__memset_avx2_unaligned_erms",有开销.这是否意味着内存未对齐?

我正在尝试使用perf工具分析我的C ++代码.实现包含带有SSE/AVX/AVX2指令的代码.除此以外,代码还使用-O3 -mavx2 -march=native标志进行编译.我相信__memset_avx2_unaligned_erms函数是memset的libc实现. perf表明此功能有相当大的开销.函数名称指示内存未对齐,但是在代码中,我正在使用GCC内置宏__attribute__(( ..
发布时间:2020-09-15 05:37:54 C/C++开发

AVX:数据对齐:存储崩溃,storeu,加载,loadu不

我正在修改RNNLM神经网络以研究语言模型.但是考虑到我的语料库的大小,它的运行速度确实很慢.我尝试优化matrix * vector例程(对于小型数据集,该例程占总时间的63%(我希望在较大的数据集上情况会更糟)).现在,我被内在函数所困扰. for (b=0; b ..
发布时间:2020-09-15 05:37:50 C/C++开发

_mm256_lddqu_si256和_mm256_loadu_si256有什么区别

根据我在网上找到的示例,我一直在使用_mm256_lddqu_si256.后来我发现了_mm256_loadu_si256.英特尔内部技术指南仅声明lddqu版本在越过缓存行边界时可能会表现更好. loadu的优点是什么?一般来说,这些功能有何不同? 解决方案 没有理由使用_mm256_lddqu_si256 ,请认为它是_mm256_loadu_si256的同义词. lddqu仅出于历史 ..
发布时间:2020-09-15 05:37:46 其他开发