在c++中使用多态性和函子实现快速性能
achieving fast performance using polymorphism and functors in c++
我目前正在用c++编写一个Maya 2013插件,该插件可以针对特定约束优化给定网格的几何体。我需要达到最佳表现。目前,我只为特定的约束实现了该算法的硬编码版本,它非常快,但我需要为任何给定的约束实现该算法的一些通用实现(因此我需要某种多态性)。
一个伪代码用于算法的一般结构是:
(1) do k times:
(2) for every face fj in the mesh do:
(3) some manipulation on the vertices qi incident to the face fj
(4) for every vertex vi in the mesh do:
(5) some manipulation on the faces fj incident to the vertex vi
问题是,在我的具体实现中,伪代码中没有函数调用步骤3和5中的计算,当我尝试使用辅助函数计算这些步骤时,性能大大降低。
对于通用实现,我需要在步骤3和5中为每个约束进行函数调用。
我想到了两种解决方案:
- 为约束编写一个泛型类。用算法中第3步和第5步的计算方法为我需要的每个约束派生类
- 编写一个通用函子(只包含()运算符的类),并从中导出用于计算步骤3和5的函子。产生这种想法的原因是对函子中()运算符的调用是内联的(关于此链接中可重用代码的答案)
第一个问题:
有什么方法可以减少函数调用的开销吗?
第二个问题:
有什么方法可以使编译器始终内联中的函数吗以上两种解决方案?从这个问题我知道虚拟从指向对象的指针调用的函数不能内联。
第三个问题:
有没有比我提出的解决方案更有效的方法?
我建议您查看模板并将模板函数/函子作为参数传递
使用动态多态性,您几乎总是可以间接调用函数,即编译器不知道函数的主体,因此优化选项有限。模板允许您执行所谓的静态多态性。
查看这些链接了解更多信息:
静态多态性定义与实现
C++模板的性能?
相关文章:
- 了解算法的性能差异(如果以不同的编程语言实现)
- C++分离功能,实现性能优化
- 为什么 C++ 代码实现的性能不比 python 实现更好?
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 将函数及其实现移动到与主文件不同的文件(.hpp 和 .cpp)时,性能会受到很大影响
- 为什么这个普通的数组实现比STD ::向量实现性能慢
- 具有良好性能的c++映射实现
- Google Protobuf基于C++的python实现的性能
- 考虑 CPU 提升模式的多线程超线性性能实现
- 什么是通过调用_mm_stream_si64x()实现性能提升的示例程序
- 在 C++98 中实现移动构造函数和移动赋值运算符以获得更好的性能
- 性能不佳基于OpenCL的OpenCV平方实现
- 快速容器,实现一致的性能
- 并提高.进程间牺牲性能来实现可移植性
- 在c++中实现长方程时,如何通过高级方法提高性能?< / h1 >
- c++性能技术报告TR 18015中使用了哪些实现
- 并行线程执行以实现性能
- R stats::sd()与arma::stddev()与Rcpp实现的性能
- Dijkstra算法实现的性能
- c++仅用一行代码就实现了巨大的性能差异