JP6495208B2 - ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置 - Google Patents

ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置 Download PDF

Info

Publication number
JP6495208B2
JP6495208B2 JP2016159234A JP2016159234A JP6495208B2 JP 6495208 B2 JP6495208 B2 JP 6495208B2 JP 2016159234 A JP2016159234 A JP 2016159234A JP 2016159234 A JP2016159234 A JP 2016159234A JP 6495208 B2 JP6495208 B2 JP 6495208B2
Authority
JP
Japan
Prior art keywords
stream
module
task
input
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016159234A
Other languages
English (en)
Other versions
JP2017004550A (ja
Inventor
マスター,ポール・エル
ファーテック,フレデリック
Original Assignee
スビラル・インコーポレーテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by スビラル・インコーポレーテッド filed Critical スビラル・インコーポレーテッド
Publication of JP2017004550A publication Critical patent/JP2017004550A/ja
Application granted granted Critical
Publication of JP6495208B2 publication Critical patent/JP6495208B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17362Indirect interconnection networks hierarchical topologies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Description

関連出願の相互参照
本願は、2010年1月21に出願された米国仮特許出願整理番号第61/297,139号の優先権を主張するものである。本願は、現在は米国特許第6,836,839号となった2001年3月22日に出願された「ADAPTIVE INTEGRATED
CIRCUITRY WITH HETEROGENEOUS AND RECONFIGURABLE MATRICES OF DIVERSE AND ADAPTIVE COMPUTATIONAL UNITS HAVING FIXED, APPLICATION SPECIFIC COMPUTATIONAL ELEMENTS」を発明の名称とする米国特許出願整理番号第09/815,122号、現在は米国特許第7,325,123号となった「HIERARCHICAL INTERCONNECT
FOR CONFIGURING SEPARATE INTERCONNECTS FOR EACH GROUP OF FIXED AND DIVERSE COMPUTATIONAL ELEMENTS」を発明の名称とする米国特許出願整理番号台10/384,486号、および現在は米国特許第7,609,297号となった「HARDWARE TASK MANAGER」を発明の名称とする米国特許出願整理番号第10/443,501号に関する。これらの特許出願の全部は参照することにより本明細書に援用される。
本発明は、全般的には、複数プロセッサシステムをプログラムすることに関し、さらに詳細には、ストリームおよびスレッドの両方を組み込む並列プログラミング言語の構文を効果的に利用するハードウェアタスクマネージャに関するものである。
一般に、デジタルシステムにおける処理性能に制限を加えるものは、デジタルシステム内の異なる構成要素およびサブシステムの間で命令、データ、および他の情報を伝送する際の効率および速度となっている。例えば、汎用フォンノイマン型アーキテクチャにおけるバス転送速度がプロセッサとメモリとの間のデータ転送速度を支配し、その結果として、演算性能(例えば、100万命令/秒(MIPS:million instructions per second)、浮動小数点演算回数/秒(FLOPS:floating−point operations per second)、その他)に限界が生じてしまうこととなる。
例えばマルチプロセッサ設計または並列プロセッサ設計等の他の型のコンピュータアーキテクチャ設計においては、異なるプロセッサのそれぞれが他のプロセッサ、複数のメモリ装置、入出力(I/O)ポート、その他と通信することが可能となるよう、複雑な通信能力、すなわち相互接続能力が必要となる。今日、プロセッサシステム設計が複雑化されるとともに、効果的かつ高速な相互接続機構の重要度が飛躍的に高まった。
しかし、速度、設計の柔軟性、および簡易性の目的を最適化する係る機構を設計することは困難である。
現在のところ、並列プログラミングは、スレッドを演算の中心的・統率的原理としてスレッドに基づいて行われている。しかし、スレッドは演算モデルとしては顕著な欠点を有する。なぜなら、スレッドは極めて非決定的であり、係る非決定性を抑えて決定的な目的を達成するには、プログラミングスタイルに依存することになるからである。テストおよ
び検証は、この甚だしい非決定性が存在すると困難なものとなる。GPU(グラフィックス処理ユニット)ベンダーにより提案されてきた1つのソリューションは、プログラミングモデルにおいて表現可能な並列性の形態を、狭めることである。しかし、データ並列性に関するGPUベンダーの焦点は、プログラマたちの手を拘束し、マルチコアプロセッサの全潜在能力を利用する機会を妨げてしまうものである。
さらに、スレッドは同一コアのバンク上で実行されるとは限らない。現代のコンピュータ(スーパーコンピュータ、ワークステーション、デスクトップ、およびラップトップ)は、異なる異種コアの困惑的な配列を含み、それらすべてが、プログラムするにあたり、別個のプログラミングモデルを要求する。例えば、マザーボードは1個から4個の主要なCPU(中央処理装置、例えばPentiumプロセッサ)を有し、各CPUは、オンダイまたはオンパッケージのGPU(グラフィックス処理ユニット、例えばNVIDIAのGPU)とともに、1個から6個のオンダイのCPUコアを有し、GPU自体が、いくつかの、別個のビデオおよびオーディオ・エンコードおよびデコード・コア(複数のビデオ規格、例えばMPEG2、MPEG4、VC−1、H.264その他をエンコードおよびデコードするための)とともに、16個から256個のGPUコアを備える。マザーボード上にも、1個から4個の別個のハイエンド、および設定可能な(コアが、様々なあらかじめ存在する規格をエンコード/デコードするために選択され得ることを意味する)ビデオ/オーディオ・エンコードおよびデコード・コア(複数のビデオ規格、例えば、解像度が高く複数の音響チャンネルを有するMPEG2、MPEG4、VC−1、およびH.264)も存在する。プロセシングコアからなる追加的なサブシステムが、通信コアの形で、マザーボードに追加される(例えば、TCP/IP機能を肩代わりするためのコア。これらのコアは、典型的には1つまたは複数のCPUコアおよび1つまたは複数のパケットプロセシングコアから作られる。1つまたは複数のブロードバンド/ベースバンドプロセシングコアから作られたWiFiコア、BlueToothコア、WiMaxコア、3Gコア、4Gコア)。
スーパーコンピュータ等の、現代のハイエンドのスペクトル装置においては、1個のマザーボードに対して1個または4個のFPGA(フィールド・プログラマブル・ゲートアレイ:field programmable gate array)が追加される。各FPGAは、複数のハードIPまたはソフトIPのCPUコアおよび複数のDSPコアとともに、10万個から1000万個の非常に簡単なCLBプロセシングコアからなる)。次に、これらのマザーボード自体が100個から1000個単位で複写および相互接続されて、現代のスーパーコンピュータが作られる。次いで、これらのシステム(デスクトップ/ワークステーション/ラップトップおよび/またはスーパーコンピュータ)がインターネットを介して相互接続されることにより、全国的なまたはグローバルな演算能力が提供されることとなる。
係る多能な一連のコアを「管理」および「プログラミング」することは、極めて困難である。大多数のプログラマは、このような労を取ろうとすることさえなく、他の複数のコアに関しては無視して、1つのコアのみについてプログラミングすることに落ち着く。当該技術分野においては、「自明な並列性の問題(embarrassingly parallel problems)」(例えば、グーグル検索アルゴリズムは、並列スレッド間において双方向性がほとんど存在しないかまたはまったく存在しないという事実により、複数のCPU間に分配することが容易である)として知られる一定数のアルゴリズムが存在する。しかしながら大部分の問題はこれらの特性を有さず、高程度の双方向性および同期化が複数のスレッド間で要求される。
したがって、現代のプログラミング言語のストリームにおけるような、マルチスレッド化、無制限の並列性、および決定的挙動を組み込むことが望まれるであろう。ストリーム
は、少なくとも1978年におけるCプログラム言語の導入時にまでさかのぼり、C++
、Java(登録商標)、Visual Basic、およびF#等の言語に組み込まれてきた。しかし、これらの言語において、ストリームは、I/Oおよびファイルアクセスに対するフレームワーク等の、むしろ狭い役割が委ねられている。したがって、並列プログラミングにおけるストリームの役割を、第1クラスのオブジェクト、すなわち変数の地位にほぼ匹敵する地位へと拡張することが望まれる。
1つの例によれば、プログラム可能なコアに基づく演算デバイスが開示される。係る演算デバイスは、相互に接続された複数のプロセシングコアを備える。メモリは、ストリームデスティネーションモジュールおよびストリームソースモジュールを定義するストリームを含むストリームドメインコードを記憶する。ストリームソースモジュールはデータ値をストリームに代入し、ストリームは、ストリームソースモジュールからストリームデスティネーションモジュールへとデータ値を伝える。ランタイムシステムは、いつデータ値がストリームデスティネーションモジュールに対して利用可能となるかを検出し、複数のプロセシングコアのうちの1つ上で実行されるようストリームデスティネーションモジュールをスケジュールする。
本発明の追加的な態様は、図面を参照してなされる様々な実施形態の詳細な説明を鑑みると、当業者に明らかとなるであろう。なお、図面の簡単な説明は以下で提供される。
開示されたストリームに基づくプログラミングモデルと互換性を有する適応的演算エンジンの概略図である。 プログラミングモデルと互換性を有する適応的演算機械のブロック図である。 図2に示す適応的演算機械のネットワークにおけるネットワークワードを示す図である。 図1のACEアーキテクチャまたは図2のACMアーキテクチャにおける、異質ノードと同種ネットワークとの間のノードラッパーインターフェースを示す図である。 図4におけるノードラッパーに使用されるハードウェアタスクマネージャの基本的構成品を示す図である。 図2に示すACMアーキテクチャにおいてデータを流すために使用されるポイント・トゥ・ポイント・チャンネルを示す図である。 図6におけるポイント・トゥ・ポイント・チャンネルにより使用されるポイント・トゥ・ポイント・ネットワークワードを示す図である。 異なるストリームの流れに対するノードに関するモジュールを示す図である。 異なるストリームの流れに対するノードに関するモジュールを示す図である。 異なるストリームの流れに対するノードに関するモジュールを示す図である。 異なるストリームの流れに対するノードに関するモジュールを示す図である。 ストリームへの値の代入を示す図である。 ストリームへの値の代入を示す図である。 モジュール概念およびストリーム概念を用いてモデル化され得る5タップFIRフィルタを示す図である。 異なる構成のFIFOを有するモジュールを示す図である。 異なる構成のFIFOを有するモジュールを示す図である。 異なる構成のFIFOを有するモジュールを示す図である。 プログラム言語例において使用されるスレッドのフローチャートである。 プログラム言語例の結合演算の形態を示す図である。 プログラム言語例の結合演算の形態を示す図である。
適応的演算エンジンおよび適応的演算機械
図1は、1つの演算モデル例を使用するマルチプロセッサシステムの1例を示すブロック図である。本明細書において適応的演算エンジン(ACE)100と称される装置100は、好適には、集積回路として、または他の追加的な構成品を有する集積回路の1部分として具体化される。模範的な実施形態において、および、以下でより詳細に論じられるように、ACE100は、図示したマトリックス150A〜マトリックス150N等の1つまたは複数の再設定可能なマトリックス(またはノード)150と、マトリックス相互接続ネットワーク110とを備える。模範的な実施形態において、および以下でより詳細に論じられるように、マトリックス150Aおよびマトリックス150B等の1つまたは複数のマトリックス150は、コントローラ120として機能するよう構成され、一方、マトリックス150Cおよびマトリックス150D等の他のマトリックスは、メモリ140として機能するよう構成される。様々なマトリックス150およびマトリックス相互接続ネットワーク110は、フラクタルサブユニットとして、ともに実装され得、このフラクタルサブユニットは数個から1000個のノードの規模となり得る。
好適な実施形態において、ACE100は、再設定可能マトリックス150、コントローラ120、およびメモリ140間における信号発信および他の伝送のために、または他の入力/出力(「I/O」)機能のために、従来の(典型的な別個の)データ、DMA、ランダムアクセス、構成、および命令バスを利用しない。むしろ、データ、制御、および設定の情報は、マトリックス相互接続ネットワーク110を利用して、これらのマトリックス150間で伝送される。なお、このマトリックス相互接続ネットワーク110は、コントローラ120およびメモリ140として設定されたこれらのマトリックス150を含む再設定可能なマトリックス150間における任意の所与の接続を提供するよう、リアルタイムで設定および再設定が可能である。
メモリ140として機能するよう設定されたマトリックス150は、固定メモリ要素の演算要素(以下で説明する)を利用して任意の所望の方法または模範的な方法で実装されてもよく、ACE100内に含まれるか、もしくは他のIC内あるいはICの1部分の内部に組み込まれてもよい。模範的な実施形態において、メモリ140はACE100の内部に含まれ、好適には、低電力消費型ランダムアクセスメモリ(RAM:random access memory)である演算要素から構成され得るが、フラッシュ、DRAM、SRAM、MRAM、ROM、EPROM、またはE2PROM等の他の任意の形態のメモリの演算要素から構成されてもよい。模範的な実施形態において、メモリ140は好適には、特には図示しないダイレクトメモリアクセス(DMA:direct memory access)エンジンを含む。
コントローラ120は、好適には、適応的有限状態機械(FSM:finite state machine)、縮小命令セット(「RISC:reduced instruction set」)プロセッサ、以下に説明する2種類の機能を実行する能力を有するコントローラまたは他の装置もしくはICとして設定されたマトリックス150Aおよびマトリックス150Bを用いて実装される。代替的には、これらの機能は従来のRS
Cまたは他のプロセッサを利用して実装され得る。「カーネル」制御と称される第1制御機能は、マトリックス150Aのカーネルコントローラ(「KARC」)として図示され、「マトリックス」制御と称される第2制御機能は、マトリックス150Bのマトリックスコントローラ(「MARC」)として図示される。コントローラ120のカーネルおよびマトリックスの制御機能は、様々なマトリックス150の設定可能性および再設定可能性を参照して、および本明細書において「シルバーウェア」モジュールと称される結合されたデータ、設定、および制御情報の模範的な形態を参照して、以下で詳細に説明される。
図1のマトリックス相互接続ネットワーク110は、サブセットの相互接続ネットワーク(図示せず)を備える。これらの相互接続ネットワークは、ブール相互接続ネットワーク、データ相互接続ネットワーク、および本明細書において集合的および一般的に「相互連結(interconnect)」、「相互接続(interconnection)(単数または複数)」、「相互接続ネットワーク(interconnection network)(単数または複数)」、または「ネットワーク」と称される他のネットワークまたは相互接続方式を含み、当該技術分野において一般に知られるように、FPGA相互接続ネットワークまたはスイッチングファブリックを利用する等のさらに多様な様式で実装され得る。模範的な実施形態において、様々な相互接続ネットワークは、例えば米国特許第5,218,240号、米国特許第5,336,950号、米国特許第5,245,227号、および米国特許第5,144,166号において説明されるように実装される。これらの様々な相互接続ネットワークは、コントローラ120、メモリ140、様々なマトリックス150、演算ユニット(または「ノード」)、および演算要素の間で選択可能(スイッチング可能)な接続を提供し、それにより、本明細書で一般に「設定情報」と称される設定信号に応答して、またはその制御下で、本明細書で説明される設定および再設定を行うための物理的基盤が提供される。加えて、様々な相互接続ネットワーク(110、210、240、および220)は、任意形態の従来のまたは個別の入力/出力バス、データバス、DMA、RAM、設定および命令バスに代わって、コントローラ120、メモリ140、様々なマトリックス150、および、演算ユニット、構成品、および要素間における、選択可能なまたはスイッチング可能な、データ、入力、出力、制御、および設定経路を提供する。
しかし、様々な相互接続ネットワークの、または様々な相互接続ネットワーク内における、スイッチングまたは選択の操作は当該技術分野において周知の方法で実装され得るが、本発明に係る相互接続ネットワークの設計およびレイアウトが以下に詳細に説明するように新しく新規であることは指摘されるべきである。例えば、様々なレベルの相互接続が、様々なレベルのマトリックス、演算ユニット、および要素に対応して提供される。マトリックス150のレベルにおいては、従来技術のFPGA相互接続と比較すると、所与のエリアにおける接続能力がより低いマトリックス相互接続ネットワーク110は、より制限され且つ「豊富さ」がより低く、そのために、キャパシタンスが低減され、動作スピードが増加する。しかし、特定のマトリックスまたは演算ユニット内においては、相互接続ネットワークは、顕著に濃度が高く豊富であるため、狭いまたは近接した参照の局所性においては、より高い適応および再設定の能力を有し得る。
様々なマトリックスまたはノード150は、再設定可能および異種である。すなわち、一般に、所望の設定に応じて、再設定可能なマトリックス150Aは、一般に、再設定可能なマトリックス150Bからマトリックス150Nとは異なり、再設定可能なマトリックス150Bは、一般に、再設定可能なマトリックス150Aおよびマトリックス150Cからマトリックス150Nとは異なり、再設定可能なマトリックス150Cは、一般に、再設定可能なマトリックス150A、マトリックス150B、マトリックス150Dからマトリックス150Nとは異なり、以下同様に異なる。様々な再設定可能なマトリック
ス150はそれぞれ、一般に、異なる、または多様な混合の、適応的且つ再設定可能なノードまたは演算ユニットを含み、次いでノードは、一般に、異なった、または多様な混合の、様々な方法で適応的に接続、設定、および再設定され得ることにより、様々な相互接続ネットワークを通して様々な機能を実行する、固定の、特定用途向けの演算構成品および要素を含む。多様な内部設定および再設定に加えて、様々なマトリックス150は、マトリックス相互接続ネットワーク110を通して他のマトリックス150のそれぞれに対して、高レベルで接続、設定、および再設定され得る。ACEアーキテクチャの詳細は、上記で参照した関連する特許出願において見出され得る。
並列演算モデルを使用し得る適応的演算機械160の他の例が図2に示される。この例における適応的演算機械160は、ネットワーク162を介してともに接続された32個の異種リーフノード180を有する。ネットワーク162は、1群のネットワーク入力ポート164、1群のネットワーク出力ポート168、省略可能なシステムインターフェースポート170、外部メモリインターフェース172、および内部メモリインターフェース174に接続された単一のルート164を有する。スーパーバイザーノードまたはKノード178もルート164に接続される。
ノード180は、それぞれが、4進木182等の4進木にグループ化される。4進木182等の4進木は、それぞれが単一の親ノードおよび最大4個の子ノード180に接続された、5ポートのスイッチ要素184を用いて実装される。このスイッチ要素は、公正なラウンドロビン調停方式を実装し、性能増強のためにマルチレベルの先読みを有するパイプラインを提供する。この例において、全経路の幅は一定(51ビット)であるが、ネットワークのバンド幅を増強するために、Leisersonのファットツリーのスタイルで、木が上昇するにつれて経路を広げるためのオプションが利用可能である。
この例において、ネットワーク162上のすべてのトラフィックは、図3のネットワークワード188に示すように、51ビットネットワークワードの形態である。ネットワークワード188は、ルートフィールド190、セキュリティビット192、サービスフィールド194、補助フィールド196、およびペイロードフィールド198を有する。ルートフィールド190は、ネットワークワード188の宛先アドレスである。ルートフィールド190における上位2ビットはチップIDである。セキュリティビット192は、設定メモリに対するピーク(読み出し)およびポーク(書き込み)を可能にする。セキュリティビット192は、Kノード178により送信されるワードに対してのみ設定される。サービスフィールド194はサービス種類を定義し、補助フィールド196はサービス種類に依存する。サービスフィールド194はポイント・トゥ・ポイント(PTP)を含む16のサービス種類のうちの1つを定義する。なお、このPTPは、データおよびPTPアクノレッジメントを流すことに関し、PTPアクノレッジメントは、データに対するフロー制御をサポートし、宛先ノードにおける消費側カウントまたは製作側カウントをインクリメントまたはデクリメントさせるものである。
ノードラッパー
図4は、図1のACEアーキテクチャまたは図2のACMアーキテクチャにおける異質ノードと同種ネットワークとの間のインターフェースを示す。このインターフェースは、各ノードに対して共通の入力および出力の機構を提供するために用いられるため、「ノードラッパー」と称される。ノードの実行ユニットおよびメモリは、ノードラッパーを介して、ネットワークおよび制御ソフトウェアに対して接続され、それにより、均一で一貫したシステムレベルのプログラミングモデルが提供される。この例において、ノード180はメモリ210および実行ユニット212を備える。ノードラッパーの詳細は、上記で参照した関連する特許出願に見出され得る。
好適な実施形態において、各ノードラッパーは、ハードウェアタスクマネージャ(HTM:hardware task manager)200を備える。ノードラッパーは、データディストリビュータ202、省略可能なダイレクトメモリアクセス(DMA)エンジン204、およびデータアグリゲータ206も備える。HTMは、ノードプロセッサおよびリソースの実行または使用をそれぞれ調整する。HTMは、タスクリストを処理し、実行準備完了キューを作成することにより、これを行う。HTMは、図2のKノード178と称される専用ノードまたは制御ノード(図示せず)により設定および管理される。しかし他のHTM制御手法も使用され得る。
図4におけるノードラッパーは、ノード180を、その内部構造または機能に関わらず、図2における適応的演算機械160のすべての他のノードまたは図1における適応的演算エンジン100と、外観において同等にする。ノードラッパーはまた、タスク管理およびネットワーク相互作用に関連する無数の活動を処理しなければならない状況から実行ユニット212を解放する。とりわけ、ノードラッパーは、図2のネットワークワード188等の受信するネットワークワードのそれぞれを1つのクロックサイクル内で適正な方法で処理する機能を担当する。
図4における実行ユニット212は、タスク実行機能を担当する(タスクはモジュールインスタンスと同等である)。実行ユニット212はデジタル・シグナル・プロセッサ(DSP:digital signal processor)、縮小命令セット(RISC)プロセッサ、ドメイン固有プロセッサ、特定用途集積回路(ASIC:application−specific integrated circuit)、または再設定可能(FPGA)ファブリックを含み得る。その形態に関わらず、実行ユニット212は、標準的インターフェースを通してノードラッパーと相互作用する。
ノードメモリ210は、ノードラッパーおよび実行ユニット212の両方に対してアクセス可能である。ノードメモリ210は、受信するストリーミングデータをノードラッパーが格納し且つそのデータを実行ユニット212がアクセスする位置にある。ノード自体のメモリ210は、典型的には、実行ユニット212が出力データを送信する位置にはない。メモリアクセスを最小限とするために、出力データは、通常は、そのデータを要求しているノード、すなわち消費側ノード(単数または複数)に直接的に送信される。ノードメモリ210は、タスクパラメータを記憶するためにも用いられ、一時的(作業用)記憶領域として、タスクに対して利用可能である。
ノード180がストリーミングデータの消費側であると同時に作成側である図2のACM160等のマルチノードシステムにおいては、作成速度と消費速度とが一致することが望ましい。1つのノード上の作成側タスクは、他のノード上の消費側タスクが対処可能であるよりも、より高いかまたはより低い速度で、データを作成し得る。作成側が、消費側が処理可能な速度よりも高い速度でデータを送信するならば、データはやがて失われる。作成側が、消費側が対処可能な速度よりも低い速度でデータを送信するならば、消費側はデータに対して飢餓状態となり、その結果、消費側は無駄に座して追加的なデータを待つことを余儀なくされ得る。
ACM160は、ポイント・トゥ・ポイント・プロトコルおよび図4のノードラッパーを介して、タスク管理、フロー制御、および負荷分散のための均一且つ一貫した機構を提供する。タスク管理により、タスクが十分な入力データを有し且つタスクにより生成されたデータを消費側ノード(単数または複数)において収容する十分なスペースが存在する場合にのみタスクが実行状態となることが確実なものとなる。フロー制御により、作成側タスクが、短すぎる時間内に多すぎるデータにより消費側タスクを圧倒しないことが保証される。負荷分散は、作成側タスクがデータをいくつかの代替的な消費側ノード間に分散
することを可能にし、その結果、作成側タスクはより高い速度で動作することが可能となる。
ストリーミングデータは、図5に示すポイント・トゥ・ポイント・チャンネル(ポイント・トゥ・ポイント・ストリーム)250を介して、ノード180(ポイント)間で転送される。ポイント・トゥ・ポイント・チャンネル等の各PTPチャンネルは、作成側ノード252、作成側タスク254、出力ポート256、消費側ノード258、入力ポート260、入力バッファ262、および消費側タスク264を含む。作成側タスク254は、作成側ノード252の実行ユニット上で実行され、タスク活性化毎に有限サイズブロックのPTPデータを製作する。データのブロックは、一連のPTPワードとしてPTPチャンネル250上で送信される。ブロックの送信は、図5においてタスクとして示される。作成側ノード252上の出力ポート256は、作成側タスク254と関連付けられる。
消費側タスク264は、消費側ノード258上の入力ポートを介して、PTPチャンネル252からPTPデータを受信する。消費側ノード258のノードメモリ内の循環型入力バッファ262は、受信するPTPデータを記憶する。消費側タスク264等の消費側タスクは、タスクの活性化(図5のタスク2)毎に、消費側ノード258の実行ユニット上で実行され、循環型入力バッファ262に存在する有限量のPTPデータを消費する。
データは、作成側タスク254が、図6に示す50ビットポイント・トゥ・ポイント・ワード270を作成側ノード252のノードラッパーへと伝送すると、PTPチャンネル252上で伝えられる。ポイント・トゥ・ポイント・ワード270は、図3のネットワークワード188と同一のフィールドを有し、同じ要素/フィールドには図5の要素番号と同じ要素番号が付される。ポイント・トゥ・ポイント・ワード270は、ルートフィールド190においてノードワード272、補助フィールド196においてポートワード274、およびペイロードフィールド198においてデータワード276を含む。この例において、第51番目のビット、すなわちセキュリティビット192は、図2のネットワーク162により後に追加される。図4のノードラッパー等のノードラッパーは、次いで、PTPワードを、図5における消費側ノード258に伝送するために、パケット交換ネットワークに渡す。PTPワード270の8ビットルートフィールド190は、図5におけるノード258等の消費側ノードのノードワード272の形でアドレスを提供する。ポートワード274は、消費側ノードの入力ポートのうちのどの入力ポートにデータが宛てられているかを指示する、補助フィールド196の下位5ビットを含む。PTPワードが消費側ノードに到達すると、ノードラッパーは、ペイロードフィールド198における32ビットのデータワード176を、指示された入力ポートに関連付けられた循環型入力バッファに格納する。このようにして伝送が完了する。
ACM160は、タスク管理、フロー制御、および負荷分散のための機構を備える。各入力ポートと関連付けられた入力バッファが存在する。入力および出力の両方のポートと関連付けられた、2の補数の符号付きカウントも存在する。
入力ポートに関しては、カウントは消費側カウントと称される。なぜなら、このカウントは、関連するタスクにより消費されるために利用可能である、そのポートの入力バッファにおけるデータ量を反映するからである。消費側カウントは、その値が非負である場合、すなわちその符号ビットが0である場合、有効化される。有効化された消費側カウントは、関連する入力バッファが、関連するタスクの活性化により要求される最小量のデータを有することを示す。システム初期化時または再設定時に、消費側カウントは、典型的には−Cにリセットされる。なお、Cはタスク活性化毎に要求される32ビットワードの最少個数である。
出力ポートに関しては、カウントは作成側カウントと称される。なぜなら、このカウントは、関連するタスクにより作成されたデータを受け入れるために、下流側入力バッファにおいて利用可能なスペースの量を反映するためである。作成側カウントは、その値が負である場合、すなわちその符号ビットが1である場合、有効化される。有効化された作成側カウントは、下流側関連入力バッファが、関連するタスクの活性化毎に作成されるデータの最大量を収容するために利用可能なスペースを有することを示す。システム初期化時または再設定時に、作成側カウントは、典型的にはP−S−1にリセットされる。なお、Pはタスク活性化毎に作成される32ビットワードの最大個数、Sは32ビットワードにおける下流側入力バッファのサイズである。
消費側カウントおよび作成側カウントの両方は、典型的には負の値に初期化され、それにより、消費側カウントは開始時において無効状態にあり、一方、作成側カウントは開始時において有効状態にある。この初期状態は、入力バッファが通常はシステム初期化/再設定時において空き状態であるという事実を反映するものである。
消費側カウントおよび作成側カウントは、フォワードアクノレッジメントおよびバックワードアクノレッジメントの形の借方のシステムにより更新される。両種のアクノレッジメントは、図7に示すアクノレッジメントネットワークワード280等のネットワークワードである。アクノレッジメントネットワークワード280は、図3のネットワークワード188と同一のフィールドを有し、同じ要素/フィールドは同一の要素番号が付される。アクノレッジメントネットワーク280ワードは、タスク活性化の最終ステップとしてタスクにより送信される。両方の場合において、ペイロードフィールド198は、4個のサブフィールド、すなわち、アクノレッジメント種類サブフィールド282(1ビット)、ポートサブフィールド284、(3)タスクサブフィールド286、およびAck値サブフィールド288、を有する。
タスクが各活性化の終了時にタスクが実行する一連のアクノレッジメントが、以下に説明される。タスクの各出力ポートに対して、消費側入力ポートおよび消費側タスクを指定するフォワードアクノレッジメントが消費側ノードに送信される。Ack値は、タスクが消費側入力ポートに送信したPTPワードの個数である。出力ポートおよびタスクを指定するバックワードアクノレッジメント(自己ack)は、タスクが存在するノードに送信される。Ack値は、タスクが出力ポートを介して送信したPTPワードの個数である。
タスクの各入力ポートに対して、作成側出力ポートおよび作成側タスクを指定するバックワードアクノレッジメントは、作成側ノードに送信される。Ack値は、タスクが、入力ポートのバッファから消費した32ビットワードの個数にマイナス符号を付した値である。入力ポートおよびタスクを示すフォワードアクノレッジメント(自己ack)は、タスクが存在するノードに送信される。Ack値は、タスクが入力ポートのバッファから消費した32ビットワードの個数にマイナス符号を付した値である。
ハードウェアタスクマネージャ
図4に示すハードウェアタスクマネージャ200は、受信するアクノレッジメントに応答して消費側カウントおよび作成側カウントを更新する機能を担当するノードラッパーの1部分である。ハードウェアタスクマネージャ200はまた、これらのカウントの符号ビットを監視し、カウントの適切な組が有効化されるとタスクを起動する。この最後の任務は、ポートではなくタスクと関連付けられた2つの符号付きカウント、すなわちタスク入力カウントおよびタスク出力カウントを用いて満足される。タスクの入力(出力)カウントは、有効化されたタスク消費側(作成側)カウントの個数を反映する。タスクカウントはその値が非負である場合、有効化される。タスクは、その入力カウントおよび出力カウントの両方が有効化されると、有効化され、実行のために利用可能となる。
受信するアクノレッジメントは、様々なカウントを更新し、それによりタスクは以下のように起動される。フォワードアクノレッジメントが受信されると、指定されたポートが入力ポートとして解釈され、Ack値が、対応する消費側カウントに加えられる。消費側カウントが、無効状態から有効状態へと(有効状態から無効状態へと)遷移すると、指定されたタスクの入力カウントは、1だけインクリメント(デクリメント)される。バックワードアクノレッジメントが受信されると、指定されたポートが出力ポートとして解釈され、Ack値が、対応する作成側カウントに加えられる。作成側カウントが、無効状態から有効状態へと(有効状態から無効状態へと)遷移すると、指定されたタスクの出力カウントは、1だけインクリメント(デクリメント)される。バックワードアクノレッジメントまたはフォワードアクノレッジメントが受信され、指定されたタスクの入力カウントおよび出力カウントの両方が有効化されると、そのタスクは、もし実行準備完了キュー上にない場合は、実行準備完了キュー上に置かれる。タスクは、キューの先頭に到達すると起動される。
これらの動作は、タスクに対する始動規則を具体化する。これらにより、タスクは実行準備完了キューに置かれることとなり、最終的に十分な個数の消費側カウントおよび十分な個数の作成側カウントが有効化されると、タスクは実行される。これらの十分な個数の具体的数値は、タスクの入力カウントおよび出力カウントの初期値により決定される。I(O)が、タスクに関連付けられた入力(出力)ポートの個数であり、ICInitial(OCInitial)がタスクの入力(出力)カウントの初期値であり、且つ、上述のように全部の消費側カウントが最初無効状態にあり全部の作成側カウントが最初有効状態にあると仮定すると、タスクは、
I個の消費側カウントうちの−ICInitiail個が有効状態にあり、
O個の作成側カウントうち(O−OCInitial)個が有効状態にある場合、始動する。
例えば、I=4に対して、
ICInitial=−1であるならば、4個の消費側カウントのうち1個が有効化されなければならない。
ICInitial=−2であるならば、4個の消費側カウントのうち2個が有効化されなければならない。
ICInitial=−3であるならば、4個の消費側カウントのうち3個が有効化されなければならない。
ICInitial=−4であるならば、4個の消費側カウントのうち4個が有効化されなければならない。
O=4に対して、
OCInitial=3であるならば、4個の作成側カウントのうち1個が有効化されなければならない。
OCInitial=2であるならば、4個の作成側カウントのうち2個が有効化されなければならない。
OCInitial=1であるならば、4個の作成側カウントのうち3個が有効化されなければならない。
OCInitial=0であるならば、4個の作成側カウントのうち4個が有効化されなければならない。
図1におけるACE100および図2におけるACM200等のマルチプロセッサシステムのプログラミングは、ストリームCプログラム言語と称され得るものを用いてなされ得る。
ストリームCモジュール
ストリームCプログラムにおいては、並行処理を表現するための機構は1つのみ存在する。その機構とは、すなわち、プログラムのモジュール(およびモジュールのようなストリーム式)の並行演算を用いることである。シンタックス的には、モジュールは、C関数と極めて類似するが、セマンティクス的には、モジュールと関数とは異なる。C関数(サブルーチン)は、コールされたときにのみ、動作を始める。コールされると、制御は、通常は入力引数とともに、C関数に渡される。次いで、C関数はタスク/演算を実行し、終了すると、出力結果とともに制御を返す。C関数とは異なり、モジュールはコールされることがなく、また制御は、モジュールに渡されることも、モジュールから返されることもない。代わって、モジュールは、他のモジュールおよび外部世界との進行中の相互作用を、入力ポートおよび出力ポートを通して実行する。これらのポートを通して、モジュールは入力値のストリームを受け取り、出力値のストリームを発行する。
モジュールプロトタイプのシンタックスはC関数プロトタイプのシンタックスと、3つの例外を除いて、同じである。第1に、キーワードstreamがモジュールプロトタイプに先行する。このキーワードは、各モジュール入力およびモジュール出力が、個別の値とではなく、指定された型の値のストリームと関連付けられていることを、コンパイラ/リンカに伝える。第2に、モジュールが複数の主力ストリームを有することを可能にするために、モジュールの戻り値型は、シンタックスにおいて入力パラメータリストと同一である、括弧で囲まれたリストにより置き換えられ得る。第3に、配列の概念をモジュールへと拡張するために、角括弧で囲まれた配列インデックスのリストは、モジュール名の直後および入力引数リストの直前に挿入され得る。モジュール配列については以下で論じる。
以下の式、
stream int moduleA (int, int);
stream (int, int) moduleB (int, int);
は、モジュール宣言の2つの例である。パラメータ名はここでは省略される。なぜなら、パラメータ名はモジュール宣言においては不要である(モジュール定義またはモジュールインスタンス化とは対比的に)ためである。しかしパラメータ名はプログラマの自由裁量により通常は記憶の一助として、入力に対して、および複数の出力が存在する場合には、出力に対しても、含まれ得る。例えば、2つの宣言は、次のように表現され得る。
stream int moduleA (int a, int b);
stream (int x, int y) moduleB (int a, int b);
第1の宣言は、moduleAが2つの入力ストリームを有し、その両方が整数型であること、および単一の出力ストリームを有し、これもまた整数型であることを示す。第2の宣言は、moduleBが2つの入力ストリームを有し、その両方が整数型であること、および2つの出力ストリームを有し、これらもまた整数型であることを示す。
C関数の定義と同様に、モジュールの定義は、波括弧({および})で囲まれた本体を有する。C関数の定義の場合と同様に、各モジュール入力(および出力が複数ある場合は、各出力モジュール)は識別子が割り当てられる。以下は、モジュール定義の2つの例である。
stream int moduleA (int a, int, b)

