问题标签 [gfortran]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gfortran - 我正在尝试使用 gfortran 求解方程,但我不断收到错误
我正在使用以下程序,但我不断收到错误消息。我的程序有什么问题?
fortran77 - Fortran 77 调试器检查数组边界
我仍然不喜欢调试 F77,并且在数组边界方面遇到了一些问题。我最近修改了一个冗长的代码以获得新的数组大小。一切“似乎”都还好,直到我注意到改变一个数组的方法,改变了另一个。我假设在这段代码中的某个地方,赋值超出了范围并写入了其他数组。
linux 环境中是否有调试器/工具可以“捕获”越界异常?
我目前正在使用 gfortran
c++ - 如何从主应用程序中为库解析编译器特定的运行时初始化函数
在执行库语言需要运行时初始化的混合语言库时,最佳实践是什么?
我有一个问题,我想在 Fortran 中创建一个用于 C++ 的特定库。如果可能的话,我想保留平台独立性和编译器独立性。现在,我使用过的两个编译器 G95 和 GFortran 都要求主应用程序调用某些特定于编译器的初始化例程,以便在使用库之前正确设置运行时。这些函数具有不同的名称和签名,具体取决于编译器(对于 G95,函数为 void g95_runtime_start(int argc, char *argv[]) )
我正在使用 CMake 来管理项目,并且库子项目是一个静态库。我是否必须在我的主应用程序的 cmake 文件中找出用于库子项目的 fortran 编译器,然后让 CMake 在主项目中创建一个定义,以便我可以有条件地使用任一 init 例程编译主应用程序?感觉很别扭。有没有更好的办法?
compiler-construction - Fortran 控制字符(回车控制)是否仍在编译器中实现?
在Fortran 95/2003 for Scientists and Engineers一书中,有很多关于认识到格式语句中的第一列是为控制字符保留的重要性的讨论。我还在互联网上看到了被称为回车控制的控制字符。
为避免混淆,对于控制字符,我将字符“ 1、空白(即 \s)、0 和 +”称为当放置在FORMAT 语句。
此外,请参阅这个完全用固定宽度字体编写的纯文本网页:Fortran 回车控制(因为没有什么比等宽字体的散文更能体现准确性和古老性了)。我发现这个页面和其他类似的页面不太清楚。
根据Fortran 95/2003 for Scientists and Engineers,不记得第一列是为回车控制保留的,可能会导致可怕的意外输出。解释戴夫·巴里,输入错误的字符,核导弹就会向挪威发射。
然而,当我试图遵守这个严厉的警告时,我发现 gfortran 不知道我在说什么。
请允许我用一些示例代码来说明我的观点。我正在尝试打印数字 Pi:
这是输出:
“1”和“0”不是拼写错误。看来 gfortran 完全忽略了控制字符列。
那么,我的问题是:
控制字符是否仍然在符合标准的编译器中实现,或者 gfortran 根本不符合标准?
为清楚起见,这是我的输出gfortran -v
Using built-in specs.
Target: powerpc-apple-darwin9
Configured with: ../gcc-4.4.0/configure --prefix=/sw --prefix=/sw/lib/gcc4.4 --mandir=/sw/share/man --infodir=/sw/share/info --enable-languages=c,c++,fortran,objc,java --with-gmp=/sw --with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --disable-libjava-multilib --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9
Thread model: posix
gcc version 4.4.0 (GCC)
visual-c++ - 链接时混合 GFortran/MSVC 对象:未定义的 _chkstk 引用
试图编译 Xfoil 和 plotlib
fortran 文件是用 MinGW gfortran 4.5.0 编译的,我用 MSVC (2008/15.00) 编译了 W32win.c。
在与 GCC 链接期间,我收到错误:
有关如何解决的任何建议?
我尝试使用 MSVC 的原因是,当我仅使用 gcc 编译 plotlib 时,绘图窗口无法正常运行,并且只显示黑屏。
fortran - F77: 使用 g77 编译通常使用 Absoft 编译器编译的程序时出现问题
我不是 Fortran 程序员(只是短暂的经验),但我需要编译一个部分用F77
. 有人Absoft
在我之前用编译器编译过它,但现在我需要在另一台机器上用g77
. 对于 Absoft,makefile 有
我已将这些行修改为
但我收到以下错误消息
我怎样才能解决这个问题?
更新1
如果我添加-libifcore
到最后一行(链接器)的末尾,那么我得到
我找到了图书馆
但是即使我在源目录中执行以下操作
没有找到。
此外,我遇到另一个问题是同一台机器如何将 -libm 传递给 MPICC?libimf.so:警告:feupdateenv 未实现且将始终失败
如果需要,编译器似乎应该找到该库
types - 使用 gfortran 强制显式变量声明
我正在使用 mex 从 matlab 链接一些 fortran 代码(f90),并且我偶尔会冻结 matlab。
过去,由于数据类型之间的不匹配(例如整数 * 4 与整数 * 8),我发生了冻结。
我链接的代码有许多隐式定义的变量,所以我想知道是否存在仅偶尔发生的隐藏数据类型冲突。
为了排除数据类型不匹配是导致冻结的原因,我希望编译器要求所有变量都被显式声明。
问题:
如何让 gfortran 要求在编译时显式声明所有变量?如果做不到这一点,有没有办法至少得到警告?
gfortran 是否将“真实”数据类型解释为所有体系结构中的特定类型?如果是这样,它是哪一个(真实* 4,真实* 8,...)?
无论如何强制gfortran将“真实”数据类型解释为特定类型,例如“真实* 4”?
关于从 matlab 中的 mex 编译例程调用时导致 fortran 代码冻结的任何想法(数据类型不匹配除外)?
谢谢你的帮助。
在我弄清楚这一点之前,我将通过许多行代码尝试列出所有隐式定义的变量。不用说,我将非常感谢任何让我从如此无聊的任务中解脱出来的人......
最好的,
G。
debugging - 您为 GFORTRAN 调试器/编译器设置了哪些标志来捕获错误代码?
我想我不会在任何教科书中找到这一点,因为回答这个问题需要经验。我目前正处于测试/验证我的代码/寻找错误以使其进入生产状态的阶段,任何错误都会导致许多人遭受痛苦,例如黑暗的一面。
当您为 Fortran 编译程序以进行调试时,您设置了哪些标志?
你为生产系统设置了什么样的标志?
在部署之前你会做什么?
生产版本ifort
用作编译器,但我使用gfortran
. 我做错了吗?
version - Gfortran 版本 4.1.2 和 4.2.3
大家好,我正在将我的代码从在 ubuntu 上运行的集群部署到具有相同硬件的集群上,但使用的是红帽,并且看起来更旧的 gfortran 编译器。源码其实是由ifort编译的,但是由于没有安装在red had cluster上,我可能不得不切换到gfortran。
现在的问题是代码无法编译。在我可以在我的部分代码中修复的类型中有一个带有“可分配”的东西,但是其他人也有其他贡献,他们还没有准备好将他们的代码适应旧标准。
我的问题 :
- 尽管如此,我如何将其部署到另一个系统上,希望不会发生太大变化?
- 当使用相同版本的编译时,还有什么其他惊喜等着我,只是不同的颠覆?
- 我如何强制这样的事情不再发生?代码应该可以在不诉诸暴力的情况下部署到各种系统上。
感谢您的建议和欢呼
macos - 在 6 核 Intel Xeon 中关闭超线程
我们有一个 12 核的 MacPro 来做一些蒙特卡罗计算。它的英特尔至强处理器启用了超线程 (HT),因此实际上应该有 24 个进程并行运行才能充分利用它们。但是,我们的计算在 12x100% 上比 24x50% 上运行更有效,因此我们尝试通过系统偏好设置中的窗格关闭超线程Processor
,以获得更高的性能。也可以通过以下方式关闭 HT
然后我们进行了一些测试,结果如下:
- 12 个并行任务在不带或不带 HT 的情况下同时运行,令我们失望。
- 如果 HT 关闭,24 个并行任务会丢失 20%(不是我们想象的 -50%)
- 开启 HT 后,从 24 个任务切换到 12 个任务会降低 20% 的效率(同样令人惊讶)
- 当 HT 关闭时,从 24 切换到 12 不会改变任何内容。
似乎超线程只会降低我们计算的性能,而且没有办法避免它。我们用于计算的程序是用 Fortran 编写并用gfortran
. 有没有办法让这块硬件更高效?
更新:我们的蒙特卡洛计算 (MCC) 通常分步进行,以避免数据丢失和其他原因(并非总是可以避免此类步骤)。在我们的例子中,每个步骤都包含许多持续时间可变的模拟。由于每个步骤都分为多个并行任务,因此它们也具有可变的持续时间。本质上,所有较快的任务都必须等到最慢的任务完成。这一事实迫使我们采取更大的步骤,由于平均,这些步骤在时间上的偏差更小,因此处理器不会浪费时间在等待上。这是我们使用 12*2.66 GHz 而不是 24*1.33 GHz 的动机。如果可以关闭 HT,那么通过从 24 个任务 w/HT 切换到 12 个任务 w/o HT,我们将获得大约 +10% 的性能。然而,测试表明我们损失了 20%。
对于测试,我使用了相当大的步骤,但通常步骤更短,因此效率更高。
还有一个原因 - 我们的某些计算需要 3-5 GB 的内存,因此您可能会看到我们拥有 12 个快速任务是多么经济。我们正在努力实现共享内存,但这将是一个长期的项目。因此,我们需要找出如何使现有的硬件/软件尽可能快。