avx相关内容
我试图将其转换发现的n次方根用C从以下链接双重值的函数 HTTP://rosetta$c$c.org/wiki/Nth_root#C 找到8彩车的n次方根一次使用AVX。 这code部分采用DBL_EPSILON * 10。然而,当我将它转换为使用float与AVX我必须使用FLT_EPSILON * 1000或code挂起,不收敛。当我打印出来FLT_EPSILON我看到它是为了1E-7。
..
我写一个网页排名程序。我写更新排名的方法。我已经成功地得到它与嵌套的for循环,也是一个线程版本的工作。不过,我想改用SIMD / AVX。 这是code,我想变成一个SIMD / AVX的实现。 的#define IDX(A,B)((A * NPAGES)+ B)//二维矩阵索引 用于(为size_t我= 0; I< NPAGES,我++){ 临时[I] = 0.0;
..
如果我在他们4双打的AVX寄存器,我想这个反向存储在另一个寄存器中,是否有可能用一个固有的命令来做到这一点? 例如:如果我在一个SSE寄存器有4个浮筒,我可以使用: _mm_shuffle_ps(A,A,_MM_SHUFFLE(0,1,2,3)); 我能做到这一点使用,也许 _mm256_permute2f128_pd()?我不认为你可以使用上述内部解决每个人的两倍。 解决方案 您确
..
的WebSocket规范定义揭露数据 J = MOD 4 转化八位-I =原八位-I XOR屏蔽键八位-J ,其中掩模是4字节长,揭露具有每字节被应用 有没有办法更有效地做到这一点,而不是仅仅循环字节? 服务器运行code可以假定为Haswell的CPU,操作系统是Linux的内核> 3.2,所以SSE等都是present。编码是用C做,但如果需要,我可以做ASM为好。 我倒是想看看了自
..
我发展优化为我的3D计算,我现在有: 一个“平原”使用标准C语言库版本, 的 SSE 优化的版本,编译使用preprocessor 的#define USE_SSE , 的 AVX 优化的版本,编译使用preprocessor 的#define USE_AVX 是否有可能在3个版本之间切换,而无需编写不同的可执行文件(例如,具有不同的库文件和动态加载的“正确”的,不知道是不
..
什么是海湾合作委员会的内在装载4 整数到 __ M128 和8个整数为 __m256 (对齐/不对齐的)?什么无符号整数? 解决方案 使用Intel的SSE intrnisics,你要找的是: _mm_load_si128() _mm_loadu_si128() _mm256_load_si256() _mm256_loadu_si256() 文件: http://
..
我想转换4装64位整数4包装使用AVX 64位的花车。我已经试过类似: int_64t 1!=(*的int64_t)_mm_malloc(256,32); LS [0] = A; // ... LS [3] = D组;__mm256i包装= _mm256_load_si256((__ m256i常量*)LS); 这将在调试器中显示:(GDB)印刷包装 $ 4 = {1234,5678,90
..
我注意到,数学函数(如CEIL,圆形,...)运行任何英特尔AVX功能之后采取更多的CPU周期。 请参阅下面的例子: 的#include<&stdio.h中GT; #包括LT&;&math.h中GT; #包括LT&;&immintrin.h GT; 静态unsigned long int类型get_rdtsc(无效) { unsigned int类型A,D;
..
我已经找到了SSE移位指令可以相同数额上的所有元素只能转移: _mm_sll_epi32() _mm_slli_epi32()
..
我想与英特尔处理器实现下列操作的最大带宽。 的for(int i = 0; I< N;我++)Z [i] = X [I] + Y [I] // N = 2048 其中x,y和z是浮阵列。我这样做对的Haswell,Ivy Bridge的,而Westmere处理器的系统。 我最初分配这样的内存的char * A =(的char *)_ mm_malloc(的sizeof(浮动)* N,6
..
由于 _mm256_sqrt_ps()是比较慢的,而且我生成的值将立即与截断_mm256_floor_ps(),环顾四周,似乎这样做的: _mm256_mul_ps(_mm256_rsqrt_ps(eightFloats) eightFloats); 是去表现,额外位的方式,避免了流水线停顿。 不幸的是,零值,当然,我得到一个崩溃计算 1 /开方(0)。什么是解
..
内在的: INT面膜= _mm256_movemask_epi8(__ m256i S1) 创建了一个面具,对应于 S1 的每个字节的最高位显著的 32 位。操作使用位操作面膜后( BMI2 )后,我想执行 _mm256_movemask_epi8 ,即倒数,创建一个 __ m256i 载体包含的对应位的每个字节的最高显著位 uint32_t的面具。 什么是做到这一点的最好方法是什么? 编
..
我想要做的使用OpenMP和SIMD阵列上的减少。我读了OpenMP中减少等同于: 内嵌浮动sum_scalar_openmp2(常量浮动[],常量为size_t N){ 浮动金额= 0.0; OMP的#pragma并行 { 浮sum_private = 0.0; OMP的#pragma为平行NOWAIT 的for(int
..
有什么办法重建 _mm_slli_si128 指令AVX2转向一个 __ mm256i 通过X字节注册? 的 _mm256_slli_si256 似乎只是为了执行两个 _mm_slli_si128 在[127:0]和[255:128 ]。 左移应该在工作 __ m256i 是这样的: [1,2,3,4,5,6,7,8,9,10,11,12,...,32] - GT; [2,3,4,5,
..
我已经了解到,某些Intel / AMD的CPU可以做点大的乘法和SSE / AVX补充:结果
..
我已经成为兴趣写一个的memcpy()作为教育工作。我不会写什么,我也没想到的整体论,但这里的 一些家伙的实施: __ forceinline //因为通常尺寸已知,内联后编译器可以优化掉大部分无用代码 无效* myMemcpy(字符* Dst的,为const char *的Src,为size_t大小) { 无效*开始= Dst的; 对于(;尺寸> =
..
我想对一些较新的Intel处理器可用的256位AVX指令来熟悉自己。我已经验证了我的i7-4720HQ支持256位AVX指令。我遇到的问题是,VMOVAPS指令,它应该复制8个单precision浮点值,只能复制4。 点PROC VMOVAPS YMM1,ymmword PTR [RCX] VDPPS YMM2,YMM1,ymmword PTR [RDX] 255 VMO
..
我熟悉的数据校准和性能,但我相当新的调整code。我在X86-64组装开始编程最近与NASM,并使用code调整已经比较性能。至于我可以告诉NASM插入 NOP 指令来实现code对齐。 下面是一个功能我一直在一个Ivy Bridge的系统上尝试这种 无效黑社会(浮点* X,浮动* Y,浮动* Z,整数N,INT重复){ 浮K = 3.14159f; INT(INT R = 0
..
我曾与一些英特尔intrinsincs编写过C code。我SSSE3标志先用AVX,然后进行编译后,我得到了两个完全不同的装配codeS。例如: AVX: vpunpckhbw%XMM0,xmm1中的%,%XMM2 SSSE3: MOVDQA%XMM0,%XMM2 punpckhbw%将xmm1,%XMM2 很明显, vpunpckhbw 就是 punpckhbw 但使用AVX
..
我有一个这样的结构: 结构{ uint32_t的一个; uint16_t B: uint16_t℃; uint16_t D组; uint8_t有ê; }等; 和我想比较两个相等上述结构中,尽可能以最快的方式。我看着英特尔内部函数向导,但无法找到一个比较整数,可用的选项主要是双打和单浮点矢量输入。 可能有人请告知最好的办法?我可以一个工会添加到我的结构,
..