自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(113)
  • 收藏
  • 关注

原创 C++中,四种类型转换运算符

转换类型 | 检查时机 | 安全性 | 主要用途 || 编译时 | 中等 | 相关类型转换 || 运行时 | 高 | 多态类型向下转换 || 无 | 极低 | 无关类型二进制重解释 |const_cast| 编译时 | 低 | 修改constvolatile。

2025-05-12 10:17:39 332

原创 C++ 中的二进制、八进制、十六进制

C++ 提供了多种进制表示和操作方式,方便开发者进行底层编程和调试。二进制、八进制和十六进制分别通过 0b、0 和 0x 前缀表示,并可通过 <iostream> 的格式化控制输出不同进制的数值。C++ 还支持位操作符(如 &、|、^ 等),用于处理二进制数据。十六进制常用于表示内存地址、颜色值和文件头标识。C++14 引入了二进制字面量,并支持分隔符以提高可读性。此外,C++ 提供了字符串与数字之间的进制转换功能,便于数据处理。调试时,开发者可以灵活切换进制输出,快速定位问题。

2025-05-11 01:05:57 261

原创 C++ 联合体终极指南

联合体(union)是一种特殊的数据结构,所有成员共享同一块内存空间。其核心特点包括:同一时间只能使用一个成员,大小由最大成员决定,修改一个成员会影响其他成员的值。联合体的基本语法简单,适用于类型转换、协议解析和节省内存等场景。C++11后支持匿名联合体和非平凡类型成员,但需手动管理构造和析构。联合体不能继承、包含虚函数或静态成员,且C++11前不能包含带构造函数的成员。相比于结构体,联合体共享内存,同一时间只能使用一个成员,常用于底层操作。实际应用中,联合体可用于模拟CPU寄存器、处理图形颜色等。使用时需

2025-05-11 00:49:10 231

原创 C++ 中的 enum详细解释(从基础到高级)

用有意义的名字代替数字,让代码更易读、更安全。(枚举)是 C++ 中用来定义。

2025-05-11 00:26:26 216

原创 C++中的this指针

this指针是C++中一个非常重要的概念,它是一个指向当前对象的指针,在类的非静态成员函数中自动可用。下面我将详细解释this指针的用途和工作原理,并提供代码示例。

2025-05-08 11:23:27 328

原创 一文搞定C/C++ 技术面试基础知识总结

宏定义 #defineconst 常量宏定义,相当于字符替换常量声明预处理器处理编译器处理无类型安全检查有类型安全检查不分配内存要分配内存存储在代码段存储在数据段可通过#undef取消不可取消如何定义一个只能在堆上(栈上)生成对象的类?

2025-05-07 19:47:07 1510

原创 __init__文件的作用

作用说明标识包使目录成为可导入的Python包。初始化代码包被导入时自动执行中的代码。简化导入通过批量导入或定义__all__优化用户体验。兼容性确保包在旧版本Python中正常工作。如果没有特殊需求,可以是空文件,但合理利用它能大幅提升代码的可维护性和易用性。

2025-05-07 11:15:32 383

原创 Relay算子注册(在pytorch.py端调用)

【代码】Relay算子注册(在pytorch.py端调用)

2025-05-06 19:45:21 936

原创 自动生成 te.extern 接口:TVM 中第三方库的智能化接入方案

代码展示了一个典型的安全检查+外部实现的concat操作,这种模式在需要结合TVM自动调度与手动优化时非常有用。这两个函数是 TVM 中用于集成外部自定义算子的关键接口,代码展示了一个自定义的。

2025-05-06 18:48:16 771

原创 PrimExpr 与 RelayExpr 的区别

是两种不同层级的表达式类型,分别服务于 TVM 的不同编译阶段和目标场景。在 TVM 的表达式系统中,在 TVM 编译流程中,

2025-05-06 18:26:53 1085

原创 Relay算子注册

