Fortran + Openmp 比顺序更慢

2024-06-28

我有这个 Fortran 语言的顺序代码。我的问题是,当我放置 Openmp 指令时,并行代码比顺序代码更慢,并且我没有看到错误。

REAL, DIMENSION(:), ALLOCATABLE :: current, next
ALLOCATE ( current(TOTAL_Z), next(TOTAL_Z))

CALL CPU_TIME(t1)

!$OMP PARALLEL SHARED (current, next) PRIVATE (z)
DO t = 1, TOTAL_TIME
    !$OMP  DO SCHEDULE(STATIC, 2)
    DO z = 2, (TOTAL_Z - 1)
        next(z) = current (z) + KAPPA*DELTA_T*((current(z - 1) - 2.0*current(z) +      current(z + 1)) / DELTA_Z**2)
    END DO
    !$OMP END DO
    current = next
END DO

CALL CPU_TIME(t2)

!$OMP END PARALLEL 

TOTAL_Z、TOTAL_TIME、KAPPA、DELTA_T、DELTA_Z 是常量。
当我运行并行代码时,我在 htop 中看到我的 2 个核心正在 100% 运行
在顺序代码中,CPU_TIME 为 79 seg,在并行代码中为 132 seg
Thank


我刚刚遇到了同样的问题。

看来使用cpu_time()不适合衡量多线程代码的性能。 cpu_time() 将添加所有线程的总时间,该总时间可能会随着线程数量的增加而增加。

我在另一个论坛找到了这个http://software.intel.com/en-us/forums/topic/281897 http://software.intel.com/en-us/forums/topic/281897

您应该使用 system_clock() 或 omp_get_wtime() 函数来获得更准确的例程计时。

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

Fortran + Openmp 比顺序更慢 的相关文章

  • f951 错误:无法识别的命令行选项

    我在linux上 正在编译以下内容 mpif90 shared source F90 object1 o object2 o L some path Qoption link rpath some path I some path lhdf
  • 使用 MacLaurin 展开的 Fortran Sine 函数的微小差异

    我正在用 Fortran 创建一个程序 它接受以弧度表示的 sin x 的 x 然后是要计算的项数 这是我的程序 Sine value using MacLaurin series program SineApprox implicit n
  • 识别操作系统

    我在 Intel 编译器上的 Fortran 90 代码取决于它运行的操作系统 例如 if OS win7 then do X else if OS linux then do y end if 我如何以编程方式执行此操作 您可以使用预处理
  • 如何格式化整数以仅具有所需的大小?

    我一直在尝试以下代码 program hello write i9 10 end program hello 并改变格式字符串 尝试使写入输出的字符串大小恰好满足表示整数所需的大小 但到目前为止我无法管理它 如何在 Fortran 中编写
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 当我使用并行代码时,为什么我的计算机没有显示加速?

    所以我意识到这个问题听起来很愚蠢 是的 我使用的是双核 但我尝试了两个不同的库 Grand Central Dispatch 和 OpenMP 并且当使用 clock 来对带有和不带有使平行的话 速度是一样的 根据记录 他们都使用自己的并行
  • 带有过程参数的通用类型绑定过程

    我正在尝试编写一个通用的类型绑定过程 它将不同的回调函数作为参数 当编译以下代码 使用 ifort 12 1 3 时 我收到以下警告 module test type a type contains procedure t s gt at
  • Fortran :: (1) 处 OPEN 语句中存在语法错误

    我试图通过 顽固测试 来测试我的密码算法 http stat fsu edu pub diehard http stat fsu edu pub diehard 我意识到我的输入文件必须是未格式化的直接访问文件 所以我尝试用 Fortran
  • 在 VSCode Fortran 调试中检查从另一个模块导入的变量

    我正在调试一些包含许多 Fortran 模块的代码 其中一些模块彼此共享变量 不幸的是 带有 VScode 的 gdb 在调试时似乎无法检查导入的变量 目前 当我需要检查导入的变量时 唯一的方法是停止调试 并手动更改代码以包含等于导入变量的
  • 帮助解决 openmp 编译问题

    我试图在我的 C 代码中使用 omp 并遇到问题 在代码中我有 include 但是当我尝试编译时 g fopenmp g c 并行 c 我收到 cc1plus error unrecognized command line option
  • c++ OpenMP 关键:“单向”锁定?

    考虑以下串行函数 当我并行化代码时 每个线程都会从并行区域内调用此函数 未显示 我正在尝试使这个线程安全and高效 快速 float get stored value or calculate if does not yet exist i
  • 如何使用 OpenMP 并行化数组移位?

    如何使用 OpenMP 并行化数组移位 我已经尝试了一些方法 但没有得到以下示例的任何准确结果 该示例旋转 Carteira 对象数组的元素 用于排列算法 void rotaciona int i Carteira aux this gt
  • 将 FORTRAN 对象传递给 C,反之亦然

    我有我的 Fortran 对象 即 this object a this object b this object c 我想将它传递给用 C 编写的代码 我主要是一名 FORTRAN 程序员 而且我很少接触 C 我正在使用iso c bin
  • 派生类型数组:选择条目

    目前在我的代码中我有一个二维数组 integer allocatable elements 并定义一些常量 integer parameter TYP 1 integer parameter WIDTH 2 integer paramete
  • 2 个数组/图像相乘的多线程性能 - 英特尔 IPP

    我正在使用英特尔 IPP 来进行 2 个图像 数组 的乘法 我使用的是 Intel Composer 2015 Update 6 附带的 Intel IPP 8 2 我创建了一个简单的函数来乘以太大的图像 整个项目已附后 见下文 我想看看使
  • Fortran 读取语句中的“end”是什么意思?

    什么是end 这段代码片段的意思是什么 read portNum 100 end 900 readline 附 我已经尝试用谷歌找到这个 但没有运气 用户3600286 直接引用自this pdf http www tomzap com n
  • 从代码中覆盖 OMP_NUM_THREADS - 真正的

    到目前为止我能找到的所有答案都建议致电omp set num threads 虽然对于大多数情况来说这是一个正确的答案 但它对我不起作用 在内部 调用omp set num threads导致创建每线程 ICV 或修改 如果当前线程已经有一
  • Visual C++ 只有一个线程工作 (OpenMP)

    我有一个多线程应用程序的简单代码 但无论我传递多少个线程 它都只使用一个线程执行 起初 我以为是我的电脑的问题 但我又尝试了另一台电脑 但还是不行 我是不是出了什么事 我正在使用 Visual Studio 2015 如果有帮助的话 int
  • openmpi 忽略错误:无法识别 mca 接口

    今天早上 我升级了 gfortran 从 4 7 到 6 1 0 和 OpenMPI 从 1 10 到 2 0 1 编译器 我写了这个简单的程序 program main use mpi f08 implicit none
  • 科学 Fortran 编译错误

    我正在研究科学建模程序 但还没有让我的程序编译 我没有碰过我的教授坚持认为以前有效的代码 只碰过 makefile 经过多次尝试 我得到的最远的是这个错误 Error on line 1112 Declaration error for x

