Fortran Coder

查看: 12947|回复: 9
打印 上一主题 下一主题

[讨论] 关于forall 和 where

[复制链接]

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
跳转到指定楼层
楼主
发表于 2015-8-20 16:23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. forall结构 手册上说是 where结构 的generalization,怎么理解呢?
2. 既然功能有重叠,如何选择呢?个人非常欣赏where的整体操作风格。
3. 似乎只有forall结构被提到跟大型并行计算机有关。但是where结构的masked整体操作同样没有执行顺序,按道理讲也可以安全的并行,为什么没有地方提到呢?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

沙发
发表于 2015-8-20 16:48:57 | 只看该作者
1. forall 是 where 的一般情况。可以认为是没有mask的情况。
2. 如何选择纯属个人喜好。没什么区别
3. where 也可以自动并行及矢量化。与 forall 是同类的语句。
4. 我从来就把这俩语句当成哥们俩。就像 function 和 subroutine 一样,没有本质区别。

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
板凳
 楼主| 发表于 2015-8-21 10:18:30 | 只看该作者
感谢 fcode 的回复~

69

帖子

7

主题

0

精华

专家

F 币
320 元
贡献
224 点
地板
发表于 2015-8-21 12:18:14 | 只看该作者
在新的Fortran2015标准中,forall已经被列为obsolescent特性,

The FORALL construct and statement were added to the language in the expectation that they would enable
highly efficient execution, especially on parallel processors. However, experience indicates that they are too
complex and have too many restrictions for compilers to take advantage of them. They are redundant with the
DO CONCURRENT construct, and many of the manipulations for which they might be used can be done more
effectively using pointers, especially using pointer rank remapping.


所以还是不用的好。

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
5#
 楼主| 发表于 2015-8-21 17:19:42 | 只看该作者
看起来像是编译器原因。。。
哥们儿你这个 标准文档在哪儿整的 我也想看··

17

帖子

4

主题

0

精华

熟手

F 币
186 元
贡献
105 点
6#
 楼主| 发表于 2015-8-21 17:21:11 | 只看该作者
jason388 发表于 2015-8-21 12:18
在新的Fortran2015标准中,forall已经被列为obsolescent特性,

还有 where 没有被列入废弃特性吧?

69

帖子

7

主题

0

精华

专家

F 币
320 元
贡献
224 点
7#
发表于 2015-8-21 19:32:15 | 只看该作者
wx_G5fH8Rhq 发表于 2015-8-21 17:19
看起来像是编译器原因。。。
哥们儿你这个 标准文档在哪儿整的 我也想看·· ...

http://j3-fortran.org/doc/year/15/15-007r1.pdf

评分

参与人数 1贡献 +9 收起 理由
vvt + 9

查看全部评分

69

帖子

7

主题

0

精华

专家

F 币
320 元
贡献
224 点
8#
发表于 2015-8-21 20:01:58 | 只看该作者
本帖最后由 jason388 于 2015-8-21 20:03 编辑
wx_G5fH8Rhq 发表于 2015-8-21 17:21
还有 where 没有被列入废弃特性吧?

没有where。较新的特性就只有forall命运不好。

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

9#
发表于 2017-8-11 15:15:53 | 只看该作者
蒐集到的參考資料, 有興趣請參考: forall.pdf (254.36 KB, 下载次数: 23)

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

10#
发表于 2017-8-11 21:11:37 | 只看该作者
fcode 发表于 2015-8-20 16:48
1. forall 是 where 的一般情况。可以认为是没有mask的情况。
2. 如何选择纯属个人喜好。没什么区别
3. whe ...

"我从来就把这俩语句当成哥们俩。就像 function 和 subroutine 一样,没有本质区别"
請容我對這個看法表達個人觀點

狹義的數學函數計算, 廣義的 many-in (all arguments) only-one-out (function value)就用FUNCTION, 否則用SUBROUTINE為宜

當然,, Fortran語法上FUNCTION沒有arguments只能"IN"的限制,也就沒有only-one-out的侷限, 也可以這麼說有了FUNCTION, SUBROUTINE可以退出舞台

"IF"含括"CASE"所有功能, 有了"POINTER"則"Allocatable Array"也該走入歷史???
高手中的高手應如是, 我是有幸 有仰慕 只用"GOTO"不用"DO-Loop"的對象 (庖丁解牛)

我資質中等不是高手, 能用"CASE/Allocatable-Array"的話, 我是不會用"IF/POINTER"的
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-26 09:00

Powered by Tencent X3.4

© 2013-2024 Tencent

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