Fortran 与 C++ 相比,如今 Fortran 在数值分析方面是否仍然具有优势? [关闭]

2024-01-23

随着C++编译器(尤其是intel编译器)的快速发展,以及在C/C++代码中直接应用SIMD函数的能力,Fortran在数值计算领域是否仍然具有真正的优势?

我来自应用数学背景,我的工作涉及大量的数值分析、计算、优化等,并且有严格定义的性能要求。

我对 Fortran 几乎一无所知,我对 C/CUDA/matlab 有一些经验(如果你一开始就将后者视为计算机语言),而且我的日常任务涉及分析非常大的数据(例如 10GB 大矩阵),看起来该程序至少花费了 2/3 的时间来访问内存(这就是为什么我将其部分工作发送给 GPU),你们认为对我来说至少尝试 fortran 例程可能值得吗?我的代码的一些性能关键部分来提高我的程序的性能?

由于其中涉及复杂性和需要完成的事情,因此只有在能够显着提高性能的情况下,我才会采用该例程,提前致谢。


与 C++ 相比,Fortran 具有严格的别名语义,并且几十年来一直在积极调整数值性能。使用 CPU 处理数据数组的算法通常有可能从 Fortran 实现中受益。

编程语言的较量不应被过于认真地对待,但在 15 个基准测试中,Fortran 在速度方面排名第一four其中(对于 Intel Q6600 一个核心),比任何其他单一语言都多。您可以看到 Fortran 表现出色的基准是大量数值基准:

  • 谱范数 http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=spectralnorm速度提高 27%
  • fasta http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=fasta速度提高 67%
  • 曼德尔布罗特 http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=mandelbrot速度提高 56%
  • pidigits http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=pidigits速度提高 18%

反例:

  • k-核苷酸 http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide慢 500%(该基准测试主要关注更复杂的数据结构和字符串处理,这不是 Fortran 的强项)

您还可以看到摘要页面“慢了多少倍 http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html”这表明,在所有实现中,Fortran 代码平均最接近每个基准测试的最快实现 - 尽管分位数条比 C++ 大得多,表明 Fortran 不适合 C++ 擅长的某些任务,但是你应该已经知道了。

因此,您需要问自己的问题是:

  1. 这个函数的速度是否如此重要以至于值得我花时间在 Fortran 中重新实现它?

  2. 性能是否如此重要以至于我学习 Fortran 的投资会得到回报?

  3. 是否可以使用像 ATLAS 这样的库而不是自己编写代码?

回答这些问题需要详细了解您的代码库和业务模型,因此我无法回答这些问题。但是,Fortran 实现通常比 C++ 实现更快。

