Faster Argmin on Floats8 months agohttps://algorithmiker.github.io/faster-float-argmin/问题:在一个大型数组中找出最小浮点数的索引,所有值均为正数或+0,非无穷大且非NaN。第一种解决方案:使用`total_cmp`进行比较,处理一百万个数字耗时约511微秒。第二种解决方案:通过自然偏序实现自定义比较器,耗时约489微秒。第三种解决方案:使用`partial_cmp`并直接解包,稍快一些,约470微秒。第四种解决方案:通过比较`u32`位模式利用浮点数表示特性,最快仅需370微秒(提速30%)。提供基准测试程序以对比各方案性能。
The bloat of edge-case first libraries8 months agohttps://43081j.com/2025/09/bloat-of-edge-case-libraries优先处理边缘情况的库往往会处理不太可能发生的场景,导致依赖树臃肿为罕见输入过度设计(例如clamp函数中处理类数字字符串)会不必要地使代码复杂化像'is-number'和'is-arrayish'这样的示例库解决了边缘情况,但经常被误用于常见场景库应该聚焦常见用例并假设输入类型正确,将验证留给应用层处理过度细粒度的库(如'shebang-regex')会带来不必要的复杂性和膨胀npmgraph和Dependabot等工具有助于管理和优化依赖树验证应该发生在数据边界,而不是依赖树深处社区正在用现代化的高效替代方案替换臃肿的依赖项
Time to First Byte8 months agohttps://web.dev/articles/ttfbTTFB(首字节时间)用于测量从资源请求到接收到响应第一个字节的时间间隔。TTFB包含重定向时间、DNS查询、连接建立和TLS协商等多个阶段。早期提示(103状态码)会影响TTFB测量结果,因其响应会被视为首字节。良好的TTFB指标应控制在0.8秒以内,以确保最佳用户体验指标(如FCP和LCP)。可通过Chrome开发者工具、WebPageTest或Navigation Timing/Resource Timing等JavaScript API测量TTFB。优化TTFB需减少连接建立和后端处理阶段的延迟。
The Hardware Knowledge That Every Programmer Should Know8 months agohttps://needoneapp.medium.com/the-hardware-knowledge-that-every-programmer-shoul...程序员需要硬件知识来优化高性能代码。缓存行为影响性能:由于缓存行效率,行优先遍历比列优先更快。随机数组遍历因预取器效率低下而比列优先更慢。缓存关联性影响性能;步长为2的幂会导致运行时突增。伪共享发生在多个线程修改同一缓存行的变量时,会降低效率。内存对齐可通过确保变量位于不同缓存行来避免伪共享。分支预测影响流水线效率;排序数组比乱序数组表现更好。迭代间的数据依赖会降低流水线效率并阻碍向量化。独立的迭代允许编译器更好地优化,例如实现向量化。
I Spent Three Nights Solving Listen Labs Berghain Challenge (and Got #16)8 months agohttps://kuber.studio/blog/Projects/How-I-Spent-Three-Nights-Solving-Listen-Labs-...旧金山一块神秘广告牌上的五个数字,引发了2025年最具成瘾性的编程挑战——Berghain挑战赛该挑战要求从特定配额的人流中优化筛选1000人,同时最小化拒绝率,演变成精妙的算法博弈Listen Labs公司的增长黑客策略意外演变为3万人参与的分布式计算实验,优胜者将赢得柏林Berghain夜店之旅及工作面试机会这道数学难题涉及不完全信息下的实时资源分配,每个决策都不可逆,堪称动态规划范本参赛者开发出从贪婪算法到高斯耦合模型等多种解决方案,甚至动用动态编程等高级技巧服务器因流量过载频频崩溃,意外成为挑战赛的另类魅力,选手们戏称这是'分布式限速测试'参赛社区展现出惊人协作力,GitHub和社交媒体上算法解析帖持续刷屏,形成独特的知识共享生态冠军David Heineman采用双阈值求解器,通过海量参数调优,以工程思维破解理论难题这场挑战赛揭示了迭代速度、参数调优和社区协作在优化问题中的决定性作用这场编程狂欢让人们重温纯粹的问题求解乐趣,超越了职业晋升和竞赛排名的世俗意义
No reachable chess position with more than 218 moves8 months agohttps://lichess.org/@/Tobs40/blog/there-is-no-reachable-chess-position-with-more...奈纳德·彼得罗维奇1964年创作的218步白棋胜国际象棋排局至今未被超越计算机辅助证明确认可达棋局中不存在超过218步的局面研究运用数学优化技术穷举可能的棋局组合关键发现包括黑棋多数子力闲置及将军对步数的影响采用简化版象棋规则以降低计算复杂度分数最优解虽提供上限值但未发现超越218步的实例验证了现有记录的极限性:无升变局面144步,非法局面288步未来研究方向包括寻找最多吃子、逼和、将军等特殊局面
Thinking Machines – Modular Manifolds8 months agohttps://thinkingmachines.ai/blog/modular-manifolds/训练大型神经网络需要保持张量(权重、激活值、梯度)的健康状态以避免数值问题归一化是维持张量健康的关键技术,通常应用于激活值(如层归一化)和梯度(如Muon优化器)权重矩阵归一化虽不常见但效果显著,例如EDM2模型就通过该技术提升了稳定性和可预测性对权重矩阵施加流形约束能为优化提供结构化方法,确保权重始终位于有益的流形子空间研究提出在神经网络中使用Stiefel流形(其矩阵具有单位条件数)来约束权重矩阵流形优化包含三个步骤:寻找最优切空间方向、更新权重、通过收缩映射回归流形模块化流形将这一理念扩展到整个网络,基于Lipschitz敏感度实现跨层学习率预算分配未来研究方向包括:约束条件的模块化设计、数值计算优化,以及流形凸优化技术的突破
The Weird Concept of Branchless Programming8 months agohttps://sanixdk.xyz/blogs/the-weird-concept-of-branchless-programming现代CPU使用分支预测器来推测执行路径,但预测错误会导致严重的性能损失。无分支编程通过算术和位运算避免条件跳转,在不可预测的场景中提升性能。代码中的分支指条件执行路径(if/elif/else),在机器码中会转换为跳转指令。无分支技术对性能敏感或需防范侧信道攻击的应用(如密码学)至关重要。提供了三个无分支编程示例:绝对值计算(abs)、范围限定(clamp)和数组分区(partition)。绝对值示例展示了如何用位操作替代分支判断。范围限定技术无需条件检查即可将数值约束在区间内,常用于模拟和渲染。无分支数组分区通过避免循环中的不可预测分支,显著提升处理速度。基准测试显示:无分支分区比分支版本快1.2倍,而abs和clamp的差异可忽略不计。无分支编程是精准优化工具,恰当使用时能带来性能提升。
Make the most of compiled C loops on the 680008 months agohttps://dciabrin.net/posts/make-the-most-of-compiled-c-loops-on-the-68000/make-t...文章讨论了针对68000处理器(特别是Neo Geo硬件)优化C语言循环的方法。分析并优化了一个简单的C语言clear_screen函数,以生成高效的68000汇编代码。描述了Neo Geo视频硬件的特性,强调其虽然图形功能先进但架构简单。展示了clear_screen函数的初始C实现,以及优化前后的汇编输出对比。解释了编译器优化技术如常量折叠和循环反转。详细说明了如何通过代码提示帮助编译器更好地利用寄存器和优化循环。最终优化包括使用dbra指令和调整编译器标志以获得更好性能。结论强调了在复古硬件开发中C语言与汇编语言需要平衡使用。
Billions of Triangles in Minutes8 months agohttps://zeux.io/2025/09/30/billions-of-triangles-in-minutes/英伟达发布RTX超级几何光线追踪技术,通过Zorah演示展示了集群光线追踪与Nanite集群LOD管线Zorah场景是一个约100GB的虚幻引擎场景,后续以glTF格式发布,包含16.4亿三角形(实例化后达189亿)meshoptimizer工具升级支持分层集群LOD,优化后处理时间从约30分钟缩短至3分钟关键优化包括:修复稀疏性问题、平衡线程负载、改进包围盒计算的SIMD指令、缓存分配策略最终优化代码可在约3分钟内处理Zorah场景,生成62GB缓存文件以实现高效渲染vk_lod_clusters示例集成meshoptimizer的clusterlod.h头文件,仅需2GB几何体池即可高效渲染Zorah资产
Advanced Matrix Multiplication Optimization on Modern Multi-Core Processors8 months agohttps://salykova.github.io/gemm-cpu这篇博客文章探讨了如何利用FMA3和AVX2指令集在现代多核处理器上优化FP32矩阵乘法运算性能调优需要调整线程数、内核大小和分块尺寸等超参数以达到峰值性能在支持AVX-512指令集的CPU上,BLAS库可能因使用专用指令而优于自定义实现矩阵乘法是神经网络的基础运算,通常依赖Intel MKL、OpenBLAS或BLIS等优化过的BLAS库该实现专注于纯C代码而非汇编语言,以确保广泛的x86-64处理器兼容性关键优化技术包括内核设计、缓存分块和SIMD指令集利用内核函数通过外积运算和秩1更新高效计算子矩阵缓存分块技术通过将矩阵划分为适合CPU缓存层级的小块来最小化内存访问采用多线程技术处理算术运算和矩阵打包操作,以最大化CPU核心利用率性能指标以FLOPS衡量,理论极限取决于CPU主频和核心数量
Universal Gradient Methods in Nonlinear Optimization7 months agohttps://arxiv.org/abs/2509.20902复合优化的通用一阶方法及新复杂度分析提供不直接关联任何参数问题类的普适收敛保证通过全局曲率界替换获得特定问题类的收敛速率分析非凸最小化和凸复合优化中的简单梯度法加速变体确保在所有参数问题类中获得最佳可能收敛速率输入参数为近似解的所需精度
Optimizing a 6502 image decoder – part II: assembly7 months agohttps://www.colino.net/wordpress/en/archives/2025/10/03/optimizing-a-6502-image-...在1MHz 8位处理器上优化速度需要运用多种技巧,包括预测分支、查找表和自修改代码。通过缓冲区对齐避免跨页惩罚,并坚持使用8位操作可显著提升性能。避免使用栈传递函数参数和内联操作能减少开销并加速执行。查找表被用来替代移位等耗时操作,提供更快的替代方案。自修补代码和分支预测技术有助于优化高频使用的代码路径。将16位缓冲区拆分为独立的高低字节数组可简化访问并提高效率。硬编码指针和近似计算能节省时钟周期,特别适用于紧凑循环。通过分析数据模式可实现特殊场景优化,例如更高效地处理常见值。避免不必要的检查并充分利用硬件限制条件可进一步优化性能。文章最后总结了优化过程的经验,并探讨了未来可能的改进方向。
How does gradient descent work?7 months agohttps://centralflows.github.io/part1/本文提出了一种深度学习梯度下降的新分析方法,聚焦于'稳定性边缘'(EOS)动态特性。传统梯度下降分析无法捕捉深度学习动态,特别是当锐度(最大Hessian特征值)超过2/η时。深度学习中的梯度下降常会脱离稳定区域(锐度<2/η),但会通过降低锐度的振荡实现自我调节。三阶泰勒展开表明梯度下降具有隐式负反馈机制,通过振荡调节锐度。论文提出'中心流'微分方程,建模梯度下降的时间平均轨迹,包含EOS状态下的行为。中心流精确预测振荡协方差,并与不同架构下梯度下降的长期路径相匹配。沿中心流的损失函数是隐藏的进度指标,呈现单调递减特性,与梯度下降下的非单调损失不同。实证结果表明中心流预测在不同神经网络和任务中均成立,验证了其普适性。
The math behind tiled v/s naive matrix multiplication in CUDA7 months agohttps://alvinwan.com/how-to-tile-matrix-multiplication/矩阵乘法通过'分块'优化以提高在功耗、内存和计算方面的资源利用率分块技术通过减少内存访问来降低延迟,这对依赖密集矩阵乘法的Transformer等模型至关重要该技术通过重复利用矩阵的行和列来最小化数据获取,使总内存访问次数减少为分块大小的倒数倍并行化和更好的内存管理是分块的主要优势,能显著加速矩阵乘法运算硬件内存限制会制约分块大小,但采用部分数据获取等策略可帮助突破这些限制分块效果可通过内存访问次数的减少来量化,其优化幅度与分块大小成比例关系文章最后讨论了分块实施的实用考量,包括内存子系统层级结构和分块大小的权衡取舍
Researchers Discover the Optimal Way to Optimize7 months agohttps://www.quantamagazine.org/researchers-discover-the-optimal-way-to-optimize-...乔治·丹齐格在1939年偶然解决了统计学中两个著名的开放性问题,这一事迹后来启发了电影《心灵捕手》的创作。20世纪40年代,丹齐格为美国空军发明了单纯形法来解决优化问题,该算法至今仍被广泛应用。单纯形法将优化问题转化为几何问题,通过在多面体中导航来寻找最优解。1972年数学家证明单纯形法在最坏情况下可能需要指数级时间,这引发了理论界的担忧。索菲·胡贝尔茨和埃莱奥诺·巴赫2023年的论文提升了单纯形法的效率,并解决了关于指数级运行时间的理论担忧。他们的研究建立在2001年丹尼尔·斯皮尔曼和滕尚华的研究基础上,通过引入随机性来避免最坏情况。这项新研究为单纯形法的实际效率提供了更有力的数学支持,缓解了人们对指数级复杂度的担忧。未来研究目标是实现约束条件下的线性扩展,尽管这仍是一个遥远的目标。
Deterministic multithreading is hard (2024)7 months agohttps://www.factorio.com/blog/post/fff-415有用户报告称在多个Windows和Linux电脑上出现了涉及模组API的同步错误该问题被追踪到与CPU核心数相关的线程确定性问题上,影响了区块生成2.0版本已实施修复方案来解决这个线程问题现在专用服务器会保持暂停状态,直到至少一名玩家完全加载进游戏新增了玩家加入时自动暂停游戏的选项,以防止大地图或慢速连接导致的问题通过优化物流网络区域检查算法,提高了建筑机器人的工作效率该优化将算法复杂度从O(N)降低到O(logN),使得检查速度大幅提升2.0版本增加了每次更新时检查的建筑任务数量,以解决'缺少材料/机器人'的警报问题
Why SSA?7 months agohttps://mcyoung.xyz/2025/10/21/ssa-1/SSA(静态单赋值)是LLVM、GCC、Go、CUDA、Swift和MSVC等优化编译器采用的流行编译器架构SSA通过确保每个变量仅被赋值一次,使程序类似于组合电路,从而简化程序分析和转换SSA形式中的基本块是由非控制流操作组成的序列,以终止指令结尾,共同构成控制流图(CFG)控制流图中的支配关系通过定义块之间的层次结构,帮助程序结构优化内存依赖分析对提升加载/存储操作至关重要,可通过减少冗余操作优化性能SSA的电路特性支持高效的图算法,简化死代码消除和控制流图简化等优化清理阶段(如无用结果消除和CFG简化)可保持转换后的中间表示高效且可读SSA优化的未来方向包括公共子表达式消除/全局值编号、循环优化,以及从SSA到有限寄存器机器码的转换
Luau's Performance7 months agohttps://luau.org/performanceLuau 旨在提升游戏代码的高性能表现,专注于加速惯用代码并支持深度调优Luau 主要在解释环境中运行,支持通过类型注解在x64和arm64平台启用可选JIT编译配备高度优化的可移植字节码解释器,专为Clang和MSVC的高效汇编而优化采用多阶段编译器生成更灵活优化的字节码,过程间优化仅限于单个模块实现零开销调试器(无钩子),通过字节码修补和定制解释器循环处理断点与单步执行通过内联缓存和HREFs优化表和全局访问,编译期已知字段名时可获得最佳性能对方法调用和内置函数调用进行特化加速,并优化常见Lua惯用写法提供优化的表遍历和长度计算操作,#t复杂度为O(logN),并为常见模式配备专用迭代器内置快速内存分配器与优化GC节奏策略,降低停顿提升吞吐量原生支持3分量32位浮点向量运算,减轻GC压力并提升性能对不可变上值进行存储优化,减少分配次数并改善内存局部性实现闭包缓存机制复用函数对象,降低分配频率标准库函数深度优化,提供table.create/table.find等高性能工具函数采用增量式垃圾回收器,通过协程增量标记/可收缩弱表等优化减少停顿在优化级别2支持函数内联和循环展开,在可放松调试性要求的场景提升性能
Modern Perfect Hashing7 months agohttps://blog.sesse.net/blog/tech/2025-10-23-21-23_modern_perfect_hashing.html现代字符串完美哈希的目标是将固定字符串集高效映射到预定义的整数上。该方法通过按字符串长度分组来优化边界检查和SIMD内存比较。曾考虑使用PEXT(位提取)技术,但因表格过大及Arm/部分x86 CPU不支持而被放弃。受计算机象棋启发的解决方案采用魔术数将稀疏位转换为无冲突哈希表。以4字符CSS关键词为例,演示如何用魔术数实现零碰撞表索引。当键值较少时,简单内存比较已足够,无需复杂哈希计算。魔术数搜索采用试错法,通过杀手启发式快速排除无效候选值加速过程。若找不到魔术数,建议根据字符检查分组处理,但性能表现不稳定。最终实现速度比gperf快两倍且代码量减半,但搜索过程耗时较长。