CANN PTO-ISA 测试体系全指南:从 CPU 模拟器到 NPU 板载的 ST 测试与多卡 Comm 测试实战
CANN PTO-ISA 测试体系全指南从 CPU 模拟器到 NPU 板载的 ST 测试与多卡 Comm 测试实战【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa导读tests/是 PTO Tile Lib 的测试总入口覆盖CPU 模拟器CPU simulation与NPUsim 模拟模式与板载 npu 模式两条完整验证链路并配套 GEMM、Flash Attention 等可运行 demo。本文以 tests/README.md 为核心骨架结合仓库内tests/run_cpu.py、tests/script/run_st.py、tests/run_st.sh、tests/run_comm_test.sh等入口脚本的源码实现系统讲解如何搭建环境、运行单用例/全量用例、以及如何基于 MPI HCCL 跑通多设备通信原语tput / tget / tput_async 等的 Comm ST 测试。读完本文你将能独立完成 CPU 模拟器全量回归、NPU 单测定位、以及 2/4/8 卡通信用例的编排与排错。一、测试体系总览一条命令覆盖两种运行后端PTO Tile Lib 的测试用例采用同一套测试代码 双后端的组织方式CPU 后端以 gtest CMake 构建在纯 CPU 上模拟 Tile 指令行为跨平台macOS / Linux / Windows无需任何 NPU 硬件是新手入门与日常回归的首选NPU 后端按 SoC 拆分A2/A3、A5、Kirin9030、KirinX90、KirinDev0000 等通过sim使用 CANN 自带 simulator/camodel或npu真实板卡两种运行模式执行。tests/README.md给出的通用测试入口如下# 全量 CPU 模拟器回归清理后重建并打印详细日志 python3 tests/run_cpu.py --clean --verbose # 运行 GEMM demo python3 tests/run_cpu.py --demo gemm --verbose # 运行 Flash Attention demo python3 tests/run_cpu.py --demo flash_attn --verbose # 运行单个 NPU ST 用例-r 指定 sim/npu-v 指定 a3/a5-t 指定用例-g 指定 gtest 过滤 python3 tests/script/run_st.py -r [sim|npu] -v [a3|a5] -t [TEST_CASE] -g [GTEST_FILTER_CASE] # 一键脚本 ./tests/run_st.sh --a3 --sim --all ./tests/run_cpu_tests.sh其中run_st.sh的用法有严格约束详见 tests/run_st.sh必须同时给出平台标志--a3/--a5/--a3_a5/--kirin9030且对于--a3/--a5还必须给出模式标志--simple或--all运行模式--sim/--npu可选缺省为板载npu。注意参数前的--前缀是必填的用无参数或非法参数方式运行./tests/run_st.sh即可打印完整 usage。从 tests/run_st.sh 的usage()实现可以看到脚本支持--a3_a5同时跑 A2/A3 与 A5、--kirinX90、--kirinDev0000等更多平台以及--comm附带通信 ST与--auto_mode以 auto 模式运行 ST两个附加开关。二、目录结构解读脚本、用例与资源的分布tests/目录采用「脚本驱动 按后端/SoC 分仓」的布局tests/README.md的 Layout 小节定义如下script/推荐使用的入口脚本run_st.py构建并运行 NPU STbuild_st.py仅构建 NPU STall_cpu_tests.py批量构建并运行 CPU ST 套件cpu_bfloat16.pyCPU bfloat16 测试脚本README.md脚本使用说明cpu/CPU 侧 ST 测试gtest CMakest/CPU 计算 ST 工程与测试数据生成脚本comm/st/CPU 通信 STnpu/按 SoC 拆分的 NPU 侧 ST 测试a2a3/src/st/、a2a3/src/common/、a2a3/comm/st/A2/A3 计算 ST、共享测试资源、通信 STa5/src/st/、a5/src/common/、a5/comm/st/A5 对应目录kirin9030/src/st/、kirin9030/src/common/Kirin9030 对应目录costmodel/成本模型测试st/成本模型 ST算子成本测量st_fit/成本模型拟合测试common/共享测试资源run_cpu.pyCPU 模拟器全量运行入口run_cpu_tests.shCPU ST 一键脚本内部就是透传调用 all_cpu_tests.pyrun_st.shNPU ST 一键脚本run_comm_test.sh通信 ST 一键脚本run_costmodel.py、run_costmodel_tests.sh成本模型运行脚本与一键脚本validate_op_coverage.py算子覆盖度校验脚本validate_testcase_names.py用例命名校验脚本从源码层面补充两点结构事实NPU 用例按 testcase 目录组织。以 tests/npu/a2a3/comm/st/testcase 为例每个通信指令tput、tget、tput_async、tget_async、tnotify、twait、ttest、tbroadcast、tgather、tscatter、treduce等都是一个独立子目录并共享comm_mpi.h、hccl_context.h、common.hpp等公共头文件。覆盖度可机器校验。tests/validate_op_coverage.py 会把tests/npu/{a2a3,a5,kirin9030}/src/st/testcase下含main.cpp的用例目录与run_st.sh中实际引用的算子做比对缺失时以非零退出码报错——这保证了「脚本能跑的用例」与「代码里存在的用例」不脱节。三、CPU 模拟器测试从零开始的全量回归3.1 环境要求进入 CPU 模拟器链路前建议先核对 docs/getting-started.md 中列出的前置依赖Python 3.11CMake 3.16支持 C20 的编译器Linux 上 GCC 13 或 Clang 15GCC 14可开启 bfloat16 支持macOS 用 Xcode/AppleClangWindows 用 VS2022 Build ToolsMSVCPython 包numpy 1.22.0以及按需的ml_dtypes、en_dtypes仅部分特定用例需要。tests/run_cpu.py会在缺少cmake/ctest时自动通过 pip 安装除非传入--no-install也会自动检测编译器从源码看其优先级是先找clang 15再找g 13找不到则报错退出同时支持CXX/CC环境变量与--cxx/--cc显式指定见 tests/run_cpu.py 的编译器检测逻辑。3.2 运行方式与参数详解参数作用说明--clean删除构建目录后重建默认构建目录为tests/cpu/st/build--verbose打印 cmake/msbuild/gtest 全量输出默认静默只输出结构化日志-t, --testcase只运行单个用例如tadd缺省运行所有已构建二进制-g, --gtest_filtergtest 过滤如TADDTest.*可精确到单个 case--demo构建并运行 demo可选gemm/flash_attn/mla/alldemo 模式单独运行不跑 CPU ST--build-typeCMake 构建类型默认Release--enable-bf16开启 BF16 CPU-SIM 覆盖需要支持 C23std::bfloat16_t的编译器--trace-mode开启 PTO 指令追踪通过PTO_CPU_SIM_TRACE_MODE生效--no-build跳过 cmake 配置与构建只运行已有二进制--no-gen跳过gen_data.py测试数据生成--xml-dir输出 gtest XML 报告便于 CI 集成--generator指定 CMake 生成器Windows 必填如MinGW Makefiles、Ninja--cmake_prefix_path指定CMAKE_PREFIX_PATH例如 Windows 上的 gtest 路径典型命令# 单用例 gtest 过滤只跑 TADDTest 下的全部 case python3 tests/run_cpu.py --testcase tadd --gtest_filter TADDTest.* # 指定编译器 python3 tests/run_cpu.py --cxx/path/to/compiler # Windows 下使用 MinGW 外部 gtest python3 tests/run_cpu.py --clean --generator MinGW Makefiles --cmake_prefix_path D:\gtest\ # 输出 XML 测试报告 python3 tests/run_cpu.py --xml-dir reports3.3 底层执行链路源码视角tests/run_cpu.py的完整流程可以拆成五段对应源码中的函数参数解析与环境准备parse_arguments/setup_environment解析上表参数缺失工具自动安装编译器决策detect_compilers显式指定 → 环境变量 → 自动探测clang15 / g13并推导配套的 CC构建决策determine_need_build/perform_build通过读取CMakeCache.txt中的TEST_CASE变量与build/bin下已有二进制判断是否需要重新 cmake configure支持增量跳过配置时会把-DPTO_CPU_SIM_ENABLE_BF16、-DPTO_CPU_SIM_TRACE_MODE、-DTEST_CASE等传入 CMake数据生成run_selected_tests对每个用例执行其testcase/name/gen_data.py复制到构建目录后运行并临时注入PYTHONPATH与PTO_CPU_SIM_ENABLE_BF16环境变量生成 golden 数据执行与汇总run_gtest_binary/print_test_summary逐个运行build/bin/testcase二进制支持--gtest_filter与--gtest_outputxml:最后以表格形式汇总每个用例的 PASS/FAIL 与耗时。从执行细节看CPU 用例的测试数据位于构建目录下测试二进制从build/bin/启动以便用../suite/input1.bin形式的相对路径访问输入数据见 tests/run_cpu.py——这一点在自定义用例或排查「找不到输入文件」类问题时值得留意。3.4 CPU ST 批量脚本若希望批量跑 CPU 套件直接使用 all_cpu_tests.py或等价的一键脚本./tests/run_cpu_tests.sh其常用选项选项说明-v, --verbose打印构建/运行输出-c, --compilerC 编译器路径或名称--enable-bf16使用 C23 编译器开启 BF16 覆盖--trace-mode以指令追踪模式构建 CPU ST-g, --generator可选 CMake 生成器-j, --jobs并行构建任务数--timeout单测试超时秒--build-folder可选构建根目录其下创建cpu_st与cpu_st_commpython3 tests/script/all_cpu_tests.py --verbose python3 tests/script/all_cpu_tests.py --trace-mode --build-folder build/trace_cpu四、NPU ST 测试sim 与板载 npu 模式4.1 前置条件NPU 链路要求 Linux 环境与 Ascend CANN 工具链Linux推荐 Ubuntu 20.04Python 3.9GCC 7.3.0CMake 3.16GoogleTest单元测试依赖CANN toolkit 8.5.0板载运行还需要 NPU 驱动与固件安装后执行source /usr/local/Ascend/cann/bin/setenv.bash或自定义安装路径下的setenv.bash。完整安装含 driver、firmware、toolkit、一键脚本scripts/install_pto.sh步骤参见 docs/getting-started.md 的 Part 2。4.2 run_st.py 参数与典型用法run_st.py 是 NPU ST 的底层构建运行入口公共参数参数说明-r, --run-modesim或npu-v, --soc-versiona3/a5/a6/kirin9030/kirinX90/kirinDev0000-t, --testcase用例名如tmatmul通信用例用comm/tput形式-g, --gtest_filter可选 gtest 过滤单跑某个 case-d, --debug-enable开启 debug 构建检查仅run_st.py-a, --auto-mode-enable以 auto 模式运行-w, --without-build跳过编译需预先编译过-n, --nrankscomm 测试最大 MPI rank 数默认 8自动按 2/4/8 分轮执行# 在 A3 模拟器上单跑 TMATMULTest.case1 python3 tests/script/run_st.py -r sim -v a3 -t tmatmul -g TMATMULTest.case1 # 在 A5 板卡上单跑 TMATMULTest.case1 python3 tests/script/run_st.py -r npu -v a5 -t tmatmul -g TMATMULTest.case1注意a3后端覆盖 A2/A3 家族对应include/pto/npu/a2a3a5对应include/pto/npu/a5。4.3 底层执行链路源码视角从 run_st.py 的main()可以看到NPU ST 的执行分为四步目录定位根据-v与是否为comm/用例把工作目录切换到对应的 ST 工程目录如tests/npu/a2a3/src/st、tests/npu/a2a3/comm/st、tests/npu/a5/src/st、tests/npu/kirin9030/src/st等环境变量设置set_env_variablessim 模式下会把ASCEND_HOME_PATH/runtime/lib64/stub加入LD_LIBRARY_PATH并剔除路径中含/runtime/lib64的旧项避免与 stub 冲突随后sourceCANN 的setenv.bash/set_env.sh并把环境注入当前进程最后把 simulator 的camodel或lib目录追加到LD_LIBRARY_PATHsim模式的 SoC 名还会做映射如Ascend950PR_9599→Ascend910_9599以便在tools/simulator/soc下找到 camodel构建build_project清理build/目录后用cmake -DRUN_MODE... -DSOC_VERSION... -DTEST_CASE...debug 时追加-DDEBUG_MODEONauto 时追加-DAUTO_MODEON配置再make -j$(nproc)编译数据生成与运行run_gen_data/run_binary把testcase/name/gen_data.py复制到构建目录并执行生成 golden 数据运行阶段若run_mode sim会预先创建camodel_log、log/ub_log目录并设置CAMODEL_LOG_PATH然后直接执行./testcase可加--gtest_filter。4.4 run_st.sh 一键编排simple / all / 平台run_st.sh在run_st.py之上做了一层编排平台、模式、运行模式三组参数任意组合脚本内部根据组合展开成大量run_st.py调用。--simple跑精心挑选的单用例子集如 A3 下TADDTest.case_float_64x64_64x64、TMULTest.case_float_64x64_64x64_64x64、TMATMULTest.case1等用于快速冒烟--all跑全量 ST 套件A3 下覆盖 tadd、tand、tor、tsels、tmul、tdiv、tmatmul、tload、tstore、textract、tinsert、tgather、mscatter、mgather、tpushpop_* 等数十个指令族A5 下额外覆盖 tinterleave、tdeinterleave、thistogram、tmatmul_mx、tload_mx_* 等平台切换--a3、--a5、--a3_a5、--kirin9030、--kirinX90、--kirinDev0000运行模式--sim或--npu缺省 npu。# A5 板卡上跑推荐子集 ./tests/run_st.sh --a5 --npu --simple # A3 模拟器上跑全量先提高文件描述符上限模拟器场景常见建议 ulimit -n 65536 ./tests/run_st.sh --a3 --sim --all # 附带通信 ST ./tests/run_st.sh --a3 --sim --all --comm从脚本源码可以看到几个值得注意的实现细节参数校验是「硬校验」未选平台或 a3/a5 未选模式会直接报错退出exit 1避免误输入导致静默空跑支持ST_PART环境变量分片执行如ST_PART1只跑清单中的第 1 片便于把长列表分发到多台机器并行部分用例在 auto 模式下会被跳过例如tpushpop_*系列目前必须直接调用 CCE intrinsicsauto 模式无法编译且 auto-sync 与 CCE intrinsics 不兼容脚本中相应位置有IS_AUTO_MODEfalse守卫。五、通信测试Comm ST多设备 PTO 通信原语验证5.1 验证对象与架构通信测试用于验证多设备PTO 通信原语覆盖Put / Get / Broadcast / Gather / Scatter / Reduce / Notify / Wait / Test底层构建在MPI HCCL之上。对应用例目录见 tests/npu/a2a3/comm/st/testcasetput、tget、tnotify、twait、ttest、tbroadcast、tgather、tscatter、treduce、tput_async、tget_async、tput_async_notify。5.2 前置条件MPI 安装Comm 测试依赖 MPI 环境MPICH 或 OpenMPI运行时需要两个组件mpirun负责拉起多进程执行libmpi.so运行时通过dlopen加载。安装 MPICH推荐# Ubuntu / Debian sudo apt install mpich libmpich-dev # CentOS / RHEL / EulerOS sudo yum install mpich mpich-devel # 可能需要手动加载 module 或加入 PATH export PATH/usr/lib64/mpich/bin:$PATH无 root 权限源码编译 MPICHwget https://www.mpich.org/static/downloads/4.2.3/mpich-4.2.3.tar.gz tar xzf mpich-4.2.3.tar.gz cd mpich-4.2.3 ./configure --prefix$HOME/mpich --disable-fortran make -j$(nproc) make install export MPI_HOME$HOME/mpich export PATH$MPI_HOME/bin:$PATH环境变量变量说明MPI_HOMEMPI 安装根目录脚本会优先查找$MPI_HOME/bin/mpirunMPI_LIB_PATHlibmpi.so的直接路径覆盖默认查找如果mpirun已经在PATH中且libmpi.so位于标准库路径这两个变量都可以不设置。验证安装mpirun --version mpirun -n 2 echo MPI OK源码佐证run_st.py 的find_mpirun()依次尝试$MPI_HOME/bin/mpirun、/usr/local/mpich/bin/mpirun、/usr/local/bin/mpirun、/usr/bin/mpirun与PATH运行时若找不到会给出「Install MPICH/OpenMPI or set MPI_HOME env」的明确报错。对于 OpenMPI脚本还会自动追加--allow-run-as-root便于容器/root 环境。运行二进制前会把mpirun所在目录的../lib/libmpi.so探测出来写入MPI_LIB_PATH。5.3 同步 vs 异步指令测试Comm 测试分为同步指令如tput、tget与异步指令如tput_async、tget_async类型用例示例所需 CANN 版本同步tput、tget、treduce、tbroadcast等CANN 8.x 及以上异步tput_async、tget_asyncCANN 9.0 及以上异步指令依赖 CANN 9.0 引入的 SDMA opapi 接口如aclnnShmemSdmaStarsQuery在更低版本 CANN 上会因缺少符号而失败。因此 run_comm_test.sh默认排除异步用例需要显式加-a开启。5.4 快速开始# 用 8 张 NPU 跑全部测试默认 A2/A3不含异步 ./run_comm_test.sh # 包含异步指令测试需要 CANN 9.0 ./run_comm_test.sh -a # 只跑异步 tput 用例 ./run_comm_test.sh -t tput_async # A5 SoC2 张 NPU ./run_comm_test.sh -v a5 -n 2 # 只跑 tput 用例 ./run_comm_test.sh -t tput # 开启 debug 日志 ./run_comm_test.sh -d -t tput也可以直接用run_st.py按 rank 数自动拆分执行# 自动把 tput_async 按 2/4/8 rank 拆分 python3 tests/script/run_st.py -r npu -v a3 -t comm/tput_async # 限制最多 2 rank python3 tests/script/run_st.py -r npu -v a3 -t comm/tput_async -n 25.5 run_comm_test.sh 选项标志说明默认-n可用 NPU 数量2、4 或 88-vSoC 版本a3Ascend910B或a5Ascend950a3-t只运行指定用例可重复如tput、treduceall-a包含名称含_async的异步用例需要 CANN 9.0off-d开启 debug 模式每个同步点打印详细日志off5.6 工作原理按 rank 数自动分轮执行run_comm_test.sh会针对每个用例在可用的 rank 数2 / 4 / 8不超过-n上分别执行一轮并用 gtest filter 只选中与当前 rank 数匹配的测试。例如-n 4时先以 2 rank 运行默认测试再以 4 rank 运行带4Ranks后缀的测试跳过 8 rank 的测试。实现层面有两处关键机制见 tests/run_comm_test.sh命名约定驱动的 filter所有多 rank 用例遵循*_NRanks/*_Nranks命名约定因此用通配即可精确筛选——2 rank*-*4Ranks*:*4ranks*:*8Ranks*:*8ranks*4 rank*4Ranks*:*4ranks*8 rank*8Ranks*:*8ranks*构建去重同一用例只在第一轮2 rank构建后续轮次复用并追加-w--without-build跳过编译脚本在每轮通过GTEST_FILTER环境变量把 filter 传给run_st.py。run_st.py侧也内置了同样的 rank 拆分逻辑RANK_LEVELS [2, 4, 8]并在运行前通过探测/dev/davinci0..N统计本机可用 NPU 数若当前 rank 数超过可用 NPU 会打印[SKIP]跳过对于以_ccu结尾的用例CCU 测试还会退化为进程隔离模式解析main.cc中的TEST_F宏为每个 gtest case 单独起一次mpirun。六、质量保障与延伸阅读tests/还提供了两个便于合入检查的辅助脚本validate_op_coverage.py对比run_st.sh引用的算子与testcase目录实际存在的用例保证覆盖无遗漏退出码 0/1 表示通过/缺失validate_testcase_names.py校验用例命名规范。需要说明的一点本文给出的版本、命令与运行方式均以当前仓库实际内容为准具体参数以python3 script -h输出为最新依据。建议按「CPU 先行、NPU 跟进」的路径上手——先通过 docs/getting-started.md 完成环境搭建再回到tests/跑通单用例最后扩展到全量回归与多卡 Comm 测试。【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LeetCode 349. Intersection of Two Arrays 题解:哈希表空间换时间求两个数组的交集

