Categories: 未分類

CAL アクター言語

CAL_Actor_Language

はマニュアルやガイドブックのように書かれています。( 2016年12月)
CAL ( Cal アクター言語) は、データ オブジェクト (トークン) の入力ストリームを出力ストリームに変換するステートフル オペレーターである(データフロー)アクターを記述するための高水準プログラミング言語です。CAL は、シングル コア プロセッサ、マルチコア プロセッサ、プログラマブルハードウェアなど、さまざまなターゲット プラットフォーム用にコンパイルされています。ビデオと処理、圧縮、暗号化など、いくつかのアプリケーション分野で使用されています。MPEG再構成可能なビデオ コーディング( RVC) ワーキング グループは、標準化の取り組みの一環として CAL を採用しました。パラダイム
データフロー
初登場 2001年 プラットホーム
プラットフォームに依存しない
ファイル名拡張子
.cal、.xdf
主な実装
Open RVC-CAL コンパイラ、OpenDF フレームワーク

コンテンツ
1 歴史と紹介
2 CAL の機能
2.1 アクターの構造 2.2 非決定論 2.3 ガードされたアクション 2.4 状態を持つアクター
3 スケジュール
4 優先事項
5 ステートメントと式
6 式
6.1 原子式 6.2 単純な合成式
7 ステートメント
7.1 制御フロー 7.2 アクション
8 サポートツール
8.1 OpenDF フレームワーク 8.2 RVC-CAL コンパイラを開く
9 参考文献

歴史と紹介
CAL アクター言語は、カリフォルニア大学バークレー校のプトレマイオス II プロジェクトの一環として 2001 年に開発されました。CAL は、マルチメディア処理、制御システム、ネットワーク処理など、さまざまなアプリケーション ドメイン向けのデータフロー言語です。
データフローを選択するもう 1 つの一般的な理由は、シーケンシャル プログラミング言語を使用して達成するのが困難または不可能な効率的な並列実装が目標であるということです。シーケンシャル言語は、一般に並列化が難しいことで知られているため、効率的な並列実装には通常、ユーザーからの重要なガイダンスが必要です。CAL データフロー プログラムは、必要なだけ並列処理を指定できるシンプルでわかりやすく強力な抽象化を提供し、計算の同時実行構造を活用する高度な実装をツールで作成できるようにします。
データフローでプログラミングする場合、プログラマーは通常、計算システムの並行記述を構築します。これは、一般的な順次プログラムとは異なります。データフロー プログラマーは、アルゴリズムの段階的な実行に関心を持つのではなく、アクターと呼ばれる非同期通信エンティティのシステムを構築します。プログラミング作業の多くは、問題をアクターに適切に因数分解する方法を見つけることと、それらのアクター間の適切なコミュニケーション パターンを設計することに向けられています。

CAL の機能
アクターの構造

