相关疑难解决方法(0)

276
推荐指数
9
解决办法
16万
查看次数

英特尔SSE和AVX示例和教程

是否有用于学习英特尔SSE和AVX指令的优秀C/C++教程或示例?

我在微软MSDN和英特尔网站上发现很少,但从基础知识中理解它会很棒.

sse intel vectorization avx

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

使用带有gcc的SSE指令而不使用内联汇编

我有兴趣使用x86-64与gcc的SSE向量指令,并且不想为此使用任何内联汇编.有没有办法在C中做到这一点?如果是这样,有人可以举个例子吗?

c gcc sse x86-64 simd

12
推荐指数
3
解决办法
8834
查看次数

英特尔SSE:为什么`_mm_extract_ps`返回`int`而不是`float`?

为什么_mm_extract_ps返回int而不是float

float从C中的XMM寄存器读取单个数据的正确方法是什么?

或者更确切地说,一种不同的方式是:_mm_set_ps指令相反的是什么?

c sse simd

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

如何使用_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
查看次数

simd矢量访问

我是SIMD编程的新手,我有一些基本的问题,我现在看了几天后似乎无法弄清楚.

我想要优化的代码基本上是一个简单但很大的算术公式,自动分析coude并行计算独立的乘法/加法应该相当简单,但我读到自动向量化仅适用于循环.

我已多次阅读,因为应该不惜一切代价避免通过联合或其他方式访问矢量中的单个元素,而应该替换为_mm_shuffle_pd(我只处理双打)...

我知道这是一个非常基本的问题,但我似乎并不知道如何将__m128d向量的内容存储为双精度而不将其作为联合访问.此外,与标量代码相比,这样的操作能否带来任何性能提升?

union {
  __m128d v;
  double d[2];
} vec;
union {
  __m128d v;
double d[2];
} vec2;

vec.v = index1;
vec2.v = index2;
temp1 = _mm_mul_pd(temp1, _mm_set_pd(bvec[vec.d[1]], bvec[vec2[1]]));
Run Code Online (Sandbox Code Playgroud)

此外,两个工会看起来很丑陋,但在使用时

union dvec {
  __m128d v;
  double d[2];
} vec;
Run Code Online (Sandbox Code Playgroud)

试图将indexX声明为dvec,编译器抱怨dvec未声明

c x86 simd intrinsics sse2

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

如何使用x86intrin.h

在我的一个应用程序中,我需要有效地对长数据流中的位进行解交织。理想情况下,我想使用BMI2 pext_u32()和/或pext_u64()x86_64内部指令(如果可用)。我在x86intrin.hGCC)上搜索了互联网上的文档,但在该主题上找不到太多东西;因此,我要求StackOverflow上的专家帮助我。

  1. 在哪里可以找到有关如何使用函数的文档x86intrin.h
  2. gcc的实现pext_*()背后是否已经有代码可以使用,还是我需要自己编写后备代码(用于条件编译)?
  3. 如果目标不支持内在函数,是否有可能编写一个二进制文件,该二进制文件会自动退回到备用实现?如果是这样,怎么做?
  4. 是否存在一种已知的编程模式,当启用并启用优化时,GCC会识别该模式并将其自动转换为?pext_*()-mbmi2

c gcc x86-64 intrinsics bmi

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

标签 统计

c ×4

sse ×4

gcc ×3

simd ×3

intrinsics ×2

x86-64 ×2

avx ×1

bmi ×1

c++ ×1

floating-point ×1

hex ×1

intel ×1

optimization ×1

sse2 ×1

terminology ×1

vectorization ×1

x86 ×1