Thanks to visit codestin.com
Credit goes to blog.csdn.net

自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

余璜的技术博客

好玩就好

  • 博客(687)
  • 资源 (3)
  • 收藏
  • 关注

原创 我写操作系统的一点经验【原创】

我的项目代码: http://code.google.com/p/maray/这两天我在写计划,完成后在此博客公布。发信人: raywill (晓楚), 信区: Linux标  题: 我写操作系统的一点经验发信站: 武汉白云黄鹤站 (2007年09月14日22:39:30 星期五)转瞬2年!Linux版上又见“有人写操作系统吗?”这样的帖子。2年前,有个叫raywill的小子不也是发过

2007-10-07 10:22:00 2528 7

原创 对 Transformer Position Encoding 的学习理解

我们会发现,当 x 比较小的时候,数值之间是有规律的,但是当 x 变大后,因为 sin(x) 的周期特征,它的值会被“折叠”,某种意义上,这个值就变成了和随机值差不多的东西。但是他有一个缺点,因为它在 0 到无穷大的范围内平滑地从 -1 变化到 1,可能相邻位置在高维空间的投影距离非常近,难以被机器学习出来,不容易收敛。任何特征,能学习的前提,是它具备一定的规律。(1) 一个句子中的 token,我们是可以用 0 到 N 来给它做位置编码的,但是这种编码方式不便于计算,且缺少一些很牛的性质。

2025-11-09 16:19:15 639

原创 使用 GPT + Manim 生成动画的体验非常好

应该是提示词还不够详细,生成的内容还需要人工微调一下,但是大体结构是非常好的,只需要稍微花费一点力气就可以调整好。最终,通过稍微的调整,输入了如下代码,效果非常棒。使用 GPT + Manim 生成动画的体验非常好。

2025-11-02 04:55:52 201

原创 循环展开与GCC

做了循环展开,但是并没有做指令重拍以适应 CPU 流水执行,但 10.2 就已经解决了这个问题。但从 10.2、11.2 这些版本,二者生成的汇编代码一模一样,性能也完全相同。在 8.2、9.2 这两个 GCC compiler 中,所以,对于小整数的循环,要相信编译器的循环展开能力。下面两个函数,哪个更快?虽然 8.2 中已经对。

2025-10-22 05:10:28 132

原创 大模型的角色

摘要:大模型本质是无状态的,其连续会话能力由外部Agent维护上下文实现。Agent负责编排流程、调用工具和管理交互状态,而大模型仅返回决策结果(文本或工具调用指令)。上下文工程是核心挑战,涉及短期/长期记忆管理、向量检索等技术,以解决对话爆炸问题。数据库领域的AI需求(如embedding)主要服务于高效上下文检索。

2025-10-18 10:49:02 307

原创 表达最大值最小值的新方法

表达最大值、最小值,传统方法是 MAX_INT64 这样的宏。

2025-10-18 09:17:49 181

原创 学习小智 AI 生态

小智AI是一款由硬件、开源固件和服务端组成的聊天玩具,其台湾腔陪聊功能广受欢迎。最初闭源的服务端被团队复刻并开源,用户无需订阅即可永久使用。该系统整合了国内多家云服务商的免费AI方案,包括智谱的LLM和视觉模块。开发者可通过修改开源固件扩展硬件功能,或通过MCP扩展后端能力。小智的核心交互依赖于液晶显示和语音输入/输出模块,而后端服务则提供了丰富的扩展可能性。

2025-10-16 07:30:09 772

原创 各种数据库的过滤物化

缺点:算子实现复杂,需要“带掩码”处理,某些 SIMD 优化较难。ClickHouse 每次 filter 都会生成新 column(物理拷贝),下游算子只处理“干净”的数据块。以前没怎么考虑过这个问题,实际写了一些带 selector 的代码,才知道每一步都物化的话,代码写起来有多爽。这些系统经常使用掩码(mask)或者 selection vector来表示哪些行有效,而不是立即拷贝数据。通常还是“逐行遍历+逐行判断”,不进行大规模批量拷贝,也不专门维护 selection vector。

2025-10-12 06:20:56 299

原创 一个循环的编译优化

