有什么模板用法可以优化出分支吗?

问题描述 投票:0回答:0

A
有一个模板成员函数
A::runImpl
。函数
A::run
根据
A::m_case
的值调用专门的实现,该值在类构造函数中设置。

在我的项目中,

run
函数被调用的非常频繁。如果可以消除其中的分支,它将加速 5% 以上。是否有任何模板用法可以做到这一点? 我的项目是由 GCC 7.3.1 和 C++14 编译的。

#include <iostream>
#include <cstdlib>
#include <cassert>
using namespace std;

class A {
public:
  A (uint32_t * arr, size_t len) : m_case(0) {
    for (size_t i = 0; i < len; ++i) {
      m_case += arr[i];
    }
  }

  template <size_t> void runImpl() { assert(0); };
  void run();

private:
  size_t m_case;
};

template <>
inline void A::runImpl<0>() {
  cout << "Default execution path." << endl;
}

template <>
inline void A::runImpl<1>() {
  cout << "Optimized execution path 1." << endl;
}

template <>
inline void A::runImpl<2>() {
  cout << "Optimized execution path 2." << endl;
}

void A::run() {
  switch (m_case) {
    case 1:
      runImpl<1>();
      break;
    case 2:
      runImpl<2>();
      break;
    default:
      runImpl<0>();
      break;
  }
}

int main() {
  uint32_t arr[] = {1, 1};
  A a(arr, 2);
  a.run();
  return 0;
}
c++ gcc g++ c++14
© www.soinside.com 2019 - 2024. All rights reserved.