//モジュール本体


stream (int x, int y) moduleB (int a, int b)

//モジュール本体
モジュールインスタンス化は、C関数コールに対するモジュールにおける対応物である。関数コールと同様に、モジュールインスタンス化は、モジュールがどこで用いられるかである。これら2種類の表現のシンタックスは同様であるが、セマンティクスは異なる。Cコードの1部分は、以下のように表現され得る。
int x, y;
int F (int, int);



int z = F(4, x+5*y);
第1の文がxおよびyが正数であることを宣言する一方で、第2の文はFが2つの整数パラメータと、1つの整数の結果とを有する関数であることを宣言する。最後の文が、関数コールF(4, x+5*y)を含む代入文であり、関数F(4, x+5*y)は、2つの引数、すなわちFの2つのパラメータに対応する、式4および式x+5*yを有する。
この部分的コードのストリーム版は、以下のようになる。
stream int x, y;
stream int F(int, int);



stream int z = F(4,x+5*y);
このストリーム版において、これらの文のそれぞれにおいては、streamというキーワードが先頭にある。シンタックスが変化しているために、セマンティクスにおいても劇的な変化が生じている。個別の値に代わって、値のストリームが用いられる。したがって、第1の文は、xおよびyが整数ストリームであることを宣言する一方、第2の文は、Fが、2つの整数ストリーム入力および整数ストリーム出力を有するモジュールであることを宣言する。最後の文は、モジュールインスタンス化F(4,x+5*y)を含む代入文である。このF(4,x+5*y)は、2つの引数、すなわちFの2つのパラメータに対応する、ストリーム式4およびストリーム式x+5*yを有する。
関数コールの場合は、代入z=F(4,x+5*y)が実行される毎、式4および式4,x+5*yが評価され、その結果生じた2つの値がパラメータとしてコール時に関数Fへと供給される。一定時間経過後、Fが値を返す。モジュールインスタンス化の場合は、代入文z=F(4,x+5*y)が実行されることもなく、また関数Fがコールされることもない。代わって、システム初期化時、ストリームCプログラムが実行を始める直前に、関数Fのインスタンスが作成(インスタンス化)され、それにより、インスタンスは、その2つの入力ポート上で整数のストリームを受け取ること、およびその出力ポート上で
整数のストリームを作成することの準備が完了する。プログラム実行が開始されると、Fのインスタンスは、プログラム終了時まで、動作状態が保持される(すなわちFのインスタンスは永続的である)。
この簡単な例は、ストリームCにおいて相互作用するモジュールの集団を作成するために用いられる一般的な機構を示すものである。各モジュールのインスタンス化により、別個のモジュールインスタンスがシステム初期化時に作成される。ひとたび作成(インスタンス化)されると、モジュールインスタンスは、その入力ポート上で値のストリームを受け取ること、およびその出力ポート上で値のストリームを作成することの準備が完了する。さらに、プログラム実行が開始されると、モジュールインスタンスは、プログラム終了時まで、動作状態を保持する。
複数の出力ポートを有するモジュールのインスタンス化の一般的な形は以下の通りである。
(<識別子リスト>) <モジュール識別子> (<式リスト>)
入力引数が式であるのに対し、出力引数は識別子である。これらの識別子は、名称がない出力ストリームに名称を与えるよう機能する。上記のストリーム代入文は、名称zをF(4,x+5*y)の名称がない出力ストリームに割り当てることにより、同じ役割を果たす。例えば、
stream int w, x, y, z;
stream (int, int) F(int, int);



(w, z) = F(4,x+5*y);
前述のように、Fは2つの整数ストリーム入力を有するが、前の例とは対比的に、このFは2つの整数ストリーム出力を有する。これら2つの出力ストリームは、識別子(w,
z)のリストとしてFのインスタンス化時に現れる。なお、これは、2つの出力ストリームに名称wおよびzを与えるよう機能する。
モジュール本体内部の文は、2つのカテゴリー、すなわち、ストリームのみに関与するストリーム文と、Cの文の全範囲を含む他に、スレッドをストリームから読み出すこととスレッドをストリームに書き込むこととを可能にする文を含むスレッド文と、に分類される。各モジュールのインスタンス化により、別個のモジュールインスタンスがシステム初期化時に作成されるため、ストリームCにおいては、モジュールが、その本体内において、またはサブモジュールの本体内において、モジュール自体のインスタンス化を有することはできない。換言すると、モジュール参照の循環性は不可能である。この禁止は、無限個のモジュールインスタンスのインスタンス化という困難なタスクを回避することを支援する。
ストリームCモジュールにおいて、制御を返すという概念は存在せず、したがってリターン文は適さない。モジュールにおいて、出力値はモジュールの出力ストリームに単に挿入される。しかし、それを行うためには、出力ストリームは名称を有さなければならない。括弧で囲まれた名称を有する出力ストリームのリストを有するモジュールに対しては、それは問題ではない。しかし、モジュールプロトタイプがモジュールの出力ストリームの型のみを提供する場合は、問題となる。その場合、モジュールの本体内のコードは、ストリームドメインにおいてもまたはスレッドドメインにおいても、キーワードoutをデフォルトモジュール出力ストリームの名称として用いることができる。この用法は、以下の部分的コードにおいて例示される。
stream int moduleA (int a, int b)




out = a+b;


関数がプログラムの演算ビルディングブロックを提供するのに対して、モジュール、およびモジュールと提携するストリームは、ストリームCプログラムに典型的な相互作用網および並行動作のための枠組を提供する。モジュールは値のストリームを処理するが、そのことにより、モジュールがストリーム内の個々の値にアクセスすることおよびこれらの値を関数に提供することが不可能となるわけではない。同様に、モジュールは、関数の出力値にアクセスすること、およびその値をストリームに挿入することも可能である。一方、関数はモジュールを参照することができない。なぜなら、関数内には係る相互作用のための機構が存在しないためである。能力におけるこの非対称性により、関数がプログラムヒエラルキー上でより低いレベルにある一方、モジュールはより高いレベルにあることがわかる。
モジュールと関数との違いが実質的である一方で、モジュールと関数とが同様である1つの領域が存在する。それは、モジュールおよび関数の両方が副作用をサポートする点である。すなわち、モジュールおよび関数の両方が、それぞれの入力ポートおよび出力ポートとは独立的に、外部データ構造を操作し得る。これは、モジュールが副作用を有し得るスレッドを含み得る事実に由来する。
図8Aは、モジュール300と、モジュール300に対してデータ/制御を提供するいくつか(ゼロ個からN個)の入力ストリーム302と、次のモジュール/関数に対してデータ/制御を提供するいくつか(ゼロ個からN個)の出力ストリーム304とを含む、一般的なモジュールを示す。出力ストリームを有さないモジュールは「シンク」であり、入力ストリームを有さないストリームは「ソース」である。
図8Bは、2つのモジュール、すなわちモジュールA300およびモジュールB310を示す図であり、各モジュールは、入力ストリーム302および312と、出力ストリーム304および314とを有する。モジュールA300の出力ストリーム304はモジュールB310の入力ストリーム312に接続される。モジュールA300は、CPUコア308上で実行されるようマッピングされ、モジュールB310は第2のCPUコア318上で実行されるようマッピングされる。コア308、318、および328は、図2のノード180と同様である。
図8Cは、モジュールA300およびモジュールB310をCPUコア308等の同一のCPUコアにマッピングすることを示す図である。この事例において、モジュール300および310は、任意の他の別個の制御スレッドのように動作する。第2コア318上で実行されるオペレーティングシステムは、モジュール300および310を、プリエンプティブマルチタスキングに基づいてスケジューリングするか、または完了/解放まで実行し得る。両方のモジュール300および310および入力/出力ストリーム302、312、および304、314は、「永続的」である(すなわち、これらは処理実行準備完了状態に留まる)ため、演算を実行するための「十分な」入力ストリームデータの、および出力ストリームが演算されたデータを伝達することができる「十分な」スペースの、両
方の利用可能性に基づいてモジュールをいつスケジュールするかに関する追加情報は、従来のオペレーティングシステムに提供されなければならない。
多様な異なるアルゴリズムが、モジュールからコアへのマッピングを実行するために用いられ得る。これらのアルゴリズムは、キャッシュ近傍を含み得る。なお、キャッシュ近傍においては、最大個数のストリームを共有するモジュールは、共有されたDRAMに後続される共有されたL3キャッシュに後続される共有されたL2キャッシュに後続されるL1キャッシュを共有するコアに置かれる。これらのアルゴリズムは、物理近傍アルゴリズムも含み得る。なお、物理近傍アルゴリズムにおいては、最大個数のストリームを共有するモジュールは、互いに物理的に近接するコアに置かれる。例えば、アルゴリズムはダイから始まり、次いで、マザーボード上の集積回路へと、次いでラック上のマザーボードへと、次いで建物の同一階のラックへと、次いで地理的に近接する建物へと移行し得る。他のアルゴリズムは、次の利用可能なフリーであり得る。なお、そこにおいては、CPU使用率(現在の使用率、または一定期間にわたる重み付き平均使用率)または順番上次に利用可能なコアに基づく次の「自由な」コアに基づいて、モジュールがコアに割り当てられる。他のアルゴリズムは、予想負荷であり得る。なお、これは、評価された統計的サンプリングに基づいて、モジュールおよびコアを選択する。コア利用の実行平均が、モジュールを、最も負荷が軽いコアにロードするために用いられ得る。他のアルゴリズムは、ユーザによる指定である。なお、ここでは、ユーザ指定によるバーチャルコアIDが、全モジュールを物理コアID上に置くために用いられる。バーチャルコアIDの個数が物理的に利用可能なコアを越えると、複数のモジュールが、利用可能な物理コアにわたって均等にロードされる。
図8Dは、モジュールA300に存在し、入力ストリーム302および出力ストリーム304において用いられ得る、様々なデータ構造330、332、および334を示す。メモリ/キャッシュまたはTLBのいずれかに存在し得るデータ構造330、332、および334は、シングルコアまたはマルチコアシステムが、入力ストリーム302等の入力ストリームから出力ストリーム304等の出力ストリームへとデータを搬送すること、入力ストリーム302をモジュールA300等のモジュールへと搬送すること、およびモジュールA300を出力ストリーム304へと入力することをスケジュールするために必要となる重要な情報を含む。各モジュールに対して、そのモジュールをユニークに識別し、そのモジュールに対するすべての入力ストリームをユニークに識別し、そのモジュールのすべての出力ストリームをユニークに識別し、入力ストリームおよび出力ストリームの「接続」方法をユニークに識別し、コアを識別し、モジュールが1つのコアから他のコアへとリロケートされるよう、すなわち仮想メモリを介してスワップアウトされるよう状態情報を保持する、情報が存在する。ストリームは動的にモジュールから追加または削除され得、モジュールは動的にコアから追加または削除され得る。
ストリーム
ストリームCプログラム言語におけるストリームという用語は、すべて同じデータ型であり且つ典型的に一定期間にわたって利用可能状態となる、一連のデータ値を指す。しかし、ストリームCにおいては、ストリームは、入力および出力のための枠組を遥かに越える機能を提供する。ストリームは、第1クラスのオブジェクト、すなわち変数の地位にほぼ匹敵する地位へと高められている。これは、ストリームが識別子と結合され得る(すなわち、ストリームに名称が与えられ得る)こと、関数の入力パラメータ(すなわちモジュールの入力パラメータ)と結合され得ること、関数の出力(すなわち、モジュールの入力パラメータ)と結合され得ること、式中のパラメータと結合され得ること、および式の出力と結合され得ることを意味する。
ストリームは、単一のデータ型の値を、1つまたは複数のストリームソースから1つま
たは複数のストリームデスティネーションへと伝える。この運搬がどのように遂行されるかについての正確な詳細は、実装に依存し、とりわけ、ストリームが単一の半導体ダイに限定されるかどうか、またはストリームが数メートルまたあるいは数千キロメートルにわたるかどうかに依存する。性能問題に対処する場合を除き、プログラマはこれらの詳細を考慮する必要はなく、4つのストリーム属性、すなわち、ストリーム型、ストリーム名、ストリームソース、およびストリームデスティネーションに関する、ストリームのこれらの側面のみを考慮すればよい。
ストリーム型は、伝えられる値の型を示す。ポインタおよびtypedefにより定義されるデータ型を含む、Cの正当なデータ型であり得るストリーム型は、例えば、モジュール入力または出力パラメータとして現れることにより文脈により暗黙的に特定され得るか、または以下に説明するストリーム宣言を用いて明示的に特定され得る。
ストリームソースは、値がストリームに置かれる位置である。可能なストリームソースは、モジュール定義の入力パラメータ、モジュールインスタンス化の出力、ストリーム式の出力、およびスレッド(以下に説明する)を含む。ストリームデスティネーションは、ストリームがそのポイントへと値を伝える位置である。可能なストリームデスティネーションは、モジュール定義の出力パラメータ、モジュールインスタンス化の入力引数、ストリーム式の入力、およびスレッドを含む。省略可能なストリーム名は、ストリームがモジュール入力またはモジュール出力として現れるときに、またはストリームがストリーム宣言において導入されるときに、ストリームに割り当てられる名称/識別子である。名称を有さないストリームの1つの例は、ストリーム割り当てにより名称が割り当てられていないストリーム式の出力ストリームである。
ストリーム属性の概念は、関数Fの宣言およびモジュールMの部分的な定義を含む、以下の部分的コードにより示される。
stream int F(int, int);
stream (int zStrm) M(int xStrm, int yStrm)




zStrm = xStrm*yStrm+F(xStrm, yStrm);



ここでは、名称を有する3つのストリーム、すなわちxStrm、yStrm、およびzStrmが存在し、これらすべては、intのデータ型である。xStrmおよびyStrmは、それぞれが、モジュールMの入力パラメータである単一のソースを有する。xStrmおよびyStrmのデスティネーションは、それぞれ、Mの本体における代入式に現れる、xStrmおよびyStrmの2つのインスタンスにより表される(Cにおいては、代入も式であることを想起されたい)。これらのインスタンスは、代入式に対する入力を表す。したがって、xStrmおよびyStrmは、それぞれが単一のソースおよび2つのデスティネーションを有する。
ストリームの式は、ストリームの式においては変数の代わりに入力ストリームが存在す
ることを除いて、Cの式と同じである。ストリーム式は出力ストリームも有し、出力ストリームは、式評価からの結果を伝える。デフォルトにより、出力ストリームは名称を有さないが、ちょうど上記の代入で行ったように、ストリーム代入を用いることにより、名称を割り当てることが可能である。したがって、ストリーム式
xStrm*yStrm + F(xStrm, yStrm)
の出力ストリームは、ストリーム代入
zStrm=xStrm*yStrm + F(xStrm, yStrm)
により、名称zStrmが割り当てられる。これら2つの式のうちのいずれかが、zStrmのソースであるとみなされ得る。zStrmのデスティネーションは、モジュールMの出力パラメータzStrmにより示されるモジュールMの出力ストリームである。
stream (int zStrm) M(int xStrm, int yStrm)
したがって、xStrmは単一のソースおよび単一のデスティネーションを有する。
ストリームの最も重要な属性は、ストリームが値を伝える際に果たす役割に関する。係る属性は4つ存在する。すなわち、a)値は、ストリームソースにおけるか、またはinitialize()関数を使用するシステム初期化時以外は、ストリームに入らない、b)単一のソースにおいてストリームに入る値は、完全に時間順に整列される、c)ひとたびストリームに入ると、値はやがてはすべてのストリームデスティネーションに送達され、もしデスティネーションが複数存在する場合は、値の別個の複写が各デスティネーションに送達される、およびd)単一ソースからの値は、値がストリームに入ったのと同一の順番で(すなわち、ストリームにおいて値の飛び越しは存在しない)、各ストリームデスティネーションにおいて受け取られる。これらの4つの属性が、ストリームが値の運搬について提供する唯一の保証である。これら4つの属性から論理的帰結として従わない任意の他の属性は、一般的なストリーム属性ではない。
ストリームが義務を負うのは、ただ最終的に値を送達することのみである。したがって、ストリームのレイテンシ、すなわち値がストリームソースからストリームデスティネーションへと移動するに要する時間は不定である。事実、レイテンシは、時間に応じて、または同じストリームのソース・デスティネーション対の間で、変動し得る。しかし、レイテンシが一定であるかまたは少なくとも限界を有することは、(プログラミングモデルよりもむしろ)システム実装により提供される保証に依存することにより達成され得る。例えば単一半導体ダイに限定されるソース・デスティネーション対は、通常、そのレイテンシは限界を有する。
また、上述の4つの属性は、ストリームの決定性および非決定性(不確定性)を暗示する。単一ソースを有するストリームに対しては、4つの属性は決定的なストリーム挙動を保証する。それは、値が単一ソースストリームに置かれる順番が、値がすべてのストリームデスティネーションに送達される順番を完全に決定することを意味する。しかし、複数のソースを有するストリームの場合、状況は大きく異なる。複数のストリームソースから生じる問題を示すために、以前のセクションに継続する以下の部分的コードの以下の適用を考慮してみる(outは単一出力モジュールのデフォルト出力ストリームである)。
int F(int);
stream int M(int xStrm, int xStrm)




