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

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

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

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

13907 次点击
所在节点    C++
69 条回复
tool2d
2022-12-28 14:54:51 +08:00
@icyalala "人家说得很清楚:这是为 3D 程序的使用场景做的优化,其他使用场景性能可能没那么好,甚至比 std::string 更差。"

这仅仅是你的看法,我个人看法和你刚好相反,32 字节优化后的字符串库,对于覆盖 90%的应用场景都够了。剩下 10%就用作者视频里提到的 readonly 字符串。

无脑用 std::string ,会导致内存碎片过多,实在很不推荐。
icyalala
2022-12-28 14:58:45 +08:00
@tool2d 这不是我的个人看法,这是你的分享里原作者的看法,原话就是这样
Limitations:...
SIMDString is designed and benchmarked for the usage patterns found in games and other real-time 3D applications. It may perform less well and even underperform std::string for applications with different usage patterns.
hazardous
2022-12-28 14:59:25 +08:00
这就是 C++的优势啊,追求极致的性能,有特殊优化的需求那就自己去实现。其它语言不这么干的那就是对性能要求不够高。
tyzandhr
2022-12-28 17:04:54 +08:00
@tool2d 你是说 glibc ?
jmc891205
2022-12-28 17:09:18 +08:00
@bashbot EDA tool 不需要大量处理字符串,std::string 不会成为性能瓶颈
superares
2022-12-28 18:17:26 +08:00
要不试试用 AVX512 ?估计更快
dazhangpan
2022-12-28 18:19:01 +08:00
对于任何一名做底层软件的资深开发者来说,游戏业这点优化,小儿科啦
nightwitch
2022-12-28 18:24:55 +08:00
只比时间不比空间吗。做 simd 肯定需要 padding 到字节对齐的
nmap
2022-12-28 19:59:17 +08:00
std::string 性能不行是众所周知吧
LuckyPocketWatch
2022-12-28 21:53:02 +08:00
首先,std::string 是一个标准。不同的编译器的 std::string 也是不一样的

其次,std::string 性能不行我从来不认可的,一个字符处理能够兼顾通用性和性能,各版本的 std::string 已经做到非常好,至少,vs 和 gcc 的都是如此

最后也是最重要的,说 xxx 的效率碾压 std::string,这里没有说清楚一个很重要的问题是,你在测试前加了多少定语?如果定语足够多,我也可以写出一款碾压 std::string 的字符串处理函数

附:你说开源,不贴个 github 或 gitlab 的地址么,实在不行 gitee 也行,你贴个油管地址我不是很认可。。
ToBeHacker
2022-12-28 22:21:52 +08:00
密集应用场景下做特定优化不是常识么

你拿一个特定优化的跟一个标准库打,有啥意义么,性能指标都不一样好么
DefoliationM
2022-12-28 22:46:58 +08:00
可以看看 op 的历史发帖,很多我都觉得挺逆天的
leimao
2022-12-28 23:44:55 +08:00
和世界上任何一件事物一样,C++语言及其标准库的确有各种各样的缺点。但是评价他需要客观,建议少发一些误导性比较强的标题和帖子。
DCounter
2022-12-29 00:52:32 +08:00
@msg7086 老哥说的对。具体实现方式和其使用场景是强相关的,脱离了这个前提还有啥可比性?楼主真是引战好手
levelworm
2022-12-29 02:37:14 +08:00
我记得游戏界好像很早就是自己开发这种工具,比如 EA 的那套。迭代了很多年了,游戏专用,肯定比标准库的好吧。
mingl0280
2022-12-29 08:33:16 +08:00
麻烦 op 不要把混 b 站和逼乎发的逆天言论拿到 v2 来秀智商
ragnaroks
2022-12-29 10:46:42 +08:00
任何语言的标准库的意义是当你需要某个扳手的时候有个能用的扳手,至于好不好用那才是第三方库的意义
Dryopithecine
2022-12-29 10:58:11 +08:00
@mingl0280 其实我感觉知乎上厉害的 C++使用者挺多的,比 V2EX 要多
antonius
2022-12-29 11:22:37 +08:00
@across simdjson 了解一下
antonius
2022-12-29 11:41:35 +08:00
@nulIptr 也不是不能用。我们的商业项目(game project, inhouse engine)就用 stl ,包括 std::string 。但性能要求比较高的场景下需要注意内存管理,比如避免频繁申请释放内存,减少内存碎片等等。性能问题需要做 profiling 的,特定问题特定解决。

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

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

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

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

© 2021 V2EX