问题标签 [intel-fortran]
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.
profiling - 从 ifort 11.1 构建的分析代码产生 __powr8i4 例程,它是什么?
我用 Intel 11.1 构建了一个 Fortran 代码。我使用 -p 选项构建它以生成分析数据。当我检查这些结果时,存在一些不属于我的代码的例程。我想它们是由英特尔放在那里的。其中包括:
还有其他人。当我在没有优化的情况下构建代码时,代码不会在其中花费太多时间。除了结果显示 __powr8i4 的使用率为 3.3%。但是,当我使用优化构建代码时,这个数字会上升到大约 35%。我似乎无法找出这些例程是什么,但它们使我的结果感到困惑,因为我想知道在哪里优化我的代码。
fortran - 过早确定函数返回值
我有一个t_file
带有终结例程的派生类型,close
它只是将“终结”写入屏幕。还有一个函数返回 type 的实例t_file
。这个程序的输出是
我有两个问题:
- 为什么最终确定发生在输出之前
Just opened
? - 为什么最终确定会发生两次?
我的编译器是 Intel(R) Visual Fortran Composer XE 2011 12.1.3526.2010。
这是代码:
arrays - 定义为指针的指针数组的 Fortran 数组(ifort 11.1 中的错误?)
我有一个问题和一个问题(我认为它们是相关的)。
问题:我可以在 Fortran 90 中使用定义为指针的指针数组吗?
问题:我有代码(见下文),ifort 11.1 在最后一次写入时给出了段错误。其他编译器,例如 gfortran 4.6.3、ifort 11.1.072、12.0.1 等,都可以正常工作
您可以将代码视为 Python 附加功能的模拟。
预期结果是:
ifort 11.1 在最后一行给出分段错误。现在奇怪的事情来了。如果您注释掉字符串类型中的整数声明,您也将使用 ifort 11.1 获得预期结果。
这是编译器问题还是我使用非标准 Fortran 90 结构?
visual-studio-2010 - 错误 LNK2019:函数中引用了未解析的外部符号 MPI_INIT
我正在尝试使用 Visual Studio 2010 和 Intel Composer XE 2011 SP1 的试用版,ifort Visual fortran 编译器与 Intel Parrelel Studio 2011。我已经设法使用 64 位版本的 ifort 编译了所有目标文件,但是在链接文件时我收到以下错误:
我尝试通过添加命令 /L"C:\PathtoMPILibrary\" 链接到 64 位 Intel MPI 库以及 MPICH2 64 位库,但无济于事。我也尝试过使用这个 makefile,使用 mingw32 包中的 gmake 运行:
但是当我运行 gmake 时,出现以下错误:
我已经用尽了论坛,我需要在 64 位窗口下用 MPI 编译它。任何帮助将不胜感激!谢谢。
generics - 具有 ifort 编译器的通用内部程序
以下适用于 gfortran 或 f95,但不适用于 ifort:
ifort 返回此错误:
假设不能使用任何模块过程(我们不希望模块中有 addr 和 addi)并且 ifort 必须用作编译器。任何帮助,将不胜感激。
fortran - 如何使循环计数器不大于最终值?
所以样本循环:
给我2
作为 的最终值i
。如何在 Windows 上为 Visual Studio 设置 Intel Fortran 以获得最终值1
for i
?
makefile - Makefile:英特尔 fortran、文件夹中的源文件和英特尔数学核心函数库
我在文件夹 /ex 中有一个 main.f90。f77 子程序文件在 /ex/src 中。并且子程序文件再次使用 BLAS 和 LAPACK 库。对于 BLAS 和 LAPACK,我必须使用 Intel Math Kernel Library。
Intel fortran 和 mkl 文件夹如下所示:
/ex 中要编译的 main.f90 的 makefile 代码是什么?谢谢!
fortran - 使用 ifort 进行数组复制的程序崩溃
该程序Illegal instruction: 4
在 MacOSX Lion 和 ifort (IFORT) 12.1.0 20111011 上崩溃
相同的程序适用于 gfortran。我看不出有什么问题。有任何想法吗 ?展开副本并在列上执行显式循环在两个编译器中都有效。
请注意,使用可分配而不是指针我没有问题。
如果语句在模块内或不在模块内,行为是相同的。我在 ifort (IFORT) 12.1.3 20120130 上确认了相同的行为。
显然,Linux 和 ifort 12.1.5 没有问题
我尝试使用以下链接选项增加堆栈大小
ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90
但我仍然得到同样的错误。增加 ulimit -s 来解决同样的问题。
编辑2:我做了更多的调试,显然问题发生在数组拼接操作时
涉及可疑接近 16 M 数据的值。
我正在比较生成的操作码,但如果有一种方法可以查看更具交流性的中间代码形式,我将不胜感激。
visual-studio-2010 - Fortran 90 模块的神秘本质
Fortran 90 模块是短暂的生物。我使用了一段时间的(单一)模块并取得了一些成功(使用 Intel Visual Fortran 和 Visual Studio 2010 进行编译)。然后我写了另一个模块并尝试在另一个函数中使用它,然后收到此错误:
所以我删除了有问题的模块。但是现在我在尝试访问我的原始模块后收到了同样的错误!
我怎样才能找到这些神秘的生物?为什么一个模块可以工作而不是两个?我假设我需要删除并重新编译它们,或者告诉编译器以某种方式包含它们。我知道源代码的文件位置,但不知道它们编译到的位置。
linux - 使用英特尔 ifort 编译器启用到标准输出的缓冲 I/O
我已经阅读了有关使用 ifort (使用-assume buffered_io
or FORT_BUFFERED=true
)启用缓冲 I/O 的英特尔文档,这适用于直接输出到文件。但是,我们有大型应用程序正在写入标准输出(例如write(*,*)
或write(stdout,*)
),它被重定向到一个文件。在这种情况下,这两种缓冲技术都不起作用。
除了重构代码以直接写入文件之外,是否有一种方法可以使用 ifort 在 stdout 上启用缓冲 I/O?这在例如 gfortran 上默认启用。
我们在 SLES 11 上使用 ifort 12.0。
更新:感谢您的评论。我正在通过缓冲程序(如 tee)研究 stdbuf 和/或管道作为解决方法。到目前为止,我还无法做出可衡量的差异。
更新 2:
我已经尝试了 Douglas 的建议的一些实验,通过另一个程序进行管道传输。tee 和 cat 都缓冲,实际上缓冲似乎是由管道本身在 8K 左右完成的。然而,最初的 write() 调用、管道以及管道程序(tee、cat 等)的系统调用的开销太高,无法使其成为可行的解决方案。