out = xStrm*xStrm + F(xStrm);



モジュールMの2つの入力パラメータは、同一のxStrmである。4つの属性から、モジュールMの第1の入力パラメータを通してxStrmに入った値は、xStrmの3つのデスティネーションのそれぞれにおいて、これらの値がストリームに入ったのと同じ順序で受け取られることとなる。モジュールMの第2の入力パラメータを通してxStrmに入った値は、xStrmの3つのデスティネーションのそれぞれにおいて、これらの値がストリームに入ったのと同じ順序で受け取られることとなる。このことは、2つのストリームの値は、xStrmのそれぞれのデスティネーションに到達する前に、合併または交互配置されることを意味する。
どのように交互配置が実行されるかは、一般に、プログラムの構成により影響される。例えば、上記のプログラムの欠落部分は、パラメータ1とパラメータ2との値の間で正確な交互配置がされるように構成され得る。例えば、モジュールMの2つの入力パラメータ(ストリーム)xStrmに到達する整数が、次の順序
Figure 0006495208
を有する場合、式
out = xStrm*xStrm + F(xStrm)
のxStrmの3つのデスティネーションのそれぞれに到着する順序は、
Figure 0006495208
という形になり得る。しかしながら、このようにプログラムにより課される決定性がい
つも成り立つとは限らず、複数のストリームソースからの値が非決定的に交互配置される場合もある。さらに、ターゲットシステムによっては、これらの非決定的交互配置が、ストリームデスティネーション毎に異なり得る。したがって、例えば、モジュールMの2つ
の入力パラメータ(ストリーム)上に到達する値が上記の場合と同じである場合、xStrmの3つのデスティネーションに到達する順序は、
Figure 0006495208
という形で始まり得る。複数ソースストリームのデスティネーションにおける到着順序
の非決定性は、単一ソースストリームのすべてのデスティネーションにわたる到着順序の一定性と対比的である。到着順序が一定である場合、以下の有用な表記を適用することが可能となる。単一ソースストリームssStrmおよび非負である整数iに対して、
ssStrm (i)
はssStrmのすべてのデスティネーションに現れる第i番目の値を示す。慣例的に、ssStrm(0)はすべてのデスティネーションに現れる第1の値を示す。
値がストリームデスティネーションに到達すると、そのデスティネーションがモジュール定義またはモジュールインスタンス化入力引数である場合、その値は、モジュール境界の他方の側におけるストリームへと渡される。このように値は、移行状態に留まる。デスティネーションがストリーム式の入力またはスレッドである場合、値はFIFOキューに置かれる。
移行状態に留まることを示すために、以下の部分的コードを示す。
stream int module1 (int);
stream int module2 (int xStrm)




out = modulel1 (xStrm);




この部分的コードは、2つのモジュール、すなわちmodule1およびmodule2を含み、これら2つのモジュールのそれぞれは、単一の入力ストリームおよび単一の出力ストリームと、2つの名称を有するストリームxStrmおよびyStrm(両方がmodule2の定義(本体)内に存在する)とを有する。xStrmの唯一のデスティネーションすなわちmodule1(xStrm)は、module1のインスタンス化の入力引数である。このデスティネーションに到達する値は、module1の境界を単に通過し、module1の内部ストリームに達する。この状況は、yStrmの唯一のデスティネーション
stream (int yStrm) module2 (int xStrm)
に到達する値に対しても同じである。なぜなら、このデスティネーションはmodule2の出力パラメータであるため、到達する値はmodule2の境界を単に通過して、module2の外部にあるストリームに達する。
他の例は、ストリームデスティネーションが以下の部分的コード等のストリーム式の入力である場合である。
stream int F (int, int);
stream int M(int xStrm, int yStrm)




out = xStrm*yStrm + F(xStrm, yStrm);




ストリーム式
xStrm*yStrm + F(xStrm, yStrm)
は、モジュールMの本体内にあり、このストリーム式は、xStrmの2つのデスティネーションと、yStrmの2つのデスティネーションとを含む。このストリーム式は2つの演算子*および+と、関数Fとを含み、これらは普通のC構文である。このことは、この式を評価するためには、2つの演算子および関数Fが個々の値を供給されるべきであることを意味する。
キューはストリームCのリンカ/ローダにより自動的に挿入され、ストリームCのランタイムにより管理される。ランタイムの任務の中には、キューが空き状態にあるときに信号を発すること、およびどのキューも確実にオーバーフローしないようにすることである。プログラマは特定の量を以下で説明するようにpragmaコマンドにより要求し得るが、各キューは関連するデータ型の少なくとも2つの値の容量を有することが保証される。この例のストリームにおいて、4つのキュー、すなわち4つのストリームデスティネーション(ストリーム式入力)のそれぞれに対して1つのキュー、が存在する。これらのキューは、プログラマに対しては大半が不可視である。
ひとたびストリームCプログラムが実行(動作)を開始すると、値がストリームに入る唯一の方法は、ストリームソースによる。より多くのストリームのうちの1つは、すでにストリーム中に含まれている値を要求する、有向サイクル(directed cycle)を形成し得る。最も簡単な係るサイクルは、
xStrm = xStrm+yStrm
と等価である
xStrm += yStrm
におけるように、ストリーム代入の両辺にストリームが現れるときに生じる。
図9Aはこの代入の第1の図的表現400である。なお、この代入においては、有向サイクルが、+演算子の出力から同一の+演算子の2つの入力のうちの1つに向かうフィードバック経路からなる。+演算子が各入力ストリームからの値を消費して出力ストリーム上において値を作成することができないのは、この経路上において値が欠落しているため
である。ゆえに、第2の図的表現402に示すように、値404が、実行の開始前に、フィードバック経路上に置かれない限り、+演算子は決して始動することがない。
他の問題は、1つの単一ソースストリームの、他の単一ソースストリームに対するオフセットの変化に関する。例えば、aStrmおよびbStrmの両方が、図9Bに図的に表現される、
aStrm+bStrm
等の同一のモジュールまたはストリーム式に対する入力であり、そのモジュールまたは式が、これらのストリームから、対の形で、すなわちaStrmから1つの値およびbStrmから1つの値を消費する場合。aStrm(n)(すなわち、aStrm上に第n番目に到達する値)が、bStrm(n+2)(すなわち、bStrm上に第n+2番目に到達する値)と対になることが望まれる場合。したがって、aStrm(0)はbStrm(2)と、aStrm(1)はbStrm(3)と(以下同様)対となる。
両方の問題に対するソリューンは、
<ストリーム識別子>.initialize(<値リスト>);
の形を取る、ストリーム初期化文により提供される。
ストリームCコンパイラ/リンカ/ローダがこの文と遭遇すると、ストリームCコンパイラ/リンカ/ローダは、FIFOキューを<ストリーム識別子>の各デスティネーションに挿入すること(デスティネーションがモジュール定義の出力パラメータである場合も、ストリーム文またはスレッドの入力引数である場合も)と、そのキューのサイズを、Tデータ型の少なくともn+1個の値を保持することができるよう設定すること(ただし、nは<値リスト>中の値の個数であり、Tは<ストリーム識別子>のデータ型である)と、<値リスト>中の値を、<値リスト>中の第1番目の値がキューの前部(頭部)に置かれる状態の順序でキューに置くこととを指示するものとして、この文を解釈する。
例えば、図9Aにおいて、デッドロックを防ぐために、図的表現402において、値404が、フィードバック経路に、および、式出力にも、
xStrm.initialize(0);
により挿入される。この文により、2つのFIFOキューが、xStrmの各デスティネーションに対して、作成される(フィードバック経路のデスティネーションにおけるキューは、前のセクションで説明したように、すでに挿入されている)。xStrmがint型であると仮定すると、各ストリームのサイズは少なくとも2×sizeof(int)であり、システム初期化時においてint値0が各キューの先頭に位置する。このことは、図9Aにおけるフローチャート402において図示される。このようにxStrmが初期化され、代入xStrm += yStrmの出力は、
Figure 0006495208
となる。図9Bにおける第2の図的表現412におけるbStrmに対するaStrm
のオフセットを変えることは、同様の方法で対処される。しかし、ここでは、2つの値がaStrmのFIFOキューに挿入される。なぜなら、bStrmに対して2つの値によりaStrmをオフセットすることが望まれ得るためである。このことは、1および2が、システム初期化時にaStrmのキューに挿入される2つの値414として選択された、以下のストリーム初期化文
aStrm.initialize(1, 2);
を用いることにより達成される。この初期化の結果は図9Bにおける表現412に図示される。このようにxStrmが初期化され、代入xStrm += yStrmの出力に現れる値は、
Figure 0006495208
となる。
C変数の場合と同様に、特定のストリーム宣言は文脈上から、例えば、モジュール入力または出力パラメータとして現れることにより、暗黙的になされるが、すべてのストリームは使用の前に宣言されなければならない。明示的なストリーム宣言のシンタックスは、C変数宣言のシンタックスに従うが、この場合の宣言はキーワードstreamで始まる。
stream <記憶クラス識別子>省略可能<型><識別子リスト>;
記憶クラス識別子を有さないストリーム宣言の例を下にいくつか挙げる。
stream int xStrm, yStrm;
stream char cStrm;
stream double dStrm;
5つのCにおける記憶クラス識別子、すなわち、auto、register、static、extern、およびtypedefのうち、ストリーム宣言においては、
stream static int xStrm, yStrm;
のように、staticのみが許可される。
staticならびに非staticのストリーム宣言は、宣言が現れる文脈により決定される。係る文脈は3つ存在し、それぞれが、それぞれのスコープ規則を有する。それぞれの場合において、ストリーム宣言のスコープ規則は、変数宣言の対応物のスコープ規則と同じである。記憶クラス識別子を有さず且つモジュールの内部に現れるストリーム宣言に対しては、宣言スコープは、宣言からモジュールの終わりまで及ぶ。記憶クラス識別子を有さず且つモジュール(および関数)の外部に現れるストリーム宣言に対しては、宣言スコープはグローバルであり、すなわち、プログラム全体に対して可視である。static記憶クラス識別子を有し且つすべてのモジュール(および関数)の外部に現れるストリーム宣言に対しては、その宣言のスコープは、宣言から、宣言が現れるソースファイルの終わりまで及ぶ。
変数には関係するがストリームには関係しない記憶クラス識別子に関するいくつかの宣言形態は、このリストに現れない。Cにおいては、auto記憶クラス識別子を用いて宣
言された、またはまったく識別子を用いないで宣言された、これらの変数は、関数呼び出しの間では値を失う。ストリームはモジュール内においてのみ作用し、モジュールは呼び出されないため(モジュールは常に動作状態にある)、自動ストリームはそもそも無意味な概念である。したがって、auto記憶クラス識別子はストリーム宣言に適用されない。
static識別子を用いて宣言され且つ関数の内部に現れる変数宣言は、宣言された変数が関数コール(関数呼び出し)間においてその値を保持することを示す。しかしモジュールの場合には、コールの概念が存在せず、したがって、static識別子はモジュール内部では無意味である。したがって、static識別子はモジュールスコープ内では用いられない。
変数宣言に対して、extern記憶クラス識別子は、宣言および定義として働くグローバル変数のこれらの宣言と、単に宣言として働くグローバル変数の宣言とを区別することを支援する。しかしストリームの場合には、ストリーム宣言において記憶領域が決して除外されないため、宣言は決して定義にはならない。記憶領域は、以下のストリームFIFOのセクションにおいて説明されるように、ストリーム定義時においてのみ割り当てられる。registerおよびtypedefの記憶クラス識別子は、ストリームにおいてはまったく妥当性がなく、ストリーム宣言において現れることがない。
ストリーム式は、通常のC式に対するストリームにおける対応物である。すべての変数に対して入力ストリームが取って代わること、および結果に対して出力ストリームが取って代わることは別として、これら2つの種類の式は極めて類似性が高い。式においては、変数と定数とが組み合わされて新しい値が作成されるが、一方、ストリーム式においては、ストリームと定数とが組み合わされて、新しいストリームが作られる。C式とストリーム式の構造はほぼ同一である。すべてのC演算子は、ストリーム式において有効な演算子である。同じ演算子の優先度が、C式とストリーム式との両方に当てはまる。C関数コールは、ちょうどC式で認められるのと同様に、ストリーム式においても認められる。単一の出力ストリームを有するモジュールのインスタンス化はストリーム式において認められ、関数コールと同様に取り扱われる。
C式とストリーム式との間の相違点は、第1に、評価が行われる時点および方法にある。C式については、制御のスレッドが、式を含む文に到達した時点で、評価が行われる。その評価は、最初に、各変数をその現時点での値に置き換え、次いで、演算子の優先度にしたがって必要な演算を行うことにより、行われる。次いで、最後の演算により返される値が評価結果として供給される。
C式の評価とは異なり、Cストリームプログラム言語におけるストリーム式の評価は、制御のスレッドには縛られない。代わって、ストリーム式は、便宜主義的に評価される。従来のように、評価は、演算子の優先度にしたがって必要な演算を行うことにより行われる。変数に対して値を置き換える代わりに、値は、式入力に属する各FIFOキューから消費(ポップ)される。FIFOキューは、ストリーム式の入力であるすべてのストリームデスティネーションにおいて挿入される。評価は便宜主義的である。なぜなら、式の各入力FIFOキューに少なくとも1つの値が存在するときは常に評価が行われるためである。従来のように、評価により作られる結果は、最後の演算により返された値である。しかし結果は、C式の場合とは異なる方法で対処される。C式に対しては、結果が代入される用法は、式の文脈により決定される。ストリーム式に対しては、結果は式の出力ストリーム(式が代入かどうかに応じて、名称を持つ場合も持たない場合もある)に単に代入される。
ストリーム式の1例が、xStrm、yStrm、およびzStrmがすべてint型のストリームである、以下の式
xStrm*yStrm + 5*zStrm
において示され得る。これら3つのストリームに到達する値は、次のように始まる。
Figure 0006495208
すると、xStrm*yStrm + 5*zStrmの(名称を有さない)出力スト
リームに代入される最初の3つの値は、以下のようになる。
Figure 0006495208
ストリーム式の中では、特にストリーム代入が注目される。係るストリーム代入には2つの型が存在し、第1の型は
<ストリーム識別子>=<ストリーム式>
の形を有する。
そのCにおける対応物、すなわち変数への代入と同様に、この型のストリーム代入は副作用を有する。その出力ストリームに値を供給することに加えて、ストリーム代入は、右辺(RHS:right−hand−side)式の出力を左辺(LHS:left−hand−side)のソースにし、そのプロセス中に、RHS式の出力ストリームを代入の出力ストリームとする。ストリーム代入は、RHS式の出力ストリームが名称を有さない場合は、その出力ストリームに名称も与える。より大きい式の部分式の出力ストリームに名称は必要ではないが、名称は、出力ストリームが任意の包含するsuper式(superexpression)の外側のデスティネーションに宛てられなければならない場合は、不可欠となる。
以下の部分的コートにおける式代入文は1つの例である。ストリーム式は、代入の場合もそれ以外の場合も、セミコロンが後尾に付されるとストリーム文となる。
int F(int, int);
int G(int);
stream int M(int xStrm, int yStrm)




out = F(xStrm, G(yStrm));




式F(xStrm, G(yStrm))および部分式G(yStrm)は、それぞれ、ストリーム文をストリーム式として有する。G(yStrm)の場合、出力ストリームは名称を有さない。なぜなら、ストリームのデスティネーションは、式の文脈から明らかであるためである。すなわち、デスティネーションはsuper式F(xStrm, G(yStrm))における関数Fの第2の入力引数である。しかし、F(xStrm, G(yStrm))の出力ストリームの場合は名称が必要となる。なぜなら、デスティネーションが式の外部にあるためである。その名称は、代入式
out = F(xStrm, G(yStrm))
において割り当てられる。この代入により、F(xStrm, G(yStrm))の出力はzStrmのソースとなり、zStrmは単一のデスティネーション、モジュールMの出力パラメータを有する。
ストリーム代入の第2の型は、
(<コンマで分割されたストリーム識別子のリスト>)=<モジュールインスタンス化>
の形を取る。この型は、複数出力モジュールの出力を複数の名称を有するストリームのソースにすることが望まれるときに生じる。例示すると、tapの第1の出力がintストリームxのソースであり、tapの第2の出力がintストリームyのソースである場合における、以下の複数出力モジュール
stream (int, int) tap(int, int, int);
である。これは、ストリーム代入
(int x, int y) = tap(arg1, arg2, arg3);
を用いて達成される。この代入により、モジュールのi番目の出力はi番目のストリームのソースとなり、モジュールの出力ストリームが名称を有さない場合には、その出力ストリームに名称が与えられる。
モジュール本体内の文は、2つのカテゴリー、すなわち、スレッドおよびストリームに分類される。ストリーム文はストリームを取り扱うが、変数は取り扱わない。スレッド文は変数を取り扱い、いくつかの場合においては、ストリームも取り扱う。スレッドドメインにおける文は、大部分がC文であり、C文と同様に、本質的に命令的(手続的)であって、ステップ毎の手順を定義する。制御の逐次フロー(多くの場合、スレッドと称される)は、係る手順と関連付けられ、文が実行される順序を支配する。それに対して、ストリーム文は宣言型である。係る文のそれぞれは、文中に現れるストリームについて宣言する。スレッドドメインにおいて存在するようなステップ毎の手順の概念は存在せず、したがって、モジュール本体内におけるストリーム文の順序は、1つの例外を除いて、重要ではない。変数は使用前に宣言される必要があるように、ストリームもまた使用前に宣言されなければならない。
ストリームドメインの性質により、制御フローを取り扱うこれらのC文、特に、if−else、else−if、switch、for、while、do−while、break、continue、goto、およびreturnに対する対応物は存在しな
い。事実、ストリームドメインにおける唯一の文型は、C式文に対するストリームにおける対応物であり、Cにおけるように、最も一般的な式文は代入文である。ストリーム式文は、次の2つの形
<ストリーム式>;
stream <ストリーム式>;
のうちの1つを有する。一方、ストリーム代入文は、次の2つの形
<ストリーム識別子>=<ストリーム式>;
stream<ストリーム識別子>=<ストリーム式>;
(<コンマで分割されたストリーム識別子のリスト>)=<モジュールインスタンス化>
のうちの1つを有する。
モジュール、ストリームインスタンス化、ストリーム宣言、ストリーム式、およびストリーム文を使用する用途例は、デジタル信号処理において一般に使用される構文である有限インパルス応答(FIR:finite−impulse−response)フィルタである。FIRフィルタは、離散型時間入力信号を離散型時間出力信号へと変換する。図10は、5タップFIRフィルタ500の図であり、図中、X(z)は離散型時間入力502を、Y(z)は離散型時間出力504を表す。z−1と表記される、一連の単位遅延506は、それぞれが、受信する離散型時間信号を1クロックサイクルだけ遅延させる。それぞれが、受信する離散型時間信号に対して一定の係数h(i)を乗算する、一連の乗算器508。最後に、それぞれが、2つの受信信号を加算する、Σと表記された一連の加算器510。フィルタ500は5タップフィルタと称される。なぜなら、受信する離散型時間信号の5つの遅延されたバージョンのそれぞれが別個の係数を乗算され、結果として、5つの結果として生じた積が加算されるためである。
離散型時間信号は、サンプルのストリームとして表される。乗算器508および加算器510のそれぞれはストリーム式として表される。単位遅延はストリームインスタンス化として表される。1つまたは複数の値を有するストリームを初期化することにより、値は、そのストリーム内で、第2のストリーム内の値に対して、オフセット(遅延)される。これは、UnitDelayモジュールの動作の基礎となる原理である。
stream int UnitDelay(int X)

out = X;
out.initialize (0);

UnitDelayの本体において、ストリーム代入文
out = X;
により、UnitDelayの入力ストリームであるXは、UnitDelayのデフォルト出力ストリームであるoutのソースとなる。一方、ストリーム初期化文
out.initialize(0);
は、システム初期化時に、値0をoutに挿入する。outにおけるこの初期値は、outにおける後続のすべての値を1つの値分だけオフセット(遅延)させる効果を有する。
以下は、10、20、30、40、および50を任意に選択された5つのフィルタ係数として含む、図10におけるフィルタ500等の5タップFIRフィルタのストリームC実装である。
stream int UnitDelay (int X)

out = X;
out.initialize(0);


stream (int xOut, int yOut) tap (int
xIn, int yIn, int h)

xOut = UnitDelay(xIn);
yOut = yIn + h*xOut;


stream int FIR5(int X)

