sse相关内容

哪里的SSE指令跑赢正常指令

在什么地方X86-64的SSE指令(矢量指令)跑赢了正常的指令。因为我所看到的是,所需要的执行SSE指令频繁加载和存储被作废我们有什么收益,由于矢量计算。所以,可能有人给我一个例子SSE code其中它执行比正常的code更好。 它也许是因为我通过单独的每个参数,像这样... __ m128i A = _mm_set_epi32(PA [0],PA [1],PA [2],PA [3]); _ ..
发布时间:2016-08-21 20:05:01 C/C++

GCC - 如何重新调整栈?

我尝试建立它使用的pthreads和SSE __m128类型的应用程序。据GCC说明书,默认栈对齐为16个字节。为了使用__m128,要求是16字节对齐。 我的目标CPU支持SSE。我使用GCC编译器不支持运行时堆栈调整(例如-mstackrealign)。我不能使用任何其他GCC编译器版本。 我的测试应用程序是这样的: 的#include< xmmintrin.h> #包括LT ..
发布时间:2016-08-21 19:58:06 C/C++

为什么_mm_stream_ps产生L1 / LL高速缓存未命中?

我试图优化计算密集型算法和我种停留在一些缓存问题。我有其在应用程序的结束偶尔和随机写入和读取一次一个巨大的缓冲器。很显然,写入缓冲区产生大量高速缓存未命中,此外污染这是事后又需要计算缓存。我试图用非临时移动instrinsics,但高速缓存未命中(由Valgrind的报道和运行时的测量支持)仍时有发生。然而,进一步调查非临时的移动,我写了一个小的测试程序,它可以见下图。顺序存取,大的缓冲,只写。 ..
发布时间:2016-08-19 16:27:16 C/C++

在最多50%无法获得。在矩阵乘法理论性能

