Fortran Coder

查看: 3358|回复: 7
打印 上一主题 下一主题

[讨论] data 与 reshape 用法探究

[复制链接]

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
跳转到指定楼层
楼主
发表于 2022-8-7 20:23:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zjk0112 于 2022-8-7 20:31 编辑

我练习改写lapack dgetrf2.f 为dgetrf2.f90。在测试过程中遇到下面问题
1)当我的数组A用data方式表示(如图1)

但是在CTRL+F5 run的过程中结果无法输出(如图2),

用F5 debug run 则显示错误 Run-Time Check Failure #2 - Stack around the variable '.T1555_' was corrupted.(如图3)

把dgetrf2函数注释掉,则可以正常打印a(如图4)

2)当我的数组A用reshape方式表达(如图5)

则在无论时CTRL+F5 还是F5都不会遇到问题,恢复dgetrf2的注释也能正常运行程序,打印dgetrf2的结果(如图6)

但是我不清楚问题发生的原因,希望雪球大神看到帖子可以解答一下。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
沙发
 楼主| 发表于 2022-8-7 20:32:58 | 只看该作者
我想知道data表示的数组是一维数组还是而二维数组,我能不能用data表示二维数组,还是不需要data表示二位数组。

168

帖子

2

主题

1

精华

大师

Vim

F 币
1021 元
贡献
486 点

规矩勋章

板凳
发表于 2022-8-7 22:11:31 | 只看该作者
本帖最后由 Transpose 于 2022-8-7 22:24 编辑

建议上传完整可运行的有问题的代码,方便查错。初步判断,这个应该和 data reshape 无关
----
data 可以用于任意rank的数组,也可以放在任意位置,只会在程序开始调用一次
reshape 用于改变数组的rank,本身返回一个数组对象

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
地板
 楼主| 发表于 2022-8-8 00:59:47 | 只看该作者
Transpose 发表于 2022-8-7 22:11
建议上传完整可运行的有问题的代码,方便查错。初步判断,这个应该和 data reshape 无关
----
data 可以用 ...

别建议了。能传的都传了。

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2022-8-8 08:46:36 | 只看该作者
3楼说得没错。
data 是按照内存顺序逐个填充,无论数据结构(一维或二维),所以是一种不建议使用的方式。

根据你给出的 program test1 代码,我试了一下,没有重现问题。不管是data还是reshape都是正常的。
(下次尽量复制粘贴代码,不要截图,我重新打一遍有点累)

如果有一份完整的,复制粘贴的代码可以测试,可能会更快的找出问题。

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
6#
 楼主| 发表于 2022-8-8 18:28:58 | 只看该作者
fcode 发表于 2022-8-8 08:46
3楼说得没错。
data 是按照内存顺序逐个填充,无论数据结构(一维或二维),所以是一种不建议使用的方式。
...

好的,感谢雪球大神

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
7#
 楼主| 发表于 2022-8-8 18:33:55 | 只看该作者
Transpose 发表于 2022-8-7 22:11
建议上传完整可运行的有问题的代码,方便查错。初步判断,这个应该和 data reshape 无关
----
data 可以用 ...

万分感谢,确实不是data和reshape的问题,乌龙一场。

44

帖子

4

主题

0

精华

熟手

F 币
179 元
贡献
90 点
8#
 楼主| 发表于 2022-8-8 18:34:31 | 只看该作者
本帖最后由 zjk0112 于 2022-8-8 18:40 编辑

破案了,感谢各位的建议和帮助。不过lapack的套娃代码实在有点多,就没截图,下次尝试上传.f90文档。问题不出在data和reshape,而是dgemm这个矩阵乘法的subroutine里面对lda参数理解有偏差。我把lda修改后问题的得到解决。后来,我也重复运行那段问题代码,有时会运行出结果,有时会跑不出值,有时vs2019卡住然后重启。我觉得可能是我IDE有问题。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 01:40

Powered by Tencent X3.4

© 2013-2024 Tencent

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