Mojo 标准库基准测试的多语言真实数据集:从《联合国宪章》到集合与字符串性能评估
Mojo 标准库基准测试的多语言真实数据集从《联合国宪章》到集合与字符串性能评估【免费下载链接】mojoThe Modular Platform (includes MAX Mojo)项目地址: https://gitcode.com/GitHub_Trending/mo/mojo导读本篇技术指南深入解析 Mojo 标准库Mojo/stdlib集合类基准测试所依赖的核心数据资产以《联合国宪章》官方文本为蓝本、覆盖英语 / 西班牙语 / 阿拉伯语 / 俄语 / 简体中文五种语言的真实语料库。你将了解这批数据集的设计初衷、文件构成、在bench_dict_string、bench_string、bench_grapheme等基准中的实际消费方式以及如何通过 Bazel 目标运行这些基准从而学会用真实多语言数据评估Dict[String]、字符串处理与字素分割等集合与文本能力的性能。数据集的设计初衷为什么基准需要尽可能真实的数据数据目录的 README 开宗明义这里的每一份数据集都以尽可能接近现实As realistic as possible为目标。这句话背后是基准工程中的一个关键问题——输入数据的形态直接决定测量结果的代表性合成数据如连续的整数键在哈希分布、键长、字符集上过于规整无法暴露真实负载下的哈希碰撞、扩容抖动、UTF-8 解码与缓存局部性问题真实文本则天然带有不均匀的词频分布、长短不一的 token、多字节字符与各类语言特有的书写系统特征能让基准结论更接近生产环境。《联合国宪章》正是这种真实数据的典型代表它是一份篇幅适中、语言规范、且由联合国官方提供多语言权威译本的国际法律文件天然具备同一语义内容、多种文字形态的对照价值非常适合用来横向比较不同书写系统对哈希、字符串扫描与字素分割性能的影响。数据集的构成联合国宪章的五语言版本数据集位于 Mojo/stdlib/benchmarks/collections/data每个语言版本同时提供.txt与.html两种格式共 10 个文件语言版本语言代码文本文件.txtHTML 文件.html英语ENUN_charter_EN.txtUN_charter_EN.html西班牙语ESUN_charter_ES.txtUN_charter_ES.html阿拉伯语ARUN_charter_AR.txtUN_charter_AR.html俄语RUUN_charter_RU.txtUN_charter_RU.html简体中文zh-CNUN_charter_zh-CN.txtUN_charter_zh-CN.html原文档特别强调了一条命名约定语言缩写遵循ISO 639-1标准唯一的例外是简体中文使用zh-CN而非标准的zh。这一约定在基准代码中以StaticString文件名参数的形式被反复引用例如bench_string.mojo中的默认参数filename: StaticString UN_charter_EN运行时再拼接.txt后缀读取文件。数据来源与格式差异文本内容取自联合国官方网站发布的《联合国宪章》全文每种语言均为官方权威译本.txt版本用于按空白分词生成短键或按行切分生成长键后驱动键值类基准.html版本保留了文档的标记结构适合将来用于解析类parser、HTML tokenizer 等基准的扩展。从仓库实测来看五个.txt文件合计约 336 KB、2453 行行数在 452ES到 608zh-CN之间.html文件合计约 885 KB。这种中等规模 多语言 双格式的搭配让同一份数据既能支撑微基准micro-benchmark也为更大规模的负载测试提供了可复制的输入。数据如何被基准测试消费源码级读取路径数据集本身只是静态文件真正让它们产生价值的是基准代码中的加载函数。所有读取都基于 Mojo 的_dir_of_current_file()见 std/pathlib确保基准无论从哪个工作目录启动都能定位到./data子目录下的数据文件。短键与长键两种键形态bench_dict_string.mojo 提供了两种截然不同的键生成方式用于考察不同键长分布下哈希表的行为def make_small_keys(filename: String UN_charter_EN.txt) - List[String]: var directory _dir_of_current_file() / data var f open(directory / filename, r) var content f.read() return _to_string_list(content.split())make_small_keys对全文按空白字符分词产出数千个短小、可重复的单词键。这是模拟词频统计、倒排索引这类真实场景make_long_keys对全文按换行符切分产出长句级别的键模拟整行文本作为键如日志行去重、文档指纹缓存的场景。两者默认都指向UN_charter_EN.txt且函数签名允许通过参数切换到阿拉伯语、俄语等任意语言版本——这正是五语言数据集的价值所在同一套基准可以一键对比不同书写系统下的哈希与比较开销。基准主入口中的语言矩阵bench_dict_string.mojo 的 main() 会先对五个语言版本逐一执行正确性校验validate_dicts用assert_equal断言标准库Dict[String, Int]与仓库内自研的StringDict长度一致再为每种语言、每种键形态注册独立的基准函数形成bench_dict_init_with_short_keys EN/AR/ES/RU/zh-CN、bench_dict_init_with_long_keys ...、bench_string_dict_init_with_short_keys ...等 20 个基准点并通过Bench(BenchConfig(num_repetitions5))统一调度num_repetitions控制每项重复测量次数。字符串与字素基准的消费方式数据集的用途不止于哈希表bench_string.mojo 的make_string[length]把整个文件读入String可选地按字节长度重复/截断内容并保证截断在合法 UTF-8 边界上用于count、split等字符串扫描基准bench_grapheme.mojo 与bench_grapheme_reverse.mojo用它对比count_graphemes()与count_codepoints()在不同文本画像英语、西班牙语、阿拉伯语、俄语、中文下的分割性能——阿拉伯语的连字、俄语的西里尔字母、中文的 CJK 字符正是字素边界算法最容易产生分歧的输入。该文件注释还标明这是一个待合并的重复实现TODO: duplicated from bench_string.mojo说明数据读取逻辑正计划收敛为共享工具模块。构建与运行Bazel 目标与数据依赖数据集通过 Mojo/stdlib/benchmarks/BUILD.bazel 中的_DATA列表统一注册_DATA [ collections/data/UN_charter_AR.html, collections/data/UN_charter_AR.txt, collections/data/UN_charter_EN.html, collections/data/UN_charter_EN.txt, ... collections/string/data/canada.txt, collections/string/data/mesh.txt, ]_DATA会作为data依赖注入到每一个由glob([**/*.mojo])生成的mojo_test目标中保证基准运行时可读。每个bench_*.mojo源文件会派生两类 Bazel 目标src.smoke以-tMode.Test运行一次属于廉价编译冒烟检查随每次 PR 的 presubmit 执行防止基准静默腐化silently bitrotsrc.bench以完整配置的重复次数运行并输出计时标记为manualstdlib-benchmark不会被//...通配符扫入只能显式请求。运行单个集合基准的完整测量./bazelw test //Mojo/stdlib/benchmarks/collections:bench_dict_string.mojo.bench \ --test_outputall运行全部标准库基准./bazelw test //Mojo/stdlib/benchmarks:all_benchmarks \ --local_test_jobs1 --test_outputall--local_test_jobs1强制串行执行避免并发基准相互干扰计时all_benchmarks是benchmarks/BUILD.bazel中声明的test_suite会自动展开到所有.bench目标。仅跑冒烟变体则直接使用./bazelw test //Mojo/stdlib/benchmarks/...无需任何标志切换——.bench目标的manual标签保证了通配符展开时自动跳过。数据集选择背后的工程考量综合原文档与基准源码这套联合国宪章五语言语料的选型至少回应了四个真实负载维度哈希分布自然语言单词的词频高度不均Zipf 分布比均匀合成键更能检验哈希函数与负载因子的鲁棒性键长差异split()产出的短键与按行切分的长键覆盖了两端极值可分别考察哈希计算成本与逐字节比较成本多字节与多书写系统UTF-8 变长编码、阿拉伯语从右到左文本、俄语扩展西里尔字符、中文 CJK 字形全面覆盖了字符串扫描、字素聚类与码点计数的边界条件结果可复现数据是随仓库发布的静态文件任何人在任何机器上运行同一基准都会得到相同的输入序列这为后续对比不同提交commit之间的性能回归提供了前提。需要说明的是数据集的语料规模每语言约 40–105 KB 纯文本使其更适合微基准与单元级负载测试而非大规模吞吐压测若需更大负载make_string[length]提供的按字节长度重复能力bench_string.mojo正是为这种扩展场景预留的接口。【免费下载链接】mojoThe Modular Platform (includes MAX Mojo)项目地址: https://gitcode.com/GitHub_Trending/mo/mojo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →