intrinsics相关内容

_mm512_load_epi32和_mm512_load_si512有什么区别?

《英特尔内在函数指南》仅声明_mm512_load_epi32: 将512位(由16个压缩的32位整数组成)从内存加载到dst 和_mm512_load_si512: 将512位整数数据从内存加载到dst 这两者之间有什么区别?文档不清楚. 解决方案 没有区别,只是愚蠢的冗余命名.为清楚起见,请使用_mm512_load_si512.谢谢,英特尔.像往常一样,更容易 ..
发布时间:2020-11-30 04:52:11 其他开发

C ++编译器可以消除未读取的易失本地变量吗

说,我有以下代码: int f() { volatile int c; c=34; return abc(); } 从未读取 volatile int c .但是它被标记为 volatile ,编译器可以完全消除它吗?我在Visual C ++ 2010中进行的测试显示出矛盾的结果.在VC ++中,如果启用优化(最大化速度),则上述函数将包含一个名为c的局部变量(通过查看生成 ..
发布时间:2020-11-30 04:52:08 C/C++开发

上证所新增中

假设我有两个向量,分别由两个类型为double的数组表示,每个数组的大小为2.我想添加相应的位置.因此,假设向量i0和i1,我想将i0[0] + i1[0]和i0[1] + i1[1]加在一起. 因为类型是double,所以我需要两个寄存器.诀窍是将i0[0]和i1[0]以及i0[1]和i1[1]放入另一个,然后将寄存器本身添加进去. 我的问题是,如果我依次调用_mm_load_ps( ..
发布时间:2020-11-30 04:52:04 其他开发

用于比较(_mm_cmpeq_ps)和分配操作的SSE内在函数

我已经开始使用SSE优化代码.本质上,它是一个光线跟踪器,通过将坐标存储在__m128数据类型x,y,z(四根射线的坐标按轴分组)中,一次处理四根射线.但是我有一个分支语句,可以防止被零除,但我似乎无法转换为SSE.依次为: const float d = wZ == -1.0f ? 1.0f/( 1.0f-wZ) : 1.0f/(1.0f+wZ); 其中wZ是z坐标,并且需要对所有四条 ..
发布时间:2020-11-30 04:49:57 C/C++开发

为什么不直接访问__m128i字段?

我正在MSDN上阅读此内容,并且上面写着 您不应直接访问__m128i字段.但是,您可以在调试器中查看这些类型. __m128i类型的变量映射到XMM [0-7]寄存器. 但是,它没有解释原因.为什么?例如,以下是“坏": void func(unsigned short x, unsigned short y) { __m128i a; a.m128i_i64[ ..
发布时间:2020-11-30 04:49:50 C/C++开发

使用C#Vector< T> SIMD查找匹配元素的索引

使用C#的Vector,我们如何最有效地向量化查找集合中特定元素的索引的操作? 作为约束,集合将始终是整数基元的Span,并且最多包含1个匹配元素. 我想出了一个看起来还不错的解决方案,但是我很好奇我们能否做得更好.方法是: 在每个插槽中创建一个仅包含目标元素的Vector. 在输入集向量和上一步中的向量之间使用Vector.Equals(),以得到一个掩码, ..
发布时间:2020-11-30 04:48:42 C#/.NET

确定英特尔ID指南中列出的CPUID

在Intel Intrinsics Guide中,一些Intrinsics的底部都有“延迟和吞吐量信息",列出了多个CPUID的性能. 例如,《内在指南》中的表对于内在_mm_hadd_pd如下所示: CPUID(s) Parameters Latency Throughput 0F_03 ..
发布时间:2020-11-30 04:48:38 其他开发

为什么以及何时使用__noop?

我正在阅读 __noop ,而MSDN示例是 #if DEBUG #define PRINT printf_s #else #define PRINT __noop #endif int main() { PRINT("\nhello\n"); } 我看不到拥有一个空的宏会带来的好处: #define PRINT 生成的代码是相同的.使用__noop使其 ..
发布时间:2020-11-30 04:47:33 C/C++开发

SIMD和标量和标量双精度之间的区别

在实现SIMD支持时,我正在阅读英特尔的内在指南.我有些困惑,我的问题如下. __m128 _mm_cmpeq_ps (__m128 a, __m128 b)文档说,它用于比较压缩的单精度浮点数. “打包"是什么意思?在使用浮点值之前,是否需要进行打包? 对于双精度,有类似_mm_cmpeq_sd的内在函数,这意味着比较“较低"的双精度浮点元素.上下双精度元素是什么意思?是否可以使用它 ..
发布时间:2020-11-30 04:47:28 C/C++开发

什么是_mm_prefetch()本地提示?

内部指南仅说明了void _mm_prefetch (char const* p, int i): 从内存中将包含地址p的数据行提取到a 位置提示i指定的缓存层次结构中的位置. 您能否列出int i参数的可能值并解释其含义? 我找到了_MM_HINT_T0,_MM_HINT_T1,_MM_HINT_T2,_MM_HINT_NTA和_MM_HINT_ENTA,但是我不知道这是否是详 ..
发布时间:2020-11-30 04:47:26 C/C++开发

SIMD内部函数参考手册/教程?

我正在研究使用它们来提高某些代码的性能,但是似乎很难找到* mmintrin.h标头中定义的函数的好的文档,有人可以向我提供有关这些信息的指针吗? 编辑:对如何入门非常基础的教程特别感兴趣. 解决方案 可在Intel Intrinsics Guide . com/en-us/articles/intel-intrinsics-guide"rel =" noreferrer“> htt ..
发布时间:2020-11-30 04:46:24 其他开发

C ++ SSE SIMD框架

有人知道开源C ++ x86 SIMD内部函数库吗? 英特尔在其集成的性能基元库中提供了我所需要的,但是由于遍布各地的版权,我无法使用它. 编辑 我已经知道编译器提供的内在函数.我需要一个方便的界面来使用它们. 解决方案 看看 libsimdpp 仅标头的C ++ SIMD包装器图书馆. 该库通过单个接口支持多个指令集:SSE2,SSE3,SSSE3,SSE4.1, ..
发布时间:2020-11-30 04:46:21 C/C++开发

将int64_t移到AVX2 __m256i向量的高四倍数

这个问题类似于[1].但是,我不太了解它是如何解决使用GPR插入到ymm的高倍数的.另外,我希望该操作不使用任何中间内存访问. 可以使用AVX2或更低版本(我没有AVX512)吗? [1] 解决方案 我的回答没有显示出这样做的方法,因为如果没有AVX512F进行掩蔽广播(例如, vpbroadcastq zmm0{k1}, rax).但是使用暂存寄存器实际上并没有那么糟糕,它的成本与 ..
发布时间:2020-11-30 04:46:18 C/C++开发

_mm_extract_epi8(...)以非文字整数作为参数的内在函数

我最近一直在使用SSE固有的int _mm_extract_epi8 (__m128i src, const int ndx),根据参考文献“从索引选择的压缩整数数组元素中提取整数字节".这正是我想要的. 但是,我通过_m128i上的_mm_cmpestri确定索引,该索引执行具有显式长度的字符串数据的打包比较并生成索引.该索引的范围是0..16,其中0..15表示有效索引,而16表示未找到 ..
发布时间:2020-11-30 04:45:16 C/C++开发

_mm_cvtsd_f64类似物,用于更高阶的浮点

我在玩SIMD,想知道为什么没有类似_mm_cvtsd_f64的类来从__m128d引出高阶浮点. GCC 4.6+有一个扩展,可以很好地实现此目的: __m128d a = ...; double d1 = a[0]; double d2 = a[1]; 但是在较旧的GCC(即4.4.)上,我唯一能解决的方法是使用__builtin_ia32_vec_ext_v2df定义自己的模 ..
发布时间:2020-11-30 04:45:13 C/C++开发