是否有一个身份函数阻止Eigen躲避unaryExpr调用?

时间:2015-08-26 03:33:38

标签: eigen template-meta-programming eigen3

我正在尝试在高度自定义的神经网络实现中使用Eigen,并发现如果我可以假设总有一个激活函数,我的代码会更清晰。据我所知,这只是对激活向量的unaryExpr方法的调用。问题是我还需要支持线性激活,我可以实现(a)作为完全不同的代码路径,或者(b)通过将身份函数传递给unaryExpr,并让编译器进行排序不同的代码路径。

从文档中看,unaryExpr方法看起来像是一个带有模板化的函子,但有什么我可以传递来压制我认为是对整个向量的传递。我没有看到无法的原因,我的问题是是否

编辑:我知道Eigen做了懒惰的评估,并且在实际评估表达式之前使用unaryExpr并不需要付出代价。我的问题是,当一元表达式是标识函数时,是否有可能在评估期间降低的成本

1 个答案:

答案 0 :(得分:0)

回想一下,Eigen是一个表达式模板库,因此任何一元表达式都不会立即进行评估。评估或向量循环在分配发生时触发,即operator=。因此,将身份仿函数传递给unaryExpr将不会产生任何费用。