问题 我正在学习有关HPC和code优化。我试图复制在后藤的开创性矩阵乘法本文的结果( http://www.cs.utexas.edu/users/pingali/CS378/2008sp/papers/gotoPaper.pdf )。尽管我尽了最大努力,我不能克服〜50%的最大理论CPU的性能。 背景 在这里看到有关的问题( ..
发布时间:2016-08-19 16:00:17 C/C++

利用上证所内部函数优化

我想一个循环我已经转换为上证所内部函数。我似乎已经取得了相当不错的进展,我的意思是这是正确的方向,但是我似乎已经做了一些翻译错误的地方,因为我没有得到相同的“正确”的答案从非SSE $结果C $℃。 我用的4倍展开 我最初的循环是这样的: INT unroll_n =(N / 4)* 4;对于(INT J = 0; J< unroll_n; J ++){ 的for(in ..
发布时间:2016-08-19 00:38:26 C/C++

什么是加载和从128位SSE矢量抽取32位整数值的最有效方法是什么?

我试图用最优化上证所内部函数我的code,但我遇到了一个问题,我不知道一个好办法,从矢量提取整数值我已经做了上证所内部函数操作后,得到我想要的东西。 有谁知道一个好办法做到这一点?我在编程的C和我的编译器是gcc 4.3.2版。 感谢您的帮助。 解决方案 这要看你可以假设一下SSE支持的最低水平,你所拥有的。 让我们回到SSE2一路有 _mm_extract_epi16 ( PEXT ..
发布时间:2016-08-19 00:12:30 C/C++

是__int128_t算术由GCC效仿,甚至与SSE?

我听说128位的整数数据类型,如 __ int128_t 通过GCC提供的被模仿,因此缓慢。不过,据我所知,各SSE指令集(SSE,SSE2,...,AVX)推出了128位寄存器至少有一些说明。我不知道非常关注SSE或汇编/机器code,所以我想知道,如果有人可以给我解释一下算术与 __ int128_t 是否仿真或不使用现代版本的GCC。 我问这个的原因是因为我想知道是否是有意义的期望int1 ..
发布时间:2016-08-19 00:04:55 C/C++

最小和最大签署零

我关注下列情况下 分钟(-0.0,0.0) MAX(-0.0,0.0) minmag(-x,x)的 maxmag(-x,x)的 根据维基百科IEEE 754-2008 说,在关于MIN和MAX 最小值和最大值操作定义,但留有一定的余地,其中输入值相等,但在重新presentation不同的情况。特别是: 分(+ 0,-0)或分钟(-0,+ 0)必须出示与零值的东西,但总 ..
发布时间:2016-08-18 23:54:51 C/C++开发

是__m128i变量为零?

我如何测试如果 __ m128i 变量对任何非零值SSE-2和早期的处理器? 解决方案 在SSE2,你可以这样做: __ m128i零= _mm_setzero_si128(); 如果(_mm_movemask_epi8(_mm_cmpeq_epi32(X,零))== 0xFFFF的) { //将code ... } 这将考验四个整形的VS为零,则返回一个面具每个字节,如此 ..
发布时间:2016-08-18 23:51:52 C/C++开发

不能启用CPU的使用SSSE3

我有一个应该有集SSE4.2指令支持至强W3550处理器,但是当我尝试在我的C程序中使用过去的事情我SSE2得到一个编译错误例如 #ERROR“的SSE4.2指令集未启用” 当我使用 $猫/特效内/ cpuinfo 它检测到所有相关的SSE指令集,但 $ CPUID 只能检测SSE和SSE2。 我的操作系统是Ubuntu的11.04内核2.6.38-11泛型。 这是如何解决这一问题 ..
发布时间:2016-08-18 23:31:28 服务器开发

通过不断的使用SSE Mutiplying矢量

我有四维向量操作一些code和我目前正试图将其转换为使用SSE。我使用这两个铛和gcc 64B上的Linux。结果 仅在矢量操作的所有细-grasped这一点。但现在来这里,我由一个常数乘以整个向量的一部分 - 事情是这样的: 浮法Y [4]; 浮A1 = 25.0 / 216.0;为(J = 0; J&下; 4; J ++){ Y [J] = A1 * X [J]。 } 要这样的 ..
发布时间:2016-08-18 23:11:04 C/C++

SIMD code的运行速度比标量code慢

埃尔马和 ELMC 都是无符号长阵列。那么, RES1 和 RES2 。 无符号长simdstore [2]; __m128i * P,simda,simdb,simdc; P =(__m128i *)simdstore;对于(i = 0; I< _polylen;我++) { U1 =(ELMA [I]≥→1)及15; U2 =(ELMC [I]≥→1)及15; ..
发布时间:2016-08-18 23:08:00 C/C++

如何分配16byte内存对齐的数据

我想实现在一张code对,我需要我的一维数组是16字节的存储对齐SSE矢量化。不过,我已经尝试了几种办法来分配16byte内存对齐的数据,但它最终被4字节的内存对齐。 我与英特尔编译器国际刑事法院的工作。 这是一个示例code我与测试: 的#include<&stdio.h中GT; #包括LT&;&stdlib.h中GT; 无效的错误(字符*海峡) { 的printf( ..
发布时间:2016-08-18 22:54:23 C/C++

装上彩车上交所翻转迹象

我在寻找的包装在SSE寄存器中的所有四个浮点翻转标志的最有效的方法。 我还没有找到一个内在的英特尔架构软件开发手册这样做。以下是我已经尝试过的事情。 有关我环绕在code 10的十亿倍,得到指示的墙时每个案件。我想至少匹配4秒,把我的非SIMD方法,它是只用元减运算符。 [48秒] _mm_sub_ps(_mm_setzero_ps(),VEC); [32秒] _mm_ ..
发布时间:2016-08-18 22:53:48 C/C++

如何将一个像素结构加载到一个SSE寄存器?

我有8位像素数据的结构: 结构__attribute __((排列(4))){像素 焦炭 - [R; 焦克; 炭B: 所以char a; } 我想使用SSE指令来计算这些像素(即,Paeth转换)某些事情。我怎么能这些像素加载到一个SSE寄存器为32位无符号整数? 解决方案 好吧,使用SSE2整数内部函数从< emmintrin.h> 首先加 ..
发布时间:2016-08-18 22:29:42 C/C++

什么是使用不同版本的上证所内部函数在GCC的正确方法?

我会给予一个例子问我的问题。现在我有一个调用的函数 do_something()。 它有三个版本: do_something(), do_something_sse3()和 do_something_sse4 ()。当我的程序运行时,它会检测CPU的功能(看看它是否支持SSE3 SSE4或),并调用相应的三个版本中的一个。 的问题是::当我建立我的程序与海湾合作委员会,我必须设置 -msse4 ..
发布时间:2016-08-18 22:26:23 C/C++

开始使用SSE

我想更多地了解使用 SSE 。 有哪些途径来学习,除了明显的阅读英特尔®64和IA-32架构软件开发人员手册? 主要是我很感兴趣的 ..
发布时间:2016-08-18 21:53:46 C/C++

处理零的_mm256_rsqrt_ps()

由于 _mm256_sqrt_ps()是比较慢的,而且我生成的值将立即与截断_mm256_floor_ps(),环顾四周,似乎这样做的: _mm256_mul_ps(_mm256_rsqrt_ps(eightFloats) eightFloats); 是去表现,额外位的方式,避免了流水线停顿。 不幸的是,零值,当然,我得到一个崩溃计算 1 /开方(0)。什么是解 ..
发布时间:2016-08-18 21:44:48 C/C++

减少与SSE / AVX的OpenMP

我想要做的使用OpenMP和SIMD阵列上的减少。我读了OpenMP中减少等同于: 内嵌浮动sum_scalar_openmp2(常量浮动[],常量为size_t N){ 浮动金额= 0.0; OMP的#pragma并行 { 浮sum_private = 0.0; OMP的#pragma为平行NOWAIT 的for(int ..
发布时间:2016-08-18 14:19:21 C/C++

什么是逻辑SSE内部函数之间的区别?

是否有不同类型的逻辑上证所内部函数有什么区别?例如,如果我们采取或操作,有三个内部函数:_mm_or_ps,_mm_or_pd和_mm_or_si128所有这一切都做同样的事情:计算的按位的OR的操作数。我的问题: 有没有使用一种或另一种内在的(在适当的压铸类)之间的差异。会不会有像在一些具体情况更长的执行任何隐藏费用? 这些内在函数映射到三个不同的x86指令(POR,ORPS,orp ..
发布时间:2016-08-18 14:16:37 C/C++