有没有人在stackoverflow上使用Fortran?你使用什么IDE,你认为哪一个是最好的?
似乎很多人围绕着我对英特尔Visual Fortran非常不方便.因为不支持intellisense,重构等.
随着C++编译器的快速发展,尤其是英特尔编译器,以及在C/C++代码中直接应用SIMD函数的能力,Fortran在数值计算领域仍然具有任何真正的优势吗?
我来自应用数学背景,我的工作涉及大量的数值分析,计算,优化等,具有严格定义的性能要求.
我对Fortran几乎一无所知,我在C/CUDA/matlab方面有一些经验(如果你认为后者是一种计算机语言),我的日常任务包括分析非常大的数据(例如10GB大的矩阵),并且看起来该程序至少花费2/3的时间来访问内存(这就是为什么我将其部分工作发送到GPU),你是否认为对我来说至少尝试Fortran例程可能是值得的我的代码中一些性能至关重要的部分,以提高我的程序的性能?
因为那里需要完成复杂性和事情,所以如果只有那里有显着的性能优势,我只会这样做,感谢提前.
我有一个应用程序,我们正试图从32位迁移到64位.它是.NET,使用x64标志编译.但是,我们有大量用FORTRAN编写的DLL编译为32位.FORTRAN DLL中的函数非常简单:将数据放入,将数据拉出; 没有任何状态.我们也不会花很多时间在那里,总共可能有3%,但它执行的计算逻辑非常宝贵.
我可以以某种方式从64位代码调用32位DLL吗?MSDN建议我不能,期间.我做了一些简单的黑客攻击并验证了这一点.一切都会引发无效的入口点异常.到目前为止,我发现的唯一可能的解决方案是为所有32位DLL函数创建COM +包装器,并从64位进程调用COM.这看起来很头疼.我们也可以在WoW仿真中运行这个过程,但是内存上限不会增加,大约1.6gb.
有没有其他方法从64位CLR进程调用32位DLL?
我在Fortran中有一个程序将结果保存到文件中.目前我使用打开文件
OPEN (1, FILE = 'Output.TXT')
Run Code Online (Sandbox Code Playgroud)
不过,我现在想运行一个循环,每次迭代的结果保存到文件'Output1.TXT','Output2.TXT','Output3.TXT',等等.
在Fortran中有一种简单的方法可以从循环计数器构造文件名i吗?
我正努力成为一名科学程序员.我有足够的数学和统计学背景,但缺乏编程背景.我发现学习如何使用语言进行科学编程非常困难,因为SP的大部分参考都是微不足道的.
我的工作涉及统计/财务建模,没有物理模型.目前,我广泛使用Python与numpy和scipy.完成R/Mathematica.我知道足够的C/C++来读取代码.没有Fortran的经验.
我不知道这对于科学程序员来说是否是一个很好的语言列表.如果是这样,那么在科学环境中学习这些语言的语法和设计模式的阅读清单是什么.
我正在使用OS X开发版的R
R Under development (unstable) (2014-05-27 r65787)
Platform: x86_64-apple-darwin13.1.0 (64-bit)
Run Code Online (Sandbox Code Playgroud)
使用GNU Fortran(GCC)4.2.3(来自Simon的站点)和Xcode的命令行工具的5.1.1版本.
从源代码构建时,我得到如下错误:
gfortran-4.8 -fPIC -g -O2 -c altmov.f -o altmov.o
make: gfortran-4.8: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做.我可以为我的版本创建一个别名,但我不确定它是否确实需要4.8.
谢谢,
马克斯
我使用相当大的数据集(它们仍然适合内存)使用机器学习,我在R中编写了一些计算,我觉得它太慢了.因此,我想用我将从R调用的编译代码替换程序的"关键部分".我手头的一个示例问题是实现前向 - 后向算法.
我的问题是我是否应该学习Fortran或C++来做到这一点?我只需要使用数字向量或矩阵.我主要感兴趣的是哪种语言更容易学习和R界面,我真的不关心哪一个在我的简历上看起来更好.
我已经阅读了R扩展手册,并使用内联包使用一些简单的Fortran和C++代码.我目前的印象是Fortran95会更容易学习,虽然Rcpp包看起来也很有趣.我目前知道R,Python和Matlab.
Fortran参考实现文档指出:
* LDA - INTEGER.
* On entry, LDA specifies the first dimension of A as declared
* in the calling (sub) program. When TRANSA = 'N' or 'n' then
* LDA must be at least max( 1, m ), otherwise LDA must be at
* least max( 1, k ).
* Unchanged on exit.
Run Code Online (Sandbox Code Playgroud)
但是,给定m和k不应该能够导出LDA?LDA何时允许大于n(或k)?
我已经阅读save了(英特尔)语言参考文档中的声明,但我无法完全理解它的作用.有人可以用简单的语言向我解释当save声明包含在模块中时它意味着什么吗?