LeetCode 349. Intersection of Two Arrays 题解:哈希表空间换时间求两个数组的交集

LeetCode 349. Intersection of Two Arrays 题解:哈希表空间换时间求两个数组的交集 【免费下载链接】leetcode LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。) 项目地址: https://gitcod…

2026/9/19 10:01:29 阅读更多 →
电容式液位传感器设计:从介电常数建模到抗干扰信号链

电容式液位传感器设计:从介电常数建模到抗干扰信号链

简介:本资源是一份面向自动化、测控技术与仪器、电气工程等专业高年级本科生及初级工程师的电容式液位传感器课程设计实践文档,聚焦工业液位检测场景下的原理理解与电路实现。文档完整覆盖设计原理(基于介电常数变化引起的电容值响应&#xf…

2026/9/19 10:01:29 阅读更多 →
AT89C51单片机开发要点:存储结构、最小系统与定时器串口编程

AT89C51单片机开发要点:存储结构、最小系统与定时器串口编程

简介:面向单片机初学者、电子类专业学生及嵌入式入门开发者,这份AT89C51单片机介绍文档系统梳理了AT89C51的核心特性、管脚定义与基础应用,填补入门阶段对照数据手册理解困难的空白。整包为1个doc格式文档,压缩后仅55KB&#xff0…

2026/9/19 10:01:29 阅读更多 →

最新新闻

原生智能浏览器:实现多步骤办公任务自动规划执行

原生智能浏览器:实现多步骤办公任务自动规划执行

1. 这不是又一个“AI浏览器”,而是办公流的底层重构者Tabbit AI原生智能浏览器,这个名字刚出现时我第一反应是:又一个套壳Chromium加个聊天框的“AI浏览器”?直到我用它在37秒内完成了一整套跨系统、跨平台、带条件判断的周报生成…

2026/9/20 13:57:36 阅读更多 →
OpenCode 在 Windows 上 Segmentation fault?TaoToken 这样改模型通道配置

OpenCode 在 Windows 上 Segmentation fault?TaoToken 这样改模型通道配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 13:57:36 阅读更多 →
OpenClaw 装好 Gateway 在线,模型却调不动?TaoToken 这样改模型通道

OpenClaw 装好 Gateway 在线,模型却调不动?TaoToken 这样改模型通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 13:57:36 阅读更多 →
OpenClaw、Hermes Agent、Claude Code、Codex CLI对比与实战组合

OpenClaw、Hermes Agent、Claude Code、Codex CLI对比与实战组合

最近AI编程圈子里冒出来的东西是真多,光终端里能跑的Agent就有好几个,名字还都挺像。我这边后台被问到最多的就是OpenClaw、Hermes Agent、Claude Code、Codex CLI这四个,很多人分不清它们到底啥区别,也不知道该装哪个、能不能一起…

2026/9/20 13:57:36 阅读更多 →
Claude Code vs Codex:同一把 TaoToken Key 跑 Go 仓库重构的 Token 对照

Claude Code vs Codex:同一把 TaoToken Key 跑 Go 仓库重构的 Token 对照

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 13:57:36 阅读更多 →
BRVAH DiffUtil进阶:AsyncListDiffer如何让列表数据更新丝滑无卡顿

BRVAH DiffUtil进阶:AsyncListDiffer如何让列表数据更新丝滑无卡顿

BRVAH DiffUtil进阶:AsyncListDiffer如何让列表数据更新丝滑无卡顿 【免费下载链接】BaseRecyclerViewAdapterHelper BRVAH:Powerful and flexible RecyclerAdapter 项目地址: https://gitcode.com/gh_mirrors/ba/BaseRecyclerViewAdapterHelper BRVAH&#…

2026/9/20 13:56:35 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →