Fortran Coder

查看: 22056|回复: 10
打印 上一主题 下一主题

[并行] 求助各位大神OMP的问题

[复制链接]

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

楼主
发表于 2021-7-7 20:28:14 | 显示全部楼层
并行计算中在同一媒体上进行文件读写一般只能有一个线程/进程。如果你一定需要每个线程进行计算时都需要读取一个文件的话, 用critical, 如下:
!$omp critical
read
!$omp end critical

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

沙发
发表于 2021-7-9 20:00:41 | 显示全部楼层
mccoy93@126.com 发表于 2021-7-9 16:54
大佬,那用到这句话的时候,几个线程之间读文件是有先后顺序的还是同时的,如果我存在多次读取的情况,那 ...

几个线程之间读文件顺序是无规的,先到先读。一个线程在读的时候其他线程必须等待。如果文件在一个机器的磁盘中,无法多个线程同时读取一个文件或多个文件。如果每个线程进行计算时需要读取的是同一个文件,可以改变OMP结构,先让一个线程读文件,随后传输给其他线程。

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

板凳
发表于 2021-7-13 20:20:32 | 显示全部楼层
mccoy93@126.com 发表于 2021-7-13 14:31
谢谢大佬! 不过这个方法对于我这个东西好像行不通,我是算一个系统性能,相当于在计算的过程中需要疯狂 ...

有 多少个文件?几百?上千?如果不是太多,可以先读取所有文件到内存变量,这样就可以几个线程同是读取内存变量。

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

地板
发表于 2021-7-14 21:07:32 | 显示全部楼层
mccoy93@126.com 发表于 2021-7-14 11:14
文件大概有四五十个 数据大概是上千个 目前的样子是这个文件读取这部分代码我看不到,您的意思是我在单线 ...

是的。可以定义一个二维数组,其中一维是文件,另一维是每个文件中的数据。先用单线程读取所有文件到这个二维数组,随后多线程可读取该二维数组。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-2 20:09

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表