Aid Learning比较好的支持了gcc、gfortran!具体搭建方式见下文:
myastrotong:把安卓手机性能发挥到极致之-Termux/Aid Learning使用Fortran
因此本文基于gcc和gfortran进行联合开发。
其实就是用C/C++调用Fortran。毕竟当前Fortran已经远远落后于C了!最好的方式当然是C调用Fortran的遗留库!我才不会用Fortran去调用C的!哈哈!
还是以NPSOL为例(NPSOL是一个斯坦福大学的优化包):
NPSOL有两个Fortran相关文件夹:src,examples
src文件含有相关的库文件,examples含有可执行文件。我自己稍微修改了里面的npmain.f(用f2c把它改成了C文件,然后自己稍做了修改,改成了标准C++文件,去掉了对f2c的相关引用),重命名为npmain.cpp(注意后缀,是.cpp不是.c)。
进入src文件夹输入:
gfortran -c xx1.f xx2.f xx3.f %把相关.f文件生成.o文件
然后把生成的.o文件打包生成静态链接库libnpsol.a:
ar rc libnpsol.a xx1.o xx2.o xx3.o %把.o文件生成静态链接库libnpsol.a
然后进入到example文件,基于刚才生成的静态链接库(libnpsol.a) 生成可执行文件。
Fortran的语法是:
gfortran npmain.f -o npmaintest -L../src -lnpsol
其中-L后面表示库的路径, -l表示库的名称,本例是libnpsol.a,去掉lib和.a,编译器自己能够找到,于是输入的库名称就是npsol。默认先搜索j动态链接库(.so),没有则搜索静态链接库(.a)。
本文关注的是C++调用Fortran静态链接库,语法为:
g++ npmain.cpp -o npmaincpptest -L../src -lnpsol -lgfortran
注意与Fortran语法的区别,后面是-lgfortran
然后执行,看效果!
./npmaincpptest
下面到了跑分时间!
搞个for循环,上面程序重复跑个200次,计时结果如下:
类型 | 计时/sec | 归一化时间
3700X | 3.426 |1
小米Mix2S | 4.156 | 1.213
虽然这计算测试不严谨(窗口输出较多,影响了CPU发挥),但是测试结果表明,单线程计算时,小米Mix2S也没比AMD 3700X慢多少!那么手机搞搞科学计算还是可以的!!!Aid Learning真香啊!