ic性能测试

前言

打算暑假里在 ic 搞个简单算法竞赛忽悠鼓励一些人加入算法竞赛圈子,为了吸引人打算允许触发器参赛并放大时限,于是打算测试一下 ic 触发器/Lua 的性能

本地测试

测试CPU:AMD Ryzen 7 9700X

测试项目 C++ Lua in ic Lua Python ic触发器
for循环空跑1e8次 0.018s 0.018s 0.403s 1.29s 5s
密集浮点计算1e7次 0.270s 0.968s 2.395s 4.758s 290s¹
线性筛全家桶到1e7 0.240s 2.748s 8s² 6.902s ——³
  1. N=1e6 时,运行约 29s,计算得出此数据
  2. N=1e7 时,命令行返回lua: not enough memory,N改为1e6时用时0.8s,计算得出此数据
  3. 线性筛全家桶码量略大,暂未在 ic 触发器中复刻

另外,在洛谷ide测试了for循环空跑密集浮点计算,以下为测试结果

测试项目 C++14(GCC9) Lua Python3 PyPy3
for循环空跑1e8次 0.144s 0.317s 6.75s(计算得出) 0.069s
密集浮点计算1e7次 0.506s 5.03s(计算得出) 12.4s(计算得出) 1.465s

更复杂的任务我们以后再测试

可见触发器在面对更加困难的任务时效率衰减相当明显,这几乎断了我们允许触发器参赛的路子。

有趣的是本地运行的触发器for循环空跑薄纱洛谷跑的 Python,所以触发器已经超越了 Python!

触发器是世界上最好的编程语言!

我们发现 ic 中使用的 Lua 简直快到飞起,比官方的 Lua 快了数倍。起初我以为是因为 ToLua 使用了 LuaJIT,但是GPT否定了。那么为什么 Lua in ic 会快这么多呢,有知道的大佬可以发在评论区。

更新:确实是因为使用了 LuaJIT,GPT 是错的

后记

本测试后两项代码取自感性理解洛谷评测机速度(2025.06.01) by chen_zhe,并由 GPT-4o 修改为 Lua 和Python 版本,方块菌翻译密集浮点计算为触发器版本,可以在 ic 搜索密集浮点计算(触发器复刻)测试,但是要做好卡死的准备

参考资料

[1] 感性理解洛谷评测机速度(2025.06.01) by chen_zhe

[2] ChatGPT