アクターは、発射と呼ばれる一連のステップで計算を実行します。これらの各ステップで:
1. アクターは入力ポートからトークンを消費する可能性が
2. 内部状態を変更する可能性が
3. 出力ポートでトークンを生成する場合が
したがって、アクターを記述するには、外部へのインターフェイス、ポート、内部状態の構造、および実行できるステップ、これらのステップが行うこと (トークンの生成と消費、およびトークンの更新に関して) を記述する必要がアクターの状態)、およびアクターが次に実行するステップを選択する方法。このセクションでは、これらの問題に対処する CAL 言語の構造の一部について説明します。アクションは、アクターが実行するステップ中に発生することを記述します。実際、ステップはアクションの実行からなると言っても過言ではありません。アクターがステップを実行すると、入力トークンを消費して出力トークンを生成する場合があることを思い出して
したがって、入力パターンは次のことを行います。
これらは、アクションが実行される (起動される) ときに消費される (ポートごとに) トークンの数を定義します。
これらは、アクションの起動によって消費されるトークンがアクション内で参照される変数シンボルを宣言します。
それらは、アクションの発火条件、つまり、アクションが発火できるために満たされなければならない条件を定義します。
アクションの出力側はもう少し単純です。出力式は、アクションの起動ごとに各出力ポートで生成される出力トークンの数と値を定義するだけです。アクションが、入力ポートと同じ数の入力パターン、または出力ポートと同じ数の出力式を提供する場合、入力パターンまたは出力式が適用されるポートの明示的な命名を省略してもかまいません。このような場合、パターンまたは式はポート宣言に対して位置によって照合されます。
アクターについての 1 つの考え方は、データ ストリームのオペレーターとして考えることです。トークンのシーケンスは入力ポートから入力され、トークンのシーケンスは出力ポートから出力されます。アクターの操作について議論するときは、多くの場合、それをストリームのオペレーターと見なすと便利です。アクターはパラメータを持つことができます。これらはアクターの実行中に定数として機能し、アクターがアクター ネットワークの一部としてインスタンス化されるときに具体的な値が与えられます。アクター パラメーターの主な目的は、プログラマーが多くのコードを複製することなく、関連するアクターのファミリを指定できるようにすることです。

非決定論
非決定論的アクターとは、同じ入力シーケンスに対して、複数の実行と複数の可能な出力を許可するアクターです。非決定性は、適切に使用すると非常に強力になりますが、非常に厄介なエラーの原因にもなります。特に懸念されるのは、非決定論が不注意にアクターに導入される可能性があることです。CAL 言語の主要な設計目標の 1 つは、非決定論的アクターの記述を許可すると同時に、ツールが非決定論の考えられる原因を特定できるようにして、ユーザーに警告できるようにすることでした。
NDMergeのような非決定論的なアクターの重要な結果は、実際の実行中に、その出力がその入力のタイミングに依存する可能性があることです。両方の入力キューが空で、NDMergeが入力を待機している場合、次のトークンが到着する入力は、出力の次にコピーされるものである可能性がしたがって、アクター ネットワーク内のアクティビティのスケジューリング、またはNDMergeのようなアクターにフィードするアクターの相対速度は、システムの出力に影響を与える可能性がこれは、場合によっては望ましい場合もあれば、望ましくない場合もいずれにせよ、それは知っておく必要があるプロパティです。
アクターをトークン到着の正確なタイミングに依存させるような非決定論を見る 1 つの方法は、そのようなアクターは、ストリーム上のオペレーターとして見た場合にのみ非決定論的に見えるということです。実行の一時的なプロパティから、アクションが起動する順序を決定するために使用される情報を意図的に削除します。CAL 言語の観点からは、これは完全に正確というわけではありませんが、たとえトークンのタイミングとアクターの実装についてすべてを知っていたとしても、決定論的ではない非決定論的なアクターを書くのは簡単です。以下:

ガードされたアクション
アクションのガード句には、アクションを実行可能にするためにすべて真である必要がある多くの式が含まれています。最初のアクションを実行可能にするには、着信トークンがゼロ以上である必要があり、その場合は出力Pに送信されます。それ以外の場合、そのアクションは起動できません。逆に、2 番目のアクションを実行可能にするには、トークンが 0 未満である必要があり、その場合は出力 N に送信されます。このアクターの実行は次のようになります。トークンはゼロです。これは、そのアクションを実行することができないためです。
なんらかの入力で終了するアクターを作成することは違法ではありません。実際、一部のシステムではそれらのいくつかを使用することが重要な場合がしかし、これは注意が必要な落とし穴です。第 2 に、ガード条件も網羅的であるだけでなく、バ​​ラバラです。
最後に、ガード条件は、実際にそれらを消費することなく、着信トークンを「覗く」ことができることに注意してください — ガードがたまたま偽であるか、アクションが何らかの理由で起動されず、トークンが別のアクションによって消費されていない場合、そのまま残り、次の発射に使用できます。(または、 SplitDeadの前のゼロ トークンの場合のように、そこに永遠に残ります。これは、アクターが死んでいるために削除されることはありません。)
以下の Select アクターは、保護されたアクションを使用する別の例です。これは、2 つのストリーム (A および B 入力ポートに到着するストリーム) をマージするという意味で、 NDMergeアクターに似ています。ただし、これは、 S入力ポートに到着するトークンの (ブール) 値に従って行われます。