的完整注册实现,包含了类型系统注册、算子构造、属性定义和功能描述等多个关键部分。下面我将分层详细解析每一部分的含义和作用。查找"relay.op.nn._make.conv2d"这段代码是 TVM 中 2D 卷积算子 (调用Conv2DAttrs绑定的计算逻辑。的分离,使得算子开发既规范又灵活。返回CallNode。返回Relay表达式。

2025-05-06 17:50:54 802

原创 Relay 算子调用流程

在 TVM 0.8 版本中,从 Relay 前端到 TOPI 计算实现的完整调用流程涉及算子定义、计算逻辑绑定和策略管理三个关键层次。: 声明算子的接口和基础属性。调用 nn.conv2d()查询目标设备(target): 动态选择最优计算实现。获取cuda/x86实现。返回CallNode。

2025-05-06 17:42:04 844

原创 TVM中Python如何和C++联调?

通过以上步骤,你可以高效地调试python端调用C++ 代码部分。如需更复杂的操作(如条件断点、观察点),可进一步查阅。:此操作需 sudo 权限,且重启后失效。继续执行,程序会在断点处暂停。在 Python 脚本的。

2025-05-06 14:38:21 426

原创 InferType和_checked_type的区别?

速度远快于(前提是类型已推断)。灵活性支持动态场景,但代价较高。最佳实践在优化 pass 中优先使用。在前端导入或处理动态形状时使用。

2025-04-28 20:23:54 694

原创 TVM中的Pass两种实现方法?如何选择?

【代码】TVM中的Pass两种实现方法?如何选择?

2025-04-28 15:12:34 357

原创 如何用DFPatternCallback玩转计算图重写?

DFPattern。

2025-04-28 14:59:56 730

原创 如何用VisitDFPattern玩转计算图?

这是一个模板类,接受两个模板参数:R: 表示访问者函数的返回类型Args...: 表示可变数量的额外参数类型模板特化为函数类型,表示这是一个接受DFPattern和额外参数的函数对象private:TSelf: 定义当前类的类型别名,简化代码FType: 定义TVM内部的节点函数类型,它接受:: 待处理的节点: 访问者对象自身Args...: 可变参数。

2025-04-27 18:08:16 815

原创 《TVM模式匹配实战:从DFPatternNode到DFPattern的高级用法》

这段代码定义了 TVM Relay 数据流模式匹配系统的核心基础设施,提供了构建和组合模式匹配规则的框架。下面我将从多个角度详细解析这段代码的设计和功能。

2025-04-27 16:58:48 1266

原创 Relay IR的核心数据结构

是构建计算图的核心数据结构。,通过组合它们可以表示复杂的深度学习模型,并为后续优化和代码生成提供基础。这些基础节点共同构成了 Relay IR 的。

2025-04-22 23:54:08 884

原创 《C++ 模板:泛型编程的核心》

模板是C++中实现泛型编程的重要特性,它允许你编写与数据类型无关的代码。模板可以分为函数模板和类模板两种。

2025-04-22 19:43:47 290

原创 《C/C++预定义宏深度剖析:编译上下文获取指南》

这些预定义宏是C/C++生态系统的重要组成部分,合理使用可以显著提升代码的可调试性和可维护性。:展开为当前函数的未限定名称(unqualified name):展开为当前源文件的绝对路径或相对路径字符串。:展开为当前代码行的十进制整数。:展开为编译开始的日期字符串。:展开为编译开始的时间字符串。:C99/C++11引入。:版本信息、构建时间戳。:错误报告、调试日志。配合记录完整构建时间。:调试日志、异常处理。

2025-04-21 20:36:26 571

原创 《理解C++宏:从#define到条件编译》

1024优点在预处理阶段替换,不占用存储空间可用于数组大小等需要编译时常量的场合缺点现代C++推荐使用const或constexpr替代constexpr int buffer_size = 1024;

2025-04-21 20:29:38 976

原创 《深入解析C++中的explicit关键字:防止隐式转换的利器》

显式构造函数是C++中一种防止隐式类型转换的构造函数声明方式,使用explicit关键字标记。

2025-04-21 20:11:44 183

原创 《Relay IR的基石:expr.h 中的表达式类型系统剖析》

类名继承关系角色关键特性常量表达式的实际数据存储包含常量数据(NDArray)、类型信息,并实现属性访问、哈希和相等比较逻辑。Constant常量表达式的智能指针封装提供用户友好的构造函数和访问方法,隐藏内存管理细节。在TVM源码中,是Relay IR(中间表示)的核心头文件,定义了所有Relay表达式的基础数据结构和类型系统。它是实现TVM高层计算图表示的关键组成部分。相关重要文件文件路径关联内容类型系统(TensorType等)运算符定义代数数据类型支持表达式方法的实现。

2025-04-20 02:02:19 1194

原创 《Relay IR内核剖析:RelayExpr与RelayExprNode的共生设计》

在TVM源代码中,和的关系通过智能指针包装模式和类型系统注册机制紧密关联,体现了TVM对象系统的核心设计理念。以下是它们在源代码中的具体体现方式:2. 引用包装类()位置:同文件角色:作为的智能指针包装,提供值语义和自动内存管理。二、关键连接机制1. 对象引用宏()展开后生成的核心方法:作用:将与绑定,提供类型安全的访问接口。2. 类型系统注册在具体表达式节点(如)中的体现:三、源代码中的典型使用模式1. 创建表达式2. 类型转换3. 继承体系示例四、核

2025-04-20 01:18:24 492

原创 《运算符重载:让对象学会加减乘除》

运算符重载是指为自定义类型(类或结构体)重新定义或重载已有的运算符,使其能够操作该类型的对象。运算符重载是C++中实现自定义类型行为一致性的重要手段。合理使用运算符重载可以使代码更直观、更易读。但同时也要注意不要滥用,确保重载的运算符行为符合直觉,并遵循语言惯例。

2025-04-14 21:00:24 1213

原创 C++ 标准库中的 <algorithm> 头文件算法总结

这些算法可以大大提高C++编程效率,避免了手动编写循环的繁琐工作,同时通常比手写循环更高效。头文件提供了大量有用的算法,主要用于操作容器(如。这些算法通常通过迭代器来操作容器元素。

2025-04-14 20:52:27 511

原创 《高阶函数:把函数当玩具传来传去》

高阶函数是指可以接受其他函数作为参数或返回函数作为结果的函数。

2025-04-14 20:50:15 181

原创 《extern:如何在编译时“暗通款曲“》

extern是C++中管理链接性(linkage)的重要关键字,主要用于声明外部定义的变量或函数。

2025-04-14 20:39:49 431

原创 Python 类方法

类方法是绑定到类而不是实例的方法,它们使用装饰器定义,第一个参数通常是cls(表示类本身)。

2025-04-14 20:24:43 353

原创 Python静态方法和类方法详解

理解这三种方法的区别对于编写清晰、组织良好的Python代码非常重要。正确使用它们可以使你的代码更加模块化,逻辑更加清晰,同时也能更好地表达你的设计意图。

2025-04-14 20:21:22 520

原创 Python高阶函数

Python 还提供了许多其他实用的高阶函数。下面我将介绍更多常用的高阶函数及其用法。

2025-04-14 11:41:33 616

原创 Python 匿名函数

Python 中的匿名函数是通过lambda关键字创建的小型匿名函数,也称为 lambda 函数。

2025-04-14 11:31:04 256

原创 《匿名函数:临时函数的快餐文化》

匿名函数(也称为 lambda 表达式)是 C++11 引入的一项重要特性,它允许你在需要函数的地方内联定义函数,而无需单独声明和定义命名函数。

2025-04-14 11:19:37 380

原创 内联函数通常定义在头文件中的原因详解

内联函数(inline function)是C++中的一种函数优化机制,通过在函数声明前加上inline关键字,建议编译器将函数调用替换为函数体本身的代码,从而减少函数调用的开销。编译器需要在每个使用内联函数的源文件中看到其完整定义,这样才能在调用点进行内联展开。// 编译器可以看到定义,可以内联// 编译器可以看到定义,可以内联// 只有声明// 错误!编译器看不到定义,无法内联。

2025-04-11 18:00:11 359

原创 《inline:编译器最爱的“作弊指令“》

inline是对编译器的优化建议,不是强制命令适合小型、频繁调用的函数内联函数通常定义在头文件中类内定义的成员函数默认是内联的过度使用内联可能导致代码膨胀现代C++中inline也用于变量定义合理使用inline可以提高程序性能,但需要根据实际情况权衡利弊。

2025-04-11 17:47:01 456

原创 《final:C++的“断子绝孙“咒语》

final是 C++11 引入的关键字,用于限制类或虚函数的进一步继承或重写。下面是对final关键字的详细总结和示例。

2025-04-08 14:56:56 500

原创 C++虚函数

虚函数是C++实现运行时多态(动态绑定)的核心机制。通过在基类中使用virtual关键字声明函数,派生类可以重写这些函数,实现多态行为。

2025-04-08 14:54:52 351

原创 C++的数据类型与内存占用

而内存大小又由比特(bit)组成。的大小可能因编译器不同而变化(如32位系统中。直接决定了变量占用的。

2025-04-02 10:48:19 257

原创 C++ 结构体、结构体指针与结构体指针数组详解

结构体:将不同类型的数据组合成一个新的数据类型结构体指针:指向结构体的指针,使用->操作符访问成员结构体指针数组:存储多个结构体指针的数组,适合管理大量结构体对象结构体指针和指针数组在管理大量数据时非常有用,可以减少数据复制的开销,提高程序效率。

2025-03-31 20:33:50 298

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除