决定的另一个因素是示例代码的数量和可用的参考实现的数量。 Fortran 悠久的历史意味着有大量的数字代码可供下载,甚至可以去图书馆下载。与往常一样,您需要仔细筛选才能找到好东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fortran 与 C++ 相比,如今 Fortran 在数值分析方面是否仍然具有优势? [关闭] 的相关文章

  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • ProtoBuf-net AsReference 需要 Activator.CreateInstance 中的公共构造函数吗?

    在我的两门课程中 看起来像这样 最少 using System using System Collections Generic using System Collections using System ComponentModel us
  • 从 .Net 将简单数据插入 Excel 文件的最简单方法

    我有一个 Excel 文件 大约有 10 列和 1 20 行 我需要插入 1 20 行包含各种数据元素 我想知道是否有一种方法可以将一些标签放入 Excel 文件中 以便可以找到并替换它们 将列标记为 名称 的东西 这样我就可以在代码中说
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • TestMethod:异步任务 TestSth() 不适用于 .NET 4.0

    我正在尝试使用 NET 4 0 BCL Async 和 MsTest 运行异步测试方法 看来这个设置不能处理 测试方法 异步Task测试Sth 由于测试用例资源管理器中缺少条目 将签名更改为异步后void 我可以运行测试用例 但结果错误 根
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 在 C++ 中处理音频缓冲区时,如何执行从 float -> double -> float 的转换

    我目前正在开发一个应用程序 其中音频样本帧在以下回调中进行处理 void Eav07AudioProcessor processBlock AudioSampleBuffer buffer for int channel 0 channel
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • Unity 2.0 和处理 IDisposable 类型(特别是使用 PerThreadLifetimeManager)

    我知道类似的问题被问过好几次 例如 here https stackoverflow com questions 987761 how do you reconcile idisposable and ioc here https stac
  • 如何使用eclipse构建C++应用程序

    我已经从以下位置下载了 Eclipse Juno for C here http www eclipse org downloads download php file technology epp downloads release ju
  • 为什么从绑定返回的对象会忽略额外的参数?

    假设我有一个带有两个参数的函数 void f int x int y 我想绑定其中之一 我可以用std bind如下 auto partiallyBoundF std bind f 10 1 partiallyBoundF仅需要一个参数 但
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • C++0x 闭包的未定义行为:II

    我发现 C 0x 闭包的使用令人困惑 我的初始report https stackoverflow com questions 5543169 how to make a vector of functors lambdas or clos
  • Git合并后挂钩,如何获取合并分支的名称

    我正在尝试创建合并后挂钩脚本 该脚本仅在从特定分支合并时运行 如何确定特定提交的分支更改的名称 e g if from specific branch 1 then git diff name status HEAD 1 HEAD some
  • R 包的设置数据:vegan

    我使用素食主义者从动物计数数据中确定生物多样性指标 目的是查看计数年份之间是否存在差异 即物种数量是否根据年份而减少或增加 数据以矩阵格式设置 如下所示 年是一个字符 其他都是数字 因此 R 应该省略 NA 我设置了如上所示的数据 但大多数
  • 使用 ffmpeg 循环更改 bash 变量

    我编写了一个脚本 用于根据我在时间戳上录制的视频快速创建简短的预览剪辑 我发现这些视频值得稍后查看以进行剪辑 我的带有时间戳的文件是这样写的 FILE NAME1 MM SS MM SS FILE NAME2 MM SS MM SS MM
  • 如何为 AWS Elastic Beanstalk 部署运行 npm 脚本?

    My package json has scripts start node modules bin coffee server coffee test NODE ENV test node test runner js coverage
  • Android 7.1 写入文本文件

    来自果冻豆的牛轧糖新手尝试将文本文件写入 SD 卡我知道我现在必须请求权限 但找不到任何有效的代码 尝试了以下方法 StringBuilder bodyStr new StringBuilder bodyStr append data1St
  • 用 Java 下载的 PDF 已损坏?

    我读过有关的精彩讨论如何使用 Java 从 Internet 下载并保存文件 https stackoverflow com questions 921262 how to download and save a file from int
  • 有条件地启用 C++ 类中的构造函数 [重复]

    这个问题在这里已经有答案了 我正在学习如何使用std enable if到目前为止 我在课堂上有条件地启用和禁用方法方面取得了一定程度的成功 我根据布尔值对方法进行模板化 此类方法的返回类型是std enable if这样的布尔值 这里的最
  • 如何在 Python 中创建迭代器管道?

    是否有库或推荐的方法在 Python 中创建迭代器管道 例如 gt gt gt all items get created by location surrounding cities 我还希望能够访问迭代器中对象的属性 在上面的例子中 a
  • 每个类元素的简单 jquery .hover() 方法

    没做过太多jquery 遇到了问题 我想为所有具有 social tile 类的 div 绑定悬停事件 我这样做 function var social default social tile css margin right social
  • 在 VS 2012 中调试 javascript - 本地主机缓存有旧代码

    我开始构建一个 PhoneGap 应用程序 并决定使用 VS2012 作为编辑器 调试器 因为 Eclipse 和 XCode 不进行 javascript 调试 或者它们做 也许我错过了一些东西 并且 VS2012 有 js 的智能感知
  • 对 Lisp 引用感到困惑

    我有一个关于 lisp 中列表评估的问题 Why is a and a 1 未评价 defun test a a 1 就像 print 4 这里不评价 if lt 1 2 print 3 print 4 but print 2 3 在这里评
  • C# 类似于 VBA 中的 List

    我想创建一个List
  • Codenameone 中使用 split 方法时出错

    我创建了一个新的 Codenameone 项目 它包含以下代码 String values one two tree String v values split Codename One 支持 Java 5 的一个子集String spli
  • 使用 jQuery 调用 Sinatra 删除路由

    我对 Sinatra 还很陌生 正在制作一个利用基本 CRUD 功能的简单待办事项应用程序 在后端 我有工作路线并测试了所有内容 我想合并一些前端功能 并决定使用 jQuery 来帮助实现这一点 我在 jQuery 中有一段当前代码 当单击
  • 具有自定义对象的可过滤适配器

    我想将自动完成文本框添加到 xamarin android 中的列表视图 自定义对象 中 我有一个列表视图 它是从字符串数组填充的 我想使用自定义对象填充我的列表视图 下面的代码适用于字符串数组 任何帮助实现我的自定义对象适配器都会有所帮助
  • 如何更改两层的 ggplot 图例标签和名称?

    我正在使用 ggmap 和 ggplot 包绘制圣保罗地图中两个不同数据帧的经度和纬度坐标 并希望手动标记每个图例图层 更新 我编辑了下面的代码以使其完全可重现 我使用的是地理编码函数而不是 get map 更新 我想在不合并数据帧的情况下
  • addTooltip 间歇性地使用observeEvent 中的两个输入

    我正在构建一个闪亮的应用程序来绘制网络 用户可以选择一个节点 单击切换按钮以显示该节点的自我网络 然后单击相同的按钮返回主网络 我试图获得一个工具提示 将鼠标悬停在按钮上 其中的文本会根据按钮本身的状态以及是否选择节点而变化 问题是工具提示
  • Google Apps 脚本:一天内调用服务次数过多:电子邮件

    我正在尝试循环浏览电子表格 并为每一行发送一封电子邮件 电子邮件发送后 我想删除该行 然而那是行不通的 由于某种原因 它开始疯狂地发送电子邮件 并在某个时候达到限制并退出 它实际上只删除一行 请参阅下面的代码 function sendEm
  • Fortran 与 C++ 相比,如今 Fortran 在数值分析方面是否仍然具有优势? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着C 编译器 尤其是intel编译器 的快速发展 以及在C C 代码中直接应用SIMD函数的能力 Fortran在数值计算领域是否仍然具有真正