intrinsics相关内容

如何使用_mm_clflushopt函数编译程序?错误:内联失败

我在Google上搜索了很多,但无法使用 _mm_clflushopt 函数成功编译C程序。 _mm_clflush 可以正常工作,但我也希望能够尝试优化版本。我检查了cpu标志,其中包括clflushopt。我同时使用emmintrin.h和immintrin.h这两个库,但是在编译时我仍然收到“对_mm_clflushopt的未定义引用”错误。我在Linux终端中运行gcc -o progpr ..
发布时间:2020-10-06 20:57:00 其他开发

等价于其他编译器中的gcc / clang的march = native?

我想知道是否还有gcc和clang以外的其他编译器提供类似 -march = native 的选项,如果有的话,该选项是什么? 。我已经从另一个问题(自动为Microsoft的编译器没有该选项的Visual c ++最佳可用平台(等效于gcc的-march = native)(除非隐含在激活SSE2指令集的选项中,直到并排除了AVX以及更高版本) 用例很简单:提供cmake设置,因此用户可以 ..

使用clang内置函数与标准函数的好处

Clang和GCC定义了一堆内置函数,我将在这里使用其余示例: __ builtin_sqrt(x) 但是,标准C99在 math.h sqrt(x) 用clang为已经存在的方法定义内建函数有什么意义?我以为sqrt之类的常用数学函数会被后端优化,因此实际上并不需要内置函数。出于明显的原因,此内建函数比标准c的移植性差。 解决方案 ..
发布时间:2020-10-01 22:43:51 C/C++开发

如何将C ++类转换为固有类型

基本C ++类问题: 我目前有简单的代码,看起来像这样: typedef int sType; int array [100]; int test(sType s) { return array [(int)s]; } 我想要的是将“ sType”转换为类,这样“ return array [(int)s]”行不需要更改。例如(伪代码) ..
发布时间:2020-09-29 22:17:07 C/C++开发

在constexpr评估上分支/在constexpr上重载

设置: 我有一个使用SIMD内部函数的函数,想在某些constexpr函数中使用它。 为此,我需要将其设为constexpr。但是,SIMD内部函数未标记为constexpr,并且编译器的常量评估器无法处理它们。 我尝试用功能相同的C ++ constexpr实现替换SIMD内在函数。该函数在运行时变慢了3.5倍,但是我可以在编译时使用它(是吗?)。 问题 >: 如何 ..
发布时间:2020-09-28 00:57:12 C/C++开发

什么是内在函数?

任何人都可以解释它们是什么,为什么我需要它们?如果需要使用内在函数,我应该构建什么样的应用程序? 解决方案 通常,“ intrinsics”是指所构建的函数-in-即编译器可以/将生成内联而不是在库中调用实际函数的大多数标准库函数。例如,对于x86,像这样的调用: memset(array1,10,0)可以像这样编译: mov ecx,10 xor eax,eax mov ..
发布时间:2020-09-27 05:14:10 C/C++开发

中止的xbegin事务是否可以恢复xbegin开始时存在的堆栈上下文?

我有兴趣在XBEGIN()和XEND()函数中封装事务xbegin和xend到静态汇编库中。但是我不清楚给定一个来自其他堆栈级别(更高或更低)的xabort,如何将堆栈(或是否)还原到原始xbegin调用状态。换句话说,动态堆栈上下文(包括中断影响)是否作为事务的另一部分进行管理和回滚? VC ++ 2010需要这种汇编器方法没有_xbegin()和_xend()内部函数受支持或不可用的内部 ..
发布时间:2020-09-27 05:01:07 C/C++开发

如何在不使用运行时库的情况下使用VC ++内部函数

我参与了其中的一种挑战,即您尝试生成尽可能小的二进制文件,因此我在没有C或C ++运行时库(RTL)的情况下构建程序 。我没有链接到DLL版本或静态版本。我什至没有 #include 头文件。我的工作正常。 某些RTL函数(例如 memset())可能很有用,所以我尝试了添加我自己的实现。它在Debug版本中运行良好(即使在编译器生成对 memset()的隐式调用的地方)。但是在Releas ..
发布时间:2020-09-27 02:14:32 C/C++开发

如何用gcc或clang模拟_mm256_loadu_epi32?

Intel的内部指南列出了内部 _mm256_loadu_epi32 : _m256i _mm256_loadu_epi32( void const * mem_addr); / * 指令:vmovdqu32 ymm,m256 CPUID标志:AVX512VL + AVX512F 说明 从以下位置加载256位(由8个压缩的32位整数组成)记忆到dst。 mem_addr不需 ..
发布时间:2020-09-27 01:58:18 C/C++开发

_umul128在Windows 32位上

在Visual C ++中,将Windows 32位作为目标时_umul128是未定义的. 以Win32为目标时,如何将两个无符号的64位整数相乘? 该解决方案仅需要在针对Windows 32位的Visual C ++ 2017上运行. 解决方案 我找到了以下代码(来自static inline uint64_t __umul128(uint64_t multiplier, uint64_ ..
发布时间:2020-09-20 20:20:04 其他开发

使用SIMD指令时,为什么此简单的C ++ SIMD基准测试运行速度较慢?

我正在考虑编写SIMD向量数学库,因此,作为一个快速的基准测试,我编写了一个程序,该程序进行1亿个(按4个浮点数)矢量逐元素乘法,并将它们相加在一起.对于我的经典非SIMD变体,我只是制作了一个具有4个浮点数的结构,并编写了自己的乘法函数"multiplyTwo",该函数将两个这样的结构元素明智地相乘,然后返回另一个结构.对于我的SIMD版本,我使用了"immintrin.h"以及__m128,_ ..
发布时间:2020-09-15 05:49:49 C/C++开发

使用SSE2编译具有AVX架构的另一个源是否安全?

我使用的是AVX内部函数,但是由于基于_mm256的内部函数以外的所有内容,MSVC都会生成非vex指令,因此我需要使用/arch:AVX编译整个源代码.该项目的其余部分使用/arch:SSE2进行编译,因此它可以在较旧的CPU上运行,并且我正在手动检查AVX是否可用. 包含AVX代码的源(为AVX编译)包括一个庞大的模板库和其他内容,仅包含定义.编译器/链接器是否有可能决定使用AVX指令实 ..
发布时间:2020-09-15 05:48:41 其他开发

在AVX内部函数中使用xmm参数

是否可以将xmm寄存器参数与AVX内部函数(_mm256_**_**)一起使用? 我的代码要求使用vecter整数运算(用于加载和存储数据)以及矢量浮点运算.整数代码是使用SSE2内部函数编写的,以便与较旧的CPU兼容,而浮点数是使用AVX编写的,以提高速度(还有SSE代码分支,因此不建议这样做). 当前,除了使用编译器标志自动将所有SSE指令转换为VEX编码版本外,还有什么方法可以使 ..
发布时间:2020-09-15 05:48:27 其他开发

将两个32位整数的向量相乘,生成一个32位结果元素的向量

将两个_mm256i寄存器的每个32位条目彼此相乘​​的最佳方法是什么? _mm256_mul_epu32不是我想要的,因为它会产生64位输出.我希望每个32位输入元素都具有32位结果. 此外,我确定两个32位值的乘法不会溢出. 谢谢! 解决方案 您需要_mm256_mullo_epi32()内在函数.摘自Intel出色的在线内在函数指南: 简介 __m256 ..
发布时间:2020-09-15 05:45:57 其他开发