sse

    3热度

    1回答

    在我目前正在研究的项目中,我经常需要在可以插入元素的已排序数组中找到尽可能最低的索引(如C++中的std :: lower_bound) 。 使用SSE加速我的算法似乎很有吸引力,因为我使用的uint32数组的大小通常是处理器高速缓存行的大小。 我从来没有使用SSE指令,所以我无法弄清楚这个函数的SSE实现是什么样子。请给出提示,以帮助我用SSE优化写出来。

    -1热度

    2回答

    以下循环执行数百次。 elma and elmc are both unsigned long (64-bit) arrays, so is res1 and res2. unsigned long simdstore[2]; __m128i *p, simda, simdb, simdc; p = (__m128i *) simdstore; for (i = 0; i < _polyl

    12热度

    2回答

    按值对齐类型或结构传递对齐类型不适用于某些实现。这打破了STL容器,因为一些方法(如调整大小)通过价值取得它们的参数。 我用Visual Studio 2008运行一些测试,并不完全确定何时以及如何通过值传递失败。我主要关心的是功能foo。它似乎工作正常,但可能是内联或其他巧合的结果?如果我将其签名更改为void foo(const __m128 &)? 非常感谢您的输入。谢谢。 struct A

    3热度

    1回答

    两个相关的问题。 这是我的代码需要处理大量数据。它在内部循环内完成,性能很重要。 将__int32和数组转换为双精度(或将__m128i转换为两个__m128d)。 将浮点数和浮点数转换为双精度(或将__m128转换为两个__m128d)。 基本上,我需要函数具有以下签名: void convert_int_to_double(__int32 const * input, double * out

    6热度

    3回答

    我想正常化一个4D矢量。 我的第一个尝试是使用SSE内在函数 - 这为我的向量算法提供了2倍的速度提升。 这里是基本的代码:(v.v4是输入)(用GCC)(所有这一切都是内联) //find squares v4sf s = __builtin_ia32_mulps(v.v4, v.v4); //set t to square v4sf t = s; //add the 4 squares

    3热度

    5回答

    我正在做一些sse vector3数学。 一般来说,我将我的向量的第4位设置为1.0f,因为这使得我的大部分数学工作,但有时我需要将其设置为0.0f。 所以我想改变的东西,如: (32.4f,21.2f,-4.0f,1.0F)至(32.4f,21.2f,-4.0f,0.0F) 我想知道这样做的最好方法是: 转换为4个浮点,设置4浮动,发回SSE XOR置寄存器,然后做2个SHUFPS 是否所有的S

    2热度

    1回答

    我有一个Makefile,我想解析/ proc/cpuinfo中的标志,并建立一个可用的sse指令集列表以传递给gcc(-msse -msse2等)。这是我想出来的,到目前为止它做最好的,不开心的与所有: DUMM = $(foreach tag,$(SSE_TAGS), ifneq ($(shell cat /proc/cpuinfo | grep $(tag) | wc -l)

    0热度

    2回答

    在parallel_中使用SSE2是一个好主意吗? 由于SSE2寄存器的数量有限,是否会导致性能方面的损失? 每个CPU芯片都有自己的SSE2寄存器吗?

    3热度

    2回答

    GCC是否可以使用结构或类作为SSE指令的向量类型? 类似: typedef struct vfloat __attribute__((vector_size(16))) { float x,y,z,w; } vfloat; ,而不是规范: typedef float v4sf __attribute__ ((vector_size(16))); union vfloat {

    11热度

    1回答

    假设我有一个数组: uint8_t arr[256]; 和元件包含16个字节, x_1, x_2, ... x_16 我想有效地填充一个 __m128i x 新__m128i元件 __m128i y 与来自arr取决于值x值,使得: y_1 = arr[x_1] y_2 = arr[x_2] . . . y_16 = arr[x_16] 的命令