相关疑难解决方法(0)

为什么没有2字节浮点数并且已经存在实现?

假设我真的被迫记忆并想要一个更小的范围(类似于短与int).着色器语言已经支持short具有精度一半的浮点(不只是来回转换为-1到1之间的值,也就是说,像这样返回一个浮点数:) int.是否存在2字节浮点数已经存在的实现?

我也有兴趣知道为什么没有2字节浮点数的任何(历史?)原因.

c++ floating-point 16-bit half-precision-float

26
推荐指数
4
解决办法
3万
查看次数

什么是打包、解包和扩展打包数据

我一直在研究英特尔内部函数,每个函数都处理打包或解包或扩展打包的整数、浮点数或双精度数。

似乎这个问题应该在互联网上的某个地方得到回答,但我根本找不到答案。

那个包装物是什么?

sse simd cpu-architecture avx avx2

12
推荐指数
1
解决办法
2622
查看次数

内在函数中后缀“x”的含义,如“_mm256_set1_epi64x”

在某些内在函数中,它们使用后缀,x_mm256_set1_epi64x. 它的意义是什么?作为参考,_mm256_set1_epi32没有这个后缀。

x86 x86-64 simd vectorization intrinsics

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

硬件 SIMD 向量指针和相应类型之间的“reinterpret_cast”是否是未定义的行为?

reinterpret_castafloat*到 a__m256*float通过不同的指针类型访问对象是否合法?

constexpr size_t _m256_float_step_sz = sizeof(__m256) / sizeof(float);
alignas(__m256) float stack_store[100 * _m256_float_step_sz ]{};
__m256& hwvec1 = *reinterpret_cast<__m256*>(&stack_store[0 * _m256_float_step_sz]);

using arr_t = float[_m256_float_step_sz];
arr_t& arr1 = *reinterpret_cast<float(*)[_m256_float_step_sz]>(&hwvec1);
Run Code Online (Sandbox Code Playgroud)

hwvec1arr1依赖undefined behaviors 吗?

它们是否违反了严格的别名规则?[基本.lval]/11

或者只有一种定义的内在方式:

__m256 hwvec2 = _mm256_load_ps(&stack_store[0 * _m256_float_step_sz]);
_mm256_store_ps(&stack_store[1 * _m256_float_step_sz], hwvec2);
Run Code Online (Sandbox Code Playgroud)

神箭

c++ x86 intrinsics undefined-behavior language-lawyer

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