用 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 编写的概述代码的含义?的主要内容,如果未能解决你的问题,请参考以下文章

C语言编写串口通信程序在裸机下运行

通过编写c语言程序,运行时实现打印另一个程序的源代码和行号

我在哪里可以找到关于编写 Apache 模块(用 C 语言)的良好参考/教程? [关闭]

求一个用C语言编写的小游戏代码

用C语言编写DLL

如何用jetbrains的Clion编写c语言