相关疑难解决方法(0)

SSE入门

我想了解有关使用SSE的更多信息.

除了明显阅读英特尔®64和IA-32架构软件开发人员手册之外,还有哪些方法可以学习?

主要是我有兴趣使用GCC X86内置函数.

c x86 gcc sse simd

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

C - 如何使用GCC SSE向量扩展访问向量元素

通常我使用以下类型处理3D矢量:

typedef vec3_t float[3];
Run Code Online (Sandbox Code Playgroud)

使用smth初始化向量.喜欢:

vec3_t x_basis = {1.0, 0.0, 0.0};
vec3_t y_basis = {0.0, 1.0, 0.0};
vec3_t z_basis = {0.0, 0.0, 1.0};
Run Code Online (Sandbox Code Playgroud)

并使用smth访问它们.喜欢:

x_basis[X] * y_basis[X] + ...
Run Code Online (Sandbox Code Playgroud)

现在我需要一个使用SSE指令的矢量算术.我有以下代码:

typedef float v4sf __attribute__ ((mode(V4SF)))
int main(void)
{
    v4sf   a,b,c;
    a = (v4sf){0.1f,0.2f,0.3f,0.4f};
    b = (v4sf){0.1f,0.2f,0.3f,0.4f};
    c = (v4sf){0.1f,0.2f,0.3f,0.4f};
    a = b + c;
    printf("a=%f \n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC支持这种方式.但是......首先,它给了我0.00000的结果.其次,我无法访问这些向量的元素.我的问题是:我如何访问这些载体的元素?我需要smth.像[0]访问X元素,[1]访问Y元素等

PS:我使用以下代码编译此代码:

gcc -msse testgcc.c -o testgcc
Run Code Online (Sandbox Code Playgroud)

gcc sse

9
推荐指数
3
解决办法
8614
查看次数

如何使用_mm_extract_ps SSE GCC instrinc函数在C/C++中将hex float转换为float

我正在为二维卷积编写SSE代码,但SSE文档非常稀疏.我正在使用_mm_dp_ps计算点积并使用_mm_extract_ps来获得点积结果,但_mm_extract_ps返回表示浮点数的十六进制,我无法弄清楚如何将此十六进制浮点数转换为常规浮点数.我可以使用返回浮点数的__builtin_ia32_vec_ext_v4sf,但我想保持与其他编译器的兼容性.

_mm_extract_ps (__m128 __X, const int __N)
{
  union { int i; float f; } __tmp;
  __tmp.f = __builtin_ia32_vec_ext_v4sf ((__v4sf)__X, __N);
  return __tmp.i;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

感谢一点帮助.

OpenSUSE 11.2
GCC 4.4.1
C++
编译器选项
-fopenmp -Wall -O3 -msse4.1 -march = core2
链接器选项
-lgomp -Wall -O3 -msse4.1 -march = core2

c++ floating-point hex gcc sse

6
推荐指数
1
解决办法
1965
查看次数

标签 统计

gcc ×3

sse ×3

c ×1

c++ ×1

floating-point ×1

hex ×1

simd ×1

x86 ×1