实战中还是应该通过去看汇编代码来确认,然后通过一些相关技术来提示编译器做优化。本文的目的是让你理解,在部分情况下即使有数据依赖,编译器依然还有优化的思路。通过这种改写,虽然减少了乘法,但是我们也注意到,增加 temp 后,会让每次循环迭代都依赖上一次循环迭代完成,这无疑是不利于 CPU 流水执行的呀!不过,这里还有一个问题:如果循环次数不是 100,而是一个未知的变量 n 呢?可以做循环展开,然后做 SIMD。只能说,现代编译器是真的有点聪明!

2025-10-11 03:44:12 181

原创 一个循环的优化

本文对比了三种从1024字节数组中选取n(1-8)个字节组合成uint64_t的方法。方法1使用简单循环,方法2采用Duff's Device技术进行循环展开,方法3则完全暴力展开所有情况。测试结果表明:方法3性能最优,方法2次之,方法1最慢。这种性能差异源于分支预测和指令级并行优化,完全展开的代码能最大化利用CPU流水线。对于小规模循环(n≤8),暴力展开是最高效的实现方式。

2025-10-10 03:31:38 397

原创 论 AI Database

摘要:文章提出将数据库作为AI开发的核心控制平面,通过声明式API统一管理数据、特征和模型元数据。关键设计包括:1)SQL扩展支持AI原语 2)集中式元数据管理 3)强制治理策略 4)可插拔执行后端。MVP建议从向量查询、推理API和模型注册入手。该方案面临的主要挑战包括开发者习惯改变、性能优化、生态兼容性以及组织变革阻力。(149字)

2025-09-29 23:51:54 756

原创 一个 AP 题目引发的学习过程

自然界中,不连续的情况很少,但是人为定义的系统中,不连续很常见。大家最能理解的,就是税务问题,多发一块钱年终奖,结果多缴纳几百块的税,有了 GPT 后,在学习这个内容,一下子就 reasonable 了。接近0的时候,值为1,等于0的时候值为-1,这不是要天下大乱了吗?数学总是太抽象,真实生活中怎么会遇到这样的场景呢?上面这些例子,都是很有道理的。下面是一个美国高二学生的 AP 题目,要求理解这个式子。数学,还是很有用的。

2025-09-12 00:45:50 1057

原创 GPT 生成一个打字练习页面

女儿最近对键盘打字展现出浓厚兴趣,于是用 GPT 生成一个比较适合小朋友的打字练习页面。

2025-07-27 12:53:14 2288

原创 如何优化遍历向量元素的循环?

在这个基础上,我们还可以进一步定制 forEach,比如添加循环展开的模板参数,指导 forEach 做编译期循环展开,可以进一步提升循环遍历性能。isConstantArray 这个条件,是在 Vector 初始化阶段就定好了的,但它又不是一个模板参数,所以很难用模板特化的方式解决。循环里有大量的分支跳转,流水线早就被打得四分五裂了,forEach 已经带来不了什么好处,更不用提应用循环展开。但这个需要一定的设计来配合,比如,在 OceanBase 中,就不太容易应用这个技术。

2025-07-15 01:40:38 465

原创 分布式顺序数据发生器

本文提出了一种分布式顺序数据发生器的实现算法。该方案通过预先约定各worker节点的数值分配规则,实现无锁并行生成有序稠密的序列值。该算法能更好地避免数据倾斜问题,适用于分布式环境下高效生成连续序列值的场景。

2025-06-18 22:55:07 553

原创 计算血缘 ---- 一个天马星空的想法速记

在处理千亿级别大表的分组求和计算时,计算机通常采用全量扫描的方法,而人类则会根据更新的数据特征,智能地调整计算结果。为了提升计算机的智能性,可以引入“计算血缘”概念,记录每行数据与源文件的对应关系,从而在数据更新时仅重新计算相关文件,提高效率。然而,这种方法的效果取决于数据分布的集中程度。相比之下,人类基于增量计算的算法更为高效,如GIC算法和OceanBase中的“增量物化视图”技术,它们支持聚合和简单连接操作,但存在一定限制。总体而言,结合人类智能的计算方法在优化大数据处理效率方面更具潜力。

2025-05-20 03:46:30 201

