《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.3 小结...
本節(jié)書摘來自華章出版社《信息物理融合系統(tǒng)(CPS)設(shè)計(jì)、建模與仿真——基于 Ptolemy II 平臺》一書中的第3章,第3.3節(jié),作者:[美]愛德華·阿什福德·李(Edward Ashford Lee),更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計(jì)算機(jī)”公眾號查看
3.3 小結(jié)
數(shù)據(jù)流是一個(gè)簡單和通用的計(jì)算模型,其中角色的執(zhí)行由輸入數(shù)據(jù)的可用性來驅(qū)動。它對流(expressing streaming)應(yīng)用的表示特別有用,其中長數(shù)據(jù)值序列通過計(jì)算選擇路徑,如常見的信號處理和多媒體應(yīng)用。
SDF是一個(gè)簡單的(盡管是有限制的)數(shù)據(jù)流形式,它能進(jìn)行大量的靜態(tài)分析和有效的執(zhí)行。DDF更為靈活,但是對它的控制也更具挑戰(zhàn)性,并且執(zhí)行開銷更大,因?yàn)樗谶\(yùn)行時(shí)進(jìn)行調(diào)度決策的定制。它們兩者可以整合到一個(gè)模型中,因于DDF產(chǎn)生額外的開銷,因此僅應(yīng)用在非用不可的地方。SDF和DDF在模態(tài)模型中的良好運(yùn)用將在第8章解釋。使用SDF和DDF的模態(tài)模型提供一個(gè)通用的并發(fā)程序模型。
補(bǔ)充閱讀:IO角色
以下是在IO庫中重要的輸入/輸出角色:
FileReader和FileWriter通過URL或者URI從本地磁盤或從指定的遠(yuǎn)程位置讀和寫文件。對于FileReader,在一個(gè)單個(gè)輸出字符串令牌上產(chǎn)生文件的全部內(nèi)容。對于FileWriter,將每個(gè)輸入字符串令牌寫入一個(gè)文件,重寫之前的文件內(nèi)容。在這兩種情況下,可以為每次點(diǎn)火給出新的文件名。為了從標(biāo)準(zhǔn)輸入讀取,指定System.in為文件名。為了寫入標(biāo)準(zhǔn)輸出,指定System.out為文件名。LineReader和LineWriter類似,除了它們每次讀和寫一行。
CSVReader和CSVWriter讀和寫CSV格式或者逗號分隔值(分隔符可以是任何東西,不一定是逗號)的文件或URL。將CSV文件轉(zhuǎn)換成記錄令牌,并將記錄(record)令牌轉(zhuǎn)換為CSV文件。文件的第一行定義記錄的文件名。為了使用CSVReader,需要幫助類型系統(tǒng)決定輸出類型。其最簡單的實(shí)現(xiàn)方法是可以用后向類型推斷(backward type inference)(見14.1.4節(jié))。它設(shè)置CSVReader角色輸出端口的數(shù)據(jù)類型為最通用的類型,這個(gè)類型能被角色下游接受。例如,如果角色下游從記錄中提取字段,類型約束將自動地要求那些字段出現(xiàn)并具有兼容的類型。也可以強(qiáng)制輸出類型使用[Customize→Ports]上下文菜單命令。
在IO庫中還包含了下面的角色:
ArrowKeySensor對鍵盤的方向鍵做出響應(yīng),并產(chǎn)生輸出。
DirectoryListing輸出指定目錄下與命名某一模式相匹配的文件名數(shù)組。
練習(xí)
并將它們轉(zhuǎn)換為具有如下值的數(shù)組
請用ArrayToElements和ElementsToArray,以及ArrayToSequence和SequenceTo Array(對于后者,可能需要Commutator和Distributor)。評論方法的優(yōu)缺點(diǎn)。提示:可能必須明確地將連接的通道寬度設(shè)置為1。雙擊線路并設(shè)置值。可能要嘗試用MultiInstanceComposite。
使用這個(gè)角色實(shí)現(xiàn)一個(gè)計(jì)算斐波那契數(shù)的復(fù)合角色。即復(fù)合角色的一次點(diǎn)火需要實(shí)現(xiàn)以下點(diǎn)火函數(shù):
f : N → N,對于所有n ∈ N,
圖3-16 在DDF中使用ActorRecursion的Eratosthenes篩選法
當(dāng)ActorRecursion點(diǎn)火時(shí),它復(fù)制分層結(jié)構(gòu)中上層的復(fù)合角色(即它的容器,或者它容器的容器等),層次的名稱與它的recursionActor參數(shù)值相同。ActorRecursion的實(shí)例用那些與容器匹配的端口來填充。這個(gè)角色應(yīng)該視為對特殊種類高階角色的一個(gè)高度的實(shí)驗(yàn)實(shí)現(xiàn)(experimental realization)。這是一個(gè)高階角色,因?yàn)樗膮?shù)由一個(gè)包含它的角色來指定。然而,它的實(shí)現(xiàn)是非常低效的。它每次點(diǎn)火所引用的角色的副本會帶來巨大的時(shí)間和空間開銷。一個(gè)更好的實(shí)現(xiàn)方式是使用類似于面向過程語言中所使用的棧幀的方法(stack frame approach)。而它使用的這個(gè)方法更像是在運(yùn)行時(shí)復(fù)制源代碼并解釋它。為了提高執(zhí)行效率,如果角色已經(jīng)提前創(chuàng)建,那么要避免創(chuàng)建副本。僅憑圖3-16中的圖像,沒有辦法分辨ActorRecursion實(shí)例引用了哪個(gè)復(fù)合角色。因此,無法從它的可視化表示中真正地閱讀該程序。
總結(jié)
以上是生活随笔為你收集整理的《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.3 小结...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Redis实战》一第一部分 入门
- 下一篇: 《GDAL源码剖析与开发指南》一一1.9