在字符串性能上,传统 C++库被游戏业打的鼻青脸肿。

2022-12-28 09:44:40 +08:00
 tool2d
今年 2022 C++开发者大会上,有一个写游戏的作者,写了个基于 SIMD 优化的字符串,然后对比了传统 std::string 性能,几乎是秒杀了。

要知道 std::string 也进化了那么多年,时至今日,还是被游戏业打的找不到北,只能说游戏业对于性能的无止尽追求的欲望,实在太强了。

作者也开源了( www.youtube.co.jp/watch?v=fglXeSWGVDc ),并附上了性能对比截图:

13941 次点击
所在节点    C++
69 条回复
NoAnyLove
2022-12-29 13:07:10 +08:00
又是标题党。STL 主要针对的是通用情景,并且尽可能做到最大的兼容性,没必要和针对特定情境和特定架构优化的项目相比。

另外,开源项目中存在一些没有优化的地方有什么好奇怪的,慢慢来嘛,又不是拿工资还看 KPI
cnLittleYu
2022-12-29 15:20:09 +08:00
很多 STL 实现被吐槽慢很多年了,经常看到项目用自己写的 string 来替换 STL ,其实不算新鲜事了。
游戏工程上牛逼的实现非常多,比如经典的快速平方根。
SIMD 在游戏领域用得比较多,之前看 unity 源码,它很多的矩阵运算都是用 SIMD 来优化。但 STL 无论是历史包袱还是通用性的要求,是不太可能为了极限性能去做这种改变的。

没有孰优孰劣,看场景罢了。
andyhuzhill
2022-12-29 15:50:37 +08:00
FrankHB
2022-12-30 01:32:06 +08:00
进来前就在想怕又是个 allocator 拎不清楚的,结果对比一个直接把 allocator 写脸上了……药店碧莲行么?
且不提 COW 的 std::basic_string ( C++11 已经寄了……那年头会折腾的都知道 vstring 和 rope 罢)同样的操作可能反过来吊打,你依赖 SIMD 就已经是可移植性上投降了。
std::string (还不是 std::basic_string )原则上不可能被干掉的最大槽点是污染 stdexcept 外加 ABI (但除了 Itanium 的 mangling 开洞之类的琐碎问题外,根本上这是用户对 ABI 假设普遍自己作死,不是 string 的问题),看不出这个的还真没资格写玩具碰瓷。

@pocarisweat string 本来就是纯数学概念,虽然定义依赖 alphabet 却没所谓字符的意思,你还是先叫 C++的 vector 滚粗吧。
本来叫 vector 的东西 C++的叫 array ,本来叫 string 的东西 C++叫 vector (还硬塞了个 valarray ),然后扯了坨 char_traits ,就这笑话了。
虽然始作俑者应该是 C 硬把 B 的 vector 叫 array ,然后本来叫 array 的东西( C 表达不了) C++里叫[unordered_]map (严格来说是实现了 operator[]的 concept ,vector/basic_string 也算),本来叫 map 的东西叫 transform……乱成一锅粥。
ALGOL 厨二数学学渣祸害了不知道多少人。

@nullptr 比如屑 LLVM 。还不只是 std::string 。
开个_GLIBCXX_DEBUG 不重新编译都能炸了。
litbear
2022-12-30 16:07:50 +08:00
懂点儿,又不多,刷 hacker news 看到个标题,就添油加醋拿到简中社区装 13 。甚至不知道“传统 std::string”这几个字是什么意思
Chinsung
2022-12-30 17:51:45 +08:00
没搞懂,大部分语言集合排序的实现都是快排,我写个桶排或者插排在某些数据下吊打了默认的快排实现,然后也可以发一个这样的帖,是这个意思吗?
tontyoutoure
2022-12-30 19:42:57 +08:00
profiling 下来发现热点在 stdstring 上的时候,花个一半天换个合适的第三方库不就好了么,有啥好吵的么,你又是 c++又是性能的,不会没有先 profiling 再讲话的习惯吧,不会吧不会吧
adian
2023-01-03 23:44:48 +08:00
反向搅屎棍,激起大家表达欲是吧
macha
2023-01-10 16:53:57 +08:00
哪里不行优化哪里,大部分业务代码其实对性能要求不高,对容易懂,大家都能上去改的要求更高一些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905072

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX