simd相关内容

如何做好运行时绑定基于Linux上的CPU能力

是否有可能有一个Linux库(例如“libloader.so”)装入另一个库,以解决任何外部符号? 我已经得到了code的一大堆,获取有条件编译的SIMD水平得到支持(SSE2,AVX,AVX2)。这个工作正常,如果构建平台是一样的运行时平台。但它的重用阻碍在不同代处理器。 一个想法是让执行这就要求函数链接 libloader.so 不直接实施函数。相反,它解析(绑定?)从另一个加载库,例如符 ..
发布时间:2016-08-07 10:01:47 服务器开发

有什么有效的方式来加载64位寄存器青运与4分开双打?

什么是装载了64位YMM寄存器的最有效方式。 4双打均匀分布的,即一组连续的双打 0 1 2 3 4 5 6 7 8 9 10 ... 100 我想加载例如0,10,20,30 4双打在任何位置即。我想加载例如1,6,22,43 解决方案 最简单的方法是 VGATHERQPD 它可在Haswell的和最多的AVX2指令。 VGATHERQPD ymm1,[RSI ..
发布时间:2016-07-18 21:44:59 .NET Framework

SSE2:如何将数据加载来自非连续的存储单元?

我想向量化一些非常关键的性能code。在较高的水平,每次循环迭代读取来自非连续位置6个浮子在一小阵列,然后这些值转换为双precision并将它们添加到六个不同的双precision蓄电池。这些累加器是整个迭代一样的,这样他们就可以住在寄存器中。由于该算法的性质,这是不可行的,使存储器访问模式连续的。该阵列是足够小,适合在L1缓存,虽然如此,内存延迟/带宽不是瓶颈。 我愿意用汇编语言或SSE2内 ..
发布时间:2016-07-18 21:17:54 .NET Framework

帮助我提高一些SSE2 code

我要寻找一些帮助改善这一双线性对酷睿2 CPU的扩展SSE2 code 在我的Atom N270和上I7本code为约2倍比MMX code更快。但是在酷睿2处理器,只有等于MMX code。 code如下 无效ConversionProcess :: convert_SSE2(BBitmap *从,BBitmap *为) { UINT32 fromBPR,toBPR,fromBPR ..
发布时间:2016-07-18 20:59:11 .NET Framework

你如何移动XMM寄存器之间的128位值?

在装配看似琐碎的问题:我想复制整个XMM0寄存器XMM3。我试过 movdq XMM3,XMM0 但MOVDQ不能用于两个XMM寄存器之间移动的值。我应该怎么办呢? 解决方案 这是 MOVAPD , MOVAPS 或 MOVDQA MOVAPS XMM3,XMM0 他们都做同样的事情,但有一个问题: MOVAPD 和 MOVAPS 中的浮点域中操作。 MOVDQA 工 ..
发布时间:2016-07-18 20:54:41 .NET Framework

转上SSE2 / SSSE3 16位元素的8个寄存器

(我是一个新手,以SS​​E / ASM,道歉,如果这是显而易见的或冗余) 有没有更好的办法来调换包含16位值8 SSE寄存器比执行24 unpck [LH] ps和8月16日+洗牌,并使用8额外的寄存器? (注最多可使用3 SSSE说明,英特尔Merom处理器,又名缺乏的SSE4 BLEND。*) 假设你有寄存器v [0-7],并用T0-T7作为辅助寄存器。在伪内在code: / *第1 ..
发布时间:2016-07-18 20:48:23 .NET Framework

最快64位的人口数量(汉明权重)

我不得不计算汉明权重为64位数据的比较快continious流量和使用 POPCNT 汇编指令引发了我的异常OM我的英特尔酷睿i7- 4650U。 我检查我的圣经黑客的喜悦和扫描网络各种算法(它是一堆在那里,因为他们开始在解决计算的诞生这个“问题”)。 我度过了周末,与我自己的一些想法玩耍,并与这些算法,在那里我几乎在我可以进出CPU的移动数据的速度走了过来。使用BMI2 // 64位PO ..
发布时间:2016-07-18 20:48:09 .NET Framework

推XMM寄存器到堆栈

有没有推到堆栈从XMM寄存器一个压缩双整数的方法吗?然后在需要时以后弹出回来? 完美的我正在寻找像PUSH或POP的通用寄存器,我已经检查了英特尔的手册,但我要么错过了命令或没有一个... 或将我必须解压值通用寄存器,然后把他们? 在此先感谢! 根据GJ的答案是这样的解决方案: 子EBP,16 MOVDQU xmmword PTR [EBP],xmm6 MOVDQU XMM4 ..
发布时间:2016-07-18 20:41:55 .NET Framework

使用SIMD / AVX / SSE的树遍历

我目前正在研究是否有可能加快一辆面包车昂德博厄斯(或任何树)树的遍历。给定一个搜索查询作为输入,已经有在高速缓存行(面包车EMDE博阿斯布局)多个树节点,树的遍历似乎是指令瓶颈。 作为还挺新的SIMD / AVX / SSE指令,我想从主题专家知道是否有可能到多个节点一次比较的值,然后找出跟踪的代码树通路上。我的研究导致以下问题: 多少个CPU周期/指令被浪​​费上注册等等。这将使得其对鲁尼使 ..
发布时间:2016-07-18 20:40:57 .NET Framework

如何将128位的立即到XMM寄存器

有已经是对这个问题,但它被关闭的“暧昧“所以我打开一个新 - 我已经找到了答案,也许这将帮助别人太 现在的问题是:你如何编写汇编code的顺序,有128位立即(常数)值来初始化XMM寄存器? 解决方案 只是想补充一点,人们可以读到关于瓦格纳雾手册的汇编语言优化子程序,生成常量,第13.4节,第121页。 ..
发布时间:2016-07-18 20:12:07 .NET Framework

做混合SSE整数/浮点SIMD指令时,我得到的性能损失

我在内部函数的形式,最近不少二手x86的SIMD指令(SSE1234)。我发现无奈的是,上证所ISA有几个简单的指令只适用于浮筒或只为整数,但在理论上应该都同样执行。例如,float和double向量都有说明从一个地址加载128位向量的高64位( movhps 的 movhpd 的),但有一个为整数没有这样的指令向量。 我的问题: 有没有使用浮动整数载体,如运算指令时,期待的性能损失的原因使用 ..
发布时间:2016-07-18 19:53:23 .NET Framework

高效SSE N×N的矩阵乘法

我想通过矩阵乘法来实现 SSE 大型矩阵的版本。 我在寻找基于 SIMD 实现一个高效的算法。 我所需的方法是这样的: A(n×m个)* B(米×K)= C(N×k个) 和所有矩阵都被认为是16字节对齐的float数组。 我搜索网,发现有些文章描述了8x8的乘法和更小。我真的需要它尽可能高效,我不希望使用征库或类似的库。 (仅 SSE3 更具体)。 所以我AP preciate如果有人 ..
发布时间:2016-07-18 19:53:18 C/C++开发

打印__m128i变量

我试图用内在学习code和下方则是code这确实除了 编译器使用:ICC #包括LT&;&stdio.h中GT; #包括LT&;&emmintrin.h GT; 诠释的main() { __m128i一个= _mm_set_epi32(1,2,3,4); __m128i B = _mm_set_epi32(1,2,3,4); __m128i℃; ..
发布时间:2016-07-18 19:53:12 .NET Framework

C ++赶快加入2阵列一起

由于数组: INT帆布[10] [10]; INT插件[10] [10]; 如果所有的值的范围从0 - 100,什么是C ++最快的方式来增加这两个数组所以在画布上每一个细胞等于本身加上插件对应的单元格的值 IE浏览器,我想实现这样的:帆布+ =另一种; 因此​​,如果帆布[0] [0] = 3和插件[0] [0] = 2,则帆布[0] [0] = 5 速度是这里必不可少的, ..
发布时间:2016-06-01 19:40:28 C/C++开发

SSE指令增加一个阵列中的所有元素

我是新来的SSE2指令集。我发现 _mm_add_epi8 的指令,可以添加两个数组元素。但我想的SSE指令,可以增加一个阵列中的所有元素。 我试图用这个code来开发这一概念: 的#include<&iostream的GT; #包括LT&;&CONIO.H GT; #包括LT&;&emmintrin.h GT;空SSE(无符号字符*一,无符号字符* B);无效的主要() { / ..
发布时间:2016-05-30 23:33:07 C/C++开发

ARM NEON我怎么可以改变值与指数

unsigned char型changeValue(unsigned char型粒子阵列[256],unsigned char型值) { 返回粒子阵列[值]; } 我怎样才能改变这种功能的霓虹灯有关uint8x8_t ?? 感谢您的帮助! 解决方案 您不能 - NEON没有聚集的负荷。你能处理这样的唯一情况是,当你想返回8或16个连续的字节值。 ..
发布时间:2016-05-29 15:06:16 其它硬件开发

如何使用手臂霓虹灯VBIT内部函数?

我不明白我VBIT,VBSL和VBIF之间如何区别与内在的霓虹灯。我需要做的VBIT操作,但如果我用vbslq指令从内在我没有得到我想要的东西。 例如我有一个源向量是这样的: uint8x16_t源= 39 62 52 9B 5B 34 47 48 47 35 0 0 0 0 0 0 目标矢量是: uint8x16_t目的地= 0 0 0 0 0 0 0 0 0 0 0 0 C3-C8 ..
发布时间:2016-05-29 15:05:19 其它硬件开发