主要观点:在 C++中,final
关键字常被提及可提升性能,但多缺乏硬数据支持。作者通过对自己的 C++项目PSRayTracing
进行测试,发现final
并非总是更快,在某些情况下甚至更慢,且性能受编译器、系统等因素影响很大,不同场景下结果差异显著。
关键信息:
final
关键字常被称可提升性能但缺乏数据支持,作者决定验证其效果。PSRayTracing
项目有许多派生类,用于测试final
。通过添加CMakeLists.txt
选项和预处理宏来应用final
关键字,并在不同场景下进行测试。- 初始测试中,
final
似乎使性能稍慢,但验证测试脚本显示使用final
时稍快。之后创建“大型测试套件”,在不同机器、操作系统和编译器下进行更全面测试,发现final
并非总是更快,有时甚至更慢,不同场景和编译器下结果差异大。 PSRayTracing
也在 Android 和 iOS 上运行,Clang 用于这两个平台,简单测试显示 iPhone 12 上无差异,Pixel 6 Pro 上final
使性能稍慢。- 作者总结认为
final
对 GCC 可能有好处,对 Apple 芯片影响不大,不建议与 Clang 和可能的 MSVC 一起使用,需测试测量后确定是否值得使用。
重要细节:
- 测试中调整了测试参数,包括测试场景次数、图像大小、射线深度和每像素样本数等。
- 不同配置下的测试结果差异显著,如 Clang 在 x86_64 上表现不佳,Windows 性能相对较差,Apple 的 M1 芯片性能较好等。
- 作者希望未来能让每个场景报告元数据,更好地掌握 Jupyter+Pandas,在 Android 和 iOS 上运行自动化测试,改进
run_verfication_tests.py
脚本,使用 Lossless WebP 作为渲染输出,比较更多 Intel 芯片和编译器。 - 总结得出关于
final
在不同编译器和平台下的结论,并提供了原始数据和处理结果的 Jupyter 笔记本链接以及项目在 GitHub 和 GitLab 上的地址。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。