sse相关内容

相比于裸__m128 SSE矢量包装类型的表现

我发现一个有趣的约SIMD陷阱Gamasutra的文章,其中规定这是不可能达到的“纯”性能 __ M128 键入与封装类型。嗯,我是持怀疑态度,所以我下载的项目文件,编造一个可比的测试用例。 原来(我惊奇)的包装版本是显著慢。因为我不想谈论刚才的空气稀薄,测试案例如下: 在第一种情况 Vec4 是与 __ M128 键入一个简单的别名一些运营商: 的#include< xmmintri ..
发布时间:2016-07-18 20:34:59 C/C++开发

SIMD minmag和maxmag

我要实现SIMD minmag和maxmag功能的。据我了解,这些功能是 minmag(A,B)= | A |< | C | ? A:B maxmag(A,B)= | A |> | B | ? A:B 我想这些对float和double,我的目标硬件的Haswell。我真正需要的是code这两种计算。以下是我对SSE4.1双(AVX的code是几乎相同)静态内嵌无效maxmin ..
发布时间:2016-07-18 20:16:54 .NET Framework

与未对齐的缓冲区向量化:使用VMASKMOVPS:产生从错位口罩算什么?或者没有使用的insn在所有

GCC 5.3 -O3 -mavx -mtune = Haswell的为X86-64使出奇笨重code 来处理code像潜在-错位输入:编译器的输入 //方便简单的例子 //我在此对任何真正的程序实际上有兴趣 无效floatmul(浮动*一){ 的for(int i = 0; I< 1024年,我++) 一个由[i] * = 2; } 铛使用未对齐加载/存储指令,但GCC ..
发布时间:2016-07-18 20:14:38 .NET Framework

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

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

如何声明内存范围内使用不可缓存的x86平台的gcc?

