用f2c转换成c代码,然后弄个好点编译器,比如intel c++, 优化绝对没问题。
长远来看C++是主导,现在的c++编译器已经够好了,如果说90年,fortran确实比c快。
算法是一方面,主要还是编译器,指望手工实现全优化是不现实的。所以写程序的时候一定要根据编译器去写。 好的编译器加上一些基本优化常识,c++绝对是强。根R比,速度差上10倍是少的。20-50倍都没啥意外的。
比如VC得memcpy, 就是根据编译器写的。效率特别高。
另外举个例子,VC complier
A MyMethod (A &_hiddenArg, B &var)
{
A retVal;
retVal.A::A(); // constructor for retVal
retVal.member = var.value + bar(var);
_hiddenArg.A::A(retVal); // the copy constructor for A
return;
retVal.A::~A(); // destructor for retVal
}
优化之后
A MyMethod(A &_hiddenArg, B &var)
{
_hiddenArg.A::A();
_hiddenArg.member = var.value + bar(var);
Return
}
再来个例子
double *x,*y;<br />
...<br />
for (int i=0;i<n;++i)<br />
x[i] = y [i];<br />
<br />
优化之后, loop unrolling, intel c++ 绝对可以实现。<br />
unsigned int i=n >> 2;<br />
while (i--)<br />
{<br />
*ptr_x++ = *ptr_y++; *ptr_x++ = *ptr_y++;<br />
*ptr_x++ = *ptr_y++; *ptr_x++ = *ptr_y++;<br />
}<br />
i=n & 3; while (i--) *ptr_x++ = *ptr_y++;
however, 这个还是没有memcpy快.
short summary: 没有必要花太大的精力去研究 fortran,能看懂基本代码足够了。个人建议!