状態を持つアクター
これまでのすべてのアクターで、アクションの起動が行ったことは、同じアクターのその後のアクションの起動にまったく影響を与えませんでした。状態変数を使用して、アクションの起動は、同じアクターの同じまたは異なるアクションの後続の起動のために情報を残すことができます。このアクターの記述方法、次の入力トークンの選択、および出力へのトークンの実際のコピーは、1 つのアトミック ステップです。
Select とIterSelectはほぼ同等ですが、完全に同等ではないことに注意してまず、IterSelectは同じ数のトークンを処理するために 2 倍のステップを実行します。次に、一致するデータ トークンがAまたはBで使用可能かどうかに関係なく、実際に S 入力トークンを読み取り、したがって消費します。

スケジュール
前のセクションのIterSelectアクターは、状態を使用してアクションの選択を制御する方法を示しました。これは実際には非常に一般的なことであり、CAL 言語はこの目的のためにスケジュールの形式で特別な構文を提供します。概念的には、スケジュールは、状態変数を使用する特定のパターンをコード化したものと考えることができます。スケジュールは、表現力に関して言語に何も追加しません。スケジュールを使用する理由は 2 つ
それらは通常、状態変数と多くのガードと割り当てを使用するよりも使いやすく、エラーが発生しにくいです。
ツールは、スケジュールにエンコードされた情報をより簡単に使用できるため、アクターの規則性を認識して、より効率的なコードを生成したり、実装や設計に役立つ他の分析を実行したりすることができます。
各状態遷移は、元の状態、アクション タグのリスト、および次の状態の 3 つの部分で構成されます。注目すべき点は、アクションの数が増えたことです。元の 3 つではなく、スケジュール付きの新しいバージョンでは 4 つのアクションになりました。その理由は、トークンの値に応じて読み取り状態に値 1 または 2 が割り当てられる元のように、アクションが後続の状態を直接割り当てることができなくなったためです。スケジュールのあるバージョンでは、状態の変更はステート マシンの構造に暗黙的に組み込まれており、どのアクションが起動するかに応じて発生します。したがって、トークンの値をチェックする条件は、アクションの本体内からreadTおよびreadFとタグ付けされた 2 つのアクションのガードに移動しました。

優先事項
入力ポートの 1 つだけに入力がある限り、すべてが明確です。しかし、NDMerge と同じように、両方の入力ポートで入力が利用可能になるとすぐに、2 つのアクションのいずれかを起動できます。そのアクターの仕様には、どちらか一方を選択する傾向があるものは何もありません。
これまでのところ、これを可能にする言語構造はありません。言語の既存の要素 (状態変数、ガード、および代入) に還元できるため、構文糖と見なすことができるこのスケジュールの場合とは異なり、この状況では、実際には真の拡張 (アクションの優先順位) が必要です。基本的な考え方は、アクションを発火の優先順位に関連付けるいくつかの不等式を追加することです。
スケジュールの場合と同様に、アクション タグを使用して、後で参照したいアクションを特定します。今回は、優先順位の不等式の範囲内です。優先度ブロックには、そのような不等式が 1 つだけ含まれており、タグ付けされた config を 1 つのタグ付けされたプロセスに関連付け、後者より前者の優先度を与えます。もちろん、このバージョンでもタイミングに大きく依存しています。この場合、それは問題である必要はなく、実際にはおそらくこのアクターがその機能を実行するための要件です。しかし、一般に、特に前の例のように使用する場合、正しい結果を得るには優先順位を十分に理解する必要があることを理解することが重要です。特に、ネットワーク内の通信のタイミングに関する情報が曖昧な場合は、それらを強力な実装ディレクティブと考えるのがおそらく最善です。

