LogoThread Easy
  • Explorar
  • Componer hilo
LogoThread Easy

Tu compañero integral para hilos de Twitter

© 2025 Thread Easy All Rights Reserved.

Explorar

Newest first — browse tweet threads

Keep on to blur preview images; turn off to show them clearly

RT @SchmidhuberAI: 10 years ago: the reinforcement learning (RL) prompt engineer [1] (Sec. 5.3). Adaptive chain of thought: an RL neural ne…

RT @SchmidhuberAI: 10 years ago: the reinforcement learning (RL) prompt engineer [1] (Sec. 5.3). Adaptive chain of thought: an RL neural ne…

Invented principles of meta-learning (1987), GANs (1990), Transformers (1991), very deep learning (1991), etc. Our AI is used many billions of times every day.

avatar for Jürgen Schmidhuber
Jürgen Schmidhuber
Sat Dec 20 13:41:14
Google 性能优化之道:实战技巧与工程思维

Google 两位传奇杰出工程师 Jeff Dean 和 Sanjay Ghemawat 撰写的经典技术指南,基于 Google 多年来在构建高性能软件中的实战经验,总结了一套关于性能优化的原则和具体技巧。

核心理念:重新审视“过早优化”
开篇即纠正了业界对 Donald Knuth 名言“过早优化是万恶之源”的常见误解。
· 关键的 3%:Donald 的原意是不要在非关键代码上浪费时间,但在关键的 3% 代码路径上,我们绝不能放弃优化的机会。
· 工程素养:在成熟的工程学科中,12% 的性能提升是巨大的成就,不应被视为微不足道。
· 默认高效:不要总是以此为借口写出低效代码。在不显著增加代码复杂度或降低可读性的前提下,在编写代码时就应默认选择更高效的替代方案。

方法论:估算与测量
· 培养直觉:优秀的工程师需要具备“信封背面演算”的能力。你需要对计算机底层操作的耗时量级有清晰的认知。这种直觉能帮你直接过滤掉低效的设计方案。
· 测量为王:不要盲目猜测瓶颈,性能分析是第一工具。
· 面对“平坦”的 Profile:当你发现性能图表中没有明显的“热点”函数时,说明低垂的果实已被摘完。此时需要关注微小的优化累积、循环结构的调整、或者从更高层级进行算法重构。

实战技术指南
文章列举了大量具体的代码变更作为案例,主要涵盖以下几个维度:

A. 内存与数据结构(这是优化的重头戏)
· 紧凑布局:现代 CPU 的缓存非常宝贵。优化内存布局,让经常一起访问的数据在物理内存上相邻,可以显著减少 Cache Miss。
· 用索引代替指针:在 64 位机器上,指针占用 8 字节。如果可能,用较小的整数索引代替指针,不仅节省内存,还能保持数据的连续性。
· 扁平化存储:尽量避免使用节点式容器(如 std::map, std::list),它们会造成内存碎片。优先使用连续内存容器(如 std::vector, absl::flat_hash_map)。
· 小对象优化:对于通常元素很少的集合,使用“内联存储”的容器(如 absl::InlinedVector),避免在堆上分配内存。

B. API 设计与使用
· 批量接口:设计支持一次处理多个元素的接口。这可以减少函数调用开销,更重要的是可以分摊锁的获取成本。
· 视图类型:函数参数尽量使用 std::string_view 或 absl::Span,避免不必要的数据拷贝。

C. 减少内存分配
· 内存分配不便宜:它不仅消耗分配器的时间,还会破坏缓存局部性。
· 预留空间:如果你大概知道向量的大小,务必先调用 .reserve(),避免因扩容导致的多次拷贝。
· 对象复用:在循环中,将临时变量的声明提升到循环外,避免反复构造和析构。
· Arena 内存池:对于复杂且生命周期一致的一组对象,使用 Arena 分配器可以极大提高性能并简化析构。

D. 算法改进
· 这是提升性能的“核武器”。将 O(N²) 的算法优化为 O(N log N) 或 O(N) 带来的收益远超代码层面的微调。
· 案例:文章展示了如何通过简单的哈希表查找替代排序后的集合交集运算,从而大幅降低时间复杂度。

E. 避免无用功
· 快速路径:针对最常见的情况编写专门的处理逻辑。例如,处理字符串时,如果全是 ASCII 字符,就走快速通道,避免进入复杂的 UTF-8 解码逻辑。

阅读原文