(int x2, int y2) = tap (X, 10*X,
20);
(int x3, int y3) = tap (x2, y2, 30);
(int x4, int y4) = tap (x3, y3, 40);
(int , out) = tap(x4, y4, 50);
この実装は並列性を示すが、明示的な並列性構文を用いることなく並列性が示されている。複数の名称を有するtapの出力の他は通常の逐次コードと類似するコードから、この並列性は現れたものである。変数に代わって、ここではストリームが存在する。
FIR5の本体内におけるtapの4つインスタンス化のそれぞれは、式
yIn + h*xOut
の、それ自身の複写を、3つの他のtapのインスタンス化と並列的に演算する。このことは、ストリーム式の便宜主義的な性質により、および新しい入力値がtapのインスタンス化のそれぞれへと継続的に到着することにより、可能となる。これらの新しい値は、FIR5の5つの内部ストリームにより供給される。
Xは、FIR5の入力から第1のtapの入力へと値を伝える。
x2およびy2は、第1のtapの出力から第2のtapの入力へと値を伝える。
x3およびy3は、第2のtapの出力から第3のtapの入力へと値を伝える。
x4およびy4は、第3のtapの出力から第4のtapの入力へと値を伝える。
tapの各インスタンス化の入力hは、定数により置き換えられる。このことにより、ストリームCコンパイラはtapインスタンス化内のhのすべてのインスタンスを定数で置き換える。tapのインスタンス化により実行されるすべての演算により、FIR5入力値はFIR5出力値へと変換される。
これらの最後の出力値が、FIR5のデフォルト出力ストリームにより供給される。
outは、第4のtapの出力からFIR5の出力へと値を伝える。
この実装は、多数のデジタル信号処理関数がどのようにストリームCにおいて取り扱われるかの1つの例である。
上述のFIRフィルタ例においては、5つの係数すなわち10、20、30、40、50が、コンパイル時に既知である。しかしFIR5係数がコンパイル時に未知である場合、または係数が長い期間にわたって一定であるが、随時変更される場合は、他の技術を用いる必要がある。係る場合においては、これらの擬似的定数は、変化するため真の定数で
はなく、また、ストリーム式またはスレッドにより消費(FIFOキューからポップ)されないため、真のストリームではない。
擬似的定数ストリームは、いくつかの面において通常のストリームに類似する。擬似的定数ストリームは、型と、1つまたは複数のソースと、1つまたは複数のデスティネーションと、名称とを有する。擬似的定数ストリームは、指定されたソースから指定されたデスティネーションへと指定された型を伝える。しかし、いくつかの点において、擬似的定数ストリームは通常のストリームとは異なる。通常のストリームがFIFOキューを有するのに対して、擬似的定数ストリームは、指定された型の1つの値のための記憶領域(変数と関連付けられた記憶領域に極めて類似する)を有する。係る記憶領域に存在する値は、ストリーム式またはスレッドによりアクセスされたときに、ポップされることも消費されることもなく、記憶領域内に留まり続ける。記憶された値は、新しい値がストリームソースのうちの1つからストリームに入ると、更新される。係るとき、新しい値は単に古い値を上書きする。この更新は典型的にはシステム動作とは非同期的になされるため、更新がストリームデスティネーションにおいて認識される時点は、一般に、非決定的である。擬似的定数ストリームの宣言は、システム初期化時に各ストリーム記憶位置に記憶される初期値を指定しなければならない。
擬似的定数ストリームは、単独型の宣言においても、モジュールの入力または出力パラメータリストにおいても、以下のシンタックス
const<ストリーム型><ストリーム識別子>=<初期値>
を用いて宣言される。通常は変数のみに対して適用される既存のCキーワードconstは、宣言されるストリームが擬似的定数ストリームであることを示す(constの使用は、新規キーワードの導入の手間を省く)。
これらの考えは、FIR5モジュールの以下の変更例において示される。ここでは、もとの例における5つの係数すなわち10、20、30、40、および50は、5つの擬似的定数ストリームh0、h1、h2、h3、およびh4により置き換えられる。システム初期化時にこれらのストリームに挿入される初期値はもとの係数と同一であるため、新しいFIR5は、もとと同一の係数で動作を開始する。しかし、新しいFIR5に関しては、これらの係数は、状況が許可するならば、更新され得る。
stream int FIR5 (int X, const int h0
= 10,
const int h1 = 20,
const int h2 = 30,
const int h3 = 40,
const int h4 = 50,

(int x2, int y2) = tap(X, h0*X, h1);
(int x3, int y3) = tap(x2, y2, h2);
(int x4, int y4) = tap (x3, y3, h3);
(int, out) = tap(x4, y4, h4);
図11Aは、入力ストリーム604上の一連のFIFOバッファ602が強調されたモジュール600を示す。図11BおよびCは、FIFOバッファ602およびモジュール600を用いる、2つの追加の代替的な実装を示す。図11Bは、FIFOバッファ60
2が一連の出力ストリーム606上でのみ使用される状態を示す。図11Cは、FIFOバッファ602が入力ストリーム604および出力ストリーム606の両方上で使用される状態を示す。プログラマの観点からは、図11AからCに示す3つの図は同等である。性能の観点からは、図11Cにおけるように入力および出力にバッファを有することにより、モジュール600は、ストリームを受け取るモジュール600上の利用可能スペースを考慮することなく、スケジュールされることが可能となる。これは、追加的なメモリおよび別途のスケジュールステップのコストにより実現される。FIFOバッファ602は、実装に応じて、仮想メモリスペース上、物理メモリスペース上、および登録ファイルスペース上に存在し得る。
図11Aにおけるような入力ストリームFIFOに対する高レベルのスケジューリングアルゴリズムの1例を以下に示す。
a.次の場合、モジュールを実行するようスケジュールする{
入力ストリーム(単数または複数)の入力FIFOにデータが存在する
且つ
現在のモジュールの出力ストリームに接続されたモジュールの入力ストリームFIFOに利用可能スペースが存在する
図10Bにおけるような出力ストリームFIFOに対する高レベルのスケジューリングアルゴリズムの1例を以下に示す。
b.次の場合、モジュールを実行するようスケジュールする{
現在のモジュールの入力ストリーム(単数または複数)に接続されたモジュールの出力ストリームFIFOにデータが存在する
且つ
出力ストリーム(単数または複数)のFIFOに利用可能スペースが存在する
図10Cにおけるような入力および出力ストリームFIFOに対する高レベルのスケジューリングアルゴリズムの1例を以下に示す。
c.次の場合、モジュールを実行するようスケジュールする{
入力ストリーム(単数または複数)の入力FIFOにデータが存在する
且つ
(現在のモジュールの出力ストリームに接続されたモジュールの入力ストリームFIFOに利用可能スペースが存在する
または
出力ストリーム(単数または複数)のFIFOに利用可能スペースが存在する)

スレッド
スレッドは、ストリームCが完全且つ包括的な言語となるにあたり必要不可欠な能力を提供する。スレッドは、C関数(すなわち、その入力が個別の値であり、その出力が単一の値である関数)の本体内か、またはモジュール(すなわち、その入力および出力が値のストリームである関数)の本体内に、現れ得る。これら2種類のスレッドは、モジュールの本体内のスレッドがストリームCストリームにアクセスし得(通常はストリームCストリームにアクセスする)、その理由のために、通常は終了しないことを除いて、同じである。また、C関数の本体内のスレッドは、ストリームCストリームにアクセスせず、すべての(良好な挙動を示す)Cスレッドと同様に、終了する。
ストリームCスレッドの顕著な特性は、並列問題からの完全な乖離である。並列構文は存在せず、他のスレッドと直接的に相互作用することはなく、および新規スレッドは生成されない。したがって、ストリームCスレッドに関しては、ストリームCスレッドが複数スレッド環境で動作中であることを意識する必要がない。したがって、スレッドドメインで作業するプログラマは厳格に逐次的な問題に集中してよい。
ストリームCにおける関数宣言および関数定義は、Cにおける対応物と同じシンタックスおよびセマンティクスを有する。ストリームCにおける関数コールに関しては、シンタックスおよびセマンティクスは、コールが(a)関数の本体に現れるか、または(b)ストリーム式に現れるかに依存する。同じ関数(再帰関数)の本体、または他の関数の本体におけるストリームC関数コールは、通常のC関数コールと同じシンタックスおよびセマンティクスを有する。ストリーム式におけるストリームC関数コールは、C関数コールと同じシンタックスを有するが、ただし、ストリームが関数コール引数における変数と置き換わる。係るコールのセマンティクスは同じであるが、通常の関数コールのセマンティクスとは同じでない。相違点は、関数の各評価(コール)がどのように行われるかに関する。さらに詳細には、相違点は、(1)関数コール引数に現れるパラメータ(ストリーム)に対して値がどのように取得されるか、(2)関数コール出力のデスティネーション、および(3)制御がどのように取り扱われるか、に関する。
Cにおいて、関数コールに現れる引数に現れるパラメータはすべて変数であり、係る関数入力変数に代入される値は、その変数の現在値である。ストリームCにおいては、ストリーム式関数コールの引数に現れるパラメータはすべてストリームであり、係る関数入力ストリームのそれぞれに代入される値は、(a)通常のストリームの場合は、ストリームデスティネーションにおけるFIFOキューからポップ(消費)される値である、または(b)擬似的定数ストリームの場合は、そのストリームデスティネーションにおける現在の値である、のいずれかである。
Cにおいて、関数コールにより変えられる値は、関数コール元に渡される。ストリームCにおいては、ストリーム式関数コールにより返される値は、関数コール出力ストリーム(名称を有する場合も有さない場合もある)に代入される。ストリーム式そのものであるため、ストリーム式関数コールは常に出力ストリームを有する。出力値のデスティネーションは、ストリームのデスティネーションにより決定される。
Cにおいて、関数は、制御のスレッドがその関数に対するコールと遭遇するとき、コールされる。ストリームCにおいては、ストリーム式関数コールは、制御スレッドに関わりなく評価される(すなわち、関数がコールされる)。代わって、関数は、関数コールの通常の入力ストリームのそれぞれのFIFOキューに少なくとも1つの値が存在するときは常に便宜主義的にコールされる。擬似的定数入力ストリームは、値を供給する準備が常に整っており、したがって、関数コールまたはストリーム式の評価を決して妨げることはない。
これら3つの相違点は別として、通常のC関数コールおよびストリーム式関数コールのセマンティクスは同じである。このことは、両方の場合においてスレッドに基づくセマンティクスが関数実行に適用されることを意味する。
以下の関数GDCの定義およびモジュールGDC4を有するCストリームにおけるスレッドの1例が示され得る。
int GCD (int a, int b) //再帰関数

if ((a>=b) && (a%b)==0) //スレッドの開始

return (b);

if (a<b)

return GCD(b,a); //関数コール

return GCD(b, (a%b)); //関数コール

stream int GCD4(int w, int x, int y,
int z) //モジュール

out=GCD(GCD(w,x), GCD(y,z)); //3つの関数コールを有するストリーム式
再帰関数の古典的な例であるGCDは、2つの整数の最大公約数を返す。GCDは2つの整数入力aおよびbを有し、1つの整数結果を返す。GCD4は、4つの整数ストリーム入力すなわちw、x、y、およびzを有し、1つの整数ストリーム出力を有する。ストリーム式文
out = GCD(GCD(w, x), GCD(y, z));
が、GCD4の本体内に存在し、ストリーム式
GCD(GCD(w, x), GCD(y, z ))
がこの文の中に存在する。
この式は、ストリームw、x、y、およびzのデスティネーションを含むため、これら4つのデスティネーションのそれぞれにおいてFIFOキューが存在する。これらのキューは、関数コールGCD(w, x)およびGCD(y, z)が上述のように便宜主義的および並列的に評価(実行)されることを許可する。これらの2つのコールのように、GCDに対する第3のコールは、その2つの入力ストリームのFIFOキューから取得された入力値を用いて便宜主義的に実行される。これらの入力ストリームは、GCDに対する2つの他のコールの出力ストリームとして作られたものであり、そのために、これら2つのストリーム上のFIFOキューは、GCDに対する第3のコールが最初の2つのコールと並列的に実行されることを可能にする。この第3の関数コールの出力ストリームは、outへのストリーム代入により、GCD4の出力ストリームに宛てられる。図12におけるデータフロー図に表される、GCDに対する関数コールのこの構成は、4つの入力ストリームすなわちw、x、y、およびzからのデータが、3つの並列動作関数コールを通ってストリームされることを可能にし、その結果、それぞれの出力値が、i>=0であるいくつかの整数iに対してw(i)、x(i)、y(i)、およびz(i)の最大公約数である、出力値のストリームが作成される。
ストリームの観点からすると、どのようにモジュールが入力ストリーム値を出力トリーム値に変換するかは、重要ではない。重要であるのは、入力から出力への変換(単数または複数)(および任意の副作用)のみである。これまで挙げてきた例においては、これらの変換は、ストリーム式、すなわち特定用途用ハードウェア、再設定可能なハードウェア(図1および図2における等の)、逐次コードを実行するプロセッサまたは何らかの他の機構を用いて実装され得る式に関して表されてきた。
これらの変換は、モジュールの本体内に存在する逐次コードとして明示的に表され得る。係るコードは、記憶されたプログラム逐次プロセッサ(stored−program
sequential processor)上で実行され得、スレッドドメインと称され得るものの中に存在し得る。モジュールの本体は、排他的にストリームドメインまたはスレッドドメインにおける文を典型的には含むであろうが、しかし、このことにより、同じモジュール本体内において両種の文が排除されるわけではない。その場合、2つのドメインは、並んで(すなわち並列的に)動作する。
スレッドドメインのシンタックスおよびセマンティクスは、Brian W. KernighanおよびDennis M. Ritchie共著「C Programming Language」(1978年)により非公式に、およびISOのC規格ISO/IEC 9899により公式に定義されるC言語のスーパーセットである。標準C言語に対する追加は、スレッドが、モジュール入力ストリーム、モジュール出力ストリーム、モジュール本体に対して内部にあるストリーム、またはグローバルストリームであれ、スレッドに対して可視であるこれらのストリームにアクセスすることを可能にする動作に関するものである。これらのストリームアクセス動作は、2つのカテゴリー、すなわちブロック型および非ブロック型に分類される。これらの動作を理解するために、ストリームにおける値のフローを規制するために用いられる機構、およびタスク(タスクはモジュールインスタンスと等価である)を管理するための機構が、図4におけるノードラッパーを参照して説明したように重要である。
フロー制御およびタスク管理は、ストリームCランタイムサポートシステムにより提供される重要なサービスである。フロー制御は、FIFOキューのオーバーフロー(すなわち、すでにフル状態であるキューにデータを書き込みこと)およびFIFOキューのアンダーフロー(すなわち、空き状態のキューからデータを読み込みむこと)を防ぐ。タスク管理は、いつタスクが実行状態に置かれるか、いつかの場合においては、いつタスク実行が終了されるか、を制御する。ストリームCフロー制御システムおよびタスク管理システムにおいては、3つの重要な要素、すなわち消費側カウント、作成側カウント、およびタスクマネージャが存在する。
整数消費側カウントは、通常の(擬似的定数ではない)ストリームの各FIFOキューと関連付けられる。特定ストリームの特定スレッドによるすべての読み込みは、同一のFIFOキューをアクセスし、したがって、同一の消費側カウントにアクセスする。消費側カウントの符号ビットは、FIFOキューが空き状態であるかどうかを示す。1の符号ビット(消費側カウントは負である)は、キューが空き状態であることを示す。0の符号ビット(消費側カウントは非負である)は、キューが非空き状態であることを示す。
整数作成側カウントは、各通常(擬似的定数ではない)ストリームの各ソースと関連付けられる。作成側カウントの符号ビットは、このストリームソースに挿入された値を受け取るために下流側FIFOキューに利用可能スペースが存在するかどうかを示す。0の符号ビット(作成側カウントは非負である)は、すべての下流側キューが、この出力ストリームにおいて値を受け取るためのスペースを有するとは限らないことを示す。1の符号ビット(作成側カウントは負である)は、すべての下流側キューが、この出力ストリームにおいて値を受け取るためのスペースを有することを示す。
図2におけるノード180等の各プロセシングコアは、実行を開始するに必要な入力データを含むすべてのリソースを有する、タスクの先入れ先出し・実行準備完了キーを有する。各プロセシングコアは、タスクの実行を管理し、且つ必要な調節信号をタスク間に提供するタスクマネージャを有する。タスクマネージャは、データがFIFOキューにプッシュされた(書き込まれた)ときに消費側カウントをインクリメントすることと、データ
がFIFOキューからポップされた(消費された)ときに消費側カウントをデクリメントすることと、スペースがデスティネーションFIFOキューにおいて利用可能となったことを示すためのバックワードアクノレッジメントを、ストリームソースへと送信すること(デフォルトは、各値が各FIFOキューから消費された後にバックワードアクノレッジメントを送信する)と、を自動的に行う。タスクマネージャは、データがモジュールの出力ストリームに書き込まれた場合にそのストリームの作成側カウントをインクリメントすることと、モジュールの出力ストリームに対するバックワードアクノレッジメントが受け取られた場合にその出力ストリームの作成側カウントをデクリメントすることと、タスクが、入力データと、タスクが進行するために必要である任意の他の要求されるリソースと、を有する場合に、プロセシングコアの実行準備完了タスクキューにタスクを置くことと、も実行する。タスクマネージャは、タスクが実行準備完了タスクキューの先頭にあり且つ実行ユニットが利用可能である場合に、タスクを実行状態に置き、タスクが進行するために必要な入力データを有さない場合またはタスクがタイムアウトする場合に、タスクの実行を停止する。
ブロック型ストリームアクセス演算は、モジュール本体に現れるスレッドが、モジュール入力ストリーム、モジュール出力ストリーム、モジュール本体に対して内部にあるストリーム、およびグローバルストリーム等の、スレッドに対して可視であるストリームにアクセスすることを可能にする。これらはストリームにアクセスするための好適な方法である。なぜなら、非ブロック型ストリームアクセス動作とは異なり、ブロック型ストリームアクセス動作は非決定性を生じさせないためである。係る演算のブロックおよび非ブロックは、プロセシングコアのタスクマネージャにより自動的に対処される。
係る演算は3つあり、それぞれの演算はC++における同様の演算にちなんで作られたものである。演算子>>は、ストリームFIFOキューから単一の値をポップ(消費)し、その値を変数に代入するために用いられる。演算子>>は
<ストリーム識別子> >> <変数識別子>;
の形の文において用いられる。この文により、単一の値が左側のストリームからポップされ、右側の変数に代入される。しかし、ストリームに対するFIFOキューが、ストリームの消費側カウントの符号ビットにより示されるように空き状態である場合、文はブロック(ストール)され、キューが、ストリームの消費側カウントの符号ビットにより示されるように再び非空き状態となるまで、ブロック状態に保持される。
演算子<<は、変数の現在の値をストリームに代入するために用いられる。演算子<<は、
<ストリーム識別子> << <変数識別子>;
の形の文において用いられる。この文により、右側の変数の値は左側のストリームに代入される。しかし、1つまたは複数の下流側キューが、ストリームソースにおける作成側カウントの符号ビットにより示されるように、係るデータを受け取るスペースを有さない場合、文は、ブロック(ストール)され、すべての下流側キューが、ストリームの作成側カウントの符号ビットにより示されるように再び値を受け取るスペースを有するようになるまで、ブロック状態に保持される。
peek演算子は、ストリームFIFOキューの先頭における値を、ポップ(消費)せずに、取得するために用いられる。peek演算子は、
<ストリーム識別子>.peek()
の形の式において用いられる。この式は、<ストリーム識別子>のFIFOキューの先頭における現在の値を返すが、キューから値をポップ(消費)しない。しかし、ストリームに対するFIFOキューが、ストリームの消費側カウントの符号ビットにより示されるように空き状態である場合、文は、ブロック(ストール)され、キューが、ストリームの消
費側カウントの符号ビットにより示されるように再び非空き状態となるまで、ブロック状態に保持される。
ブロック型のストリームアクセス演算子と同様に、非ブロック型ストリームアクセス演算は、モジュール本体に現れるスレッドが、モジュール入力ストリーム、モジュール出力ストリーム、モジュール本体に対して内部にあるストリーム、およびグローバルストリーム等の、スレッドに対して可視であるストリームにアクセスすることを可能にする。しかし、ブロック型演算とは異なり、非ブロック型演算は、典型的には、演算の結果に影響する競合状態に関与するものであり、したがって、非決定性を導入する。係る演算は2つある。
<ストリーム識別子>.consumerCount()
の形の式は<ストリーム識別子>の消費側カウントを返す。なお、<ストリーム識別子>は、>>演算またはpeek演算を介して、スレッドにより読み込まれるストリームである。この式は、<ストリーム識別子>のFIFOキューが空き状態である場合に>>演算またはpeek演算を回避するために、<ストリーム識別子>の消費側カウント符号ビットをテストするために、主に用いられる。
<ストリーム識別子>.producerCout()
の形の式は、<ストリーム識別子>の作成側カウントを返す。なお、<ストリーム識別子>は<<演算を介して、スレッドにより書き込まれたストリームである。この式は、1つまたは複数の下流側キューが係る新しい値を受け取るスペースを有さない場合に、<<演算を回避するために、<ストリーム識別子>の作成側カウント符号ビットをテストするために、主に用いられる。
モジュール本体内のスレッドが多数の異なる形を取り得るが、多くの変化例が、以下の典型的な形となるであろう。
stream int moduleA (int strm1, ..., int strmN)

int var1, ..., varN, result; //変数を宣言
while true //永遠にループする

strm1 >> var1;
・ //入力ストリームから値を読み込む


strmN >> varN;
・ //resultを算出する


out << result; //resultを出力ストリームに代入する


ここでmoduleAは、1つまたは複数の入力ストリームと、単一の出力ストリームとを有するモジュールである。入力ストリームおよび出力ストリームのデータ型は、整数型へと任意選択される。moduleAの本体内のスレッドが最初に実行することは、各入力ストリームに対する値と、単一の出力ストリームに対する値とを宣言することである。
次いでスレッドは、各反復が(a)各入力ストリームから値を読み込む(消費する)こと、(b)結果を算出すること、および(c)結果を出力ストリームに代入すること、を含む無限ループに入る。
配列
他の言語におけるのと同様に、配列は、データ要素の配列ばかりではなく、ストリーム配列およびモジュール配列もまた、ストリームCにおいて重要な役割を果たす。実際のデータ値の配列(データ値の配列へのポインタではなく)は、複数のストリーム上で並列的に伝えられる。ストリーム配列は、モジュールの配列とともに用いられるとき、特に有用である。
ストリームCは、Cからデータ配列のためのシンタックスおよびセマンティクスを受け継ぐ。このことは、配列の名称が(関数)引数として用いられる場合、関数に渡される値は、配列の先頭の位置またはアドレスであり、配列要素は複写されないことを意味する。ストリーム入力(引数)およびモジュールの出力に対しても、同じことが成り立つ。例示のために、上述のGDC4モジュールが用いられ得る。
stream int GCD4(int w, int x, int y,
int z) //4つの整数引数を有する
{ //モジュール
out = GCD(GCD(w, x), GCD(y, z));

GCD4に4つの別個の整数ストリーム引数を供給する代わりに、各値が4つの整数の配列である単一のストリーム引数が供給される。GCD4は、以下のように変形されるであろう。
stream int GCD4 (int* wxyz) //1つの配列引数を有するモジュール

out = GCD(GCD(wxyz[0], wxyz[1]),
GCD(wxyz[2], wxyz[3]));
C言語の規則によれば、GCD4の単一の引数はint*型、すなわち整数へのポインタであり、この場合、4つの整数の配列における第1の整数である。GCD4の本体内のこれらの4つの整数は、標準的なC言語の演算子[]を用いてアクセスされる。C言語型のデータ配列をモジュールに供給することが、ストリームの文脈において配列を取り扱うための1つの方法である。
いくつかの用途に関しては、モジュールに配列ポインタのストリームを供給することは、その用途に固有の並列性を十分に利用するためには不十分である。したがって、配列のストリームよりもむしろ、ストリームの配列は、データ値の配列へのポインタではなく、実際のデータ値の配列が、複数のストリーム上で並列的に伝えられることを可能にする。ストリーム配列の宣言は、2つの相違、すなわちキーワードstreamが宣言に先行すること、および配列のサイズがコンパイル時に既知でなければならないことを除き、通常のC言語の配列の宣言と同じである。この制限は、モジュールと同じくアプリケーション内のすべてのストリームがコンパイル時にインスタンス化されるので、必要である。
ストリーム配列宣言の例を以下に挙げる。
stream int array1D[4];
stream int array2D[4][16];
stream int array3D[4][16][9];
第1の宣言は、array1Dが4つの整数ストリームの1次元配列であることを宣言する。同様に、array2Dが64個の整数ストリームの2次元配列であること、およびarray3Dが576個の整数ストリームの3次元配列であることが宣言される。ストリーム配列の個々のストリームは、データ配列の個々の要素と同じ方法でアクセスされる。例えば、
array3D[3][15][7]
は、array3Dの576個のストリームのうちの1つを示す。
ひとたびストリーム配列が宣言されると、配列全体、配列内のサブ配列、または配列内の個々のストリームは参照され得る。これらの3つの場合が以下の部分的コードにおいて例示される。
stream int moduleA(int); //モジュール宣言
stream int moduleB(int[4]);//モジュール宣言
stream int moduleC(int[3][4]);//モジュール宣言

stream int moduleD(int W[3][4])//モジュール定義




stream int X = moduleA(W[2][0]);
//ストリーム式
stream int Y = moduleB(W[2][0]);
//ストリーム式
stream int Z = moduleC(W); //ストリーム式




ここでは、moduleA、moduleB、およびmoduleCに対する宣言と、moduleDの部分的な定義が示される。これら4つのモジュールの入力型を以下に示す。
Figure 0006495208
moduleDの本体内のmoduleA、moduleB、およびmoduleCのインスタンス化に供給される入力引数を以下に示す。
Figure 0006495208
それぞれの場合において、モジュールインスタンス化引数型は、モジュール入力型と一
致し、したがって各モジュールインスタンス化は、ストリームCの型づけの強い要件を満足する。
ストリーム式内におけるストリーム配列の個々のストリームをアクセスすることも、この複素数乗算モジュール例に示すように、単純明快である。
stream int[2] complexMult (int X[2],
int Y[2])

out[0] = X[0]*Y[0] − X[1]*Y[1];
out[1] = X[0]*Y[1] + X[1]*Y[0];

ストリーム式内の演算子が並列的にアクティブであるため、ストリーム式X[0]*Y[0]−X[1]*Y[1]およびX[0]*Y[1]+X[1]*Y[0]における4つの乗算、1つの加算、および1つの減算は、並列的に評価される。
並列処理に対する最も普及している手法の1つであるデータ並列性は、同一のタスクが同一のデータ構造(典型的には配列)の異なる部分上で並列的に(並行して)実行される、並列性の1つの形態である。ストリームCにおいて、データ並列性は、モジュール配列によりサポートされる。
モジュール配列は、その名称が暗示するように、モジュールの配列である。モジュール配列は、モジュール名と入力パラメータのリストとの間に角括弧で囲まれた配列次元を挿入することにより宣言される。以下はモジュール配列宣言の2つの例である。
stream int moduleA[3][4](int, int);
stream(int, int)modu1eB[3][4](int, int);
両方の場合において、配列次元は3×4である。
通常(単独型)モジュールの定義と同様に、モジュール配列の定義は波括弧({および})で囲まれた本体を有する。以下は、モジュール配列定義の2つの例である。第1の例は単一(デフォルト)出力ストリームを有し、それに対して、第2の例は名称を有する2つの出力ストリームを有する。
stream int moduleA[3][4](int a, int b)

//モジュール本体


stream(int x, int y) moduleB[3][4](int a, int b)

//モジュール本体
ひとたびモジュール配列が宣言(宣言または定義)されると、配列全体、配列内のサブ配列、または配列内の個々のモジュールは、データ配列およびストリーム配列と同じ方法で、ストリーム式内でインスタンス化され得る。moduleA[3][4]に対して、これら3つの場合が示される。
Figure 0006495208
モジュール配列の重要な属性は、モジュール配列がシステム初期化時にインスタンス化されるとき、顕著なものとなる。モジュール配列の各要素は、別個のモジュールインスタンス化として、インスタンス化される。その結果、すべての配列要素が並列的に動作することが可能となる。moduleA[3][4]がこの概念の1つの例である。モジュールがインスタンス化されると、moduleAの12(3×4)個の別個のインスタンス化が作られ、それぞれのインスタンス化は、他の11個のインスタンス化と並列的に動作する。さらに、このインスタンス化の乗算は、moduleA[3][4]の各インスタンス化に当てはまる。したがって、moduleA[3][4]の3つのインスタンスが存在する場合、moduleAの36(3×12)個の別個のインスタンス化が作られる。
モジュール配列インスタンス化のパーソナル化は、インスタンス化がどのデータ上で演算されるかを決定する。インスタンス化は、各モジュールインスタンス化にそれ自体のユニークなデータをインスタンス化の入力ストリームを通して供給することにより、パーソナル化され得る。各モジュールインスタンス化が、その配列インデックスを、インデックス演算子を用いて特定することが可能となり、それにより、インスタンス化が、グローバル配列のそれ自体のユニークな部分にアクセスすることが可能となることにより、インスタンス化はパーソナル化され得る。
ストリーム配列がモジュール配列の各要素にユニークなデータを供給するために用いられ得る第1タイプのパーソナル化が以下に示される。第2タイプのパーソナル化は、各配列モジュールの配列インデックスのインスタンス化がコンパイル時に既知であるという事実を利用する。これらのインデックスにアクセスするために、プログラマは、以下のシンタックス
int index(int i)
で演算子を使用する。なお、式中、iはコンパイル時に定数へと評価される整数式である。コンパイル時に、index(i)はインスタンス化の第1番目のインデックスと置き換えられる。iが配列境界外である場合、コンパイル時エラーまたはランタイムエラーが生じる。
ストリーム配列およびモジュール配列は、ストリームCの特別な配列結合機能を用いてストリーム配列とモジュール配列とが結合されたときに、最大の有用性を発揮する。結合に対しては、3つの要件、すなわちa)ストリーム配列およびモジュール配列が同じ次元を有さなければならないこと、b)ストリーム配列がモジュール配列の入力または出力と
接続(結合)されていなければならないこと、およびc)ストリーム配列型がモジュールの入力/出力型と一致しなければならないこと、が存在する。
係る結合が生じると、ストリーム配列内の各個別ストリームは、同一のインデックスを有するモジュール配列の個々のモジュールの入力/出力ストリームに接続(結合)される。したがって、0<=i<D, 0<=i<D...0<=i<Dに対して、ストリーム配列S[D][D]...[D]がモジュール配列M[D][D]...[D]の入力/出力に結合されると、各個別ストリームS[i][i]...[i]は個別モジュールM[i][i]...[i]の入力/出力に接続される。
以下は、1つのモジュール配列の出力および他のモジュール配列の入力に結合されたストリーム配列の例である。
stream int moduleA[3][2](); //第1の結合されたモジュール
stream void moduleB[3][2](int); //第2の結合されたモジュール
stream void parentModule()

stream int cStrm[3][2]; //結合されたストリーム
cStrm[][] = moduleA[][](); //cStrmに結合されたmoduleAの出力
moduleB[][](cStrm[][]); //moduleBの入力に結合されたcStrm

ここで、moduleA[3][2]の出力ストリームはcStrm[3][2]に結合され、cStrm[3][2]はmoduleB[3][2]の入力ストリームに結合される。これらは正規の結合である。なぜなら、
・cStrm[3][2]、moduleA[3][2]、およびmoduleB[3][2]が、すべて同一の次元を有し、
・cStrm[3][2]が、moduleA[3][2]の出力およびmoduleB[3][2]の入力に接続され、
・cStrm[3][2]の型、moduleA[3][2]の出力型、およびmoduleB[3][2]の入力型がすべてintである、
ためである。
以下の表は、cStrm[3][2]の各個別ストリーム、すなわち(a)出力がストリームソースであるモジュール、(b)cStrm[3][2]における個別ストリーム、および(c)インプットがストリームデスティネーションであるモジュールをリストする。
Figure 0006495208
PING
モジュールが他のモジュールに対して、そのモジュールが実行する特定の演算、副作用が完了したことを通知することが必要となる状況が存在する。例えば、モジュールがグローバルメモリ内のデータ構造に関する演算を実行するとき、おそらく同一のデータ構造に関する演算を実行する多数のモジュールのうちの1つとして、そのモジュールは、典型的には、演算が完了したため下流側の演算またはタスクが開始され得ることを下流側モジュールに通知する必要がある。これらの状況においては、値を返す必要はなく、特定のタスクが完了した信号を返すのみでよい。値ではなく信号が必要とされるこれらの状況に対して、ストリームCはpingデータ型を提供する。ping(ping型の値)は、特性を有さず、互いに対して完全に区別がつかない。
pingは、3つの演算子、すなわち、(1)タスクの同期を提供するjoin演算子、(2)>>ストリームアクセス演算子、および(3)<<ストリームアクセス演算子、とともに用いられる。第1の使用法はストリームのみに関するが、第2および第3の使用法は、ストリームおよびスレッドに関する。
pingキーワードは、1つまたは複数のping型のストリームを宣言するときに用いられる。例えば、以下の式
stream ping pStrm0, pStrm1, pStrm2;
は、pStrm0、pStrm1、およびpStrm2がping型のストリームであることを宣言する。pingキーワードは、
stream ping moduleName(int, ping);
のように、モジュール入力または出力がping型であることを宣言するモジュールプロトタイプ/定義にも用いられる。
pingの第1の使用法はjoin演算子に関し、join演算子は、pingストリームと他の1つまたは複数のストリームとを繋いで、単一の出力ストリームを作る機能を有する。この演算子は、他のいくつかの演算モデルにおいて見られる接合演算(rendezvous operation)と同様である。join演算子を含む式は、2つの形
<pingストリーム配列>.join()
<pingストリーム>.join(<ストリーム式>)
のうちの1つを取る。すべてのストリーム式と同様に、これらの形のうちの1つにおける式の各評価は、各入力ストリームから単一の値/pingを消費し、式の(名称を有さない)出力ストリーム上に単一の値/pingを作る。入力ストリームが空き状態(値が存在しない)である場合、すべての入力ストリームが少なくとも1つの値/pingを有するまで、評価はストール(ブロック)される。非ping式に対しては明示的なjoin演算は必要ない。なぜなら、join演算の効果はすでに式評価のセマンティクスにより包含されるためである。
第1の型の式が評価されると、単一のpingがpingストリームの配列内の各ストリームから消費され、単一のpingが式の出力ストリーム上に発行される。
第2の形の式が評価されると、<pingストリーム>からの単一のpingと、<ストリーム式>の評価とが消費される。このストリーム式<ストリーム式>は、pingを含む任意の型であり得る。<ストリーム式>の評価から得られる値は、join演算の出力ストリーム上に発行される。式がping型である場合、式は単一のpingに評価される。このように、pingストリームは、上述の>>演算子の場合と同じく、<pingストリーム>にpingが存在する場合にのみ評価の進行を許可する守衛として機能する。
join演算の2つの形が図13Aおよび13Bに図示される。図13Aにおいては、サイズがnである1次元pingストリーム配列の個別ストリームが繋がれて、単一の(名称を有さない)出力pingストリームが作られる。図13Bにおいては、単一のpingストリームであるpingStrmが式exprと繋がれて、exprと同じ型を有する単一の(名称を有さない)出力ストリームが作られる。
join演算の1例は、データ構造Xを含み得る。ただし、データ構造Xについて、2つの演算、すなわち演算Aおよび演算Bが行われる。これらの演算は、以下の要件、すなわちa)go信号に応答して実行される以外には、演算Aも演算Bも実行されないこと、b)go信号が受信されると、演算Aおよび演算Bが並列的に実行されること、およびc)演算Aまたは演算Bのいずれかが開始される前に、直前のgo信号に応答して実行された両方の演算が完了していなければならないこと、を満足する。
この問題に対する簡単なソリューションは、join演算の2つのインスタンスを用いることである。
stream ping moduleA(ping pStrm)