原创 对 Lambda 架构问题的深入理解

答:因为 Flink 的计算有时间窗口的概念,比如:每个整点,计算上一个小时的销售额。因为队列延迟、网络出错、重试导致数据重复等原因,会让 Kafka 等队列中的数据不能完全被信任,上一个小时的数据不一定真的全了,可能有一些数据要等几分钟才到,也有可能永远不到。原因如下,特别是第一条,会让业务运营存在不确定性,为了应对这种不确定性,可能需要预留出业务余量,造成浪费。简而言之:因为实时数据不准确,那么 Serving 的到的数据肯定也不准确。• 结果第二天离线数据跑完,真实注册是 1100,实际早就达成了。

2025-05-20 00:28:18 627

原创 基于 std::visit 和 std::variant 的请求分发

在数据库实现中,消息处理通常通过为每个消息设计一个code,并使用switch-case进行分发。这种方式逻辑清晰,便于理解和问题定位,但存在管理code复杂、新增消息类型需多处修改等缺点。文章介绍了一种基于std::visit和std::variant的请求分发方法,通过将请求封装为variant类型,利用std::visit根据请求类型自动调用相应的处理函数。这种方法在面向对象的角度更为干净,且std::visit内部通过索引自动生成类似switch-case的代码,简化了消息分发的实现。

2025-05-17 03:44:30 244

原创 ETL 学习

【Draft】本文未完成。

2025-05-14 04:58:42 421

原创 无意看到一个我20年前的帖子

http://forum.osdev.org/viewtopic.php?p=77313

2025-05-14 03:13:49 111

原创 数据库领域的 Data Analytics 与 Data Engineering 分别是什么概念?

在 Snowflake 和 Databricks 的语境中,"Data Analytics revenue" 和 "Data Engineering revenue" 虽然并非官方财报中的标准分类,但在业务拓展和市场细分中具有重要意义。Data Analytics 收入主要来源于客户将平台用于数据分析、BI 报表、探索性分析等场景,而 Data Engineering 收入则来自数据管道开发、ETL/ELT 工作流、数据清洗等工程类任务。尽管数据分析和数据工程在数据生

2025-05-14 02:49:21 1036

原创 局部和整体的关系

这是一个非常本质的问题,其实你已经接近数学和物理中“几何本质”的核心了。如果你愿意,我可以给你举几个现实中的例子(比如地球地图拼贴、天气预测、物理场)来加深这个理念。👉 比如我们站在地球上,只能看到脚下那一小块平面(局部),但整个地球是球体(整体)。🧩「如果我们知道每个局部是怎样的,它们又是如何连接的,那整个空间会是什么样?• 局部都像欧几里得空间(我们熟悉的直角坐标系、平面等)🧠 例子 3:人脑的理解方式(局部推理构建整体认知)• 构建出完整的空间认知(比如你能“想象”你的家)

2025-04-29 22:26:32 754

原创 GPU 架构入门笔记

引文位置:https://www.trainy.ai/blog/gpu-utilization-misleading。相关概念是通过 ChatGPT 迅速学习总结而成。

2025-04-28 23:48:00 618

原创 std::vector 自定义分配器

在 std::vector<T, Alloc> 的实现中,会通过 allocator_traits<Alloc>::rebind_alloc<U>(或直接用 Alloc::rebind<U>::other)来为不同用途分配内存。在 C++17 及以前需要自定义,但从 C++20 起 allocator_traits 会使用 std::allocator_traits::construct,你可以省略这两个方法,让 allocator_traits 使用完美转发到 ::new。

2025-04-22 23:22:32 892

原创 std::move

如果写一个相关的教程,完全不应该从 std::move 入手,而是应该从如何降低对象拷贝代价入手。所以,std::move 的确什么事情都不做,它只是提示编译器,去调用支持 move 语义的函数而已,具体做事情的,是这些函数。Note:STL 中,vector 的 emplace_back、push_back 等也实现了支持 move 语义等版本。对于这种情况,就算用了 std::move,也没有什么用。有些时候,我们不希望做深拷贝。此时,下面的逻辑取决于 A 的拷贝构造函数实现,一般来说,会把。

2025-03-19 22:20:47 392

