-
2 votesanswersviews
确定处理器体系结构
我们在MacBook Pro Late 2013上编译Lapack时遇到问题 . 编译器在使用 -march=native 编译时抱怨不支持向量指令: 没有这样的指令:`vmovss(%rdx),%xmm0' 随着 -march=core2 一切都很好 . 问题是:如何在waf中检测处理器架构?目前,waf知道在使用Darwin OS的计算机上运行,但问题与操作系统无关,而与处理器无关,因此这... -
3 votesanswersviews
Xeon Phi上的loaddup_pd / unpacklo_pd
如果我在512宽SIMD向量中有以下双打,就像在Xeon Phi寄存器中一样: m0 = |b4|a4|b3|a3|b2|a2|b1|a1| 有可能成为: m0_d = |a4|a4|a3|a3|a2|a2|a1|a1| 使用单一指令?此外,由于双打没有按位内在函数,这仍然是实现上述目标的有效方法吗? m0_t = _mm512_swizzle_pd(m9,_MM_SWIZ_REG_CDAB)... -
1 votesanswersviews
Xeon Phi中的分散/聚集
我指的是关于Xeon Phi指令集的Intel手册,并且无法理解散布/收集指令的工作原理 . 假设我有以下双打矢量: A-> |b4|a4|b3|a3|b2|a2|b1|a1| 是否可以创建4个向量,如下所示: V1->|b1|a1|b1|a1|b1|a1|b1|a1| V2->|b2|a2|b2|a2|b2|a2|b2|a2| V3->|b3|a3|b3|a3|b3|a... -
3 votesanswersviews
使用SIGILL与CPU探测进行AVX功能检测
我正在尝试确定一种检测英特尔和AMD处理器上AVX和AVX2可用性的有效方法 . 在阅读英特尔软件开发人员手册第一卷(使用XSAVE功能集管理状态,第310页)时,我更加惊讶地发现它更接近SSE和XSAVE . 英特尔在Is AVX enabled?发布了一些用于检测AVX可用性的代码 . 代码如下所示,并且不会太痛苦 . 问题是,Visual Studio是一个痛点,因为我们需要将代码从C / ... -
1 votesanswersviews
让编译器以合理的方式自动向量化代码
我试图找出如何构造数值模拟的主循环代码,以便编译器以紧凑的方式生成漂亮的矢量化指令 . C伪代码最容易解释这个问题,但我也有一个受同一类问题影响的Fortran版本 . 考虑以下循环,其中 lots_of_code_* 是一些复杂的 expressions ,它产生了相当数量的机器指令 . void process(const double *in_arr, double *out_arr, in... -
7 votesanswersviews
向左和向右移位SSE / AVX寄存器,同时以零移位
我想将左移或右移32位的SSE / AVX寄存器移位为零 . 让我对我感兴趣的转变更加准确 . 对于SSE,我想做四个32位浮点数的以下转换: shift1_SSE: [1, 2, 3, 4] -> [0, 1, 2, 3] shift2_SSE: [1, 2, 3, 4] -> [0, 0, 1, 2] 对于AVX,我想转移做以下转变: shift1_AVX: [1, 2, 3, ... -
8 votesanswersviews
哪个版本的Windows支持/需要哪些CPU多媒体扩展? [关闭]
到目前为止,我已经设法找到: SSE和SSE2对于Windows 8及更高版本(当然对于任何64位操作系统)都是必需的 AVX仅受Windows 7 SP1或更高版本支持 有关在Windows上使用SSE3,SSSE3,SSE4.1,SSE 4.2,AVX2和AVX-512的注意事项吗? 一些澄清:如果我使用其中一个SSE / AVX集合的指令,我需要这个来确定我的程序运行的操作系统 ... -
5 votesanswersviews
如何使用intel内在函数从256个向量中提取8个整数?
我正在尝试使用256位向量(Intel intrinsics - AVX)来提高代码的性能 . 我有一个支持SSE1到SSE4.2和AVX / AVX2扩展的I7 Gen.4(Haswell架构)处理器 . 这是我正在尝试增强的代码片段: /* code snipet */ kfac1 = kfac + factor; /* 7 cycles for 7 additions */ kfac... -
2 votesanswersviews
最快确定SIMD比较寄存器位置的方法
我有一个已经SIMD比较 __m128i 寄存器,这导致类似的东西: 0, 0, -1, -1, 0, 0, 0, 0 // in shorts 0, -1, 0, 0 // in ints 获取位置的int的位置的最快/最便宜的方法是什么? __m128i 中只有一个int设置为1 . 例: -1, -1, 0, 0, 0, 0, 0, 0 -> 0 0, 0, -1, -1, 0... -
38 votesanswersviews
如何在SSE / AVX中使用融合乘法 - 加法(FMA)指令
我了解到一些Intel / AMD CPU可以同时进行多次加法并添加SSE / AVX:FLOPS per cycle for sandy-bridge and haswell SSE2/AVX/AVX2 . 我想知道如何在代码中做到最好,我也想知道它是如何在CPU内部完成的 . 我的意思是超标量架构 . 假设我想做一个很长的总和,如下面的SSE: //sum = a1*b1 + a2*b2 + ... -
1 votesanswersviews
使用SSE / AVX在Ivy Bridge上进行最大SIMD整数乘法运算?
有人能告诉我如何计算出最大数量的32位无符号整数乘法我可以通过SSE / AVX使用SIMD在Ivy Bridge CPU上同时进行吗? 我知道AVX确实有256位寄存器用于乘法,但这是浮点数(AVX2引入了256位整数寄存器) . 因此,我不太确定使用浮点寄存器进行整数乘法是否更好(如果可能的话)? 另外,我不确定寄存器的数量是否重要,或者我是否需要查看CPU的端口 . 看起来端口0和端口5可以... -
10 votesanswersviews
L1内存带宽:使用相差4096 64字节的地址,效率下降50%
我想用英特尔处理器实现以下操作的最大带宽 . for(int i=0; i<n; i++) z[i] = x[i] + y[i]; //n=2048 其中x,y和z是浮点数组 . 我在Haswell,Ivy Bridge和Westmere系统上这样做 . 我最初分配了这样的内存 char *a = (char*)_mm_malloc(sizeof(float)*n, 64); char *... -
15 votesanswersviews
当编译器在Sandy上重新排序AVX指令时,它是否会影响性能?
Please do not say this is premature microoptimization. I want to understand, as much as it is possible given my limited knowledge, how the described SB feature and assembly works, and make sure that m... -
10 votesanswersviews
使用未对齐缓冲区进行矢量化:使用VMASKMOVPS:根据未对齐计数生成掩码?或者根本不使用那个insn
gcc 5.3与 -O3 -mavx -mtune=haswell for x86-64使surprisingly bulky code处理代码的潜在错位输入,如: // convenient simple example of compiler input // I'm not actually interested in this for any real program void floa... -
4 votesanswersviews
更快的方法来测试xmm / ymm寄存器是否为零?
幸运的是 PTEST 不会影响进位标志,但只会设置(相当笨拙的)ZF . 也影响CF和ZF . 我已经提出了以下序列来测试大量的值,但我对运行时间不佳感到不满意 . Latency / rThoughput setup: xor eax,eax ; na vpxor xmm0,xmm0 ; na ;mask to use for the nand operati... -
2 votesanswersviews
ASM x86_64 AVX:xmm和ymm记录差异
xmm 和 ymm 寄存器之间有什么区别?我认为 xmm 用于SSE, ymm 用于AVX,但我写了一些代码: vmovups ymm1, [r9] vcvtss2si rcx, ymm1 它给了我: error: invalid combination of opcode and operands 这是关于这条线: vcvtss2si rcx, ymm1 所以我... -
346 votesanswersviews
您的CPU支持未编译此TensorFlow二进制文件的指令:AVX AVX2
我是TensorFlow的新手 . 我最近安装了它(Windows CPU版本)并收到以下消息: 已成功安装tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2 然后,当我试图跑 import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() ... -
11 votesanswersviews
使用xmm寄存器而不是ymm时,vxorps是否会更快地使用AMD Jaguar / Bulldozer / Zen?
AMD CPU通过解码为两个128b操作来处理256b AVX指令 . 例如在AMD Steamroller上 vaddps ymm0, ymm1,ymm1 解码为2个宏操作,吞吐量的一半为 vaddps xmm0, xmm1,xmm1 . XOR归零是一种特殊情况(没有输入依赖性,并且on Jaguar at least avoids consuming a physical register... -
0 votesanswersviews
如何检测Xeon Phi(骑士登陆)
英特尔工程师写道,我们应该使用VZEROUPPER / VZEROALL来避免在所有处理器(包括未来的Xeon处理器)上转移到非VEX状态,但不能在Xeon Phi上转换:https://software.intel.com/pt-br/node/704023 人们还测量并发现VZEROUPPER和VZEROALL在Knights Landing上很贵: 在64位模式下,两个指令都有36个时钟周期... -
6 votesanswersviews
为什么英特尔不以更兼容或通用的方式设计其SIMD ISA?
英特尔在Xeon Phi上有几个SIMD ISA,如SSE,AVX,AVX2,AVX-512和IMCI . 这些ISA在不同的处理器上受支持 . 例如,AVX-512 BW,AVX-512 DQ和AVX-512 VL仅在Skylake上受支持,但在Xeon Phi上不受支持 . Skylake和Xeon Phi均支持AVX-512F,AVX-512 CDI,AVX-512 ERI和AVX-512... -
0 votesanswersviews
内部virtualenv:如何获得tensorflow来支持sse 4.2和avx
只是提前说出来,我知道所有需要bazel的答案,但它们对我不起作用 . 我正在使用virtualenv作为tensorflow网站的建议 . (tensorflow27)name@computersname:~$ bazel build --linkopt='-lrt' -c opt --copt=-mavx --copt=-msse4.2 --copt=-msse4.1 --copt=-msse... -
0 votesanswersviews
使用SSE4.2和AVX编译TensorFlow失败并使用bazel
我已经安装了Tensorflow Bazel和MSYS,我尝试使用Win 10命令提示符中的以下命令使Tensorflow编译为支持 CPU extensions, such as SSE4.1, SSE4.2, AVX, AVX2, FMA : bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=- mfpma... -
1 votesanswersviews
Intel Xeon Phi中的排列
假设我在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|b... -
49 votesanswersviews
每个循环的FLOPS用于沙桥和haswell SSE2 / AVX / AVX2
我对使用Sandy-Bridge和Haswell可以完成每个核心每个循环的触发器感到困惑 . 据我所知,对于SSE,每个核心每个周期应该为4个触发器,对于AVX / AVX2,每个核心每个周期应该有8个触发器 . 这似乎在这里得到验证,How do I achieve the theoretical maximum of 4 FLOPs per cycle?,在这里,Sandy-Bridge CP... -
44 votesanswersviews
如何在编译时检测SSE / SSE2 / AVX / AVX2 / AVX-512 / AVX-128-FMA / KCVI的可用性?
我正在尝试优化一些矩阵计算,我想知道是否有可能在编译时检测SSE / SSE2 / AVX / AVX2 / AVX-512 / AVX-128-FMA / KCVI [1]是否由编译器?理想情况下,对于GCC和Clang,但我只能管理其中一个 . 我不确定它是否可行,也许我会使用自己的宏,但我更愿意检测它并要求用户选择它 . [1] "KCVI"代表Knights Corn... -
9 votesanswersviews
为多个SIMD架构生成代码
我编写了一个库,我使用CMake来验证MMX,SSE,SSE2,SSE4,AVX,AVX2和AVX-512的标头是否存在 . 除此之外,我检查是否存在指令,如果存在,我添加必要的编译器标志,-msse2 -mavx -mfma等 . 这一切都非常好,但我想部署一个二进制文件,它适用于各代处理器 . 问题:是否有可能告诉编译器(GCC)每当使用SIMD优化函数时,它必须为架构列表生成代码?当然还有高... -
17 votesanswersviews
GCC中的FMA3:如何启用
我有一个i5-4250U,它有AVX2和FMA3 . 我正在测试Linux上的GCC 4.8.1中的一些密集矩阵乘法代码 . 下面是我编译的三种不同方式的列表 . SSE2: gcc matrix.cpp -o matrix_gcc -O3 -msse2 -fopenmp AVX: gcc matrix.cpp -o matrix_gcc -O3 -mavx -fopenmp ... -
14 votesanswersviews
使用Ivy Bridge和Haswell循环展开以实现最大吞吐量
我用AVX一次计算八个点产品 . 在我目前的代码中,我做了类似的事情(在展开之前): 常 Spring 藤桥/桑迪桥 __m256 areg0 = _mm256_set1_ps(a[m]); for(int i=0; i<n; i++) { __m256 breg0 = _mm256_load_ps(&b[8*i]); tmp0 = _mm256_ad... -
0 votesanswersviews
GCC优化器会发出奇怪的条件跳转,为什么?
我正在查看代码中关键函数的反汇编 . 它需要大约90%的性能 . 并不完全令人惊讶,因为它在内联后是一个非常大的功能,所以它最终做了很多 . 但是,我注意到有一些程序集,我不明白理由: test rsi, rsi je setecx0 cmp rsi, 0x1 je setecx1 cmp rsi, 0x2 je setecx2 cmp rsi, 0x3 je setecx3 cmp rsi, 0...