随机推荐

  • 如何在Jmeter中生成并发用户负载

    我有一个测试 用户将登录并在搜索字段中输入搜索关键字并获得结果 终于退出了 现在我想使用Jmeter测试并发性 这就是我想出的办法 Test plan Thread group Login request Synchronizing Con
  • MySQL 在 Windows 上将数据库文件存储在哪里以及文件的名称是什么?

    我不小心格式化了硬盘并重新安装了 Windows 却忘记备份 MySQL 服务器中的重要数据库 我现在正在尝试使用某些软件来挽救文件 但我不知道要寻找什么 文件存储的路径是什么 文件的名称是什么 我应该查找什么命名约定或文件扩展名 我相信我
  • ORA-01719: OR 或 IN 的操作数中不允许有外连接运算符 (+)

    运行查询时出现错误 ORA 01719 OR 或 IN 的操作数中不允许有外连接运算符 01719 00000 OR 或 IN 的操作数中不允许使用外连接运算符 原因 or 子句中出现外连接 动作 如果A和B是谓词 要得到 A 或B 的效果
  • 使用 Union 或 Join - 哪个更快 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是想知道你是否有一张桌子并且联合起来会比使用联接更有效吗 我确实知道联接创建了更多列 但这更具理论性 联合是否需要像联接那样对另一
  • 复制稀疏文件

    我正在尝试了解 Linux UNIX 低级接口 作为练习 我想编写一个代码 将一个有漏洞的文件复制到一个新文件 同样有漏洞 所以我的问题是 如何从第一个文件读取 而不是直到第一个洞 而是直到文件的最后 如果我没错的话 read 当到达第一个
  • jQuery stopPropagation 气泡向下

    我有一个 div 里面有一个链接 div a href http www lol com Lol a div 单击 div div 应该去某个地方 但是点击孩子 a a 应该去 www lol com 我见过从之前的问题 https sta
  • SQL SERVER - COALESCE() 函数的问题

    我有一个由存储过程包装的 SQL 函数 ALTER FUNCTION dbo GetObjList filterUID int NULL filterSID varchar 32 NULL RETURNS TABLE AS RETURN S
  • 如何在PostgreSQL中选择具有级别的表的所有层次结构

    我现在有一个问题 我有一个名为地方的表 其结构如下 id 父 ID name 我想做一个选择来拥有该表的所有层次结构 有一个数据的小例子 1 null 123 Barclay St 2 1 Floor 1 3 1 Floor 2 4 1 F
  • 从 Java 连接到 Oracle ...异常

    我想连接远程 Oracle DB 但出现异常 请帮帮我 我能做些什么 我尝试了这个 但它不起作用 try Class forName oracle jdbc driver OracleDriver Connection con Driver
  • 在 bash 中生成脚本并将其保存到需要 sudo 的位置

    在 bash 中 我可以根据此站点创建一个带有定界符的脚本 http tldp org LDP abs html abs guide html GENERATESCRIPT http tldp org LDP abs html abs gu
  • 将主机添加到 Ansible 主机文件

    我一直在尝试使用 Ansible 剧本将主机名添加到我的主机文件中 我的 Ansible 播放如下所示 我的主机文件位于 etc ansible hosts name adding host playbook hosts localhost
  • 在 UIImage 上添加点击手势

    我正在尝试制作可点击的 UIImage 用户可以点击它然后它就会动画 我正在使用 UIScrollVIew 这就是为什么我使用 UITapGesture 而不是 TouchBegan 而且 UIGestureRecognizer 似乎与 U
  • Gnuplot:带有内联数据的直方图

    Gnuplot 4 6 5 我想绘制直方图 我在这里尝试了演示 http gnuplot sourceforge net demo histograms 2 gnu http gnuplot sourceforge net demo his
  • Laravel Eloquent:检测为空或计数

    主要问题是如何检测 eloquent 集合结果是否为空 laravel 建议如何识别这一点 我对此有两个不同的问题 也许它们彼此相关或无关 首先 我怎样才能得到结果 result user gt delete OR result user
  • 在 openjre 中使用需要 Java 策略文件的加密

    如果我想使用 java 和密钥长度超过 128 位的加密 我必须使用 Java 策略文件 如何使用 openjre 启动并运行这些应用程序 我在使用没有策略文件的 Oracle jre 时遇到了同样的错误 但我不能简单地使用 Oracle
  • CSS 错误源映射信息在 URL() 声明中不可用(发现孤立 CR,尝试删除CR 选项)

    我在项目中执行 NPM start 时遇到问题 我收到此错误消息 src assets base scss node modules css loader dist cjs js ref 6 oneOf 5 1 node modules p
  • 使用 VS 2012 在构建中生成 T4

    我正在尝试使用 VS2012 在项目的每个构建上生成代码 我的解决方案中有 3 个项目 项目1有一些类 项目 2 有通用模板 项目 3 的模板读取 json 文件 然后调用项目 2 中的通用模板来生成其文件 当我单击 构建 转换所有 T4
  • Mac OS X 上的 Neovim 显示问题

    我通常在我的 Linux 配置上使用 Neovim 但今天我必须使用 Mac 并且我将不得不使用它一会儿 所以我安装了包管理器 Homebrew 并安装了 Neovim 我放置了我的配置 init vim 并安装了 Vim Plug 插件管
  • 需要访问tableView中的单元格:heightForRowAtIndexPath:

    我需要从以下位置访问表格中的单元格tableView heightForRowAtIndexPath 因为我想使用自定义单元格上的数据进行高度计算 我发现获取细胞的唯一方法是打电话tableView cellForRowAtIndexPat
  • Fortran + Openmp 比顺序更慢

    我有这个 Fortran 语言的顺序代码 我的问题是 当我放置 Openmp 指令时 并行代码比顺序代码更慢 并且我没有看到错误 REAL DIMENSION ALLOCATABLE current next ALLOCATE curren