Google 性能优化之道:实战技巧与工程思维 Google 两位传奇杰出工程师 Jeff Dean 和 Sanjay Ghemawat 撰写的经典技术指南,基于 Google 多年来在构建高性能软件中的实战经验,总结了一套关于性能优化的原则和具体技巧。 核心理念:重新审视“过早优化” 开篇即纠正了业界对 Donald Knuth 名言“过早优化是万恶之源”的常见误解。 · 关键的 3%:Donald 的原意是不要在非关键代码上浪费时间,但在关键的 3% 代码路径上,我们绝不能放弃优化的机会。 · 工程素养:在成熟的工程学科中,12% 的性能提升是巨大的成就,不应被视为微不足道。 · 默认高效:不要总是以此为借口写出低效代码。在不显著增加代码复杂度或降低可读性的前提下,在编写代码时就应默认选择更高效的替代方案。 方法论:估算与测量 · 培养直觉:优秀的工程师需要具备“信封背面演算”的能力。你需要对计算机底层操作的耗时量级有清晰的认知。这种直觉能帮你直接过滤掉低效的设计方案。 · 测量为王:不要盲目猜测瓶颈,性能分析是第一工具。 · 面对“平坦”的 Profile:当你发现性能图表中没有明显的“热点”函数时,说明低垂的果实已被摘完。此时需要关注微小的优化累积、循环结构的调整、或者从更高层级进行算法重构。 实战技术指南 文章列举了大量具体的代码变更作为案例,主要涵盖以下几个维度: A. 内存与数据结构(这是优化的重头戏) · 紧凑布局:现代 CPU 的缓存非常宝贵。优化内存布局,让经常一起访问的数据在物理内存上相邻,可以显著减少 Cache Miss。 · 用索引代替指针:在 64 位机器上,指针占用 8 字节。如果可能,用较小的整数索引代替指针,不仅节省内存,还能保持数据的连续性。 · 扁平化存储:尽量避免使用节点式容器(如 std::map, std::list),它们会造成内存碎片。优先使用连续内存容器(如 std::vector, absl::flat_hash_map)。 · 小对象优化:对于通常元素很少的集合,使用“内联存储”的容器(如 absl::InlinedVector),避免在堆上分配内存。 B. API 设计与使用 · 批量接口:设计支持一次处理多个元素的接口。这可以减少函数调用开销,更重要的是可以分摊锁的获取成本。 · 视图类型:函数参数尽量使用 std::string_view 或 absl::Span,避免不必要的数据拷贝。 C. 减少内存分配 · 内存分配不便宜:它不仅消耗分配器的时间,还会破坏缓存局部性。 · 预留空间:如果你大概知道向量的大小,务必先调用 .reserve(),避免因扩容导致的多次拷贝。 · 对象复用:在循环中,将临时变量的声明提升到循环外,避免反复构造和析构。 · Arena 内存池:对于复杂且生命周期一致的一组对象,使用 Arena 分配器可以极大提高性能并简化析构。 D. 算法改进 · 这是提升性能的“核武器”。将 O(N²) 的算法优化为 O(N log N) 或 O(N) 带来的收益远超代码层面的微调。 · 案例:文章展示了如何通过简单的哈希表查找替代排序后的集合交集运算,从而大幅降低时间复杂度。 E. 避免无用功 · 快速路径:针对最常见的情况编写专门的处理逻辑。例如,处理字符串时,如果全是 ASCII 字符,就走快速通道,避免进入复杂的 UTF-8 解码逻辑。 阅读原文

邵猛,中年失业程序员 😂 专注 - Context Engineering, AI Agents. 分享 - AI papers, apps and OSS. ex Microsoft MVP 合作 - 私信/邮箱:shaomeng@outlook.com 📢 公众号/小红书: AI 启蒙小伙伴

avatar for meng shao
meng shao
Sat Dec 20 13:37:19
An open-source library for automating chromium-based browsers without a webdriver, offering realistic interactions.

An open-source library for automating chromium-based browsers without a webdriver, offering realistic interactions.

https://t.co/EutBLjffkY

avatar for GitHub Projects Community
GitHub Projects Community
Sat Dec 20 13:30:04
Go-WXPush 是一个基于 Golang 开发的极简且免费的微信消息推送服务

主要利用微信公众平台的“测试帐号”机制,为开发者提供一种绕过正式公众号繁琐审核、直接向指定用户推送模板消息的方案

https://t.co/nRskQmL3Ya

Go-WXPush 是一个基于 Golang 开发的极简且免费的微信消息推送服务 主要利用微信公众平台的“测试帐号”机制,为开发者提供一种绕过正式公众号繁琐审核、直接向指定用户推送模板消息的方案 https://t.co/nRskQmL3Ya

🧠在家居士 | 🥦素食者 | 🏃🏻马拉松爱好者 | 💰省钱小能手 | 搭🪜技术资深学者 | 👨‍💻科技宅 | 🆕更新狂 | 🆅 六边型战五渣

avatar for Geek
Geek
Sat Dec 20 13:26:13
RT @BenBlaiszik: 🔥Exciting news for the ML atomistic simulation community - big speedups on the way for MLIP inference and more! 

We're th…

RT @BenBlaiszik: 🔥Exciting news for the ML atomistic simulation community - big speedups on the way for MLIP inference and more! We're th…

Founder and CEO @deepforestsci. Creator of @deep_chem. Author @OReillyMedia. @stanford CS PhD. https://t.co/7LDcegrCsc

avatar for Bharath Ramsundar
Bharath Ramsundar
Sat Dec 20 13:22:13
RT @AntonObukhov1: Amazing work on simulating generative refocusing (aka the Bokeh Blur). An ELI5 video in the style of 3blue1brown sets a…

RT @AntonObukhov1: Amazing work on simulating generative refocusing (aka the Bokeh Blur). An ELI5 video in the style of 3blue1brown sets a…

AI research paper tweets, ML @Gradio (acq. by @HuggingFace 🤗) dm for promo ,submit papers here: https://t.co/UzmYN5XOCi

avatar for AK
AK
Sat Dec 20 13:13:08
  • Previous
  • 1
  • More pages
  • 265
  • 266
  • 267
  • More pages
  • 5634
  • Next