Fortran 复杂类型 VS C++ <complex> 类性能
Fortran complex type VS C++ <complex> class performance
我想写一些性能敏感的数字代码,涉及长公式和复数。考虑一些简单的东西,比如a=(b+c)*(d+e+f)。我更喜欢使用c++(它有std::complex类),但我担心编译后的代码可能会创建临时类对象来保存中间值b+ C、d+e和d+e+f,从而导致速度变慢。另一方面,Fortran具有原生复杂类型,这可能会导致更好的编译器优化。代码是多维数值积分,性能瓶颈是对被积者的评价。
现代c++编译器(如Intel的)在优化方面足够好,这实际上不是一个问题吗?
所有Fortran能做的(也是)就是模拟这个类型。
没有用于复数的本机机器类型(至少在x86上)。
你关心的是一些堆栈字节的临时使用,就是这样。
如果没有其他理由保留它,甚至堆栈大小调整也可以优化掉。
没有什么比Fortran做得更好了。
(Gcc和Clang一般不比Intel差。
相关文章:
- EASTL矢量<向量<int>>连续的
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 仅当类型为 std::complex 时,才进行缩放
- std::complex<> in C++ 数学特殊函数:技术规范或提案
- C++ 类型 'complex<double>' 中类中的复杂初始化不提供调用运算符
- cudaMallocManaged with vector<complex<long double> > C++ - NVIDIA CUDA
- 根据定义计算DFT <complex>(C++
- 使用 thrust::d evice_vector of thrust::complex 编译错误,可能是由于错误的实现
- Travis-CI Complex Makefile fails
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 将分配的内存与基本数据类型一起使用时,是否需要新放置? std::complex?
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- (如何)我可以使用openmp矢量化"std::complex<double>"吗?
- 将 int 转换为双精度以执行 std::complex <double>的"*"操作
- C 字符串比较“祝您好运”&gt;“再见”
- _Complex 和 std::complex 之间的 C/C++ 互操作
- 优化两个 std::vector<std::complex> 的元素乘积,使用 <float>fftw_malloc() 分配
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败