问题标签 [fortran-common-block]
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.
c++ - Fortran 77 多线程 C++ 应用程序中的常用块
我开发了一个调用 Fortran 77 例程的 C++ 程序。主 C++ 程序可以运行多线程。但是,Fortran 77 例程会隐藏几个公共块,这些块在每次调用时都会根据其参数进行修改。
恐怕所有公共块都可能在多个线程之间共享,并且对这些块的并发访问可能会搞砸一切。
第一个问题:我说的对吗?公共块会在多个线程之间共享吗?
第二个问题:有没有简单的方法来避免它?重写 Fortran 例程似乎负担不起,我宁愿寻找一种方法,让每个线程都有自己的所有公共块的副本(这些块不大,应该快速复制)。我不知道编译选项是否会有所帮助,或者 OpenMP 是否可以帮助我。
parallel-processing - OpenMP 并行编程中的公共块问题
我有几个关于在 Fortran 并行编程中使用公共块的问题。
我的子程序有共同的块。我是否必须在并行执行区域中声明所有公共块和线程私有?
他们如何传递信息?我想为每个线程单独的公共时钟,并希望它们通过并行区域的末端传递信息。它发生在这里吗?
我的
/li>Ford
子例程更改了公共块中的一些变量,并且Condact
子例程再次覆盖它们,但该函数使用来自Condact
子例程的值。第二个子例程和函数是否从每个线程的前一个子例程中复制变量?
c++ - C++ 如何调用 Fortran 77 的通用块
我是编程新手,我想在我的 C++ 代码中调用 Fortran 77 通用块。其实我读过一些和我类似的问答,但我不是很清楚....
这个公共块由另一个 Fortran 77 子例程定义。
示例代码是:
common.inc:
tstfunc.f
tst01.cpp
如果我想将delta
(从 common.inc)传递给 C++ 函数printmtrx()
,我该怎么办?
fortran - 矩阵初始化 - 如何避免重叠?
我有一个 21x21 的矩阵,大多数情况下都有。某些元素需要由离散数字初始化。现有的解决方案是两步初始化:首先将所有元素设置为 1,然后将所选元素重新分配给离散数字。
这是在遗留的 FORTRAN77 代码中实现的,见下文,它可以很好地与gfortran-4.9一起编译(即使没有警告)。
但是,我需要在运行gfortran-4.4的旧服务器上编译它。由于“重叠初始化”,这与 f2c 或 g95 编译器等替代工具一起失败。
现在,我如何重新编码避免在特殊的 BLOCK DATA 程序单元中出现这种重叠的问题?我也认为不建议使用英特尔 Fortran 编译器,因为无法保证初始化顺序。
fortran - 在fortran77项目中使用OpenACC,但是没有效果,不输出内核信息
我有一个fortran77水库模拟项目,想用openacc指令加速实现,编译器是PGI visual fortran,子程序如下:
子程序 jbild(a, b, impl, [ ia, ja, neqa, kvst, ka, ibkmax, nja, ndima, nbmxc, [ isymm)
但是当我添加 openacc 指令时,我看不到输出信息和数据复制信息,在控制台中也没有输出内核执行时间信息。我已经设置了环境变量和命令行参数,以确保信息输出。:
数组存储在 .com 文件中。不知道为什么openacc没有努力,goto-statement有什么影响,我想删除goto-statement程序修改使用openacc的程序
fortran - COMMON 块共享变量
假设我有两个子例程
COMMON 块用于共享变量,这是否意味着如果在子程序中更新的 ,X
的值将与子程序中的相同?Y
S2909
S2900
variables - 公共块和子程序参数
如果我有一个名为的变量var
位于一个名为的公共块中,myCB
我可以使用相同的名称在其他两个不使用公共块的子例程之间传递参数myCB
吗?
代码如下所示。
我在andVar
之间传递确实有问题,问题可能来自公共块中命名的另一个问题吗?SR1
SR2
Var
fortran - 如何声明 OpenMP 私有公共块变量?
我是并行计算的新手,我一直在尝试使用 OpenMP 并行化我之前研究过的顺序 Fortran 程序,我的主要代码类似于这个例子:
我正在尝试使用 !$OMP PARALLEL DO ,但我对声明为全局并在函数“test”中使用的变量“y”有问题,但它在每个线程中都发生了变化。如何在不将“y”声明为函数“test”的参数的情况下并行化这样的代码?
另外,有没有什么方法可以让每个线程在整个程序中(包括通过函数)私下携带迭代计数器“i”的值?
windows - 共享库中的命名公共块
在共享库中包含 Fortran 子例程时遇到问题。这个子程序有一个命名的公共块。
我有一个 Fortran 主程序,它使用这个公共块并与共享库链接。
行为是子程序或主程序中公共块集中的变量不在两者之间共享。
我在 Windows 上的 MinGW 下使用 gfortran 4.9.3。这是我非常简单的例子。
主程序:
子程序:
生成文件:
运行时mainp.exe
,它会产生ivar = 0
而不是正确的。ivar=23
这是我用nm
.
这是_whgc_
mainp.exe 中唯一的符号。
但是,当我在 gdb 中运行并在两者中mainp.exe
设置断点时
,我可以打印每个断点的地址。地址不一样。mainp
sharedf
ivar
从行为看来,GNU ld 没有正确匹配_whgc_
符号,但我不清楚在共享库构建或最终链接中传递哪些选项以使其这样做?
(请不要建议公共块的替代品。在我的实际应用程序中,我正在处理使用公共块的遗留代码。)
编辑:
我在 Linux/x86 上尝试了我的示例,并且行为是正确的。当然,在 Linux 上,共享库和可执行文件是 ELF 格式的对象,而在 Windows/MinGW 上,格式是 PE/COFF。
fortran - 这个 Fortran 变量来自哪里?
谁能告诉我costh
以下子程序中使用的变量?子程序从哪里获得这个变量的值?是一些错误还是内置功能?
完整的子程序如下。