Questions tagged «fortran»

Fortran是科学计算社区广泛使用的通用编程语言。

6
Fortran编译器真的好多少?
这个问题是对“ HPC的C ++ vs Fortran ”的答复中最近进行的两个讨论的扩展。而且,这不仅仅是一个挑战,而不是一个问题... 支持Fortran的最常听到的论据之一是编译器更好。由于大多数C / Fortran编译器共享相同的后端,因此为两种语言在语义上等效的程序生成的代码应该相同。但是,有人可能会争辩说,对于编译器来说,C / Fortran更容易实现优化。 因此,我决定尝试一个简单的测试:我获得了daxpy.f和daxpy.c的副本,并使用gfortran / gcc对其进行了编译。 现在daxpy.c只是daxpy.f(自动生成的代码,很难看的丑陋的)的f2c转换,所以我拿走了这段代码并对其进行了一些清理(满足daxpy_c),这基本上意味着将最里面的循环重写为 for ( i = 0 ; i < n ; i++ ) dy[i] += da * dx[i]; 最后,我使用gcc的向量语法重新编写了它(输入daxpy_cvec): #define vector(elcount, type) __attribute__((vector_size((elcount)*sizeof(type)))) type vector(2,double) va = { da , da }, *vx, *vy; vx = …
74 fortran  c  blas  benchmarking 

12
C ++与Fortran for HPC
在我的计算科学博士学位程序中,我们几乎只在C ++和Fortran中工作。似乎有些教授更喜欢另一种。我想知道哪个在某些情况下是“更好”的,还是一个在另一个方面要比另一个更好。
56 hpc  fortran  c++  languages 

4
是什么使Fortran快速?
Fortran在数值编程中占有特殊的位置。您当然可以使用其他语言来制作优质,快速的软件,但是Fortran虽已发展多年,但仍然保持着出色的性能。此外,在Fortran中编写快速程序更加容易。我已经用C ++编写了快速程序,但是您必须更加小心指针别名之类的内容。因此,必须有一个原因,并且是一个非常技术性的原因。是因为编译器可以优化更多吗?我真的很想知道技术细节,因此,如果我使用另一种语言,则可以考虑这些因素。 例如,我知道-或我认为-有一件事是,该标准指定指针在内存中始终是连续的,这意味着更快的内存访问。我相信您可以在C ++中通过向编译器提供标志来做到这一点。通过这种方式,有助于了解Fortran的优势,因此,如果使用其他语言,我们可以效仿。

8
我应该使用哪个软件包用Python包装现代Fortran代码?
我知道,并且已经使用f2py2e封装了一些旧的Fortran 77代码,但是我的理解是它不适用于更新的Fortran 95代码。我研究了我应该使用的东西,并且碰到了fwrap和G3 f2py,它们似乎都没有给出关于它们当前状态或使用方式的任何解释(除了基本用法之外)。 我还看到f2py版本可以选择使用第三代f2py,但是它被评论为不起作用。鉴于此,我不知道应该为uni项目使用哪个项目。我应该为新代码使用哪一个? PS这基本上是与/programming/10665717/current-best-method-for-wrapping-modern-fortran-code-with-python相同的问题,建议在这里提问可能会提供更好的答案。
27 python  fortran 

3
如何在Mac上安装Fortran编译器?(OS X 10.x,x> = 4)
相关问题:科学计算和HPC中Mac OS的状态 计算科学中的大量软件包都是用Fortran编写的,并且Fortran并没有消失。还需要Fortran编译器来构建其他软件包(一个值得注意的示例是SciPy)。 但是,Mac OS X不包括Fortran编译器。我应该如何在计算机上安装Fortran编译器?
25 software  fortran 

3
英特尔Fortran编译器:编译时的优化技巧
我将从我在实验室中的亲身经历开始。在ifort 9天和10天中,我们过去一直非常积极地进行优化,使用-O3和特定于处理器的标志(例如-xW -xSSE4.2)进行编译。但是从ifort 11开始,我们开始注意到: 1.结果中存在一些不一致之处(因为未保留语义) 2.与-O2相比,获得的收益较小。 因此,当前,我们通常仅使用-O2和-xhost进行编译。您是否对ifort 11有更好的建议?当我们过渡到ifort 12时,这种情况会再次改变吗?提前致谢。

6
如何编写尺寸无关的代码?
我经常发现自己为给定操作/算法的一维,二维和三维版本编写了非常相似的代码。维护所有这些版本可能会变得乏味。简单的代码生成效果很好,但是似乎认为必须有更好的方法。 有没有一种相对简单的方法可以一次编写一个操作并将其推广到更高或更低的维度? 一个具体的例子是:假设我需要计算频谱空间中速度场的梯度。在三个方面,Fortran循环看起来像: do k = 1, n do j = 1, n do i = 1, n phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k) end do end do end do 其中ddx阵列被适当地限定。(也可以使用矩阵乘法来执行此操作。)二维流的代码几乎完全相同,除了:第三维从循环,索引和组件数中删除。有没有更好的表达方式? 另一个例子是:假设我在三维网格上逐点定义了流体速度。为了将速度插值到任意位置(即不对应于网格点),可以在所有三个维度上连续使用一维Neville算法(即降维)。给定简单算法的一维实现,是否存在一种简单的方法来进行降维?

2
具有可分配和假定形状数组的F2Py
我想f2py与现代Fortran 一起使用。特别是,我试图使以下基本示例正常工作。这是我可以生成的最小的有用示例。 ! alloc_test.f90 subroutine f(x, z) implicit none ! Argument Declarations ! real*8, intent(in) :: x(:) real*8, intent(out) :: z(:) ! Variable Declarations ! real*8, allocatable :: y(:) integer :: n ! Variable Initializations ! n = size(x) allocate(y(n)) ! Statements ! y(:) = 1.0 z = x + …
18 python  fortran 

