相关疑难解决方法(0)

在x86上做水平浮点矢量和的最快方法

你有一个三(或四)个浮点数的向量.总结它们的最快方法是什么?

SSE(movaps,shuffle,add,movd)总是比x87快吗?SSE4.2中的水平加法说明值得吗?移动到FPU的成本是多少,然后是faddp,faddp?什么是最快的特定指令序列?

"尝试安排事情,这样你可以一次总结四个向量"将不被接受作为答案.:-)

floating-point optimization x86 assembly sse

41
推荐指数
4
解决办法
2万
查看次数

通过索引获取__m128的成员?

我有一些代码,最初是由MSVC工作人员给我的,我正试图让它在Clang上工作.这是我遇到麻烦的功能:

float vectorGetByIndex( __m128 V, unsigned int i )
{
    assert( i <= 3 );
    return V.m128_f32[i];
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

Member reference has base type '__m128' is not a structure or union.
Run Code Online (Sandbox Code Playgroud)

我环顾四周,发现Clang(也许是GCC)在将__m128视为结构或联合时遇到了问题.但是我还没有找到一个直接的答案,我怎么能得到这些价值.我已经尝试过使用下标运算符而无法做到这一点,我已经浏览了大量的SSE内在函数列表并且尚未找到合适的函数.

c++ sse simd clang intrinsics

25
推荐指数
3
解决办法
1万
查看次数

打印__m128i变量

我正在尝试学习使用内在函数进行编码,下面是一个添加代码的代码

compiler used: icc

#include<stdio.h>
#include<emmintrin.h>
int main()
{
        __m128i a = _mm_set_epi32(1,2,3,4);
        __m128i b = _mm_set_epi32(1,2,3,4);
        __m128i c;
        c = _mm_add_epi32(a,b);
        printf("%d\n",c[2]);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下错误:

test.c(9): error: expression must have pointer-to-object type
        printf("%d\n",c[2]);
Run Code Online (Sandbox Code Playgroud)

如何在c类型变量中打印值__m128i

c assembly sse simd intrinsics

21
推荐指数
3
解决办法
2万
查看次数

寻址非整数地址和sse

我正在尝试使用sse加速我的代码,以下代码运行良好.基本上__m128变量应该指向一行中的4个浮点数,以便一次执行4个操作.

此代码等同于计算c[i]=a[i]+b[i]i03.

float *data1,*data2,*data3
// ... code ... allocating data1-2-3 which are very long.
__m128* a = (__m128*) (data1);
__m128* b = (__m128*) (data2);
__m128* c = (__m128*) (data3);
*c = _mm_add_ps(*a, *b);
Run Code Online (Sandbox Code Playgroud)

但是,当我想要移动我使用的数据(见下文)时,为了c[i]=a[i+1]+b[i]使用ifrom 0来计算3,它会在执行时崩溃.

__m128* a = (__m128*) (data1+1); // <-- +1
__m128* b = (__m128*) (data2);
__m128* c = (__m128*) (data3);
*c = _mm_add_ps(*a, *b);
Run Code Online (Sandbox Code Playgroud)

我的猜测是,它与__m128为128位且浮点数据为32位这一事实有关.因此,128位指针可能无法指向不能被128整除的地址.

无论如何,你知道问题是什么以及如何绕过它吗?

c c++ pointers sse

0
推荐指数
1
解决办法
197
查看次数

标签 统计

sse ×4

assembly ×2

c ×2

c++ ×2

intrinsics ×2

simd ×2

clang ×1

floating-point ×1

optimization ×1

pointers ×1

x86 ×1