ステートメントと式
前の章では、トークンの入力と出力、アクション、アクション選択の制御など、アクター固有の概念に関連する CAL の構成要素に主に焦点を当てました。このセクションでは、CAL のより「ペデストリアン」な部分、データ オブジェクトの操作に使用されるステートメントと式、および表現 (シーケンシャル) アルゴリズムについて説明します。言語のこの部分は、多くの手続き型プログラミング言語 ( C、Pascal、Java、Adaなど) に見られるものと似ているため、CAL でわずかに異なる可能性のある領域に焦点を当てます。


C などの言語とは異なり、CAL ではステートメントと式が明確に区別されます。それらには非常に明確な役割と明確な意味があり、決して同じ意味で使用することはできません。CAL の式は、値を計算することだけを目的としたコードです。また、式には値がある、または値に評価されるとも言います。ほとんどの式では、式が評価される値は、式が評価される時点の 1 つまたは複数の変数の値に依存します。変数の値は時間とともに変化する可能性があるため、異なる時点で評価されると、同じ式が異なる値になる場合が

原子式
おそらく最も基本的な式は定数です。基本的な式のもう 1 つのグループは、変数参照です。構文的には、変数は文字と数字の任意のシーケンスです。式の重要な特性の 1 つは、変数を変更しないことが保証されていることです (副作用がないとも言います)。したがって、式内で同じ変数を複数回参照すると、常に同じ結果が得られます。

単純な合成式
CAL には、式を作成するための 2 種類の演算子 ( unaryとbinary ) が用意されています。CAL の単項演算子は常に前置演算子です。つまり、単一のオペランドの前に表示されます。二項演算子は、その 2 つのオペランドの間に発生します。

ステートメント
いくつかの点で、CAL のステートメントは式の正反対です。「戻り値」はありませんが、変数の値を変更できます。実際、変数の値を変更することは、ステートメントの要点です。ステートメントは厳密な順序で実行され、特に指定がない限り、ステートメントの実行はプログラム テキストに表示される順序で進行します。つまり、ステートメントによって生成された変数の変更は、後続のステートメントの実行に影響を与える可能性が

制御フロー
他のほとんどのプログラミング言語と同様に、プログラム内のステートメントが実行される順序を制御する構造が’ foreachキーワードの直後に続くこのループの部分は、リスト内包表記によく似たジェネレーターです。

アクション
入力パターン: 変数の宣言
Guard: 有効化条件の指定
出力式: 出力トークンの計算
本体: アクターの状態を変更する

サポートツール

OpenDF フレームワーク
できます

RVC-CAL コンパイラを開く
できます

参考文献
^ CAL 言語レポート: CAL アクター言語の仕様、 Johan Eker および Jörn W. Janneck、Technical Memorandum No. UCB/ERL M03/48、University of California、Berkeley、CA、94720、USA、2003 年 12 月 1 日 ^ MPEG 再構成可能なビデオ コーディング フレームワークの概要、Shuvra S. Bhattacharyya、Johan Eker、Jörn W. Janneck、Christophe Lucarz、Marco Mattavelli、Mickaël Raulet、 Journal of Signal Processing Systems、2009 年、Springer

admin

Share
Published by
admin

Recent Posts

キャニオン–SRAM

Canyon%E2%80%93…

4週間 ago

キャニオン、ケノラ地区

Canyon,_Kenora_…

4週間 ago

Cantus Verkehrsgesellschaft

Cantus_Verkehrs…

4週間 ago

カントールキューブ

Cantor_cube 数学で…

4週間 ago

カントールの定理

Cantor's_theore…

4週間 ago

クレテイユ州

Cantons_of_Cr%C…

4週間 ago