5
并行科学计算软件开发语言?
我想从头开始开发并行科学计算软件。我想开始使用哪种语言。该程序涉及将数据读/写到txt文件中,并并行进行大量计算,并具有许多LU分解和使用稀疏线性求解器的功能。我在考虑的候选解决方案是带有OpenMP或协同阵列的Fortran 2003/2008,带有openmp cilk +或TBB的C ++,python。任何其他有文件记录的建议,我们都欢迎!我非常了解C,Fortran和Java(按此顺序)。我已经在python中完成了一些脚本编写工作,但是基本的东西。 我知道fortran很快,但是很难维护和并行化。据说C ++运行缓慢,除非您使用外部库等我喜欢的Python,但是在其上编写全面的工业级软件是否现实? 该软件需要能够处理大量数据并通过科学计算有效。性能至关重要。 对于背景,我已经有一个用Fortran编写的工作软件。许多人参与了很多年的开发,并且代码真的很脏。维护和并行化代码被证明是一场噩梦,我正在考虑其他选择。 佩特罗斯


6
Python与FORTRAN
哪个更好:FORTRAN还是Python?我想在两种情况下都需要Gnuplot,对吗? 我目前正在Windows机器上工作。 我想用它来获得物理问题的数值解决方案,包括蒙特卡洛模拟,数值积分和微分,分子动力学等。 我看过一门有关计算物理的课程,其中介绍了FORTRAN(我相信是77)和Python。我打算从一个开始,然后再学习另一个,但是我不知道哪个过渡可能是最简单的。 您还会推荐哪些编译器? 对我而言,基本问题归结为:哪个是最容易学习的,哪个是最快的,哪个是最人性化的,最重要的是哪个是最常用的(因此将这4个进行比较)?除此之外,最常用的(免费或付费)编译器是什么?我目前正在考虑将旧的笔记本电脑(早期的英特尔双核)转换为Linux。希望那足够快。 到目前为止,非常感谢您提供答案!与我正在寻找的答案是LKlevin和SAAD的答案。 如果有任何帮助,我几乎完全了解C ++,Maple的基础知识,并且几乎完全掌握了MATLAB和Mathematica9。
17 python  fortran 

4
矩阵的行主列与列主列布局
在对密集矩阵计算进行编程时,是否有任何理由要选择超过行的主布局的行主布局? 我知道,根据所选矩阵的布局,我们需要编写适当的代码以有效地将高速缓存用于速度目的。 以行为主的布局似乎更自然,更简单(至少对我而言)。但是用Fortran编写的LAPACK之类的主要库都使用列的主要布局,因此必须有一些选择的理由。
16 matrix  fortran 

3
Fortran:计时代码部分的最佳方法?
有时在优化代码时需要对代码的某些部分进行计时,但我多年来一直在使用以下代码,但想知道是否有更简单/更好的方法来做到这一点? call system_clock(count_rate=clock_rate) !Find the time rate call system_clock(count=clock_start) !Start Timer call do_something_subroutine !This is what gets timed call system_clock(count=clock_stop) ! Stop Timer e_time = real(clock_stop-clock_start)/real(clock_rate)

1
如何在共享内存模式(如OpenMP)中运行MPI-3.0
我正在并行化代码以数字方式求解5维人口平衡模型。当前,我在FORTRAN中有一个很好的MPICH2并行化代码,但是随着我们增加参数值,数组变得太大而无法在分布式内存模式下运行。 我可以访问具有15个节点的群集,其中每个节点具有两个8个核心CPU和128GB RAM。我想在共享内存模式下以MPI-3.0编写运行程序,以便每个进程都不会生成每个数组的自己的副本。 在集群上运行任何东西之前,必须在运行Ubuntu的桌面上对其进行测试。它实质上是集群的一个刀片,因为它具有两个8个核心CPU和128 GB的RAM。我将在上面编写和测试我的代码,因此请针对在Ubuntu计算机上运行程序调整您的响应。 我已经读到有一种方法可以在共享内存模式(如OpenMP)而不是其默认的分布式内存模式下运行MPI-3.0。 问题: 我将如何更改我的代码?我是否需要添加对其他MPI函数的调用MPI_WIN_ALLOCATE? 如何编译我的代码以在共享内存模式下运行MPI-3.0?如果跨越多个节点,情况会有所不同吗? 请提供示例编译脚本。我也只有GNU编译器。我使用的群集不支持Intel编译器。

6
是否存在将现代Fortran与OOP结合使用的开源科学图书馆?
在过去的几个月中,我花了时间编写用于解决特定PDE系统(描述流体流动/燃烧)的Fortran程序。我尝试使用最新标准的Fortran和现代Fortran具有的新OOP功能。我自己工作,没有Fortran专家在旁边问问题,因此对我来说,学习的一种有益方式是查看使用现代Fortran的其他库/求解器。 不幸的是,所有的Fortran库似乎都是用相当古老的Fortran,Fortran90顶部编写的。因此,我必须自己仔细考虑课堂设计和互动。而且我完全不是我做得对的人,特别是如果从绩效角度看。但是,也许我错过了一些东西,如果有Fortran并使用OOP,有现代科学软件包编写吗? 有很多不错的C ++库可供学习(OpenFOAM,deal.II等)以及Python库。这些语言在一般情况下也有更大的社区。如果我想通过示例学习,最好放弃Fortran并切换语言吗?
14 fortran 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.