原创 DailyNotes 增加提醒功能

TODO:准备给 DailyNotes 增加一个提醒功能,准备接入 AI 来做一些事情。试了一下,非常靠谱。具体 DailyNotes 和 Ollama 的交互方式,可以直接调用命令行,也可以走网络API。

2025-03-05 23:40:24 337

原创 深入理解 Clang-Tidy 的窄整形转换警告(Narrowing Conversion)及其配置方法

窄整形转换是指将一个较大范围的数据类型转换为一个较小范围的数据类型,可能导致数据丢失或溢出。常见的转换包括将 int 转换为 short 或将 size_t 转换为 int。如果目标类型的范围比源类型小,则可能丢失数据,尤其是在数值超出目标类型的表示范围时。例子 1:窄整形转换假设我们在 64 位系统中工作,size_t 和 ptrdiff_t 是 8 字节类型,而 int 和 short 是 4 字节和 2 字节类型。如果将一个大范围的类型转换为较小范围的类型,就可能发生溢出或数据丢失。

2025-02-28 03:48:31 1816

原创 期待已久的 AI 演示动画制作终于来了!

期待已久的 AI 演示动画制作终于来了!

2024-11-19 00:27:52 490

原创 支持lambda的ctags

universal ctags 安装也简单,直接从 github checkout 编译安装,然后把 ctags 路径放到 PATH 最前面,覆盖默认的 exuberant ctags。universal ctags 能更好地支持现代 C++,例如 using 里定义的类型、lambda 等。如果你发现你的 ctags 不支持 Lambda 函数的跳转,那说明你的 ctags 该更新了。exuberant ctags 在 2009 年就停止更新了,你大概率用的是这一个。

2024-11-11 10:32:21 278

原创 向量执行优化之手工 unrolling

如果只有一个元素,静态unroll 了多个元素,那就会越界访问了。如果编译器知道 bound.end() 和 bound.start() 之间有1024 个元素,那么它就敢大胆 unroll 了。理论上是可以,如果元素多,就走 unroll 分支,元素少就不走 unroll 分支。但是,要知道,编译器并不知道我们这是一个向量化的计算,它怎么会轻易做这样的优化呢?在数据库实现中,我们有一个认知误区:当我们把数据结构组织成向量后,只要写好 for 循环,编译器就会自动帮我们做好 SIMD 优化。

2024-10-23 23:35:56 427

原创 The 48 bit pointer

基于这样一个事实,在部分场景下我们可以对空闲的高 16 位加以利用,存储一些辅助 flag,这样可以让内存结构更加紧凑。为什么高 16 位总是为 0?这是因为,就目前的应用程序需求来说,只使用低 48 位已经足够。位数越少,CPU 构建成本越低。对于 ARM 处理器,可以看到下面的描述。也就是说,48 bit 不是定数,未来也可能变化。如此这样,我们就可以在 HashSlot 里存下更多信息了。的指针地址默认都只使用低 48 位,高16 位总是 0。在 Intel CPU 和 Arm CPU 中,

2024-10-17 04:29:53 400

原创 Disjunct & Conjunct Bloom Filter

Disjunct Bloom Filter:查询元素是否在任意一个集合中(“或”操作)。Conjunct Bloom Filter:查询元素是否在所有集合中(“与”操作)。这两种扩展方法都可以提高集合查询的效率,但选择哪种方法取决于具体的应用需求和场景。

2024-10-02 05:20:23 362

原创 给 git 添加扩展命令

公司里的 git 代码分支既没有和 issue 关联,也没有和 review 关联,每次找起来太费劲。于是,写个脚本吧!没想到 git 添加扩展命令这么方便,早知道这么简单,我的好多工具都做成 git 插件好了!

2024-09-25 23:04:14 689

原创 Dance with Compiler - EP3 ARM64 汇编传参约定以及 restrict 汇编分析

v0 - v7: 对于浮点数和 SIMD(单指令多数据)参数,这 8 个寄存器用于传递前 8 个浮点数参数(每个寄存器可以存储一个 64 位的浮点数,或者一组 128 位的 SIMD 数据)。x0 - x7: 这 8 个寄存器用于传递函数的前 8 个参数(对于整数类型的参数)。如果函数有更多的参数,这些额外的参数会通过栈传递。v0: 用于返回浮点数或 SIMD 类型的结果(例如,float、double、__m128 等)。x0: 用于返回整数类型的结果(例如,int、long、pointer 等)。

