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