C++ 的 `final` 关键字的性能影响

主要观点:在 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 上的地址。
阅读 51
0 条评论