2024-09-09 09:53:09 706

原创 Dance with Compiler - EP2

今天来熟悉汇编指令。

2024-09-07 05:45:19 983

原创 Dance with compiler - EP1

此时,我个人理解是:编译器先假设 a 总是可以信任寄存器中的值,当 b 写着块内存时,a 可以读不到最新的修改,当 b 读这块内存时,a 也不需要做任何写回操作使得 b 能读到最新数据。不过,在我们的例子里,我们通过 restrict 关键字欺骗了编译器,实际上 x 和 y 指向了同一片内存,这也导致了最终的结果错误。也是非常考验人的,需要深刻地认识到调整分支概率后编译器可能的行为是什么,才能有的放矢,不然,编译器认为,y 是以指针的形式传入函数体内,说明外部也有指针引用了 y,并且,

2024-09-07 02:58:54 719

原创 如何在 Linux Terminal 中使用 Cmd+C复制,Cmd+V粘帖?

Fact:需求:解决方案:真是绕!

2024-09-03 22:29:22 514

原创 使用 Visual Studio 编辑器作为 DailyNotes 的 markdown 编辑器

除了使用 Typora 作为 markdown 编辑器,Visual Studio Code 也是一个非常不错的选择,令人惊喜的是,它也支持从剪贴板粘贴图片到 markdown 里,并且直接把图片保存到指定位置。DailyNotes 是我使用过的最优秀的日常笔记管理工具,为它配置一个好的 markdown 编辑器,可以大幅提升效率。设置方法来源:https://www.cnblogs.com/xbotter/p/17528063.html。通过下面的配置,可以让剪贴板粘贴出来的图片保存到。

2024-08-22 00:54:17 577

原创 假设我写了一段C++循环代码,我希望对这段代码做 profiling,计算出每次循环需要消耗的指令 cycle 数。我应该如何实现这种 profiling?

perf 是一个 Linux 性能分析工具,可以对运行时程序进行详细的硬件事件分析,例如 CPU cycles。perf stat 将会报告各种性能计数,包括指令周期数。使用 perf 工具 (Linux)

2024-07-22 15:03:43 434

原创 论文阅读神器 SonyDPT RP1

我个人还是觉得闲鱼比较香,因为很多人买了电纸书后,不过是三份热度,当做泡面伴侣而已,闲鱼出掉是迟早的,捡漏容易!如果预算还高点,可以去淘宝“暖风家”买,帮忙破解了系统,增加了更多格式和书籍商城的支持,甚至支持键盘鼠标。索尼把整个产品线全部卖给了富士通,去淘宝搜“富士通 电纸书” 也能搜到,新产品价格降低到了3000多点。配套 App 名称:Digital Paper App,用于在电脑上做论文同步。优点:13寸,对阅读论文非常友好!缺点:仅支持 pdf 格式,不支持 epub 等格式。

2024-07-21 22:18:02 1285

排队论---我收集的

排队论---我收集的 排队论---我收集的 排队论---我收集的

2008-09-08

FASS简介-抗锯齿原理

FSAA 是 full scene anti-alias 的缩写,有些人将其译为全景反锯齿,还算是合理。不过,倒底 FSAA 是什么呢?为什么要「全景」(full scene)?「半景」不行吗?(其实相对于 FSAA 的是 edge AA,「边缘反锯齿」)反锯齿(anti-alias)又是怎么回事呢?

2009-01-18

同义词词林(扩展版)

《同义词词林(扩展版)》每个词的类编码就应该包含了他全部的信息。 对于原版同义词词林,编码的第一个字母代表该词所属的大类,第二个字母代表中类,后两位字母代表小类。 同义词词林原版是梅家驹先生人工构造的,同义的原则应该是他老人家对这些词的理解吧。同义的原则没有明确的说明,这也是目前一个研究方向--复述(paraphrasing)--关心的一个问题。

2010-05-18

空空如也

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

TA关注的人

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