intrinsics

    3热度

    1回答

    如何使用SSE内在函数将16位8位整数除以4(或将它们向右移2)?

    0热度

    1回答

    我正在使用OMNeT ++ 5.0,并且希望能够访问我的cpu上的英特尔内在功能。我宁愿使用64位版本而不是32位版本。举例: int i = _popcnt64(15); 我一直在阅读几年前(2013年)的一些帖子,指出OMNeT ++在32位中封装可执行文件无论如何。我将OMNeT ++配置为不使用clang,并且能够使_popcnt32()工作。 我希望有人来验证OMNeT ++是否仍然将所

    0热度

    1回答

    我将在Python中创建示例,因为我使用Python,但问题不在于Python。 可以说我想通过特定的值增加一个变量,使它保持在给定的边界。 所以对于增量和减量我有这两种功能: def up (a, s, Bmax): r = a + s if r > Bmax : return Bmax else : return r def down (a, s, Bmin)

    0热度

    1回答

    我想用内在算法计算1/x,并假设x是双精度。我想实现的计算如下: __inline__ double __attribute__((const)) rcp_d (double x) { double res; _mm_store_pd(&res, _mm_rcp_ps(_mm_load_pd(&x)) ); return res; }

    0热度

    1回答

    我得到一个奇怪的错误以下代码: #include <assert.h> #include <stdio.h> #include <immintrin.h> inline static double myfma(double x,double y, double z) { double r; // result

    0热度

    1回答

    我想弄清楚,什么是CPU等同于CUDA类型转换内部函数__double2loint,__double2hiint和__hiloint2double。 我猜_mm_cvttsd_si32可能相当于__double2loint(是否正确?),但我没有找到__double2hiint和__hiloint2double的等价物。有可能在C中实现这种功能的快速版本?

    5热度

    1回答

    我想使用内在函数来增加SIMD矢量的元素。最简单的方法似乎是1添加到每个元素,像这样: (注:vec_inc已被设置为1之前) vec = _mm256_add_epi16 (vec, vec_inc); 但没有任何特殊的指令来增加向量?像inc在this page?或者其他更简单的方法?

    1热度

    1回答

    根据this question我这次实现了水平加法5乘5和7乘7。它正确地完成工作,但速度不够快。 它能比它更快吗?我试图使用hadd和其他指令,但改进受到限制。举例来说,当我使用_mm256_bsrli_epi128时,它稍微好一点,但它需要一些额外的排列,因为车道而损坏了好处。所以问题是如何实施以获得更多的性能。相同的故事为9个元件等 这增加了水平方向5个元素并将结果放置在地方0,5,和10:

    2热度

    1回答

    我想交换两个256位向量A和B中的16位值。梦幻般的方法是找到一个内置指令来完成它。不幸的是,我找不到,我认为这项工作没有任何指示。诸如洗牌,置换,混合等指令保留或破坏目的地中的值。是什么我在寻找如下: vector A : |a0|a1|a2|a3|a4|a5|a6|a7||a8|a9|a10|a11|a12|a13|a14|a15| Vector B : |b0|b1|b2|b3|b4|b5

    6热度

    2回答

    我正在实现SSE类型之间的转换,并且发现对于SSE4.1之前的目标实现int8-> int64扩展转换非常麻烦。 直截了当的实现将是: inline __m128i convert_i8_i64(__m128i a) { #ifdef __SSE4_1__ return _mm_cvtepi8_epi64(a); #else a = _mm_unpacklo_epi8(a