2

我不确定这是否是这个问题的地方,但它就在这里。

我正在研究 C++ 中的计算物理模型,我收到了一个正在整理的大代码。

该领域是量子电子学,所以有很多积分和表达式,但我的问题是关于优化。

最初代码需要 4 小时才能完成模拟,我在消除了几个瓶颈后将其整理到了 30 分钟。

我仍然不喜欢的是代码中的数据(主要是数组类型double)混合std::vector<(double)>std::valarray<(double)>和犰狳的arma::vec.

其中哪一种是最好的方法,我什至应该尝试为数组创建统一的数据类型?

我认为以前的博士生使用的原因valarray是它的友好性,因为运算符*, /, +,-超载并且有一些稀缺的在线承诺valarrays 比向量更快(关于此的在线大辩论)。犰狳被引入,因为它与 MATLAB 语法和文档库非常相似,并且std::vector<(T)>在 T 是类而不是双精度时保留。

我个人更喜欢犰狳,因为它的逻辑非常简单,感觉很自然,valarray有时会因为它们没有很多成员函数而让我烦恼,但是通过它们迭代很容易,向量很烦人,算术运算符不会重载 for <(double)>and if我选择了这些,我可能需要为 Array of s 创建自己的类,double而我真的不想这样做。

请记住,我不知道这些数组在内存中的行为方式,我去年开始使用 C++,还有很长的路要走。我计划为另外 2 个维度(目前是 1D)开发此代码,并且执行时间肯定会增加。

因此,我正在寻求关于我应该继续使用哪种数组类型的建议,以及我是否应该使代码统一(强制所有数组为double同一类型(std::valarraystd::vectorarma::vec

4

0 回答 0