LTO(Link Time Optimization)能够优化静态库吗?动态库呢有何不同
LTO(链接时优化)背后的基本原理是,将 LLVM 的一些优化过程推迟到链接阶段。为什么是链接阶段呢?因为在编译流程中,链接阶段是整个程序(即整套编译单元)能够一次性全部获取的时刻,因此跨编译单元边界的优化成为可能。
LTO(链接时优化)背后的基本原理是,将 LLVM 的一些优化过程推迟到链接阶段。为什么是链接阶段呢?因为在编译流程中,链接阶段是整个程序(即整套编译单元)能够一次性全部获取的时刻,因此跨编译单元边界的优化成为可能。
朋友们,你们好呀!
不管是Vim还是Nvim,大家肯定都会用到吧!在自己的开发机上你的vim或许特别自定义改装过了。但是偶尔我们也会去一个临时服务器,装一个最简单的原生vim使用。
如果你熟悉了解Vim的一些小技巧,可以提高你的效率呢。那么,Vim有什么奇技淫巧?一起看看作者平时常用到的一些小技巧。
(本文主要内容译自build-your-own-llama-3-architecture-from-scratch-using-pytorch)
朋友们,书接上文,上一篇的Llama3还没有分享完,接着分享输出模块(Output Block)和训练、推理。
最终Decode Block的解码器(decoder)输出将输入到Output Block中。首先,它被输入到 RMSNorm 中。然后,它将被输入到线性层中用于生成logits。
接下来,会发生以下两种操作之一。
(本文主要内容译自build-your-own-llama-3-architecture-from-scratch-using-pytorch)
先看一下LLama3模型结构,这个是译文作者根据LLama3论文画的,画得很好。图中包括了训练和推理的流程。
在这个例子中,我们将创建一个可执行程序 A
,它使用动态链接库 C
,而 C
本身又依赖于另一个动态链接库 D
。
库 C
和 D
都链接了库 E
,其中库 E
包含一个使用 extern
声明和实现的 const std::string
全局变量。
你在编译开发一个项目时,有遇到过指定了链接库,但是运行时,却报错:未定义某个符号吗?undefined xxx。
在开发中遇到的xxx报错,是经过mangle了的,不方便看,可以采用c++filt工具查看原始符号,命令: c++filt xxx 。
C++ has indeed become too “expert friendly” – Bjarne Stroustrup
Bjarne Stroustrup 的说得很对,因为专家们对 C++语言中的惯用法非常熟悉。随着程序员理解的惯用法的增加,该语言对他们来说变得更加友好。 这篇文章介绍的“Base-from-Member”就是 c++中的一种惯用法(idioms)。通过掌握现代 C++ 惯用法,提升这方面的知识,C++对我们来说就更加友好。
“Base-from-Member”技法的目的是,解决 C++在继承中,如何初始化一个依赖派生类(子类)成员变量的基类。
Deepseek开源了一系列AI infra的相关的项目,其中包括了deepseek-ai/3FS。
A high-performance distributed file system designed to address the challenges of AI training and inference workloads.
文件系统是任何操作系统的支柱,负责管理数据的存储和检索方式。传统上,开发文件系统是一项复杂而艰巨的任务,需要对内核编程有深入的了解。然而,有了 FUSE(用户空间文件系统),这项任务变得更加容易和通用。
LLVM,全称为低级虚拟机(Low-Level Virtual Machine),是一组模块化和可重用的编译器及工具链技术。由于其灵活的架构,LLVM在多个领域具有广泛的应用。它能够生成机器本地代码,因此被用作主要编程语言(如Rust和Swift)的后端。此外,LLVM还被用于即时编译(JIT编译)以及静态分析、动态分析、着色器编译等多种任务。