simd相关内容

_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++开发

使用__m512的水平添加(AVX512)

如何有效地对512位AVX寄存器中的浮点数进行水平加法(即,将单个向量中的项相加)?对于128位和256位寄存器,可以使用_mm_hadd_ps和_mm256_hadd_ps完成,但没有_mm512_hadd_ps.英特尔内部函数指南文档_mm512_reduce_add_ps.它实际上并不对应于一条指令,但是它的存在表明存在一种最佳方法,但是它似乎没有在最新的GCC快照随附的头文件中定义,我无法 ..
发布时间:2020-11-30 04:42:52 其他开发

将__m256i存储为整数

如何将__m256i数据类型存储为整数? 我知道对于花车来说: _mm256_store_ps(float *a, __m256 b) 第一个参数是输出数组. 对于仅发现的整数: _mm256_store_si256(__m256i *a, __m256i b) 其中两个参数均为__m256i数据类型. 做这样的事情够了吗 int * X = (int* ..
发布时间:2020-11-30 04:40:39 其他开发

将8个16位SSE寄存器转换为8位数据

考虑到我有一个16位数据的SSE阵列: {1,2,3,4,5,6,7,8} 现在,我需要通过在前8个字节中仅存储16位数据的低字节来将此SSE数组转换为8位数据,例如: {1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0}. 是否有任何SSE指令来执行此操作? 解决方案 如 @harold 所述,您可以使用 pshufb aka轻松完成此操作_mm_s ..
发布时间:2020-11-29 20:10:20 其他开发

在硬件不足的情况下编码

我目前正在使用C ++中的SIMD指令进行编码,并尝试使用IDE在实时编码时显示错误,拼写错误等.问题是,我使用的是AVX512指令,我的硬件不支持该指令,仅使用我用于编译的服务器.有没有一种方法可以在IDE中进行带错误检查的代码,而不会受到AVX512功能的干扰而妨碍编译器? 解决方案 首先,您不需要桌面来支持AVX512来编辑源代码并编译需要AVX512的可执行文件.如果您可以在本地编 ..
发布时间:2020-11-26 02:58:37 C/C++开发

x86 SIMD内部函数的头文件

哪个头文件提供了不同的x86 SIMD指令集扩展(MMX,SSE,AVX等)的内在函数?在网上找不到这样的列表似乎是不可能的.如果我错了,请纠正我. 解决方案 这几天,您通常应该只包含.它包含了一切. GCC和clang会阻止您将内部函数用于您在编译时尚未启用的指令(例如,使用-march=native或-mavx2 -mbmi2 -mpopcnt -mfm ..
发布时间:2020-11-22 19:50:28 其他开发

在较高的优化级别上,AVX2 simd相对于标量的性能相对较差

我正在学习和使用SIMD函数,并编写了一个简单的程序,该程序将其可以在 1秒中运行的向量加法指令的数量与普通标量加法进行了比较. 我发现SIMD在较低的优化级别上表现相对较好,而在较高的优化级别上则始终表现较差,并且我想知道原因,我同时使用了MSVC和gcc,这是同一回事.以下结果来自 Ryzen 7 CPU.我也在 Intel 平台上进行了测试,也几乎是相同的故事. #include ..
发布时间:2020-11-13 00:02:23 C/C++开发

gcc的__builtin_cpu_supports是否检查操作系统支持?

GCC编译器提供了一组内置来测试某些处理器功能,例如某些指令集的可用性.但是,根据此线程我们也可能知道某些操作系统可能未启用某些cpu功能.所以问题是:__builtin_cpu_supports内部函数是否还会检查OS是否已启用某些处理器功能? 解决方案 否. 我通过在Linux内核引导选项中添加noxsave来禁用Skylake系统上的AVX.当我执行cat /proc/cpui ..
发布时间:2020-11-12 23:44:12 其他开发

矩阵乘法的自动向量化

我对SIMD还是很陌生,想尝试看看我是否可以让GCC对我进行简单的操作向量化. 所以我查看了这篇文章,并希望做更多或更少的事情同样的事情. (但对于KabyLake处理器,在Linux 64位上为gcc 5.4.0) 我基本上具有此功能: /* m1 = N x M matrix, m2 = M x P matrix, m3 = N x P matrix & output */ ..
发布时间:2020-11-12 23:41:18 其他开发

SIMD/SSE:如何检查所有矢量元素都不为零

我需要检查所有矢量元素是否为非零.到目前为止,我找到了以下解决方案.有一个更好的方法吗?我正在Linux/x86_64上使用gcc 4.8.2,说明最高为SSE4.2. typedef char ChrVect __attribute__((vector_size(16), aligned(16))); inline bool testNonzero(ChrVect vect) { ..
发布时间:2020-11-12 23:25:32 C/C++开发

错误:在C中强制转换用户定义的数据类型

这是我的问题的更简单视图,我想将浮点值转换为已定义的类型v4si(我想使用SIMD操作进行优化.)请帮助将浮点/双精度值转换为已定义的类型. #include typedef double v4si __attribute__ ((vector_size (16))); int main() { double stoptime=36000; float ..
发布时间:2020-11-12 22:41:12 其他开发

使用GCC时如何禁用向量化?

我正在使用以下命令编译代码: gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math 所有优化均已启用. 但是我想在保持其他优化的同时禁用向量化. 解决方案 大多数GCC开关可与no前缀一起使用以禁用其行为.尝试使用-fno-tree-vectorize(在命令行上的-O3之后). ..
发布时间:2020-11-12 22:36:28 其他开发

英特尔x86 SSE SIMD指令入门

我想了解有关使用 SSE 的更多信息. 除了可以轻松阅读英特尔®64和IA-32之外,还有哪些学习方法架构软件开发人员手册? 主要我有兴趣使用解决方案 首先,我不建议您使用内置函数-它们不可移植(跨同一体系结构的编译器). 使用GCC 内部函数很简单-就像正常的函数调用一样: #include // portable to all x86 c ..
发布时间:2020-11-12 22:30:30 其他开发

vec_sld的字节序是否敏感?

我正在使用带内核加密的PowerPC计算机。我无法使用内置功能将AES密钥扩展从大字节序移植到小字节序。大字节序有效,而小字节序无效。 以下算法是 IBM博客文章。我认为我将问题隔离到下面的第2行: typedef __vector unsigned char uint8x16_p8; uint8x64_p8 r0 = {0}; r3 = vec_perm(r1,r1,r ..
发布时间:2020-10-29 18:34:34 其他开发

SIMD用于浮动阈值操作

我想更快地进行一些矢量计算,并且我相信SIMD指令可以进行浮点比较和操作,操作如下: void func(const double * left,const double * right,double * res,const size_t size,const double th,const double drop){ for(size_t i = 0; i ..
发布时间:2020-10-25 23:51:55 C/C++开发

GPU / CUDA核心是SIMD的吗?

让我们采用 nVidia Fermi计算体系结构。它说: 第一个基于Fermi的GPU,实现了30亿个晶体管,具有多达512个CUDA内核。 CUDA内核每个线程的每个时钟执行一个浮点数或整数指令。 512个CUDA内核以16个SM(每个32个内核)进行组织。 [...] 每个CUDA处理器都具有完整的流水线整数算法。逻辑单元(ALU)和浮点单元(FPU)。 [...] ..
发布时间:2020-10-13 00:54:03 其他开发

GPGPU编程仅允许执行SIMD指令吗?

GPGPU编程仅允许执行SIMD指令吗? 如果是这样,那么重新编写一个 设计为在通用CPU上运行以在GPU上运行的算法,一定是一项繁琐的任务?算法中是否还有可以转换为SIMD架构的 模式? 解决方案 嗯,这不太准确GPGPU仅支持SIMD执行。许多GPU具有一些非SIMD组件。但是,总的来说,要充分利用GPU,您需要运行SIMD代码。 但是,您并不一定要编写SIMD指令。即GP ..
发布时间:2020-10-11 00:12:01 其他开发