虽然我看了一下这方面的说明movntdqa但想出了一个干净的方式前preSS内存范围不可缓存或读取数据,从而不污染缓存。 我想从GCC做到这一点。我的主要目标是交换到随机位置在大阵。希望通过避免缓存因为很少有数据resue加速这一操作。 解决方案 我想你所描述的是内存类型范围寄存器。你可以控制这些在Linux下(如果有,你是用户0),使用的/ proc / MTTR / 的ioctl(2 ..
发布时间:2016-07-18 20:10:31 .NET Framework

使用SSE指令

我已经写在其中一个大整数数组中的每个元素执行C ++的循环。在循环中,我掩盖了整数的某些位,然后找到最小值和最大值。我听说,如果我使用SSE指令执行这些操作将运行得更快相比,使用按位写一个正常的循环,以及如果其他条件。我的问题是我应该去这些SSE指令?另外,如果我的code在不同的处理器上运行时会发生什么?它仍然可以工作或这些指令是特定的处理器? 解决方案 SSE指令是特定处理器。你可 ..
发布时间:2016-07-18 20:08:04 C/C++开发

有关strlen的不同实现的性能问题

我已经实现了以不同的方式,包括 SSE2组装的strlen()函数, SSE4.2组装和 SSE2内在,我也产生了一些实验,请用的strlen()上述<文件string.h>在glibc的和的strlen()。然而,他们以毫秒为单位方面的性能(时间)是意想不到的。 我的实验环境: 的CentOS 7.0 + GCC 4.8.5 +英特尔®至强® 以下是我实现的: 的strl ..
发布时间:2016-07-18 20:03:50 .NET Framework

获得上证所的版本没有在x64 __asm

我试图建立的VS2010 CRT库的一些功能稍微修改后的版本,一切都很好,除了它试图访问该presumably持有指令集架构的版本全局变量的部件(ISA) 如果(__isa_available> __ISA_AVAILABLE_SSE2) { // ... } 否则,如果(__isa_available == __ISA_AVAILABLE_SSE2) { // ... } ..
发布时间:2016-07-18 20:02:02 C/C++开发

高效的4x4矩阵乘法(C VS组装)

我在寻找繁殖的C.两个4X4矩阵我目前的研究主要集中在x86-64的组装与SIMD扩展更快,棘手的方式。到目前为止,我已经创建了一个功能女巫约6倍比一个天真的C语言实现,这已经超出了我的性能改善的预期更快。不幸的是,保持真实,只有当没有优化标志用于编译(GCC 4.7)。随着 -O2 ,C变快和我的努力变得毫无意义。 我知道,现代的编译器使用复杂的优化技术,以达到近乎完美的code,通常比一个巧 ..
发布时间:2016-07-18 19:56:26 .NET Framework

获取与上证所__m128i向量最大值?

我一直在使用SSE刚开始,我很困惑如何获得的最大的整数值(最大) __ m128i 。例如: __ m128i T = _mm_setr_ps(0,1,2,3); //最大值(T)= 3; 搜索周围使我 MAXPS 指令,但我似乎无法找到如何使用与“xmmintrin.h”。 此外,有没有任何文档“xmmintrin.h”,你会建议,而不是寻找到头文件本身? 解决方案 如果你发现自己 ..
发布时间:2016-07-18 19:53:28 .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++开发

MOVDQA和MOVAPS x86指令之间的区别?

我在寻找的英特尔数据表:英特尔®64和IA-32架构 软件开发人员手册,我无法找到的区别的 MOVDQA 和 MOVAPS x86指令? 在英特尔数据表我能找到两个指令: 此指令可用于从128位加载XMM寄存器 存储器位置,XMM寄存器的内容存储到 128位内存位置,或两个XMM寄存器之间移动数据。 唯一的区别是: 要移动双四字或未对齐的内存位置,使用 该指令MOVDQ ..
发布时间:2016-07-18 19:53:04 .NET Framework

什么是&QUOT意义;非颞"内存访问在86

这是一个有些低级别的问题。在x86汇编有两个SSE指令: MOVDQA 的 XMMI,M128 的 和 MOVNTDQA 的 XMMI,M128 的 在IA-32软件开发人员手册说,的 NT 的在MOVNTDQA代表的非临时的,并且,否则它一样MOVDQA。 我的问题是,是什么的非临时的意思吗? 解决方案 非临时SSE指令(MOVNTI,MOVNTQ等),不按正常 ..
发布时间:2016-07-18 19:47:20 .NET Framework

是有可能使用SSE(V2),使128位宽整数?

我看明白了SSE2的功能多一点,想知道如果一个人可以做一个128位的整数支持加,减,XOR和乘法?谢谢,Erkling。 解决方案 SSE2没有进位,但你可以很容易地计算进为进行= SUM<一个或进行= SUM< b 如这个。但更糟糕的是,SSE2没有64位的比较,所以你必须在这里使用一些变通办法像一个 下面是基于以上想法一个未经考验,未优化的C $ C $角 内联BOOL每 ..
发布时间:2016-07-18 19:46:59 .NET Framework

为什么SSE标量的sqrt(x)的比rsqrt(X)* X慢?

我一直在分析我们的一些核心数学上的英特尔酷睿双核,在注视各种方法来平方根我注意到一个奇怪的现象:在使用SSE标量运算,它是更快采取倒数平方根并乘以得到开方,是不是比使用本地开方运算code! 我与一个循环类似测试它: 内嵌浮动TestSqrtFunction(漂浮在);无效TestFunc() { #定义ARRAYSIZE 4096 #定义NUMITERS 16386 浮FLIN [AR ..
发布时间:2016-07-18 19:44:02 .NET Framework

初始化在声明工会阵列

我想在初始化声明如下工会数组: 的typedef工会{__m128d米;浮F [4]; }垫; 垫米[2] = {{{30467.14153,5910.1427,15846.23837,7271.22705} {30467.14153,5910.1427,15846.23837,7271.22705}}}; 但I'getting以下错误: matrix.c:在函数'主': matrix.c: ..
发布时间:2016-06-01 21:16:03 其他开发

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++开发