为什么是这些特定的整数乘法?

2024-10-26

本文探讨了x86指令集中SIMD整数乘法运算的演变过程,作者分析了从MMX到SSE4.1等不同指令集扩展中新增的乘法指令,并根据指令的功能和性能推测了其可能的硬件实现方式。作者认为,早期的指令集设计精妙,但随着新指令的加入,硬件实现变得越来越复杂,可能不如直接使用32x32位乘法器更高效。

阅读更多
未分类 整数乘法

在值的中间插入0位

2024-10-25

本文探讨了如何在值的中间插入一个0位。作者首先介绍了在BC7解码器中遇到的问题,即需要在颜色索引中插入0位。作者提出了两种方法:第一种方法是将值分成高位和低位,然后将高位左移一位再合并;第二种方法是利用位掩码和加法操作,将值与自身的高位部分相加,实现插入0位的效果。作者还介绍了如何移除已知为0的位,并对两种方法的效率进行了比较。

阅读更多
未分类 BC7解码器

零扩展或符号扩展

2024-10-24

本文探讨了在处理不同位宽和符号性的位压缩格式时,如何高效地进行符号扩展。文章首先指出了传统的符号扩展方法的缺陷,然后介绍了一种基于二进制补码定义的更简洁方法。该方法通过对符号位进行操作,避免了位移操作,并能同时处理有符号和无符号的情况。文章最后还提供了一个更优雅的代码实现,进一步简化了符号扩展的过程。

阅读更多

四元数微分

2024-06-28

这篇文章详细介绍了单位四元数在表示旋转和刚体方向中的作用,以及如何使用它们来描述物体在恒定角速度下的旋转。文章解释了如何从描述旋转组合的单位四元数乘积推导出表示旋转物体方向的四元数的时间导数的微分方程。

阅读更多
未分类 四元数 旋转

CPU为何有多级缓存?

2024-05-16

文章解释了CPU为何有多级缓存,而不是一个大的缓存。作者用了一个办公室的类比,将L1、L2、L3缓存比作办公桌、文件柜和地下室档案室,生动地解释了不同级别缓存的特点和作用。文章指出,多级缓存的设计是为了在速度、容量、功耗和数据共享等方面取得平衡,以提高CPU的整体性能。

阅读更多
未分类