用 C 编写的概述代码的含义?
Posted
技术标签:
【中文标题】用 C 编写的概述代码的含义?【英文标题】:Meaning of the outlined code written in C? 【发布时间】:2020-07-03 21:34:56 【问题描述】:我目前正在建立对 PyTorch 的理解,并且我遇到了一些用 C 语言编写的代码。由于我对 C 约定不太熟悉,谁能详细说明这段代码是什么意思?
typedef float float4 __attribute__((ext_vector_type(4)));
typedef float float8 __attribute__((ext_vector_type(8)));
#define LoadFloat8(PTR) *((const float8 *)(PTR))
代码取自here
【问题讨论】:
最后一行将LoadFloat(PTR)
定义为:将给定的指针PTR
转换为const float8 *
,然后取消引用它。对于前两行:***.com/a/38751796/260313
【参考方案1】:
GNU GCC 矢量扩展
指令集包含 SIMD 向量指令,这些指令同时对包含在一个大寄存器中的多个值进行操作。
为了使用这些扩展,我们需要提供必要的数据类型(如您的示例)。这应该使用适当的 typedef 来完成,例如:
typedef int v4si __attribute__ ((vector_size (16)));
int 类型指定基本类型,而属性指定变量的向量大小,以字节为单位。 上面的声明导致编译器将 v4si 类型的模式设置为 16 字节宽并划分为 int 大小的单元。对于一个 32 位的 int 这意味着一个 4 个单元的 4 个字节的向量,而 foo 的对应模式是 V4SI。
int the first typedef in your example 这是一种让编译器知道您只关心 4 元素 SIMD 寄存器的前 4 个元素的值的方法。因此,编译器可以在操作此数据类型时进行优化,在高元素/字节中留下不同的垃圾。
继续阅读下面的链接:
Using Vector Instructions through Built-in Functions
【讨论】:
以上是关于用 C 编写的概述代码的含义?的主要内容,如果未能解决你的问题,请参考以下文章