while(true)

pStrm >> ping;
//データ構造X上で演算Aを実行する
out << ping;



stream ping moduleB(ping pStrm)

while(true)

pStrm >> ping;
//データ構造Xに関して演算Bを実行する
out << ping;



stream ping moduleC(ping goStrm)

stream ping startStrm=goStrm.joi
n(doneStrm);
stream ping StrmA=moduleA(startStrm);
stream ping StrmB=moduleB(startStrm);
stream ping doneStrm=StrmA.join(StrmB);
doneStrm.initialize(ping);
out=doneStrm;

moduleAおよびmoduleBは、それぞれ演算Aおよび演算Bをカプセル化する。それぞれは、ping毎に1つの演算を開始する入力pingストリームと、ping毎に1つの演算の完了を確認する出力pingストリームとを有する。moduleCはmoduleAおよびmoduleBの両方の1つのインスタンスを含み、goStrm入力pingストリームを介してgo信号を受け取る。
moduleCにおける6つの文は以下の役割を果たす。
stream ping startStrm=goStrm.join(doneStrm);
は、goStrmとdoneStrmとを繋いで、startStrmを作る。このように、goStrm(すなわちgo信号)上にpingが存在し、doneStrm上にpingが存在する(これは、直前のgo信号に応答した演算Aおよび演算Bが完了したことを示す)場合に、pingがstartStrmに代入される。
stream ping StrmA=moduleA(startStrm);
は、startStrmをmoduleAの入力pingストリームに接続し、moduleAの出力pingストリームをStrmAに接続する。このことは、演算Aは、直前のgo信号に関連付けられた両方の演算が完了した後にのみ、go信号に応答して行われることを意味する。
stream ping StrmB=moduleB(startStrm);
は直前の文と同様であり、この文は、直前のgo信号に関連付けられた両方の演算が完了した後にのみ、演算Bがgo信号に応答して行われることが確実になされるようにする。しかし、演算Aおよび演算Bが行われる順序に制限はない。換言すれば、演算Aおよび演算Bは並列的に行われる。
stream ping doneStrm=StrmA.join (StrmB);
はmoduleAの出力pingストリームであるStrmAと、moduleBの出力pingストリームであるStrmBとを繋ぐ。このように、直前のgo信号に応答して行われた両方の演算が完了したならば、pingがdoneStrmに代入される。
doneStrm.initialize(ping);
は、システム初期化時に単一のpingをdoneStrmに代入する。このことは、すべての以前の演算が、まったく存在せず、完了したことを示す。この文がなければ、moduleCはデッドロックし、演算はまったく行われないであろう。
out = doneStrm;
は、doneStrmをmoduleCのデフォルト出力ストリームであるoutに接続する。このストリーム上の各pingは、go信号に応答して行われた演算Aおよび演算Bが完了したことを確認する。moduleCの挙動は、moduleCの入力ポート上でgo信号(ping)として総括され、その結果、以前の演算が完了した後にのみ、演算Aおよび演算Bはデータ構造Xに関して並列的に行われ得る。演算Aおよび演算Bの両
方が完了すると、モジュールCはその出力ポート上で確認としてpingを送信する。
pingStrm >> ping;
(式中、pingStrmはping型のストリームである)の形の文は、スレッドの実行をpingStrm内のpingと同期する機能を有する。この文がスレッドにおいて遭遇されると、単一のpingがpingStrmから読み出される(消費される)。pingStrmが空き状態(すなわち、pingStrmにpingが存在しない)である場合、この文は、pingが利用可能となるまで、ブロック(ストール)される。したがって、この文は、pingがpingStrmに存在するときにのみスレッドの進行を許可する守衛として機能する。この演算では変数は関与せず、>>通常は変数の存在が期待される演算子の右側には、キーワードpingのみが存在する。
pingStrm << ping;
(式中、pingStrmはping型のストリームである)の形の文は、スレッドが、特定の演算(単数または複数)が完了したことを関係者に知らせることを可能にする。この文がスレッドにおいて遭遇されると、単一のpingがpingStrmに書き込まれる(代入される)。上述の第1の文とは異なり、この文は決してブロックされない。
pingが関与するこれらの2つの形のストリーム/スレッド相互作用が、以下の部分的コードにおいて例示される。
stream ping moduleA(ping pStrm)

//ループに入る前に初期化を行う
while(true)

pStrm >> ping;
//副作用を有する演算を行う
out << ping;


moduleAは、単一の入力ポートおよび単一の出力ポートを有し、その両方がping型である。moduleA内には無限ループを含むスレッドが存在する。なお、この無限ループの各反復は、以下の文
pStrm >> ping;
により開始される。この文は、ループの反復を、モジュール入力ストリームpStrmにおけるpingと同期させる機能を有する。pStrmが空き状態であるとき、この文はブロックされ、pStrmが非空き状態であるとき、この文はpStrmから単一のpingを消費する。その文に続いて、必ず副作用を伴う活動に関連する文がある。副作用がないなら、modleAは操作不能と等価となるであろう。各反復の末尾には、次の文
out << ping;
が存在する。なお、この文は、moduleAの標準出力ポートを通して、他のループ反復が完了したことを知らせる。
完全にストリームドメイン内で作業するとき、join演算子は有用である。しかし、スレッド内で結合を行うことがより便利となる状況も存在し得る。例えば、スレッド
stream ping pingStrm[32];
内で、個別ストリームを結合することを考えてみる。それは、スレッド内でforループを埋め込むことにより達成され得る。
for (int i = 0; i < 32; ++i)

pingStrm [i] >> ping;

このループは、1つのpingがpingStrm内の32個のストリームのそれぞれから消費されるまで、ブロックされる。pingStrm[].join()の出力ストリームに対応する出力ストリームは、文
joinStrm << ping;
を有するforループに従うことにより、作られる。
pingStrm[].join()の挙動を模倣するモジュールを作るために、これらの2つの部分的コードがwhile(true)ループに埋め込まれ、そのループは、モジュール
stream ping joinArray(ping pingStrm[32])

while(true)

for (int i = 0; i < 32; ++i)
{
pingStrm [i] >> ping;
}
out << ping;


に代入される。
埋め込まれたスレッドを有するモジュールは、pingStrm.join(expr)(式中、exprは式である)の挙動を模倣するために用いられ得る。しかし、この場合、モジュールは、pingStrmに対する入力ストリームばかりではなく、exprの各入力ストリームに対する入力ストリームも必要とする。したがって、例えば、exprが式X*Y+Z(式中、X、Y、およびZは整数である)である場合、pingStrm.join(expr)を実装するモジュールは、
stream ping joinExpr(ping pingStrm, int X, int Y, int Z)

while(true)

pingStrm >> ping;
out << X*Y+Z;


