Fortran Coder

查看: 8509|回复: 8
打印 上一主题 下一主题

[并行] openmp中动态分配问题

[复制链接]

5

帖子

1

主题

0

精华

入门

F 币
32 元
贡献
17 点
跳转到指定楼层
楼主
发表于 2018-7-31 15:05:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
module sx_type
        type Mdata
                integer :: nx(3) 
                real,allocatable :: sx(:)
        end type
contains
        subroutine deall(tmp)
                type(Mdata) :: tmp 
                if(allocated(tmp%sx)) deallocate(tmp%sx)
        end subroutine deall
end module
!----------------program-----------

program testopenmp
        use sx_type
        use omp_lib
implicit none
integer ix,iz
type(Mdata) :: test

call omp_set_num_threads(2)

test%nx(1)=4
test%nx(2)=5
test%nx(3)=6

!$omp parallel do private(test,ix,iz)
        do ix=1,3
        allocate(test%sx(test%nx(ix))) ! allocate test->sx on threads
        test%sx=2.0
        do iz=1,4
                test%sx(iz)=iz+omp_get_thread_num()
                print *,'thread ',omp_get_thread_num(),'sx=',test%sx(iz)
        end do
        call deall(test) !deallocate test
        end do
!$omp end parallel do

end program
我希望在openmp中进行数组分配,在一个程序中遇到这个问题,因为源程序就是采用这样的分配方式,编译没错,但是运行时出现错误:forrtl: severe (151): allocatable array is already allocated, 请问一下这是什么原因??谢谢!!!

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

259

帖子

0

主题

0

精华

版主

World Analyser

F 币
717 元
贡献
510 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2018-7-31 17:17:03 | 只看该作者
改成
!$omp parallel do private(test,iz)
试试

5

帖子

1

主题

0

精华

入门

F 币
32 元
贡献
17 点
板凳
 楼主| 发表于 2018-7-31 19:46:46 | 只看该作者
本帖最后由 1014511134 于 2018-7-31 19:56 编辑
kyra 发表于 2018-7-31 17:17
改成
!$omp parallel do private(test,iz)
试试
测试了还是不行,按理说省去ix,循环变量openmp默认的是private的。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

地板
发表于 2018-7-31 21:38:03 | 只看该作者
64-bit Win7 OS下MSYS2 + Gfortran 7.3.0
测试一切正常

259

帖子

0

主题

0

精华

版主

World Analyser

F 币
717 元
贡献
510 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
5#
发表于 2018-8-1 07:52:16 | 只看该作者
1014511134 发表于 2018-7-31 19:46
测试了还是不行,按理说省去ix,循环变量openmp默认的是private的。

用的什么操作系统和编译器?

5

帖子

1

主题

0

精华

入门

F 币
32 元
贡献
17 点
6#
 楼主| 发表于 2018-8-1 12:08:08 | 只看该作者
kyra 发表于 2018-8-1 07:52
用的什么操作系统和编译器?

centos6.9 Linux 工作站 ivf 2013

5

帖子

1

主题

0

精华

入门

F 币
32 元
贡献
17 点
7#
 楼主| 发表于 2018-8-1 12:08:37 | 只看该作者
pasuka 发表于 2018-7-31 21:38
64-bit Win7 OS下MSYS2 + Gfortran 7.3.0
测试一切正常

难道是编译器的问题?我再测试测试!谢谢!

259

帖子

0

主题

0

精华

版主

World Analyser

F 币
717 元
贡献
510 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
8#
发表于 2018-8-1 13:41:19 | 只看该作者
1014511134 发表于 2018-8-1 12:08
centos6.9 Linux 工作站 ivf 2013

没用过ifort for linux
在ivf for windows 和 gfortran/linux 上试过没问题。

5

帖子

1

主题

0

精华

入门

F 币
32 元
贡献
17 点
9#
 楼主| 发表于 2018-8-1 16:23:49 | 只看该作者
kyra 发表于 2018-8-1 13:41
没用过ifort for linux
在ivf for windows 和 gfortran/linux 上试过没问题。

好的,非常谢谢!!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-1 11:42

Powered by Tencent X3.4

© 2013-2024 Tencent

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