simd相关内容

SIMD 编程语言

在过去的几年里,我一直在做大量的 SIMD 编程,而且大部分时间我一直依赖编译器的内在函数(例如用于 SSE 编程的那些)或编程汇编来获得真正漂亮的东西.然而,到目前为止,我几乎找不到任何内置支持 SIMD 的编程语言. 现在显然有一些着色器语言,例如 HLSL、Cg 和 GLSL,它们对这类东西有本机支持,但是,我正在寻找至少能够在没有自动向量化的情况下编译为 SSE 但具有内置支持的东西 ..
发布时间:2021-06-21 20:22:18 其他开发

取消引用 XMM 寄存器中的指针(收集)

如果我将一些指针或类似指针的值打包到 SSE 或 AVX 寄存器中,是否有任何特别有效的方法将它们取消引用,进入另一个这样的寄存器?(“特别高效"的意思是“比仅使用内存存储值更高效".)有没有任何方法可以在不将寄存器的中间副本写入内存的情况下取消对它们的引用? 编辑澄清:这意味着,假设 32 位指针和 SSE,使用 XMM 寄存器的四个部分一次索引到四个任意内存区域,并将四个结果一次返回到另 ..
发布时间:2021-06-18 19:59:42 其他开发

用 SIMD 指令重写 memcpy/memcmp/... 有意义吗?

在大型软件中用 SIMD 指令重写 memcpy/memcmp/... 有意义吗? 如果是这样,为什么 GCC 默认不为这些库函数生成 SIMD 指令? 另外,SIMD还有什么可以改进的功能吗? 解决方案 是的,使用 SSE 指令,这些函数的速度要快得多.如果您的运行时库/编译器内在包含优化版本就好了,但这似乎并不普遍. 我有一个自定义 SIMD memchr,它比库版本 ..
发布时间:2021-06-15 19:20:34 其他开发

从二阶导数计算的曲线的 SIMD 优化

这个问题真是好奇. 我正在将一个例程转换为 SIMD 指令(我对 SIMD 编程还很陌生),并且在使用以下代码时遇到了问题: //参数:uint32_t 相电流;uint32_t 相位增量;uint32_t phase_increment_step;for (int i = 0; i 问题:假设 USEFUL_FUNC 有一个 SIMD 实现,我只是想计算一个正确的 phase_cur ..
发布时间:2021-06-12 20:50:32 C/C++开发

使用 OpenMP“for simd"在矩阵向量乘法中?

我目前正试图通过将 #pragma omp for 与 #pragma omp simd 结合起来,使我的矩阵向量乘法函数与 BLAS 相媲美,但事实并非如此与仅使用 for 构造相比,获得任何加速改进.如何使用 OpenMP 的 SIMD 构造正确矢量化内循环? vector dot(const matrix& A, const vector& x){断言(A.shape(1) == x.si ..
发布时间:2021-06-12 20:19:48 其他开发

AVX512-如何将所有设置的位右移?

如何将屏蔽寄存器的所有设置位向右移动?(到最下面的最低位置). 例如: __ mmask16 mask = _mm512_cmpeq_epi32_mask(vload,vlimit);//掩码= 1101110111011101 如果将所有设置的位右移,则会得到: 1101110111011101->0000111111111111 如何有效地做到这一点? 下面您可以看到 ..
发布时间:2021-05-16 19:51:45 其他开发

字节序如何与SIMD寄存器一起工作?

我正在使用整数和SSE,并且对于字节顺序如何影响将数据移入和移出寄存器感到非常困惑. 我的最初的,错误的,理解的 最初,我的理解如下.如果我有一个4字节整数的数组,由于x86体系结构是低位字节序的,因此内存的布局将如下所示: 0D 0C 0B 0A 1D 1C 1B 1A 2D 2C 2B 2A .... nD nC nB nA 其中字母 A , B , C 和 D 索引整数元 ..
发布时间:2021-05-04 19:51:09 其他开发

为什么浮点寄存器与通用寄存器不同

大多数体系结构都有一组不同的寄存器,用于存储常规整数和浮点数.从二进制存储的角度来看,将对象存储在正确的位置应该没关系吗?只是1和0,难道它们不能将相同的通用寄存器传送到浮点ALU中吗? SIMD(x64中为 xmm )寄存器能够存储浮点数和正整数,因此为什么同一概念不适用于常规寄存器? 解决方案 对于实际的处理器设计,要考虑的问题比“二进制存储的观点"要多得多. 例如,线长很 ..
发布时间:2021-04-24 21:09:14 其他开发

SIMD是什么意思?

我从《威廉·斯托林斯》(William Stallings)写的《操作系统内部和设计原理》一书中读到,GPU是针对多个数据的单指令,但我没有理解它的含义.我在google中搜索并得到了这个假设,我不确定它是对还是错,那就是: SIMD GPU意味着GPU仅处理一系列数据(例如游戏)上的一条指令,GPU仅负责游戏的图形表示,其余的计算由CPU完成,这是真的. 解决方案 在GPU的上下文 ..
发布时间:2021-04-24 21:08:32 其他开发

C语言中3D直接卷积实现的优化

对于我的项目,我已经编写了直接3D卷积的天真的C实现,并在输入上进行了定期填充.不幸的是,由于我是C语言的新手,因此性能不是很好...这是代码: int mod(int a,int b){//计算mod以获取定期填充的正确索引int r = a%b;返回r ..
发布时间:2021-04-24 19:50:58 其他开发

C ++ SIMD:按位和运算后存储uint64_t值

我正在尝试在两个 uint64_t 整数数组的元素之间进行按位& ,然后将结果存储在另一个数组中.这是我的程序: #include#include#includeint main(){uint64_t数据[200];uint64_t data2 [200];uint64_t data3 [200];__m128i * p ..
发布时间:2021-04-20 18:47:36 C/C++开发

avx2指令存储8个整数是什么?

我想将8个整数从 __ m256i 变量存储到8 x 32位 int s的数组中.我以为该指令是 _mm256_store_epi32 ,但是我收到一条错误消息,指出该指令甚至不存在! 解决方案 看看 ..
发布时间:2021-04-19 20:31:15 C/C++开发

SIMD和动态内存分配

可能重复: SSE,内在函数和对齐方式 我是SIMD编程的新手,所以请问一个明显的问题. 我做了一些实验,以至于想要将SIMD值存储在动态分配的结构中. 代码如下: struct SimdTest{__m128 m_simdVal;无效setZero(){__m128 tmp = _mm_setzero_ps();m_simdVal = tmp;// ..
发布时间:2021-04-19 19:44:09 C/C++开发

水平求SSE无符号字节向量的最快方法

我需要水平添加一个 __ m128i ,它是16个epi8值.XOP指令会使这个琐碎的事变得微不足道,但是我没有可用的那些指令. 当前方法是: hd = _mm_hadd_epi16(_mm_cvtepi8_epi16(sum),_mm_cvtepi8_epi16(_mm_shuffle_epi8(sum,swap))));hd = _mm_hadd_epi16(hd,hd);hd = ..
发布时间:2021-04-19 18:50:35 C/C++开发