のようになるであろう。
画素処理例は、同一のタスクが配列等の同一のデータ構造の異なる部分上で並列的に(並行して)実行される、並列性の1つの形態であるデータ並列性の実装におけるping、ストリーム配列、およびモジュール配列の使用を示す。この例は、モジュール配列およびモジュールからなる。
extern int xScaleFactor, yScaleFactor;
stream ping doPixel[64][256] (int* baStrm) //本体は
{ //スレッドドメインにある
const int x = xScaleFactor*index(0);
const int y = yScaleFactor*index(1);
int* baseAddress;
while true

baStrm >> baseAddress;
・ //演算をbaStrm[x][y]および
. //その近傍に関して行う

out << ping;



stream void parentModule(int* baStrm) //本体は
{ //ストリームドメイン内にある
stream ping xStrm[64][256];
stream ping jStrm;
jStrm.initialize(ping);
xStrm[][] = doPixel[][](jStrm.join(baStrm));
jStrm = xStrm[][].join();
2次元モジュール配列doPixel[64][256]は、画素の2次元配列のサイズと一致するように作られている。doPixel[64][256]が動作する画素配列のベースアドレスは、入力ストリームbaStrmにより供給される。個別doPixelモジュール上の画素のx座標は、個別doPixelモジュールのxインデックスであるindex(0)(セクション5.3参照)にグローバル定数xScaleFactorを乗算することにより得られる。個別doPixelモジュール上の画素のy座標は、個別doPixelモジュールのyインデックスであるindex(1)にグローバル定数yScaleFactorを乗算することにより得られる。各画素の処理は、変数baStrmをbaStrmの現在値に設定することにより始まる。次いで、baStrm[x][y]およびその近傍について演算が行われる。処理が終わると、個別doPixelモジュールはpingを発行することにより完了を知らせる。
parentModuleは、画素配列のベースアドレスを、doPixel[64][256]内の個別モジュールにブロードキャストする機能を担当する。このことは、以下の文
xStrm[][]=doPixel[][](jStrm.join(baStrm));
によりなされる。ここで、doPixelの入力引数リスト内の式jStrm.join(baStrm)は、jStrmにpingが存在する場合にのみbaStrm内の値が通過することを許可する守衛として機能する。以下の文
jStrm.initialize(ping);
によりjStrmに挿入される初期pingは、まさに第1のベースアドレスが妨げられずに通過することを許可する。その後、pingは、以下の文
jStrm = xStrm[][].join();
(ここで、xStrm[64][256]は、doPixel[64][256]内の個々のモジュールにより作られたpingストリームの配列である)により、jStrmに挿入される。したがって、新しいpingは、doPixel[64][256]内のすべのモジュールが、pingを発行することにより、以前の演算の完了を知らせる場合にのみ、jStrmに挿入される。これにより、画素配列に関するすべての演算は、次の配列に関する演算が開始される前に、確実に完了することとなる。
標準的Cデータ型よりもむしろpingを用いることに、大きい利点が存在する。Cデータ型を用いると、先入れ先出し(FIFO)が、Cデータ型ストリームのすべてのデスティネーション、すなわち、ストリームが式への入力となるすべての位置において、データ値に必要とされる。しかしpingは互いに対して区別がつかないため、pingストリームの各デスティネーションにおいて必要とされるものは、キューに入れられたpingの個数を知らせるカウンタのみである。これにより、データ値に対する先入れ先出しキューと比較して、コストが顕著に削減されることとなる。
pragmaコマンドはストリームCコンパイラ/リンカ/ローダに対する指示である。指示#pragma InitializeCount(m, p, n)は、モジュールmからnの入力/出力ポートpの消費側/作成側カウントを初期化する。pragmaコマンドは、モジュール定義#pragma FwrdsAckValue(m, s, n)の直後に続かなければならない。この定義は、nを、モジュールmの出力ストリームsから開始されるポイント・トゥ・ポイント接続に対するフォワードアクノレッジメント値として指定する。pragmaコマンドは、モジュールmの出力ストリームsから開始されるポイント・トゥ・ポイント接続に対するバックワードアクノレッジメント値としてnを指定するモジュール定義
#pragma BwrdsAckValue(m, s, n)
の直後に続かなければならない。pragmaコマンドは、モジュール定義の直後に続かなければならない。
上述の概念のいくつかの利点例は、スレッドおよびマルチスレッド、すなわち、複数スレッドの並列実行のサポートである。また、SIMD、MIDM、命令レベル、タスクレベル、データ並列性、データフロー、およびSystolic等の並列性のすべての形態が表現可能である。決定的挙動がデフォルトである。非決定性は、プログラムに必要な場合にのみ明示的に追加される。なぜなら、ソフトウェアテストの容易性および信頼性をより効果的なものとするものは、逐次プログラミングの中にあるためである。上述した概念は、明示的な並列的構文を有さない。並列性は、普通の逐次コードに、少なくともシンタックスの面で、類似するストリームドメインにおけるコードから抜け落ちてしまう。したがって、スレッドドメインで作業するプログラマは厳格にシーケンシャル問題に集中してよい。プログラミングモデルは、モデルに基づく設計およびモデルに基づくテストに役立ち、プロセシングコアの任意の個数に応じて拡大縮小する。プログラミングモデルは、プロセシングコアを隔てる距離がナノメートル単位の場合にも千キロメートル単位の場合にも、等しく適用可能である。フォアグラウンドまたはバックグラウンドのタスクは存在せず、ただタスクのみが存在し、割込またはメッセージ引き渡しも存在せず、ただストリームのみが存在する。
本発明は、本発明に係る特定の実施形態に関して説明してきたが、これらの実施形態は単に例示に過ぎず、本発明を限定するものではない。例えば、任意の種類の処理ユニット、機能的回路または、1つまたは複数のユニットの集合、および/またはメモリ、I/O素子、その他等のリソースがノードに含まれ得る。ノードは、簡単なレジスタでもよく、または、デジタル信号処理システム等のように、より複雑なものであってもよい。本明細
書に説明したものではなく、他の種類のネットワークまたは相互接続方式も用いられ得る。本発明の特徴または態様は、好適な実施形態に関して本明細書で説明された適合システム以外のシステムにおいても達成され得る。
なお、本願発明に実施形態には、以下の発明(出願時の請求項1+6に対応)が含まれるが、これに限定されない:
<発明1>
ストリームベースのコンピュータソースコード変換して、マルチコアコンピュータシステムのランタイム動作の実行を、効率的に動作させるようにするシステムであって、
ストリームベースのコンピュータソースコードを記憶するメモリデバイスであって、
当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体を有するものと、
複数のプロセッシングコアと、
前記複数のコアのうちの少なくとも1つを含む変換システム(conversion system)であって、当該変換システムが、前記ストリームベースのコンピュータソースコードからの、1つ又は複数のプロセッシングコア上での実行のためのタスクの収集(collection)を生成し、各タスクが、前記ソースコード内のスレッドドメイン本体を伴ったモジュール定義か、前記ソースコード内のストリーム式(expression)を伴ったモジュール定義か、のいずれかの、実行可能なバージョンであり、当該タスクが、更に、前記ソースコードモジュール定義、又は、ストリーム式の入力ストリームと出力ストリームに対応する、入力ストリーム及び出力ストリームを有する、
ものと、
を備えるシステム。
<発明6>
発明1に記載のシステムであって、
前記変換システムが、各プロセッシングコアに、ゼロ又はそれより多い、実行されるべきタスクを割り当て(assigns)、
各プロセッシングコアが、それぞれのプロセッシングコアに割り当てられたタスクの各々の実行を管理するタスクマネジャを含む、
システム。

Claims (20)

  1. ストリームベースのコンピュータソースコードを変換して、マルチコアコンピュータシステムのランタイム動作の実行を、効率的に動作させるようにするシステムであって、
    ストリームベースのコンピュータソースコードを記憶するメモリデバイスであって、
    当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体を有するものと、
    複数のプロセッシングコアと、
    前記複数のコアのうちの少なくとも1つを含む変換システム(conversion system)であって、当該変換システムが、前記ストリームベースのコンピュータソースコードからの、1つ又は複数のプロセッシングコア上での実行のための、ゼロ又はそれより多いタスクを生成し、各タスクが、前記ソースコード内のスレッドドメイン本体を伴ったモジュール定義か、前記ソースコード内のストリーム(expression)を伴ったモジュール定義か、のいずれかの、実行可能なバージョンであり、当該タスクが、更に、入力ストリーム及び出力ストリームを有し、当該入力ストリーム及び出力ストリームのそれぞれが、モジュール定義の入力ストリーム及び出力ストリーム、又は、ストリームの入力ストリームと出力ストリームに対応する、
    ものと、
    を備えるシステム。
  2. 請求項1に記載のシステムであって、前記ソースコードが、入力及び出力としての変数を有する関数(function)定義を含み、当該関数定義とモジュール定義が、互いに区別可能である、システム。
  3. 請求項1に記載のシステムであって、 各タスクが、
    データ値が利用可能となった際に、タスクが、当該タスク入力ストリームからデータ値を得るための命令に遭遇するときに、当該タスク入力ストリームの先入れ先出しキューからデータ値を消費させ、
    タスクが、データ値を、出力ストリームに配置するための命令に遭遇する際に、データ値を、当該タスク出力ストリームに配置させ
    システム。
  4. 請求項1に記載のシステムであって、ストリームに対応する各タスクが、
    データ値が利用可能となったときに、当該タスク入力ストリームの先入れ先出しキューから、データ値を消費させ、
    前記ストリームが評価さる度に、データ値を、当該タスク出力ストリームに配置させ
    システム。
  5. 請求項1に記載のシステムであって、ストリームベースのコンピュータソースコードが、モジュール定義及びストリームの相互接続を指定し、モジュール定義が、コンピュータソースコード又は付属の(included)ライブラリで定義されたモジュールのインスタンスであり、変数がストリーム式内のストリームによって置換される点を除いて、ストリーム式が、C式、変数を含むコンピュータプログラムと同一であり、相互接続が、
    モジュールインスタンス又はストリームの入力ストリームへのモジュール定義の入力ストリーム、
    モジュールインスタンス又はストリームの入力ストリームへの、モジュールインスタンス又はストリームの出力ストリーム、又は、
    モジュール定義の出力ストリームへの、モジュールインスタンス又はストリームの出力ストリーム、
    のうちの1つ又は複数を接続するストリームからなる、
    システム。
  6. 請求項1に記載のシステムであって、
    各プロセッシングコアが、それぞれのプロセッシングコアに割り当てられたタスクの各々の実行を管理するタスクマネジャを含む、
    システム。
  7. 請求項6に記載のシステムであって、タスクマネジャが、複数のプロセッシングコア上でのタスクの実行を管理する、システム。
  8. 請求項6に記載のシステムであって、
    タスクマネジャが、
    当該タスクの入力ストリームに対しての消費側(consumer)カウント、
    当該タスクの出力ストリームに対しての製造側カウント、
    実行の準備が整った(ready to executed)タスクの実行される準備が整った(ready-to-run)キュー、
    タスクの実行の準備を整えるためにエネーブルとされるために必要とされる当該タスク入力ストリームの数を決定する各タスクに対する入力カウント、及び、
    タスクの実行の準備を整えるためにエネーブルとされるために必要とされる当該タスク出力ストリームの数を決定する各タスクのための出力カウント、
    を維持する、システム。
  9. 請求項1に記載のシステムであって、ストリームベースのコンピュータソースコードが、第1クラスの地位(first-class status)に高められたストリームを含み、
    当該第1クラスの地位が、ストリームが、識別子、関数の入力パラメータ、関数の出力、内の又は外のパラメータ、となるように拘束されることを可能とする、システム。
  10. 請求項1に記載のシステムであって、ストリームベースのコンピュータソースコードが、関連するデータ値を有さないピングを、ピングストリームソースから、ピングストリームデスティネーションに運搬する(conveys)ピングストリームを含む、システム。
  11. 請求項1に記載のシステムであって、ストリームベースのコンピュータソースコードが、前記ストリームの前記出力ストリームを、第2の、以前に宣言されたストリームのソースになるようにさせる代入文を含む、システム。
  12. 請求項1に記載のシステムであって、前記メモリデバイスと、複数のプロセッシングコアとの間でデータ値を運搬する相互接続ネットワークを更に備え、当該相互接続ネットワーク及び前記複数のプロセッシングコアが、ランタイムシステムを構成する、システム。
  13. ストリームベースのコンピュータソースコードを変換して、複数のプロセッシングコアを含むマルチコアコンピュータシステムのランタイム動作の実行を効率的に動作させるための、前記マルチコアコンピュータシステムによって実行される方法であって、
    ストリームベースのコンピュータソースコードを、メモリデバイスに記憶させるステップであって、当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体を有するものと、
    ストリームベースのコンピュータソースコードからの、1つ又は複数のプロセッシングコア上での実行のための、ゼロ又はそれより多いタスクを生成するステップであって、各タスクが、ソースコード内のスレッドドメイン本体を伴うモジュール定義か、ソースコード内のストリームを伴うモジュール定義か、のいずれかの実行可能なバージョンであり、タスクが、更に、入力ストリーム及び出力ストリームを有し、当該入力ストリーム及び出力ストリームのそれぞれが、モジュール定義の入力ストリーム及び出力ストリーム、又は、ストリームの入力ストリーム及び出力ストリームに対応する、
    ランタイム動作を実行するための、複数のプロセッシングコア上での、ゼロ又はそれより多いタスクの生成を実行するステップと、
    を含む方法。
  14. 請求項13に記載の方法であって、相互接続ネットワークを介して、複数のプロセッシングコアとメモリデバイスの間で、データ値を運搬する(conveying)ステップ、を更に含む方法
  15. 請求項13に記載の方法であって、ストリームベースのコンピュータソースコードが、入力及び出力としての変数を有する関数(function)定義を含み、当該関数定義及びモジュール定義が、互いに区別され得る方法。
  16. 請求項13に記載の方法であって、各タスクが、
    データ値が利用可能となった際に、タスクが、当該タスク入力ストリームからデータ値を得るための命令に遭遇するときに、当該タスク入力ストリームの先入れ先出しキューからデータ値を消費させ、
    タスクが、データ値を、出力ストリームに配置するための命令に遭遇する際に、データ値を、当該タスク出力ストリームに配置させ
    方法。
  17. 請求項13に記載の方法であって、ストリームに対応する各タスクが、
    データ値が利用可能となったときに、当該タスク入力ストリームの先入れ先出しキューから、データ値を消費させ、
    前記ストリームが評価さる度に、データ値を、当該タスク出力ストリームに配置させ
    方法。
  18. 請求項13に記載の方法であって、ストリームベースのコンピュータソースコードが、モジュール定義及びストリームの相互接続を指定し、モジュール定義が、コンピュータソースコード又は付属の(included)ライブラリで定義されたモジュールのインスタンスであり、変数がストリーム式内のストリームによって置換される点を除いて、ストリーム式が、C式の、変数を含むコンピュータプログラムと同一であり、相互接続が、
    モジュールインスタンス又はストリームの入力ストリームへのモジュール定義の入力ストリーム、
    モジュールインスタンス又はストリームの入力ストリームへの、モジュールインスタンス又はストリームの出力ストリーム、又は、
    モジュール定義の出力ストリームへの、モジュールインスタンス又はストリームの出力ストリーム、
    のうちの1つ又は複数を接続するストリームからなる、
    方法。
  19. 請求項13に記載の方法であって、ストリームベースのコンピュータソースコードが、第1クラスの地位(first-class status)に高められたストリームを含み、
    前記第1クラスの地位が、ストリームが、識別子、関数の入力パラメータ、関数の出力、内の又は外のパラメータ、となるように拘束されることを可能とする、方法。
  20. プログラム可能なコンピューティングデバイスであって、
    複数のプロセッシングコアと、
    ストリームベースのコンピュータソースコードを記憶するメモリデバイスであって、当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体(body)を有するものと、
    前記メモリデバイスに結合された変換器(converter)であって、当該変換器が、1つ又は複数のプロセッシングコア上での実行のために、ストリームベースのコンピュータソースコードから、ゼロ又はそれより多いタスクを生成し、各タスクが、ソースコード内でのスレッドドメイン本体を伴うモジュール定義か、ソースコード内でのストリームを伴うモジュール定義か、のいずれかの、実行可能なバージョンであり、タスクが、更に、入力ストリーム及び出力ストリームを有し、当該入力ストリーム及び出力ストリームのそれぞれが、モジュール定義の入力ストリーム及び出力ストリーム、又は、ストリームの入力ストリーム及び出力ストリームに対応し、
    前記変換器が、前記ゼロ又はそれより多いタスクの各々に対して前記複数のプロセッシングコアの1つを選択し、複数のコアが、ランタイム動作の実行と並行して、ゼロ又はそれより多いタスクの生成を実行する、コンピューティングデバイス。
JP2016159234A 2010-01-21 2016-08-15 ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置 Active JP6495208B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US29713910P 2010-01-21 2010-01-21
US61/297,139 2010-01-21

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012550178A Division JP5990466B2 (ja) 2010-01-21 2011-01-21 ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置

Publications (2)

Publication Number Publication Date
JP2017004550A JP2017004550A (ja) 2017-01-05
JP6495208B2 true JP6495208B2 (ja) 2019-04-03

Family

ID=44278406

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2012550178A Expired - Fee Related JP5990466B2 (ja) 2010-01-21 2011-01-21 ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置
JP2016159234A Active JP6495208B2 (ja) 2010-01-21 2016-08-15 ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2012550178A Expired - Fee Related JP5990466B2 (ja) 2010-01-21 2011-01-21 ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置

Country Status (5)

Country Link
US (3) US8843928B2 (ja)
EP (1) EP2526494B1 (ja)
JP (2) JP5990466B2 (ja)
KR (1) KR101814221B1 (ja)
WO (1) WO2011091323A1 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274921B2 (en) * 2006-12-27 2016-03-01 International Business Machines Corporation System and method for managing code displacement
EP3525087A1 (en) 2010-08-06 2019-08-14 Frederick Furtek A method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system
US20140325183A1 (en) * 2011-11-28 2014-10-30 Freescale Semiconductor, Inc. Integrated circuit device, asymmetric multi-core processing module, electronic device and method of managing execution of computer program code therefor
JP5842206B2 (ja) 2012-01-27 2016-01-13 株式会社トプスシステムズ プロセッサ・コア、およびマルチコア・プロセッサ・システム
JP5867120B2 (ja) * 2012-02-01 2016-02-24 日本電気株式会社 情報処理装置、情報処理方法、及びプログラム
CN103092807B (zh) * 2012-12-24 2015-09-09 杭州华为数字技术有限公司 节点控制器、并行计算服务器系统以及路由方法
US20140281375A1 (en) * 2013-03-15 2014-09-18 International Business Machines Corporation Run-time instrumentation handling in a superscalar processor
GB2519080B (en) * 2013-10-08 2021-04-14 Arm Ip Ltd Scheduling function calls
US10241838B2 (en) * 2013-12-09 2019-03-26 International Business Machines Corporation Domain based resource isolation in multi-core systems
US10437694B2 (en) * 2014-02-21 2019-10-08 Rolf Segger Real time terminal for debugging embedded computing systems
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US9529980B2 (en) 2014-06-28 2016-12-27 Vmware, Inc. Deduplication of end user license agreements
US9389847B2 (en) 2014-06-28 2016-07-12 Vmware, Inc. Selection of relevant software bundles
US9389848B2 (en) * 2014-06-28 2016-07-12 Vmware, Inc. Scheduling a plan of operations in a datacenter
US9442714B2 (en) 2014-06-28 2016-09-13 Vmware, Inc. Unified visualization of a plan of operations in a datacenter
US9223767B1 (en) 2014-06-28 2015-12-29 Vmware, Inc. Unified graphical user interface for displaying a plan of operations in a datacenter
CN105656973B (zh) * 2014-11-25 2018-11-13 中国科学院声学研究所 一种分布式节点组内任务调度方法及系统
US9846574B2 (en) * 2014-12-19 2017-12-19 Signalfx, Inc. Representing result data streams based on execution of data stream language programs
US11449452B2 (en) 2015-05-21 2022-09-20 Goldman Sachs & Co. LLC General-purpose parallel computing architecture
ES2929626T3 (es) * 2015-05-21 2022-11-30 Goldman Sachs & Co Llc Arquitectura de computación paralela de propósito general
CN107561950B (zh) * 2016-06-30 2020-11-27 西门子瑞士有限公司 楼宇中控制器的编程方法及提供控制器编程工具的服务器
US10459509B2 (en) * 2017-04-10 2019-10-29 Intel Corporation Dual path sequential element to reduce toggles in data path
JP2019164713A (ja) 2018-03-20 2019-09-26 東芝メモリ株式会社 ストレージシステム及びデータ転送方法
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US11693662B2 (en) * 2018-05-04 2023-07-04 Cornami Inc. Method and apparatus for configuring a reduced instruction set computer processor architecture to execute a fully homomorphic encryption algorithm
WO2021026196A1 (en) * 2019-08-07 2021-02-11 Cornami Inc. Configuring a reduced instruction set computer processor architecture to execute a fully homomorphic encryption algorithm
AU2020342665A1 (en) * 2019-09-06 2022-03-24 Hexacore, Inc. Systems, apparatus, and methods of conveyor belt processing
US11494331B2 (en) * 2019-09-10 2022-11-08 Cornami, Inc. Reconfigurable processor circuit architecture

Family Cites Families (510)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3409175A (en) 1966-11-10 1968-11-05 Thomas M. Byrne Liquid dispensing device
US3666143A (en) 1970-06-22 1972-05-30 Murray Weston Automatic fluid dispensing apparatus with manual override
USRE30301E (en) 1972-03-10 1980-06-10 The Cornelius Company Beverage mixing and dispensing apparatus
US3960298A (en) 1972-10-25 1976-06-01 The Cornelius Company Container assembly for use with a separator dispenser
US6556044B2 (en) 2001-09-18 2003-04-29 Altera Corporation Programmable logic device including multipliers and configurations thereof to reduce resource utilization
US3995441A (en) 1973-08-20 1976-12-07 The Cornelius Company Beverage dispensing system
US3991911A (en) 1973-09-07 1976-11-16 American Beverage Control Automatic drink dispensing apparatus having programming means
US3949903A (en) 1973-11-07 1976-04-13 General Motors Corporation Water and beverage concentrate dispenser
US3938639A (en) 1973-11-28 1976-02-17 The Cornelius Company Portable dispenser for mixed beverages
US3967062A (en) 1975-03-05 1976-06-29 Ncr Corporation Method and apparatus for encoding data and clock information in a self-clocking data stream
US4076145A (en) 1976-08-09 1978-02-28 The Cornelius Company Method and apparatus for dispensing a beverage
US4377246A (en) 1977-06-13 1983-03-22 The Cornelius Company Apparatus for dispensing a carbonated beverage
US4143793A (en) 1977-06-13 1979-03-13 The Cornelius Company Apparatus and method for dispensing a carbonated beverage
US4252253A (en) 1978-02-21 1981-02-24 Mcneil Corporation Drink dispenser having central control of plural dispensing stations
US4174872A (en) 1978-04-10 1979-11-20 The Cornelius Company Beverage dispensing machine and cabinet therefor
US4181242A (en) 1978-05-30 1980-01-01 The Cornelius Company Method and apparatus for dispensing a beverage
US4172669A (en) 1978-07-27 1979-10-30 The Cornelius Company Mixing and dispensing machine
US4237536A (en) 1978-10-12 1980-12-02 M.R.E. Enterprises, Inc. System for indicating and controlling dispensing of beverages
US4302775A (en) 1978-12-15 1981-11-24 Compression Labs, Inc. Digital video compression system and methods utilizing scene adaptive coding with rate buffer feedback
US4413752A (en) 1979-01-04 1983-11-08 The Cornelius Company Apparatus for dispensing a carbonated beverage
US4222972A (en) 1979-01-29 1980-09-16 Caldwell Michael C Method and means for carbonating liquids in situ
US4218014A (en) 1979-02-21 1980-08-19 The Cornelius Company Multiple flavor post-mix beverage dispensing head
US4523697A (en) 1979-07-11 1985-06-18 Cadbury Schweppes Limited Liquid dispensing package
USRE32179E (en) 1979-10-12 1986-06-10 The Coca-Cola Company Post-mix beverage dispensing system syrup package, valving system, and carbonator therefor
US4333587A (en) 1980-01-31 1982-06-08 The Coca-Cola Company Beverage dispenser
US4354613A (en) 1980-05-15 1982-10-19 Trafalgar Industries, Inc. Microprocessor based vending apparatus
US4393468A (en) 1981-03-26 1983-07-12 Advanced Micro Devices, Inc. Bit slice microprogrammable processor for signal processing applications
US4560089A (en) 1981-05-11 1985-12-24 The Cornelius Company Apparatus for dispensing a carbonated beverage
JPS5916053A (ja) 1982-07-16 1984-01-27 Nec Corp パイプライン演算装置
US5129549A (en) 1982-09-07 1992-07-14 Imi Cornelius Inc. Beverage dispensing valve
US4936488A (en) 1982-09-07 1990-06-26 The Cornelius Company Beverage dispensing valve
US4549675A (en) 1982-09-07 1985-10-29 The Cornelius Co. Beverage dispensing valve
US4509690A (en) 1982-12-06 1985-04-09 The Cornelius Company Carbonated beverage mixing nozzle for a dispenser
US4466342A (en) 1983-02-22 1984-08-21 General Foods Corporation Carbonation chamber with sparger for beverage carbonation
US4475448A (en) 1983-02-22 1984-10-09 General Foods Corporation Reactant/gas separation means for beverage carbonation device
US4458584A (en) 1983-02-22 1984-07-10 General Foods Corporation Beverage carbonation device
GB2137839B (en) 1983-04-09 1986-06-04 Schlumberger Measurement Digital signal processors
US4577782A (en) 1983-05-02 1986-03-25 The Cornelius Company Beverage dispensing station
US4578799A (en) 1983-10-05 1986-03-25 Codenoll Technology Corporation Method and apparatus for recovering data and clock information from a self-clocking data stream
US4553573A (en) 1983-10-20 1985-11-19 Pepsico Inc. Bulk syrup delivery system
US4824075A (en) 1984-02-14 1989-04-25 Walter Holzboog Tilt action dispensing valve assembly
US4658988A (en) 1984-04-02 1987-04-21 The Cornelius Company Multiple flavor post-mix beverage dispensing apparatus
DK279985A (da) 1984-06-25 1985-12-26 Isoworth Ltd Fremgangsmaade og apparat til carbonisering
US4694416A (en) 1985-02-25 1987-09-15 General Electric Company VLSI programmable digital signal processor
US4967340A (en) 1985-06-12 1990-10-30 E-Systems, Inc. Adaptive processing system having an array of individually configurable processing components
US4713755A (en) 1985-06-28 1987-12-15 Hewlett-Packard Company Cache memory consistency control with explicit software instructions
US4765513A (en) 1985-08-26 1988-08-23 The Cornelius Company Post-mix beverage dispenser with nozzle
US4993604A (en) 1985-09-13 1991-02-19 The Coca-Cola Company Low-cost post-mix beverage dispenser and syrup supply system therefor
US4711374A (en) 1985-09-13 1987-12-08 The Coca-Cola Company Low-cost post-mix beverage dispenser and syrup supply system therefor
US4747516A (en) 1985-12-23 1988-05-31 Liquid Motion Industries, Co. Soft drink maker
US4748585A (en) 1985-12-26 1988-05-31 Chiarulli Donald M Processor utilizing reconfigurable process segments to accomodate data word length
US4974643A (en) 1986-01-31 1990-12-04 The Cornelius Company Method of and apparatus for dispensing beverage into a tilted receptacle with automatic level responsive shut off
US4982876A (en) 1986-02-10 1991-01-08 Isoworth Limited Carbonation apparatus
GB2186265B (en) 1986-02-10 1989-11-01 Isoworth Ltd Beverage dispensing apparatus
US4960261A (en) 1986-03-17 1990-10-02 Isoworth Limited Gas cylinder connector
US5021947A (en) 1986-03-31 1991-06-04 Hughes Aircraft Company Data-flow multiprocessor architecture with three dimensional multistage interconnection network for efficient signal and data processing
US4760525A (en) 1986-06-10 1988-07-26 The United States Of America As Represented By The Secretary Of The Air Force Complex arithmetic vector processor for performing control function, scalar operation, and set-up of vector signal processing instruction
US4760544A (en) 1986-06-20 1988-07-26 Plessey Overseas Limited Arithmetic logic and shift device
US4811214A (en) 1986-11-14 1989-03-07 Princeton University Multinode reconfigurable pipeline computer
US4766548A (en) 1987-01-02 1988-08-23 Pepsico Inc. Telelink monitoring and reporting system
US4781309A (en) 1987-02-19 1988-11-01 The Cornelius Company Dispenser with improved carbonated water manifold
US4856684A (en) 1987-04-06 1989-08-15 William Gerstung Valve for a pressurized dispensing can containing flowable materials
US5381546A (en) 1987-04-13 1995-01-10 Gte Laboratories Incorporated Control process for allocating services in communications systems
US5818603A (en) 1996-03-29 1998-10-06 Ricoh Company, Ltd. Method and system for controlling and communicating with machines using multiple communication formats
US4800492A (en) 1987-05-13 1989-01-24 The Coca-Cola Company Data logger for a post-mix beverage dispensing system
US4827426A (en) 1987-05-18 1989-05-02 The Coca-Cola Company Data acquisition and processing system for post-mix beverage dispensers
US4850269A (en) 1987-06-26 1989-07-25 Aquatec, Inc. Low pressure, high efficiency carbonator and method
GB2210441B (en) 1987-10-01 1992-03-04 Isoworth Ltd Pressure vessel
US4921315A (en) 1987-12-21 1990-05-01 Whirlpool Corporation Refrigerator door structure
US5428754A (en) 1988-03-23 1995-06-27 3Dlabs Ltd Computer system with clock shared between processors executing separate instruction streams
US5572572A (en) 1988-05-05 1996-11-05 Transaction Technology, Inc. Computer and telephone apparatus with user friendly interface and enhanced integrity features
US4932564A (en) 1988-05-20 1990-06-12 The Cornelius Company Multiple flavor post-mix beverage dispensing head
JPH03500461A (ja) 1988-07-22 1991-01-31 アメリカ合衆国 データ駆動式計算用のデータ流れ装置
US4901887A (en) 1988-08-08 1990-02-20 Burton John W Beverage dispensing system
DE3829831A1 (de) 1988-09-02 1990-03-15 Hansa Metallwerke Ag Einrichtung zum zapfen einer vorwaehlbaren fluessigkeitsmenge, insbesondere wassermenge
US4930666A (en) 1988-10-28 1990-06-05 The Coca-Cola Company Juice dispensing system for a refrigerator door
US5240144A (en) 1989-01-06 1993-08-31 Joseph Feldman Beverage dispensing apparatus
US5090015A (en) 1989-02-06 1992-02-18 Motorola, Inc. Programmable array logic self-checking system
DE69031233T2 (de) 1989-02-24 1997-12-04 At & T Corp Adaptive Arbeitsfolgeplanung für Mehrfachverarbeitungssysteme
US5007560A (en) 1989-03-01 1991-04-16 Sassak John J Beer dispensing and monitoring method and apparatus
US5261099A (en) 1989-08-24 1993-11-09 International Business Machines Corp. Synchronous communications scheduler allowing transient computing overloads using a request buffer
US5193151A (en) 1989-08-30 1993-03-09 Digital Equipment Corporation Delay-based congestion avoidance in computer networks
US5163131A (en) 1989-09-08 1992-11-10 Auspex Systems, Inc. Parallel i/o network file server architecture
JPH03102431A (ja) * 1989-09-16 1991-04-26 Fujitsu Ltd プロセス実行方式
GB2236736A (en) 1989-09-27 1991-04-17 Isoworth Ltd Carbonation apparatus for dispensing drinks, with plural carbonation chambers
US4961533A (en) 1989-09-27 1990-10-09 Viac Inc. Inventory control system
US5044171A (en) 1989-11-06 1991-09-03 Eli Farkas Counter with integral carbonated beverage dispenser
US5450557A (en) 1989-11-07 1995-09-12 Loral Aerospace Corp. Single-chip self-configurable parallel processor
US5428793A (en) 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
WO1991012991A1 (en) 1990-02-27 1991-09-05 The Coca-Cola Company Multiple fluid space dispenser and monitor
JP3210319B2 (ja) 1990-03-01 2001-09-17 株式会社東芝 ニューロチップおよびそのチップを用いたニューロコンピュータ
US5203474A (en) 1990-06-16 1993-04-20 Alco Standard Corporation Beverage dispensing nozzle
US5303846A (en) 1990-09-17 1994-04-19 Abcc/Techcorp. Method and apparatus for generating and dispensing flavoring syrup in a post mix system
US5190189A (en) 1990-10-30 1993-03-02 Imi Cornelius Inc. Low height beverage dispensing apparatus
US5156301A (en) 1990-12-17 1992-10-20 Imi Cornelius Inc. Constant ratio post-mix beverage dispensing valve
US5202993A (en) 1991-02-27 1993-04-13 Sun Microsystems, Inc. Method and apparatus for cost-based heuristic instruction scheduling
KR0176263B1 (ko) 1991-03-11 1999-05-15 마이클 에이치. 모리스 비용기준 발견적 명령스케쥴링을 최적화하기 위한 방법 및 장치
US5325525A (en) 1991-04-04 1994-06-28 Hewlett-Packard Company Method of automatically controlling the allocation of resources of a parallel processor computer system by calculating a minimum execution time of a task and scheduling subtasks against resources to execute the task in the minimum time
US5301100A (en) 1991-04-29 1994-04-05 Wagner Ferdinand H Method of and apparatus for constructing a control system and control system created thereby
US5156871A (en) 1991-05-01 1992-10-20 Imi Cornelius Inc. Low cost beverage carbonating apparatus and method
US5193718A (en) 1991-06-25 1993-03-16 Imi Cornelius Inc. Quick electronic disconnect for a beverage dispensing valve
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
US5339428A (en) 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
US5625669A (en) 1991-09-27 1997-04-29 Telemac Cellular Corporation Mobile phone with internal call accounting controls
JP3124074B2 (ja) 1991-09-30 2001-01-15 富士通株式会社 情報自動販売機
US5278986A (en) 1991-12-13 1994-01-11 Thinking Machines Corporation System and method for compiling a source code supporting data parallel variables
US5522070A (en) 1992-03-19 1996-05-28 Fujitsu Limited Computer resource distributing method and system for distributing a multiplicity of processes to a plurality of computers connected in a network
US5269442A (en) 1992-05-22 1993-12-14 The Cornelius Company Nozzle for a beverage dispensing valve
US5768561A (en) 1992-06-30 1998-06-16 Discovision Associates Tokens-based adaptive video processing arrangement
US5802290A (en) 1992-07-29 1998-09-01 Virtual Computer Corporation Computer network of distributed virtual computers which are EAC reconfigurable in response to instruction to be executed
US5684980A (en) 1992-07-29 1997-11-04 Virtual Computer Corporation FPGA virtual computer for executing a sequence of program instructions by successively reconfiguring a group of FPGA in response to those instructions
US5368198A (en) 1992-08-26 1994-11-29 Imi Cornelius Inc. Beverage dispenser
US5437395A (en) 1992-09-15 1995-08-01 Imi Cornelius Inc. Modular beverage dispenser
GB9222840D0 (en) 1992-10-31 1992-12-16 Smiths Industries Plc Electronic assemblies
US5603043A (en) 1992-11-05 1997-02-11 Giga Operations Corporation System for compiling algorithmic language source code for implementation in programmable hardware
US5263509A (en) 1992-11-12 1993-11-23 General Electric Company Refrigerator with door mounted dispenser supply mechanism
US5392960A (en) 1992-11-13 1995-02-28 Wilshire Partners Postmix beverage dispenser and a method for making a beverage dispenser
US5367651A (en) 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US6192255B1 (en) 1992-12-15 2001-02-20 Texas Instruments Incorporated Communication system and methods for enhanced information transfer
US5335276A (en) 1992-12-16 1994-08-02 Texas Instruments Incorporated Communication system and methods for enhanced information transfer
US5689689A (en) 1992-12-17 1997-11-18 Tandem Computers Incorporated Clock circuits for synchronized processor systems having clock generator circuit with a voltage control oscillator producing a clock signal synchronous with a master clock signal
US5452457A (en) 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
US5297400A (en) 1993-02-17 1994-03-29 Maytag Corporation Liquid dispensing assembly for a refrigerator
US5280711A (en) 1993-02-25 1994-01-25 Imi Cornelius Inc. Low cost beverage dispensing apparatus
US5483658A (en) 1993-02-26 1996-01-09 Grube; Gary W. Detection of unauthorized use of software applications in processing devices
US5379343A (en) 1993-02-26 1995-01-03 Motorola, Inc. Detection of unauthorized use of software applications in communication units
US5712996A (en) 1993-03-15 1998-01-27 Siemens Aktiengesellschaft Process for dividing instructions of a computer program into instruction groups for parallel processing
JP3499252B2 (ja) 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5870427A (en) 1993-04-14 1999-02-09 Qualcomm Incorporated Method for multi-mode handoff using preliminary time alignment of a mobile station operating in analog mode
FI932605A (fi) 1993-06-07 1994-12-08 Nokia Telecommunications Oy Tukiasemavastaanotinlaitteisto
US5517667A (en) 1993-06-14 1996-05-14 Motorola, Inc. Neural network that does not require repetitive training
US5343716A (en) 1993-06-29 1994-09-06 Imi Cornelius Inc. Beverage dispenser with improved cold plate
JP3159345B2 (ja) 1993-07-02 2001-04-23 日本電気株式会社 パイプライン演算処理装置
JPH0728786A (ja) 1993-07-15 1995-01-31 Hitachi Ltd ベクトルプロセッサ
US5507009A (en) 1993-08-13 1996-04-09 Motorola, Inc. Method for reprogramming a communication unit's access to a wireless communication system
US5701482A (en) 1993-09-03 1997-12-23 Hughes Aircraft Company Modular array processor architecture having a plurality of interconnected load-balanced parallel processing nodes
US5732563A (en) 1993-09-22 1998-03-31 Imi Cornelius Inc. Electronically controlled beverage dispenser
CA2126265A1 (en) 1993-09-27 1995-03-28 Michael Robert Cantone System for synthesizing field programmable gate array implementations from high level circuit descriptions
JP3594309B2 (ja) 1993-09-28 2004-11-24 株式会社ナムコ パイプライン処理装置,クリッピング処理装置,3次元シミュレータ装置及びパイプライン処理方法
US5862961A (en) 1993-10-26 1999-01-26 Imi Cornelius Inc. Connection device for dispensing fluid from a bottle
US6111935A (en) 1993-10-27 2000-08-29 Canon Kabushiki Kaisha Adaptive expansion table in a digital telephone receiver
US5490165A (en) 1993-10-28 1996-02-06 Qualcomm Incorporated Demodulation element assignment in a system capable of receiving multiple signals
US5721854A (en) 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
EP1338957A3 (en) 1993-11-05 2003-10-29 Intergraph Corporation Software scheduled superscalar computer architecture
KR960010668B1 (ko) 1993-11-06 1996-08-07 엘지전자 주식회사 냉장고
US5530435A (en) 1993-12-09 1996-06-25 Steelcase Inc. Utility distribution system for modular furniture and the like
US5517668A (en) 1994-01-10 1996-05-14 Amdahl Corporation Distributed protocol framework
US5491823A (en) 1994-01-25 1996-02-13 Silicon Graphics, Inc. Loop scheduler
US5635940A (en) 1994-02-02 1997-06-03 Hickman; Paul L. Communication configurator and method for implementing same
US5619695A (en) 1994-02-03 1997-04-08 Lockheed Martin Corporation Method and apparatus for scheduling resources
US5519694A (en) 1994-02-04 1996-05-21 Massachusetts Institute Of Technology Construction of hierarchical networks through extension
BR7400414U (pt) 1994-03-04 1994-07-26 Spal Ind Brasileira De Bebidas Máquina dispensadora de refrigerantes
US5454406A (en) 1994-05-13 1995-10-03 Eaton Corporation Automatic beverage dispenser
US5694546A (en) 1994-05-31 1997-12-02 Reisman; Richard R. System for automatic unattended electronic information transport between a server and a client by a vendor provided transport software with a manifest list
US5745366A (en) 1994-07-14 1998-04-28 Omnicell Technologies, Inc. Pharmaceutical dispensing device and methods
US5655140A (en) 1994-07-22 1997-08-05 Network Peripherals Apparatus for translating frames of data transferred between heterogeneous local area networks
US5630206A (en) 1994-08-11 1997-05-13 Stanford Telecommunications, Inc. Position enhanced cellular telephone system
US5499758A (en) 1994-08-19 1996-03-19 Mccann's Engineering & Manufacturing Co. Liquid dispenser for use with containers
US6056194A (en) 1995-08-28 2000-05-02 Usa Technologies, Inc. System and method for networking and controlling vending machines
US5608643A (en) 1994-09-01 1997-03-04 General Programming Holdings, Inc. System for managing multiple dispensing units and method of operation
FR2724273B1 (fr) 1994-09-05 1997-01-03 Sgs Thomson Microelectronics Circuit de traitement de signal pour mettre en oeuvre un algorithme de viterbi
JP3525353B2 (ja) 1994-09-28 2004-05-10 株式会社リコー デジタル電子スチル・カメラ
JPH08106375A (ja) 1994-10-03 1996-04-23 Ricoh Co Ltd 信号処理演算器
US5600810A (en) 1994-12-09 1997-02-04 Mitsubishi Electric Information Technology Center America, Inc. Scaleable very long instruction word processor with parallelism matching
US5602833A (en) 1994-12-19 1997-02-11 Qualcomm Incorporated Method and apparatus for using Walsh shift keying in a spread spectrum communication system
US5636368A (en) 1994-12-23 1997-06-03 Xilinx, Inc. Method for programming complex PLD having more than one function block type
DE4446882B4 (de) 1994-12-27 2004-02-12 BSH Bosch und Siemens Hausgeräte GmbH Vorrichtung zum wiederholten, selbständigen Dosieren von genau dosierten Mengen eines pulverförmigen Reinigungsmittels in wasserführenden Reinigungsmaschinen insbesondere Haushalt-Geschirrspülmaschinen und Haushalt-Waschmaschinen
KR0146100B1 (ko) 1995-01-07 1998-09-15 이헌조 가전기기의 실사용상태 정보수집 및 분석장치
US5706191A (en) 1995-01-19 1998-01-06 Gas Research Institute Appliance interface apparatus and automated residence management system
US5742180A (en) 1995-02-10 1998-04-21 Massachusetts Institute Of Technology Dynamically programmable gate array with multiple contexts
US5892900A (en) 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
CN100452071C (zh) 1995-02-13 2009-01-14 英特特拉斯特技术公司 用于安全交易管理和电子权利保护的系统和方法
US5892961A (en) 1995-02-17 1999-04-06 Xilinx, Inc. Field programmable gate array having programming instructions in the configuration bitstream
US5696906A (en) 1995-03-09 1997-12-09 Continental Cablevision, Inc. Telecommunicaion user account management system and method
US5669001A (en) 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US6085740A (en) 1996-02-21 2000-07-11 Aerogen, Inc. Liquid dispensing apparatus and methods
US5737631A (en) 1995-04-05 1998-04-07 Xilinx Inc Reprogrammable instruction set accelerator
US5611867A (en) 1995-04-12 1997-03-18 Maytag Corporation Method of selecting a wash cycle for an appliance
US5835753A (en) 1995-04-12 1998-11-10 Advanced Micro Devices, Inc. Microprocessor with dynamically extendable pipeline stages and a classifying circuit
US6021186A (en) 1995-04-17 2000-02-01 Ricoh Company Ltd. Automatic capture and processing of facsimile transmissions
US5933642A (en) 1995-04-17 1999-08-03 Ricoh Corporation Compiling system and method for reconfigurable computing
US5794062A (en) 1995-04-17 1998-08-11 Ricoh Company Ltd. System and method for dynamically reconfigurable computing using a processing unit having changeable internal hardware organization
US5534796A (en) 1995-04-21 1996-07-09 Intergraph Corporation Self-clocking pipeline register
US5751295A (en) 1995-04-27 1998-05-12 Control Systems, Inc. Graphics accelerator chip and method
US5802278A (en) 1995-05-10 1998-09-01 3Com Corporation Bridge/router architecture for high performance scalable networking
US5704053A (en) 1995-05-18 1997-12-30 Hewlett-Packard Company Efficient explicit data prefetching analysis and code generation in a low-level optimizer for inserting prefetch instructions into loops of applications
US5646544A (en) 1995-06-05 1997-07-08 International Business Machines Corporation System and method for dynamically reconfiguring a programmable gate array
US5787237A (en) 1995-06-06 1998-07-28 Apple Computer, Inc. Uniform interface for conducting communications in a heterogeneous computing network
US5634190A (en) 1995-06-06 1997-05-27 Globalstar L.P. Low earth orbit communication satellite gateway-to-gateway relay system
US5613004A (en) 1995-06-07 1997-03-18 The Dice Company Steganographic method and device
US5553755A (en) 1995-06-09 1996-09-10 Summit Packaging Systems, Inc. Whipped cream dispenser
US5542265A (en) 1995-06-30 1996-08-06 Rutland; Michael D. External refrigerator-mounted liquid dispenser
FR2736787B1 (fr) 1995-07-11 1997-08-08 Alcatel Business Systems Systeme de communication et equipements correspondants pour installation d'abonne
US5768594A (en) 1995-07-14 1998-06-16 Lucent Technologies Inc. Methods and means for scheduling parallel processors
US5822308A (en) 1995-07-17 1998-10-13 National Semiconductor Corporation Multi-tasking sequencer for a TDMA burst mode controller
US6199093B1 (en) 1995-07-21 2001-03-06 Nec Corporation Processor allocating method/apparatus in multiprocessor system, and medium for storing processor allocating program
US5842004A (en) 1995-08-04 1998-11-24 Sun Microsystems, Inc. Method and apparatus for decompression of compressed geometric three-dimensional graphics data
US5784313A (en) 1995-08-18 1998-07-21 Xilinx, Inc. Programmable logic device including configuration data or user data memory slices
US5778439A (en) 1995-08-18 1998-07-07 Xilinx, Inc. Programmable logic device with hierarchical confiquration and state storage
US5646545A (en) 1995-08-18 1997-07-08 Xilinx, Inc. Time multiplexed programmable logic device
US5991308A (en) 1995-08-25 1999-11-23 Terayon Communication Systems, Inc. Lower overhead method for data transmission using ATM and SCDMA over hybrid fiber coax cable plant
US5623545A (en) 1995-08-31 1997-04-22 National Semiconductor Corporation Automatic data generation for self-test of cryptographic hash algorithms in personal security devices
DE19532422C1 (de) 1995-09-01 1997-01-23 Philips Patentverwaltung Lokales, nach dem asynchronen Transfermodus (ATM) arbeitendes Netzwerk mit wenigstens zwei Ringsystemen
US5822360A (en) 1995-09-06 1998-10-13 Solana Technology Development Corporation Method and apparatus for transporting auxiliary data in audio signals
US5845815A (en) 1995-09-08 1998-12-08 Imi Cornelius Inc. Flow control for beverage dispensing valve
US5742821A (en) 1995-11-08 1998-04-21 Lucent Technologies Inc. Multiprocessor scheduling and execution
EP0778240A1 (en) 1995-12-08 1997-06-11 IMI Cornelius Inc. Electro-mechanical refrigeration system
US6473609B1 (en) 1995-12-11 2002-10-29 Openwave Systems Inc. Method and architecture for interactive two-way communication devices to interact with a network
US5734582A (en) 1995-12-12 1998-03-31 International Business Machines Corporation Method and system for layout and schematic generation for heterogeneous arrays
KR100187284B1 (ko) 1995-12-19 1999-05-01 김광호 냉장고의 음료공급장치
US5706976A (en) 1995-12-21 1998-01-13 Purkey; Jay Floyd Vending machine inventory control device
US6510510B1 (en) 1996-01-25 2003-01-21 Analog Devices, Inc. Digital signal processor having distributed register file
US5889816A (en) 1996-02-02 1999-03-30 Lucent Technologies, Inc. Wireless adapter architecture for mobile computing
US5791517A (en) 1996-02-21 1998-08-11 Menachem M. Deren Beverage dispenser device
US6237029B1 (en) 1996-02-26 2001-05-22 Argosystems, Inc. Method and apparatus for adaptable digital protocol processing
US5894473A (en) 1996-02-29 1999-04-13 Ericsson Inc. Multiple access communications system and method using code and time division
FR2745649B1 (fr) 1996-03-01 1998-04-30 Bull Sa Systeme de configuration de logiciels preconfigures sur des systemes ouverts en reseau dans un environnement distribue et procede mis en oeuvre par un tel systeme
US6393046B1 (en) 1996-04-25 2002-05-21 Sirf Technology, Inc. Spread spectrum receiver with multi-bit correlator
US6055314A (en) 1996-03-22 2000-04-25 Microsoft Corporation System and method for secure purchase and delivery of video content programs
US6346824B1 (en) 1996-04-09 2002-02-12 Xilinx, Inc. Dedicated function fabric for use in field programmable gate arrays
US5956518A (en) 1996-04-11 1999-09-21 Massachusetts Institute Of Technology Intermediate-grain reconfigurable processing device
US5802055A (en) 1996-04-22 1998-09-01 Apple Computer, Inc. Method and apparatus for dynamic buffer allocation in a bus bridge for pipelined reads
US5903886A (en) 1996-04-30 1999-05-11 Smartlynx, Inc. Hierarchical adaptive state machine for emulating and augmenting software
US5626407A (en) 1996-05-10 1997-05-06 Emplast, Inc. Storage system for refrigerators
US6181981B1 (en) 1996-05-15 2001-01-30 Marconi Communications Limited Apparatus and method for improved vending machine inventory maintenance
US5771362A (en) 1996-05-17 1998-06-23 Advanced Micro Devices, Inc. Processor having a bus interconnect which is dynamically reconfigurable in response to an instruction field
US5822313A (en) 1996-05-24 1998-10-13 National Semiconductor Corporation Seamless handover in a cordless TDMA system
US5784699A (en) 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
US5784636A (en) 1996-05-28 1998-07-21 National Semiconductor Corporation Reconfigurable computer architecture for use in signal processing applications
US5907580A (en) 1996-06-10 1999-05-25 Morphics Technology, Inc Method and apparatus for communicating information
US6175854B1 (en) 1996-06-11 2001-01-16 Ameritech Services, Inc. Computer system architecture and method for multi-user, real-time applications
US5887174A (en) 1996-06-18 1999-03-23 International Business Machines Corporation System, method, and program product for instruction scheduling in the presence of hardware lookahead accomplished by the rescheduling of idle slots
US6192388B1 (en) 1996-06-20 2001-02-20 Avid Technology, Inc. Detecting available computers to participate in computationally complex distributed processing problem
US6360256B1 (en) 1996-07-01 2002-03-19 Sun Microsystems, Inc. Name service for a redundant array of internet servers
US6023742A (en) 1996-07-18 2000-02-08 University Of Washington Reconfigurable computing architecture for providing pipelined data paths
US5890014A (en) 1996-08-05 1999-03-30 Micronet Technology, Inc. System for transparently identifying and matching an input/output profile to optimal input/output device parameters
JP3123440B2 (ja) 1996-08-14 2001-01-09 日本電気株式会社 無線通信システムのチャネル選択方法
US5838165A (en) 1996-08-21 1998-11-17 Chatter; Mukesh High performance self modifying on-the-fly alterable logic FPGA, architecture and method
US5819255A (en) 1996-08-23 1998-10-06 Tandem Computers, Inc. System and method for database query optimization
US6041970A (en) 1996-08-30 2000-03-28 Imi Cornelius Inc. Pre-mix beverage dispensing system and components thereof
US6226387B1 (en) 1996-08-30 2001-05-01 Regents Of The University Of Minnesota Method and apparatus for scene-based video watermarking
US5828858A (en) 1996-09-16 1998-10-27 Virginia Tech Intellectual Properties, Inc. Worm-hole run-time reconfigurable processor field programmable gate array (FPGA)
US5889989A (en) 1996-09-16 1999-03-30 The Research Foundation Of State University Of New York Load sharing controller for optimizing monetary cost
US5790817A (en) 1996-09-25 1998-08-04 Advanced Micro Devices, Inc. Configurable digital wireless and wired communications system architecture for implementing baseband functionality
US5825202A (en) 1996-09-26 1998-10-20 Xilinx, Inc. Integrated circuit with field programmable and application specific logic areas
US6021492A (en) 1996-10-09 2000-02-01 Hewlett-Packard Company Software metering management of remote computing devices
US6016395A (en) 1996-10-18 2000-01-18 Samsung Electronics Co., Ltd. Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor
US6005943A (en) 1996-10-29 1999-12-21 Lucent Technologies Inc. Electronic identifiers for network terminal devices
US5950131A (en) 1996-10-29 1999-09-07 Motorola, Inc. Method and apparatus for fast pilot channel acquisition using a matched filter in a CDMA radiotelephone
US5913172A (en) 1996-11-15 1999-06-15 Glenayre Electronics, Inc. Method and apparatus for reducing phase cancellation in a simulcast paging system
US7607147B1 (en) 1996-12-11 2009-10-20 The Nielsen Company (Us), Llc Interactive service device metering systems
US6246883B1 (en) 1996-12-24 2001-06-12 Lucent Technologies, Inc. Mobile base station
US5987611A (en) 1996-12-31 1999-11-16 Zone Labs, Inc. System and methodology for managing internet access on a per application basis for client computers connected to the internet
TW361051B (en) 1997-01-09 1999-06-11 Matsushita Electric Ind Co Ltd Motion vector detection apparatus
US5953322A (en) 1997-01-31 1999-09-14 Qualcomm Incorporated Cellular internet telephone
US5940438A (en) 1997-02-18 1999-08-17 Mitsubishi Electric Information Technology Center America, Inc (Ita) Universal modem for digital video, audio and data communications
US6289488B1 (en) 1997-02-24 2001-09-11 Lucent Technologies Inc. Hardware-software co-synthesis of hierarchical heterogeneous distributed embedded systems
US6061580A (en) 1997-02-28 2000-05-09 Randice-Lisa Altschul Disposable wireless telephone and method for call-out only
US6289434B1 (en) 1997-02-28 2001-09-11 Cognigine Corporation Apparatus and method of implementing systems on silicon using dynamic-adaptive run-time reconfigurable circuits for processing multiple, independent data and control streams of varying rates
JP3340343B2 (ja) 1997-03-13 2002-11-05 株式会社東芝 プロセッサ及び情報処理装置
US6059840A (en) 1997-03-17 2000-05-09 Motorola, Inc. Automatic scheduling of instructions to reduce code size
US5912572A (en) 1997-03-28 1999-06-15 Cypress Semiconductor Corp. Synchronizing clock pulse generator for logic derived clock signals with synchronous clock suspension capability for a programmable device
US6115751A (en) 1997-04-10 2000-09-05 Cisco Technology, Inc. Technique for capturing information needed to implement transmission priority routing among heterogeneous nodes of a computer network
US5991302A (en) 1997-04-10 1999-11-23 Cisco Technology, Inc. Technique for maintaining prioritization of data transferred among heterogeneous nodes of a computer network
EP0886411A3 (en) 1997-04-15 2004-01-21 Hewlett-Packard Company, A Delaware Corporation Method and apparatus for device interaction by protocol
US6041322A (en) 1997-04-18 2000-03-21 Industrial Technology Research Institute Method and apparatus for processing data in a neural network
JP3555729B2 (ja) 1997-04-22 2004-08-18 日本ビクター株式会社 可変長符号化データの処理方法及び装置
US5860021A (en) 1997-04-24 1999-01-12 Klingman; Edwin E. Single chip microcontroller having down-loadable memory organization supporting "shadow" personality, optimized for bi-directional data transfers over a communication channel
US6219697B1 (en) 1997-05-02 2001-04-17 3Com Corporation Method and apparatus for operating the internet protocol over a high-speed serial bus
US5886537A (en) 1997-05-05 1999-03-23 Macias; Nicholas J. Self-reconfigurable parallel processor made from regularly-connected self-dual code/data processing cells
US6047115A (en) 1997-05-29 2000-04-04 Xilinx, Inc. Method for configuring FPGA memory planes for virtual hardware computation
US5917852A (en) 1997-06-11 1999-06-29 L-3 Communications Corporation Data scrambling system and method and communications system incorporating same
US5949415A (en) 1997-06-16 1999-09-07 Intel Corporation Method and apparatus for tracking program usage in a computer system
FI105251B (fi) 1997-06-18 2000-06-30 Nokia Mobile Phones Ltd Menetelmä aikajakoisen solukkoverkon tukiasemien tunnistamiseksi matkaviestimessä ja matkaviestin
US6292827B1 (en) 1997-06-20 2001-09-18 Shore Technologies (1999) Inc. Information transfer systems and method with dynamic distribution of data, control and management of information
US6628699B2 (en) 1997-06-23 2003-09-30 Schlumberger Resource Management Systems, Inc. Receiving a spread spectrum signal
EP0887989A3 (en) 1997-06-25 2001-02-28 FISHER & PAYKEL LIMITED Appliance communication system
US5970254A (en) 1997-06-27 1999-10-19 Cooke; Laurence H. Integrated processor and programmable data path chip for reconfigurable computing
US5966534A (en) 1997-06-27 1999-10-12 Cooke; Laurence H. Method for compiling high level programming languages into an integrated processor with reconfigurable logic
DE69825370T2 (de) 1997-07-17 2004-12-16 Matsushita Electric Industrial Co., Ltd., Kadoma CDMA Funknachrichtenübertragungsgerät
US6111893A (en) 1997-07-31 2000-08-29 Cisco Technology, Inc. Universal protocol conversion
US6760833B1 (en) 1997-08-01 2004-07-06 Micron Technology, Inc. Split embedded DRAM processor
US6292830B1 (en) 1997-08-08 2001-09-18 Iterations Llc System for optimizing interaction among agents acting on multiple levels
US6311149B1 (en) 1997-08-18 2001-10-30 National Instruments Corporation Reconfigurable test system
US6006249A (en) 1997-08-19 1999-12-21 The Chase Manhattan Bank Method and apparatus for concurrent data processing
US6078736A (en) 1997-08-28 2000-06-20 Xilinx, Inc. Method of designing FPGAs for dynamically reconfigurable computing
US6199181B1 (en) 1997-09-09 2001-03-06 Perfecto Technologies Ltd. Method and system for maintaining restricted operating environments for application programs or operating systems
KR100246399B1 (ko) 1997-09-23 2000-04-01 구자홍 냉장고용 디스펜서어셈블리 및 그 제어방법
US6036166A (en) 1997-09-25 2000-03-14 Imi Cornelius Inc. Chamber valve
US6120551A (en) 1997-09-29 2000-09-19 Xilinx, Inc. Hardwire logic device emulating an FPGA
US6363411B1 (en) 1998-08-05 2002-03-26 Mci Worldcom, Inc. Intelligent network
US6590415B2 (en) 1997-10-09 2003-07-08 Lattice Semiconductor Corporation Methods for configuring FPGA's having variable grain components for providing time-shared access to interconnect resources
US6195788B1 (en) 1997-10-17 2001-02-27 Altera Corporation Mapping heterogeneous logic elements in a programmable logic device
US5999734A (en) 1997-10-21 1999-12-07 Ftl Systems, Inc. Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models
US5993739A (en) 1997-10-29 1999-11-30 Chaircare Continuous washing system
US5873045A (en) 1997-10-29 1999-02-16 International Business Machines Corporation Mobile client computer with radio frequency transceiver
US6122670A (en) 1997-10-30 2000-09-19 Tsi Telsys, Inc. Apparatus and method for constructing data for transmission within a reliable communication protocol by performing portions of the protocol suite concurrently
FR2770659A1 (fr) 1997-10-31 1999-05-07 Sgs Thomson Microelectronics Processeur de traitement perfectionne
US6289487B1 (en) 1997-11-03 2001-09-11 Harris Corporation Efficient modified viterbi decoder
US6185418B1 (en) 1997-11-07 2001-02-06 Lucent Technologies Inc. Adaptive digital radio communication system
US6128307A (en) * 1997-12-01 2000-10-03 Advanced Micro Devices, Inc. Programmable data flow processor for performing data transfers
US6018783A (en) 1997-12-12 2000-01-25 Advanced Micro Devices, Inc. Register access controller which prevents simultaneous coupling of more than one register to a bus interface
US6046603A (en) 1997-12-12 2000-04-04 Xilinx, Inc. Method and apparatus for controlling the partial reconfiguration of a field programmable gate array
US6091263A (en) 1997-12-12 2000-07-18 Xilinx, Inc. Rapidly reconfigurable FPGA having a multiple region architecture with reconfiguration caches useable as data RAM
DE69827589T2 (de) 1997-12-17 2005-11-03 Elixent Ltd. Konfigurierbare Verarbeitungsanordnung und Verfahren zur Benutzung dieser Anordnung, um eine Zentraleinheit aufzubauen
JPH11184674A (ja) 1997-12-24 1999-07-09 Fujitsu Ltd レジスタファイル
US6192070B1 (en) 1998-01-02 2001-02-20 Mitsubishi Electric Research Laboratories, Inc. Universal modem for digital video, audio and data communications
US5959811A (en) 1998-01-13 1999-09-28 Read-Rite Corporation Magnetoresistive transducer with four-lead contact
US6039219A (en) 1998-01-20 2000-03-21 Bach; Lanae E. Liquid dispensing system for a refrigerator
US6230307B1 (en) 1998-01-26 2001-05-08 Xilinx, Inc. System and method for programming the hardware of field programmable gate arrays (FPGAs) and related reconfiguration resources as if they were software by creating hardware objects
US6366999B1 (en) 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
US6134629A (en) 1998-01-29 2000-10-17 Hewlett-Packard Company Determining thresholds and wrap-around conditions in a first-in-first-out memory supporting a variety of read and write transaction sizes
US6378072B1 (en) 1998-02-03 2002-04-23 Compaq Computer Corporation Cryptographic system
US6094726A (en) 1998-02-05 2000-07-25 George S. Sheng Digital signal processor using a reconfigurable array of macrocells
US6076174A (en) 1998-02-19 2000-06-13 United States Of America Scheduling framework for a heterogeneous computer network
US6360263B1 (en) 1998-02-25 2002-03-19 International Business Machines Corporation Dynamic resource allocation for user management in multi-processor time shared computer systems
JPH11261440A (ja) 1998-03-11 1999-09-24 Oki Electric Ind Co Ltd 合成受信装置
US6691148B1 (en) 1998-03-13 2004-02-10 Verizon Corporate Services Group Inc. Framework for providing quality of service requirements in a distributed object-oriented computer system
US6073132A (en) 1998-03-27 2000-06-06 Lsi Logic Corporation Priority arbiter with shifting sequential priority scheme
US7055151B1 (en) 1998-04-03 2006-05-30 Applied Micro Circuits Corporation Systems and methods for multi-tasking, resource sharing and execution of computer instructions
US6134605A (en) 1998-04-15 2000-10-17 Diamond Multimedia Systems, Inc. Redefinable signal processing subsystem
US6202130B1 (en) 1998-04-17 2001-03-13 Motorola, Inc. Data processing system for processing vector data and method therefor
US6088043A (en) 1998-04-30 2000-07-11 3D Labs, Inc. Scalable graphics processor architecture
US6226735B1 (en) 1998-05-08 2001-05-01 Broadcom Method and apparatus for configuring arbitrary sized data paths comprising multiple context processing elements
US6292822B1 (en) 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
US6223222B1 (en) 1998-05-14 2001-04-24 3Com Corporation Method and system for providing quality-of-service in a data-over-cable system using configuration protocol messaging
US6411612B1 (en) 1998-05-19 2002-06-25 Harris Communication Selective modification of antenna directivity pattern to adaptively cancel co-channel interference in TDMA cellular communication system
KR20010043794A (ko) 1998-06-05 2001-05-25 샌제이브 사이두 추상형 지역 탐색 기술을 사용한 컴퓨터 구현 방식의스케줄링 시스템 및 프로세스
US6305014B1 (en) 1998-06-18 2001-10-16 International Business Machines Corporation Lifetime-sensitive instruction scheduling mechanism and method
US6175892B1 (en) 1998-06-19 2001-01-16 Hitachi America. Ltd. Registers and methods for accessing registers for use in a single instruction multiple data system
US6282627B1 (en) 1998-06-29 2001-08-28 Chameleon Systems, Inc. Integrated processor and programmable data path chip for reconfigurable computing
KR100333724B1 (ko) 1998-06-30 2002-09-17 주식회사 하이닉스반도체 티타늄알루미늄나이트라이드반사방지막을이용한반도체소자의금속배선형성방법
US6356994B1 (en) 1998-07-09 2002-03-12 Bops, Incorporated Methods and apparatus for instruction addressing in indirect VLIW processors
US6604085B1 (en) 1998-07-20 2003-08-05 Usa Technologies, Inc. Universal interactive advertising and payment system network for public access electronic commerce and business related products and services
EP0974898A3 (en) 1998-07-24 2008-12-24 Interuniversitair Microelektronica Centrum Vzw A method for determining a storage-bandwidth optimized memory organization of an essentially digital device
US6587684B1 (en) 1998-07-28 2003-07-01 Bell Atlantic Nynex Mobile Digital wireless telephone system for downloading software to a digital telephone using wireless data link protocol
US6377983B1 (en) 1998-08-31 2002-04-23 International Business Machines Corporation Method and system for converting expertise based on document usage
US6356863B1 (en) 1998-09-08 2002-03-12 Metaphorics Llc Virtual network file server
US6381735B1 (en) 1998-10-02 2002-04-30 Microsoft Corporation Dynamic classification of sections of software
US6360259B1 (en) 1998-10-09 2002-03-19 United Technologies Corporation Method for optimizing communication speed between processors
US6301653B1 (en) 1998-10-14 2001-10-09 Conexant Systems, Inc. Processor containing data path units with forwarding paths between two data path units and a unique configuration or register blocks
US6467009B1 (en) 1998-10-14 2002-10-15 Triscend Corporation Configurable processor system unit
US6219780B1 (en) 1998-10-27 2001-04-17 International Business Machines Corporation Circuit arrangement and method of dispatching instructions to multiple execution units
US6289375B1 (en) 1998-10-30 2001-09-11 International Business Machines Corporation Method and apparatus for invoking network agent functions using a hash table
US6446258B1 (en) 1998-11-03 2002-09-03 Intle Corporation Interactive instruction scheduling and block ordering
US6052600A (en) 1998-11-23 2000-04-18 Motorola, Inc. Software programmable radio and method for configuring
US6138693A (en) 1998-11-23 2000-10-31 Matz; Warren W. Automatic detergent dispenser
US6563891B1 (en) 1998-11-24 2003-05-13 Telefonaktiebolaget L M Ericsson (Publ) Automatic gain control for slotted mode operation
US6405214B1 (en) 1998-12-17 2002-06-11 Hewlett-Packard Company Method of gathering usage information and transmitting to a primary server and a third party server by a client program
US6385751B1 (en) 1998-12-30 2002-05-07 Texas Instruments Incorporated Programmable, reconfigurable DSP implementation of a Reed-Solomon encoder/decoder
US6978450B2 (en) * 1999-01-15 2005-12-20 Hewlett-Packard Development Company, L.P. Method and system for optimizing compilation time of a program by selectively reusing object code
US6618777B1 (en) 1999-01-21 2003-09-09 Analog Devices, Inc. Method and apparatus for communicating between multiple functional units in a computer environment
JP3444216B2 (ja) 1999-01-28 2003-09-08 日本電気株式会社 プログラマブルデバイス
KR100731371B1 (ko) 1999-02-15 2007-06-21 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 구성가능 기능 유닛을 포함하는 프로세서를 사용해서 컴퓨터 프로그램을 실행하는 방법, 프로세서 및 컴퓨터 판독가능 기록 매체
JP3033575B1 (ja) 1999-02-17 2000-04-17 日本電気株式会社 画像処理装置
US20020083423A1 (en) 1999-02-17 2002-06-27 Elbrus International List scheduling algorithm for a cycle-driven instruction scheduler
US6718541B2 (en) 1999-02-17 2004-04-06 Elbrus International Limited Register economy heuristic for a cycle driven multiple issue instruction scheduler
US6150838A (en) 1999-02-25 2000-11-21 Xilinx, Inc. FPGA configurable logic block with multi-purpose logic/memory circuit
US6510138B1 (en) 1999-02-25 2003-01-21 Fairchild Semiconductor Corporation Network switch with head of line input buffer queue clearing
US6349394B1 (en) 1999-03-31 2002-02-19 International Business Machines Corporation Performance monitoring in a NUMA computer
US6141283A (en) 1999-04-01 2000-10-31 Intel Corporation Method and apparatus for dynamically placing portions of a memory in a reduced power consumption state
US6570877B1 (en) 1999-04-07 2003-05-27 Cisco Technology, Inc. Search engine for forwarding table content addressable memory
US6832250B1 (en) 1999-04-13 2004-12-14 Lexmark International, Inc. Usage-based billing and management system and method for printers and other assets
EP1093611A1 (en) 1999-05-06 2001-04-25 Koninklijke Philips Electronics N.V. Data processing device, method for executing load or store instructions and method for compiling programs
US6263057B1 (en) 1999-05-07 2001-07-17 Lucent Technologies Inc. Automatic telecommunications provider selection system
KR100761328B1 (ko) 1999-05-07 2007-09-27 모픽스 테크놀로지 아이엔씨 헤테로지니어스 프로그래머블 게이트 어레이
US6347346B1 (en) 1999-06-30 2002-02-12 Chameleon Systems, Inc. Local memory unit system with global access for use on reconfigurable chips
US6901440B1 (en) 1999-07-02 2005-05-31 Agilent Technologies, Inc. System and method for universal service activation
KR100358427B1 (ko) 1999-07-12 2002-10-25 한국전자통신연구원 씨디엠에이 적응배열안테나 시스템을 위한 효율적 구조의 복조기
US6359248B1 (en) 1999-08-02 2002-03-19 Xilinx, Inc. Method for marking packaged integrated circuits
US6507947B1 (en) 1999-08-20 2003-01-14 Hewlett-Packard Company Programmatic synthesis of processor element arrays
US6430624B1 (en) 1999-10-21 2002-08-06 Air2Web, Inc. Intelligent harvesting and navigation system and method
US6421372B1 (en) 1999-11-10 2002-07-16 Itt Manufacturing Enterprises, Inc. Sequential-acquisition, multi-band, multi-channel, matched filter
FR2801118B1 (fr) 1999-11-17 2001-12-21 Bull Cp8 Procede de chargement d'applications dans un systeme embarque multi-application, systeme embarque correspondant, et procede d'execution d'une application du systeme embarque
EP1107512A1 (en) 1999-12-03 2001-06-13 Sony International (Europe) GmbH Communication device and software for operating multimedia applications
JP2001166947A (ja) 1999-12-06 2001-06-22 Nec Corp コンパイル処理方式
GB2357226B (en) 1999-12-08 2003-07-16 Hewlett Packard Co Security protocol
AU2915201A (en) 1999-12-30 2001-07-16 Morphics Technology, Inc. A fast initial acquisition and search device for a spread spectrum communicationsystem
US6601158B1 (en) 1999-12-30 2003-07-29 Pmc-Sierra, Inc. Count/address generation circuitry
WO2001050624A1 (en) 1999-12-30 2001-07-12 Morphics Technology, Inc. Method and apparatus to support multi standard, multi service base-stations for wireless voice and data networks
AU2001233150A1 (en) 2000-01-28 2001-08-07 Morphics Technolgoy Inc. A wireless spread spectrum communication platform using dynamically reconfigurable logic
WO2001056199A1 (en) 2000-01-28 2001-08-02 Morphics Technology Inc. Method and apparatus for processing a secondary synchronization channel in a spread spectrum system
US6711607B1 (en) * 2000-02-04 2004-03-23 Ensim Corporation Dynamic scheduling of task streams in a multiple-resource system to ensure task stream quality of service
US6711617B1 (en) 2000-02-09 2004-03-23 International Business Machines Corporation Method and apparatus for providing automatic configuration of a computer system based on its physical location using an electronically read schedule
US6438737B1 (en) 2000-02-15 2002-08-20 Intel Corporation Reconfigurable logic for a computer
US6735621B1 (en) 2000-02-18 2004-05-11 Nortel Networks Limited Method and apparatus for messaging between disparate networks
US7509420B2 (en) 2000-02-18 2009-03-24 Emc Corporation System and method for intelligent, globally distributed network storage
US6778212B1 (en) 2000-02-22 2004-08-17 Pixim, Inc. Digital image sensor with on -chip programmable logic
WO2001069439A1 (en) 2000-03-17 2001-09-20 Filesx Ltd. Accelerating responses to requests made by users to an internet
US6807590B1 (en) 2000-04-04 2004-10-19 Hewlett-Packard Development Company, L.P. Disconnecting a device on a cache line boundary in response to a write command
US6658048B1 (en) 2000-04-07 2003-12-02 Nokia Mobile Phones, Ltd. Global positioning system code phase detector with multipath compensation and method for reducing multipath components associated with a received signal
DE10019085A1 (de) 2000-04-10 2001-12-06 Francotyp Postalia Gmbh Anordnung und Verfahren zum Bereitstellen einer Mitteilung beim Laden von Dienstleistungsdaten für ein Endgerät
US7181542B2 (en) 2000-04-12 2007-02-20 Corente, Inc. Method and system for managing and configuring virtual private networks
US6820105B2 (en) 2000-05-11 2004-11-16 Cyberguard Corporation Accelerated montgomery exponentiation using plural multipliers
JP2003534612A (ja) 2000-05-20 2003-11-18 ヨンヒ リーン オンデマンド型のコンテンツ提供方法及びシステム
US6604189B1 (en) 2000-05-22 2003-08-05 Lsi Logic Corporation Master/slave processor memory inter accessability in an integrated embedded system
US20020010848A1 (en) 2000-05-29 2002-01-24 Shoichi Kamano Data processing system
US6601086B1 (en) 2000-06-06 2003-07-29 Emware, Inc. Service provider for providing data, applications and services to embedded devices and for facilitating control and monitoring of embedded devices
US6606529B1 (en) 2000-06-09 2003-08-12 Frontier Technologies, Inc. Complex scheduling method and device
US6675265B2 (en) 2000-06-10 2004-01-06 Hewlett-Packard Development Company, L.P. Multiprocessor cache coherence system and method in which processor nodes and input/output nodes are equal participants
US6410941B1 (en) 2000-06-30 2002-06-25 Motorola, Inc. Reconfigurable systems using hybrid integrated circuits with optical ports
US6684319B1 (en) 2000-06-30 2004-01-27 Conexant Systems, Inc. System for efficient operation of a very long instruction word digital signal processor
EP1368905A4 (en) 2000-07-31 2009-06-24 Infineon Technologies Ag DEVICE AND METHOD FOR A CONFIGURABLE MULTI-DWELL SEARCH ENGINE FOR SPREADING SPECTRUM APPLICATIONS
AU2001283124A1 (en) 2000-07-31 2002-02-13 Morphics Technology, Inc. Generic finger architecture for spread spectrum applications
WO2002011396A2 (en) 2000-08-01 2002-02-07 Hrl Laboratories, Llc Apparatus and method for context-sensitive dynamic information service
US20020032551A1 (en) 2000-08-07 2002-03-14 Jabari Zakiya Systems and methods for implementing hash algorithms
GB0019341D0 (en) 2000-08-08 2000-09-27 Easics Nv System-on-chip solutions
FR2813409A1 (fr) 2000-08-29 2002-03-01 Canon Res Ct France Sa Procede et dispositif configuration d'un peripherique de traitement de documents electroniques dans un reseau de communication
JP3473695B2 (ja) 2000-08-30 2003-12-08 Necエレクトロニクス株式会社 W−cdmaシステムにおけるセルサーチ方法及び回路
US6754470B2 (en) 2000-09-01 2004-06-22 Telephia, Inc. System and method for measuring wireless device and network usage and performance metrics
KR100342483B1 (ko) 2000-09-09 2002-06-28 윤종용 비동기방식 이동 통신 시스템에서의 기지국 탐색 장치 및방법
US6538470B1 (en) 2000-09-18 2003-03-25 Altera Corporation Devices and methods with programmable logic and digital signal processing regions
US6718182B1 (en) 2000-09-18 2004-04-06 Compal Electronics, Inc. Modularized functionality enhancement for a cellular telephone
JP2004512716A (ja) 2000-10-02 2004-04-22 アルテラ・コーポレイション 専用プロセッサ装置を含むプログラマブルロジック集積回路装置
JP3933380B2 (ja) 2000-10-05 2007-06-20 富士通株式会社 コンパイラ
WO2002032029A1 (fr) 2000-10-06 2002-04-18 Yozan Inc. Recepteur
US7035932B1 (en) 2000-10-27 2006-04-25 Eric Morgan Dowling Federated multiprotocol communication
US6748360B2 (en) 2000-11-03 2004-06-08 International Business Machines Corporation System for selling a product utilizing audio content identification
US20020107962A1 (en) 2000-11-07 2002-08-08 Richter Roger K. Single chassis network endpoint system with network processor for load balancing
JP3415579B2 (ja) 2000-11-09 2003-06-09 松下電器産業株式会社 マッチドフィルタおよび相関検出演算方法
US6766165B2 (en) 2000-12-05 2004-07-20 Nortel Networks Limited Method and system for remote and local mobile network management
US6738744B2 (en) 2000-12-08 2004-05-18 Microsoft Corporation Watermark detection via cardinality-scaled correlation
US7844666B2 (en) 2000-12-12 2010-11-30 Microsoft Corporation Controls and displays for acquiring preferences, inspecting behavior, and guiding the learning and decision policies of an adaptive communications prioritization and routing system
US6865664B2 (en) 2000-12-13 2005-03-08 Conexant Systems, Inc. Methods, systems, and computer program products for compressing a computer program based on a compression criterion and executing the compressed program
US6823448B2 (en) 2000-12-15 2004-11-23 Intel Corporation Exception handling using an exception pipeline in a pipelined processor
US6842895B2 (en) 2000-12-21 2005-01-11 Freescale Semiconductor, Inc. Single instruction for multiple loops
US20020087829A1 (en) 2000-12-29 2002-07-04 Snyder Walter L. Re-targetable communication system
US7230978B2 (en) 2000-12-29 2007-06-12 Infineon Technologies Ag Channel CODEC processor configurable for multiple wireless communications standards
DE60213762T2 (de) 2001-01-12 2007-10-04 Broadcom Corp., Irvine Implementierung des SHA1 Algorithmusses
US6871236B2 (en) 2001-01-26 2005-03-22 Microsoft Corporation Caching transformed content in a mobile gateway
US7085310B2 (en) 2001-01-29 2006-08-01 Qualcomm, Incorporated Method and apparatus for managing finger resources in a communication system
US6753873B2 (en) 2001-01-31 2004-06-22 General Electric Company Shared memory control between detector framing node and processor
US6925167B2 (en) 2001-02-01 2005-08-02 Estech Systems, Inc. Service observing in a voice over IP telephone system
US20020107905A1 (en) 2001-02-05 2002-08-08 Roe Colleen A. Scalable agent service system
US20020162026A1 (en) 2001-02-06 2002-10-31 Michael Neuman Apparatus and method for providing secure network communication
US6760587B2 (en) 2001-02-23 2004-07-06 Qualcomm Incorporated Forward-link scheduling in a wireless communication system during soft and softer handoff
US7433942B2 (en) 2001-02-27 2008-10-07 Intel Corporation Network management
US20020147845A1 (en) 2001-03-06 2002-10-10 Juan-Antonio Sanchez-Herrero Flexible user distribution between user's serving entities
US6674999B2 (en) 2001-03-16 2004-01-06 Skyworks Solutions, Inc Dynamically varying linearity system for an RF front-end of a communication device
US20040133745A1 (en) 2002-10-28 2004-07-08 Quicksilver Technology, Inc. Adaptable datapath for a digital processing system
US7225279B2 (en) 2002-06-25 2007-05-29 Nvidia Corporation Data distributor in a computation unit forwarding network data to select components in respective communication method type
US6836839B2 (en) 2001-03-22 2004-12-28 Quicksilver Technology, Inc. Adaptive integrated circuitry with heterogeneous and reconfigurable matrices of diverse and adaptive computational units having fixed, application specific computational elements
US7325123B2 (en) 2001-03-22 2008-01-29 Qst Holdings, Llc Hierarchical interconnect for configuring separate interconnects for each group of fixed and diverse computational elements
US7653710B2 (en) 2002-06-25 2010-01-26 Qst Holdings, Llc. Hardware task manager
WO2002077854A1 (en) 2001-03-26 2002-10-03 Azurn Networks Inc. Unified xml voice and data media converging switch and application delivery system
JP4642264B2 (ja) 2001-04-03 2011-03-02 株式会社日立国際電気 スペクトル拡散通信用相関回路
EP1255368A1 (en) 2001-04-30 2002-11-06 Siemens Information and Communication Networks S.p.A. Method to perform link adaptation in enhanced cellular communication systems with several modulation and coding schemes
US6577678B2 (en) 2001-05-08 2003-06-10 Quicksilver Technology Method and system for reconfigurable channel coding
US6785341B2 (en) 2001-05-11 2004-08-31 Qualcomm Incorporated Method and apparatus for processing data in a multiple-input multiple-output (MIMO) communication system utilizing channel state information
US20020184291A1 (en) 2001-05-31 2002-12-05 Hogenauer Eugene B. Method and system for scheduling in an adaptable computing engine
US6618434B2 (en) 2001-05-31 2003-09-09 Quicksilver Technology, Inc. Adaptive, multimode rake receiver for dynamic search and multipath reception
US7032229B1 (en) 2001-06-04 2006-04-18 Palmsource, Inc. Automatic tracking of user progress in a software application
US6912515B2 (en) 2001-06-04 2005-06-28 Xerox Corporation Method and system for algorithm synthesis in problem solving
US6653859B2 (en) 2001-06-11 2003-11-25 Lsi Logic Corporation Heterogeneous integrated circuit with reconfigurable logic cores
US7266703B2 (en) 2001-06-13 2007-09-04 Itt Manufacturing Enterprises, Inc. Single-pass cryptographic processor and method
US7969431B2 (en) 2001-06-29 2011-06-28 National Instruments Corporation Graphical program node for generating a measurement program
US20030023830A1 (en) 2001-07-25 2003-01-30 Hogenauer Eugene B. Method and system for encoding instructions for a VLIW that reduces instruction memory requirements
US6883084B1 (en) 2001-07-25 2005-04-19 University Of New Mexico Reconfigurable data path processor
US6768768B2 (en) 2001-09-19 2004-07-27 Qualcomm Incorporated Method and apparatus for step two W-CDMA searching
US7257620B2 (en) 2001-09-24 2007-08-14 Siemens Energy & Automation, Inc. Method for providing engineering tool services
US20030061260A1 (en) 2001-09-25 2003-03-27 Timesys Corporation Resource reservation and priority management
US20030142818A1 (en) 2001-09-28 2003-07-31 Nec Usa, Inc. Techniques for efficient security processing
US7139263B2 (en) 2001-10-19 2006-11-21 Sentito Networks, Inc. Voice over IP architecture
CA2360712A1 (en) * 2001-10-31 2003-04-30 Sicon Video Corporation Method and apparatus for the data-driven synchronous parallel processing of digital data
US7146500B2 (en) 2001-11-14 2006-12-05 Compass Technology Management, Inc. System for obtaining signatures on a single authoritative copy of an electronic record
US7106787B2 (en) 2001-11-28 2006-09-12 Broadcom Corporation Acquisition matched filter for W-CDMA systems providing frequency offset robustness
US6986021B2 (en) 2001-11-30 2006-01-10 Quick Silver Technology, Inc. Apparatus, method, system and executable module for configuration and operation of adaptive integrated circuitry having fixed, application specific computational elements
US8412915B2 (en) 2001-11-30 2013-04-02 Altera Corporation Apparatus, system and method for configuration of adaptive integrated circuitry having heterogeneous computational elements
US7356670B2 (en) * 2001-12-14 2008-04-08 Nxp B.V. Data processing system
US20030131162A1 (en) 2002-01-10 2003-07-10 Stacey Secatch Non-destructive read FIFO
US7631196B2 (en) 2002-02-25 2009-12-08 Intel Corporation Method and apparatus for loading a trustable operating system
US20040015970A1 (en) 2002-03-06 2004-01-22 Scheuermann W. James Method and system for data flow control of execution nodes of an adaptive computing engine (ACE)
US20040039801A9 (en) 2002-03-11 2004-02-26 Venkatachary Srinivasan System and method for delivering data in a network
US20030212684A1 (en) 2002-03-11 2003-11-13 Markus Meyer System and method for adapting preferences based on device location or network topology
US20030172138A1 (en) 2002-03-11 2003-09-11 Mccormack Jonathan I. System and method for managing two or more electronic devices
US7200735B2 (en) 2002-04-10 2007-04-03 Tensilica, Inc. High-performance hybrid processor with configurable execution units
US6732354B2 (en) * 2002-04-23 2004-05-04 Quicksilver Technology, Inc. Method, system and software for programming reconfigurable hardware
US6988139B1 (en) 2002-04-26 2006-01-17 Microsoft Corporation Distributed computing of a job corresponding to a plurality of predefined tasks
JP3860075B2 (ja) 2002-05-30 2006-12-20 シャープ株式会社 テスト回路を有する自己同期型論理回路および自己同期型論理回路のテスト方法
US7076781B2 (en) 2002-05-31 2006-07-11 International Business Machines Corporation Resource reservation for large-scale job scheduling
US6907598B2 (en) 2002-06-05 2005-06-14 Microsoft Corporation Method and system for compressing program code and interpreting compressed program code
US7620678B1 (en) 2002-06-12 2009-11-17 Nvidia Corporation Method and system for reducing the time-to-market concerns for embedded system design
US20040062300A1 (en) 2002-10-01 2004-04-01 Mcdonough John G. System and method for detecting direct sequence spread spectrum signals using batch processing of independent parameters
US7243333B2 (en) 2002-10-24 2007-07-10 International Business Machines Corporation Method and apparatus for creating and executing integrated executables in a heterogeneous architecture
US6883074B2 (en) 2002-12-13 2005-04-19 Sun Microsystems, Inc. System and method for efficient write operations for repeated snapshots by copying-on-write to most recent snapshot
US6912640B2 (en) * 2003-03-14 2005-06-28 Sun Microsystems, Inc. Method to partition large code across multiple e-caches
US8296764B2 (en) * 2003-08-14 2012-10-23 Nvidia Corporation Internal synchronization control for adaptive integrated circuitry
US7503048B1 (en) * 2003-08-18 2009-03-10 Cray Incorporated Scheduling synchronization of programs running as streams on multiple processors
US7174432B2 (en) * 2003-08-19 2007-02-06 Nvidia Corporation Asynchronous, independent and multiple process shared memory system in an adaptive computing architecture
US7200837B2 (en) * 2003-08-21 2007-04-03 Qst Holdings, Llc System, method and software for static and dynamic programming and configuration of an adaptive computing architecture
US7321979B2 (en) 2004-01-22 2008-01-22 International Business Machines Corporation Method and apparatus to change the operating frequency of system core logic to maximize system memory bandwidth
US7194598B2 (en) 2004-01-26 2007-03-20 Nvidia Corporation System and method using embedded microprocessor as a node in an adaptable computing machine
US20060150165A1 (en) 2004-12-30 2006-07-06 Intel Corporation Virtual microengine systems and methods
US7480901B2 (en) 2005-02-03 2009-01-20 International Business Machines Corporation System and method for producing per-processor optimized executables
JP3938387B2 (ja) 2005-08-10 2007-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、制御方法、およびコンパイラ・プログラム
US7937692B2 (en) 2005-11-30 2011-05-03 Red Hat, Inc. Methods and systems for complete static analysis of software for building a system
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8438365B2 (en) * 2006-10-06 2013-05-07 Calos Fund Limited Liability Company Efficient data loading in a data-parallel processor
US9038041B2 (en) * 2006-12-04 2015-05-19 Tibco Software, Inc. Stream processor with compiled programs
US8108845B2 (en) * 2007-02-14 2012-01-31 The Mathworks, Inc. Parallel programming computing system to dynamically allocate program portions
US8214808B2 (en) 2007-05-07 2012-07-03 International Business Machines Corporation System and method for speculative thread assist in a heterogeneous processing environment
GB0808576D0 (en) * 2008-05-12 2008-06-18 Xmos Ltd Compiling and linking
US8291006B2 (en) * 2008-05-30 2012-10-16 International Business Machines Corporation Method for generating a distributed stream processing application
US8601458B2 (en) * 2009-05-14 2013-12-03 International Business Machines Corporation Profile-driven data stream processing
US8996556B2 (en) * 2009-06-05 2015-03-31 Microsoft Technology Licensing, Llc Parallel processing of an ordered data stream
US8621446B2 (en) 2010-04-29 2013-12-31 International Business Machines Corporation Compiling software for a hierarchical distributed processing system
US8645934B2 (en) 2010-05-06 2014-02-04 International Business Machines Corporation Simultaneous compiler binary optimizations
US8510749B2 (en) 2010-05-27 2013-08-13 International Business Machines Corporation Framework for scheduling multicore processors

Also Published As

Publication number Publication date
KR20130009746A (ko) 2013-01-23
JP2013518327A (ja) 2013-05-20
US20190004813A1 (en) 2019-01-03
US11055103B2 (en) 2021-07-06
EP2526494A1 (en) 2012-11-28
US10073700B2 (en) 2018-09-11
US8843928B2 (en) 2014-09-23
JP2017004550A (ja) 2017-01-05
US20110179252A1 (en) 2011-07-21
KR101814221B1 (ko) 2018-01-02
EP2526494B1 (en) 2020-01-15
EP2526494A4 (en) 2017-02-01
US20150012725A1 (en) 2015-01-08
JP5990466B2 (ja) 2016-09-14
WO2011091323A1 (en) 2011-07-28

Similar Documents

Publication Publication Date Title
JP6495208B2 (ja) ストリームに基づく演算を実装するための汎用複数コアシステムのための方法および装置
US10318260B2 (en) Method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system
JP6018021B2 (ja) マルチコアアーキテクチャにおけるリソース管理
US8533716B2 (en) Resource management in a multicore architecture
Ginosar et al. RC64: High performance rad-hard manycore
Bal et al. Performance of a high-level parallel language on a high-speed network
Giorgi et al. Modeling multi-board communication in the axiom cyber-physical system
Ginosar The plural many-core architecture-high performance at low power
Chadwick Communication centric, multi-core, fine-grained processor architecture
Lin et al. A parameterized dataflow language extension for embedded streaming systems
Uddin Microgrid-The microthreaded many-core architecture
Bosch Pons Breaking host-centric management of task-based parallel programming models
Jörg et al. PIMP My Many-Core: Pipeline-Integrated Message Passing
Lankamp Design and evaluation of a multithreaded many-core architecture
Gallatin et al. Twill: A Hybrid Microcontroller-FPGA Framework for Parallelizing Single-Threaded C Programs
Kadakia Data routing in multicore processors using dimension increment method
Συρίβελης Exploiting reconfigurable heterogenous parallel architectures in a multitasking context: a systems approach
Syrivelis Exploiting Reconfigurable Heterogenous Parallel Architectures in a Multitasking Context: A Systems Approach

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170721

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170803

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171016

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180320

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180620

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180809

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190306

R150 Certificate of patent or registration of utility model

Ref document number: 6495208

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250