JP6495208B2 - Method and apparatus for a general purpose multi-core system for implementing stream-based operations - Google Patents
Method and apparatus for a general purpose multi-core system for implementing stream-based operations Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17356—Indirect interconnection networks
- G06F15/17362—Indirect interconnection networks hierarchical topologies
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/5033—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation 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/505—Allocation 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 Physics & Mathematics (AREA)
- General Engineering & Computer Science (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号に関する。これらの特許出願の全部は参照することにより本明細書に援用される。
This application claims the benefit of US Provisional Patent Application Ser. No. 61 / 297,139, filed Jan. 21, 2010. The present application is an "Adaptive Integrated Application" filed March 22, 2001, now U.S. Patent No. 6,836,839.
No. 09 / 815,122, now U.S. Patent Nos. 09 / 815,122, entitled "CIRCUITRY WITH HETEROGENEOUS AND RECONFIGURABLE MATRICES OF DIVERSE AND ADAPTIVE COMPUTATIONAL UNITS HAVING FIXED, APPLICATION SPECIFIC COMPUTATIONAL ELEMENTS""HIERARCHICAL INTERCONNECT
U.S. Patent Application Serial No. 10 / 384,486, whose title is the invention, and is now U.S. Patent No. 7,609,297, entitled "HARDWARE." No. 10 / 443,501, entitled "TASK MANAGER". All of these patent applications are incorporated herein by reference.
本発明は、全般的には、複数プロセッサシステムをプログラムすることに関し、さらに詳細には、ストリームおよびスレッドの両方を組み込む並列プログラミング言語の構文を効果的に利用するハードウェアタスクマネージャに関するものである。 The present invention relates generally to programming multi-processor systems, and more particularly to a hardware task manager that effectively exploits the syntax of parallel programming languages that incorporate both streams and threads.
一般に、デジタルシステムにおける処理性能に制限を加えるものは、デジタルシステム内の異なる構成要素およびサブシステムの間で命令、データ、および他の情報を伝送する際の効率および速度となっている。例えば、汎用フォンノイマン型アーキテクチャにおけるバス転送速度がプロセッサとメモリとの間のデータ転送速度を支配し、その結果として、演算性能(例えば、100万命令/秒(MIPS:million instructions per second)、浮動小数点演算回数/秒(FLOPS:floating−point operations per second)、その他)に限界が生じてしまうこととなる。 In general, what limits processing performance in digital systems is the efficiency and speed at which instructions, data, and other information may be transmitted between different components and subsystems within the digital system. For example, the bus transfer rate in a general-purpose von Neumann-type architecture governs the data transfer rate between the processor and memory, resulting in arithmetic performance (eg, million instructions per second (MIPS), floating) A limit will occur in the number of decimal point operations per second (FLOPS: floating-point operations per second, etc.).
例えばマルチプロセッサ設計または並列プロセッサ設計等の他の型のコンピュータアーキテクチャ設計においては、異なるプロセッサのそれぞれが他のプロセッサ、複数のメモリ装置、入出力(I/O)ポート、その他と通信することが可能となるよう、複雑な通信能力、すなわち相互接続能力が必要となる。今日、プロセッサシステム設計が複雑化されるとともに、効果的かつ高速な相互接続機構の重要度が飛躍的に高まった。 In other types of computer architecture designs, such as multiprocessor designs or parallel processor designs, each of the different processors can communicate with other processors, multiple memory devices, input / output (I / O) ports, etc. In order to achieve this, complex communication capabilities, ie interconnection capabilities, are required. Today, with the complexity of processor system design, the importance of effective and fast interconnects has dramatically increased.
しかし、速度、設計の柔軟性、および簡易性の目的を最適化する係る機構を設計することは困難である。 However, it is difficult to design such a mechanism that optimizes the goals of speed, design flexibility, and simplicity.
現在のところ、並列プログラミングは、スレッドを演算の中心的・統率的原理としてスレッドに基づいて行われている。しかし、スレッドは演算モデルとしては顕著な欠点を有する。なぜなら、スレッドは極めて非決定的であり、係る非決定性を抑えて決定的な目的を達成するには、プログラミングスタイルに依存することになるからである。テストおよ
び検証は、この甚だしい非決定性が存在すると困難なものとなる。GPU(グラフィックス処理ユニット)ベンダーにより提案されてきた1つのソリューションは、プログラミングモデルにおいて表現可能な並列性の形態を、狭めることである。しかし、データ並列性に関するGPUベンダーの焦点は、プログラマたちの手を拘束し、マルチコアプロセッサの全潜在能力を利用する機会を妨げてしまうものである。
At present, parallel programming is performed based on threads as a central and strategic principle of operation. However, threads have significant drawbacks as a computational model. This is because threads are extremely non-deterministic, and rely on programming styles to reduce such non-determinism and achieve critical goals. Testing and verification becomes difficult when this tremendous nondeterminism exists. One solution that has been proposed by GPU (Graphics Processing Unit) vendors is to narrow the form of parallelism that can be represented in a programming model. However, the focus of GPU vendors on data parallelism is to constrain the hands of programmers and prevent them from taking advantage of the full potential of multi-core processors.
さらに、スレッドは同一コアのバンク上で実行されるとは限らない。現代のコンピュータ(スーパーコンピュータ、ワークステーション、デスクトップ、およびラップトップ)は、異なる異種コアの困惑的な配列を含み、それらすべてが、プログラムするにあたり、別個のプログラミングモデルを要求する。例えば、マザーボードは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コア)。 Furthermore, threads are not necessarily executed on banks of the same core. Modern computers (supercomputers, workstations, desktops, and laptops) contain puzzled arrangements of different heterogeneous cores, all of which require separate programming models to program. For example, the motherboard has 1 to 4 main CPUs (central processing unit, eg Pentium processor), each CPU with an on-die or on-package GPU (graphics processing unit, eg NVIDIA's GPU) 1 With six to six on-die CPU cores, the GPU itself has several separate video and audio encoding and decoding cores (multiple video standards such as MPEG2, MPEG4, VC-1, H.264 And 16 to 256 GPU cores, as well as others. Also on the motherboard, 1 to 4 separate high-end, and configurable (meaning that the core can be selected to encode / decode various pre-existing standards) video / audio encoding and There is also a decoding core (multiple video standards such as MPEG2, MPEG4, VC-1, and H.264 with high resolution and multiple audio channels). Additional subsystems of processing cores are added to the motherboard in the form of communication cores (e.g. cores to take over TCP / IP functions. These cores are typically one or more cores. CPU core and one or more packet processing cores: WiFi core, BlueTooth core, WiMax core, 3G core, 4G core) made from one or more broadband / baseband processing cores.
スーパーコンピュータ等の、現代のハイエンドのスペクトル装置においては、1個のマザーボードに対して1個または4個のFPGA(フィールド・プログラマブル・ゲートアレイ:field programmable gate array)が追加される。各FPGAは、複数のハードIPまたはソフトIPのCPUコアおよび複数のDSPコアとともに、10万個から1000万個の非常に簡単なCLBプロセシングコアからなる)。次に、これらのマザーボード自体が100個から1000個単位で複写および相互接続されて、現代のスーパーコンピュータが作られる。次いで、これらのシステム(デスクトップ/ワークステーション/ラップトップおよび/またはスーパーコンピュータ)がインターネットを介して相互接続されることにより、全国的なまたはグローバルな演算能力が提供されることとなる。 In modern high-end spectrum devices such as supercomputers, one or four FPGAs (field programmable gate arrays) are added to one motherboard. Each FPGA consists of 100,000 to 10,000,000 very simple CLB processing cores, with multiple hard IP or soft IP CPU cores and multiple DSP cores). Next, these motherboards are themselves copied and interconnected in 100 to 1000 units to make a modern super computer. These systems (desktops / workstations / laptops and / or supercomputers) are then interconnected via the Internet to provide national or global computing capabilities.
係る多能な一連のコアを「管理」および「プログラミング」することは、極めて困難である。大多数のプログラマは、このような労を取ろうとすることさえなく、他の複数のコアに関しては無視して、1つのコアのみについてプログラミングすることに落ち着く。当該技術分野においては、「自明な並列性の問題(embarrassingly parallel problems)」(例えば、グーグル検索アルゴリズムは、並列スレッド間において双方向性がほとんど存在しないかまたはまったく存在しないという事実により、複数のCPU間に分配することが容易である)として知られる一定数のアルゴリズムが存在する。しかしながら大部分の問題はこれらの特性を有さず、高程度の双方向性および同期化が複数のスレッド間で要求される。 "Managing" and "programming" such a versatile set of cores is extremely difficult. Most programmers do not even try to do this and settle for programming on only one core, ignoring the other cores. In the art, the "embarrassively parallel problems" (e.g., the Google search algorithm has multiple CPUs due to the fact that there is little or no interactivity between parallel threads) There is a fixed number of algorithms known as being easy to distribute between). However, most problems do not have these properties, and a high degree of interactivity and synchronization is required among multiple threads.
したがって、現代のプログラミング言語のストリームにおけるような、マルチスレッド化、無制限の並列性、および決定的挙動を組み込むことが望まれるであろう。ストリーム
は、少なくとも1978年におけるCプログラム言語の導入時にまでさかのぼり、C++
、Java(登録商標)、Visual Basic、およびF#等の言語に組み込まれてきた。しかし、これらの言語において、ストリームは、I/Oおよびファイルアクセスに対するフレームワーク等の、むしろ狭い役割が委ねられている。したがって、並列プログラミングにおけるストリームの役割を、第1クラスのオブジェクト、すなわち変数の地位にほぼ匹敵する地位へと拡張することが望まれる。
Thus, it would be desirable to incorporate multi-threading, unlimited parallelism, and deterministic behavior, as in modern programming language streams. The stream dates back to at least the introduction of the C programming language in 1978, C ++
Have been incorporated into languages such as Java, Visual Basic, and F #. However, in these languages, streams are left with rather narrow roles, such as a framework for I / O and file access. Therefore, it is desirable to extend the role of streams in parallel programming to a class that is roughly comparable to the class of objects, ie, the class of variables.
1つの例によれば、プログラム可能なコアに基づく演算デバイスが開示される。係る演算デバイスは、相互に接続された複数のプロセシングコアを備える。メモリは、ストリームデスティネーションモジュールおよびストリームソースモジュールを定義するストリームを含むストリームドメインコードを記憶する。ストリームソースモジュールはデータ値をストリームに代入し、ストリームは、ストリームソースモジュールからストリームデスティネーションモジュールへとデータ値を伝える。ランタイムシステムは、いつデータ値がストリームデスティネーションモジュールに対して利用可能となるかを検出し、複数のプロセシングコアのうちの1つ上で実行されるようストリームデスティネーションモジュールをスケジュールする。 According to one example, a programmable core based computing device is disclosed. The computing device comprises a plurality of processing cores connected to one another. The memory stores stream domain code including a stream that defines a stream destination module and a stream source module. The stream source module assigns data values to the stream, and the stream communicates data values from the stream source module to the stream destination module. The runtime system detects when data values are available to the stream destination module and schedules the stream destination module to be run on one of a plurality of processing cores.
本発明の追加的な態様は、図面を参照してなされる様々な実施形態の詳細な説明を鑑みると、当業者に明らかとなるであろう。なお、図面の簡単な説明は以下で提供される。 Additional aspects of the present invention will be apparent to those skilled in the art in view of the detailed description of various embodiments made with reference to the drawings. A brief description of the drawings is provided below.
適応的演算エンジンおよび適応的演算機械 Adaptive arithmetic engine and adaptive arithmetic machine
図1は、1つの演算モデル例を使用するマルチプロセッサシステムの1例を示すブロック図である。本明細書において適応的演算エンジン(ACE)100と称される装置100は、好適には、集積回路として、または他の追加的な構成品を有する集積回路の1部分として具体化される。模範的な実施形態において、および、以下でより詳細に論じられるように、ACE100は、図示したマトリックス150A〜マトリックス150N等の1つまたは複数の再設定可能なマトリックス(またはノード)150と、マトリックス相互接続ネットワーク110とを備える。模範的な実施形態において、および以下でより詳細に論じられるように、マトリックス150Aおよびマトリックス150B等の1つまたは複数のマトリックス150は、コントローラ120として機能するよう構成され、一方、マトリックス150Cおよびマトリックス150D等の他のマトリックスは、メモリ140として機能するよう構成される。様々なマトリックス150およびマトリックス相互接続ネットワーク110は、フラクタルサブユニットとして、ともに実装され得、このフラクタルサブユニットは数個から1000個のノードの規模となり得る。
FIG. 1 is a block diagram showing an example of a multiprocessor system using one operation model example.
好適な実施形態において、ACE100は、再設定可能マトリックス150、コントローラ120、およびメモリ140間における信号発信および他の伝送のために、または他の入力/出力(「I/O」)機能のために、従来の(典型的な別個の)データ、DMA、ランダムアクセス、構成、および命令バスを利用しない。むしろ、データ、制御、および設定の情報は、マトリックス相互接続ネットワーク110を利用して、これらのマトリックス150間で伝送される。なお、このマトリックス相互接続ネットワーク110は、コントローラ120およびメモリ140として設定されたこれらのマトリックス150を含む再設定可能なマトリックス150間における任意の所与の接続を提供するよう、リアルタイムで設定および再設定が可能である。
In the preferred embodiment,
メモリ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の設定可能性および再設定可能性を参照して、および本明細書において「シルバーウェア」モジュールと称される結合されたデータ、設定、および制御情報の模範的な形態を参照して、以下で詳細に説明される。
The
It may be implemented using C or another processor. The first control function, referred to as "kernel" control, is illustrated as a kernel controller ("KARC") of
図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、および、演算ユニット、構成品、および要素間における、選択可能なまたはスイッチング可能な、データ、入力、出力、制御、および設定経路を提供する。
The matrix interconnect network 110 of FIG. 1 comprises a subset interconnect network (not shown). These interconnection networks may be Boolean interconnection networks, data interconnection networks, and collectively and generally herein "interconnect", "interconnection (s)", " An FPGA interconnection network or switching fabric, as is commonly known in the art, including other networks or interconnection schemes referred to as "interconnection network (s)" or "networks" It can be implemented in various ways, such as using. In an exemplary embodiment, the various interconnect networks may be configured, for example, as in US Pat. No. 5,218,240, US Pat. No. 5,336,950, US Pat. No. 5,245,227, and US Pat. , As described in U.S. Pat. These various interconnection networks provide selectable (switchable) connections between
しかし、様々な相互接続ネットワークの、または様々な相互接続ネットワーク内における、スイッチングまたは選択の操作は当該技術分野において周知の方法で実装され得るが、本発明に係る相互接続ネットワークの設計およびレイアウトが以下に詳細に説明するように新しく新規であることは指摘されるべきである。例えば、様々なレベルの相互接続が、様々なレベルのマトリックス、演算ユニット、および要素に対応して提供される。マトリックス150のレベルにおいては、従来技術のFPGA相互接続と比較すると、所与のエリアにおける接続能力がより低いマトリックス相互接続ネットワーク110は、より制限され且つ「豊富さ」がより低く、そのために、キャパシタンスが低減され、動作スピードが増加する。しかし、特定のマトリックスまたは演算ユニット内においては、相互接続ネットワークは、顕著に濃度が高く豊富であるため、狭いまたは近接した参照の局所性においては、より高い適応および再設定の能力を有し得る。
However, although switching or selection operations of various interconnection networks or within various interconnection networks may be implemented in a manner well known in the art, the design and layout of the interconnection network according to the present invention are as follows. It should be pointed out that it is new and new as described in detail in. For example, different levels of interconnection are provided corresponding to different levels of matrices, computing units, and elements. At the level of
様々なマトリックスまたはノード150は、再設定可能および異種である。すなわち、一般に、所望の設定に応じて、再設定可能なマトリックス150Aは、一般に、再設定可能なマトリックス150Bからマトリックス150Nとは異なり、再設定可能なマトリックス150Bは、一般に、再設定可能なマトリックス150Aおよびマトリックス150Cからマトリックス150Nとは異なり、再設定可能なマトリックス150Cは、一般に、再設定可能なマトリックス150A、マトリックス150B、マトリックス150Dからマトリックス150Nとは異なり、以下同様に異なる。様々な再設定可能なマトリック
ス150はそれぞれ、一般に、異なる、または多様な混合の、適応的且つ再設定可能なノードまたは演算ユニットを含み、次いでノードは、一般に、異なった、または多様な混合の、様々な方法で適応的に接続、設定、および再設定され得ることにより、様々な相互接続ネットワークを通して様々な機能を実行する、固定の、特定用途向けの演算構成品および要素を含む。多様な内部設定および再設定に加えて、様々なマトリックス150は、マトリックス相互接続ネットワーク110を通して他のマトリックス150のそれぞれに対して、高レベルで接続、設定、および再設定され得る。ACEアーキテクチャの詳細は、上記で参照した関連する特許出願において見出され得る。
The various matrices or
並列演算モデルを使用し得る適応的演算機械160の他の例が図2に示される。この例における適応的演算機械160は、ネットワーク162を介してともに接続された32個の異種リーフノード180を有する。ネットワーク162は、1群のネットワーク入力ポート164、1群のネットワーク出力ポート168、省略可能なシステムインターフェースポート170、外部メモリインターフェース172、および内部メモリインターフェース174に接続された単一のルート164を有する。スーパーバイザーノードまたはKノード178もルート164に接続される。
Another example of an
ノード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アクノレッジメントは、データに対するフロー制御をサポートし、宛先ノードにおける消費側カウントまたは製作側カウントをインクリメントまたはデクリメントさせるものである。
ノードラッパー
In this example, all traffic on
Node wrapper
図4は、図1のACEアーキテクチャまたは図2のACMアーキテクチャにおける異質ノードと同種ネットワークとの間のインターフェースを示す。このインターフェースは、各ノードに対して共通の入力および出力の機構を提供するために用いられるため、「ノードラッパー」と称される。ノードの実行ユニットおよびメモリは、ノードラッパーを介して、ネットワークおよび制御ソフトウェアに対して接続され、それにより、均一で一貫したシステムレベルのプログラミングモデルが提供される。この例において、ノード180はメモリ210および実行ユニット212を備える。ノードラッパーの詳細は、上記で参照した関連する特許出願に見出され得る。
FIG. 4 illustrates the interface between foreign nodes and a homogeneous network in the ACE architecture of FIG. 1 or the ACM architecture of FIG. This interface is referred to as a "node wrapper" because it is used to provide a common input and output mechanism for each node. The execution units and memories of nodes are connected to the network and control software via node wrappers, thereby providing a uniform and consistent system level programming model. In this example,
好適な実施形態において、各ノードラッパーは、ハードウェアタスクマネージャ(HTM:hardware task manager)200を備える。ノードラッパーは、データディストリビュータ202、省略可能なダイレクトメモリアクセス(DMA)エンジン204、およびデータアグリゲータ206も備える。HTMは、ノードプロセッサおよびリソースの実行または使用をそれぞれ調整する。HTMは、タスクリストを処理し、実行準備完了キューを作成することにより、これを行う。HTMは、図2のKノード178と称される専用ノードまたは制御ノード(図示せず)により設定および管理される。しかし他のHTM制御手法も使用され得る。
In the preferred embodiment, each node wrapper comprises a hardware task manager (HTM) 200. The node wrapper also comprises a data distributor 202, an optional direct memory access (DMA)
図4におけるノードラッパーは、ノード180を、その内部構造または機能に関わらず、図2における適応的演算機械160のすべての他のノードまたは図1における適応的演算エンジン100と、外観において同等にする。ノードラッパーはまた、タスク管理およびネットワーク相互作用に関連する無数の活動を処理しなければならない状況から実行ユニット212を解放する。とりわけ、ノードラッパーは、図2のネットワークワード188等の受信するネットワークワードのそれぞれを1つのクロックサイクル内で適正な方法で処理する機能を担当する。
The node wrapper in FIG. 4 makes
図4における実行ユニット212は、タスク実行機能を担当する(タスクはモジュールインスタンスと同等である)。実行ユニット212はデジタル・シグナル・プロセッサ(DSP:digital signal processor)、縮小命令セット(RISC)プロセッサ、ドメイン固有プロセッサ、特定用途集積回路(ASIC:application−specific integrated circuit)、または再設定可能(FPGA)ファブリックを含み得る。その形態に関わらず、実行ユニット212は、標準的インターフェースを通してノードラッパーと相互作用する。 The execution unit 212 in FIG. 4 is in charge of the task execution function (the task is equivalent to a module instance). Execution unit 212 may be a digital signal processor (DSP), a reduced instruction set (RISC) processor, a domain-specific processor, an application-specific integrated circuit (ASIC), or a reconfigurable (FPGA) It may include a fabric. Regardless of its form, execution unit 212 interacts with the node wrapper through a standard interface.
ノードメモリ210は、ノードラッパーおよび実行ユニット212の両方に対してアクセス可能である。ノードメモリ210は、受信するストリーミングデータをノードラッパーが格納し且つそのデータを実行ユニット212がアクセスする位置にある。ノード自体のメモリ210は、典型的には、実行ユニット212が出力データを送信する位置にはない。メモリアクセスを最小限とするために、出力データは、通常は、そのデータを要求しているノード、すなわち消費側ノード(単数または複数)に直接的に送信される。ノードメモリ210は、タスクパラメータを記憶するためにも用いられ、一時的(作業用)記憶領域として、タスクに対して利用可能である。
ノード180がストリーミングデータの消費側であると同時に作成側である図2のACM160等のマルチノードシステムにおいては、作成速度と消費速度とが一致することが望ましい。1つのノード上の作成側タスクは、他のノード上の消費側タスクが対処可能であるよりも、より高いかまたはより低い速度で、データを作成し得る。作成側が、消費側が処理可能な速度よりも高い速度でデータを送信するならば、データはやがて失われる。作成側が、消費側が対処可能な速度よりも低い速度でデータを送信するならば、消費側はデータに対して飢餓状態となり、その結果、消費側は無駄に座して追加的なデータを待つことを余儀なくされ得る。
In a multi-node system such as the
ACM160は、ポイント・トゥ・ポイント・プロトコルおよび図4のノードラッパーを介して、タスク管理、フロー制御、および負荷分散のための均一且つ一貫した機構を提供する。タスク管理により、タスクが十分な入力データを有し且つタスクにより生成されたデータを消費側ノード(単数または複数)において収容する十分なスペースが存在する場合にのみタスクが実行状態となることが確実なものとなる。フロー制御により、作成側タスクが、短すぎる時間内に多すぎるデータにより消費側タスクを圧倒しないことが保証される。負荷分散は、作成側タスクがデータをいくつかの代替的な消費側ノード間に分散
することを可能にし、その結果、作成側タスクはより高い速度で動作することが可能となる。
ストリーミングデータは、図5に示すポイント・トゥ・ポイント・チャンネル(ポイント・トゥ・ポイント・ストリーム)250を介して、ノード180(ポイント)間で転送される。ポイント・トゥ・ポイント・チャンネル等の各PTPチャンネルは、作成側ノード252、作成側タスク254、出力ポート256、消費側ノード258、入力ポート260、入力バッファ262、および消費側タスク264を含む。作成側タスク254は、作成側ノード252の実行ユニット上で実行され、タスク活性化毎に有限サイズブロックのPTPデータを製作する。データのブロックは、一連のPTPワードとしてPTPチャンネル250上で送信される。ブロックの送信は、図5においてタスクとして示される。作成側ノード252上の出力ポート256は、作成側タスク254と関連付けられる。
Streaming data is transferred between nodes 180 (point) via a point-to-point channel (point-to-point stream) 250 shown in FIG. Each PTP channel, such as a point-to-point channel, includes a
消費側タスク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を、指示された入力ポートに関連付けられた循環型入力バッファに格納する。このようにして伝送が完了する。
Data is conveyed on
ACM160は、タスク管理、フロー制御、および負荷分散のための機構を備える。各入力ポートと関連付けられた入力バッファが存在する。入力および出力の両方のポートと関連付けられた、2の補数の符号付きカウントも存在する。
入力ポートに関しては、カウントは消費側カウントと称される。なぜなら、このカウントは、関連するタスクにより消費されるために利用可能である、そのポートの入力バッファにおけるデータ量を反映するからである。消費側カウントは、その値が非負である場合、すなわちその符号ビットが0である場合、有効化される。有効化された消費側カウントは、関連する入力バッファが、関連するタスクの活性化により要求される最小量のデータを有することを示す。システム初期化時または再設定時に、消費側カウントは、典型的には−Cにリセットされる。なお、Cはタスク活性化毎に要求される32ビットワードの最少個数である。 For the input port, the count is referred to as the consumer count. Because this count reflects the amount of data in the port's input buffer that is available to be consumed by the associated task. The consumer count is validated if its value is non-negative, ie if its sign bit is zero. The enabled consumer count indicates that the associated input buffer has the minimum amount of data required by activation of the associated task. At system initialization or reset, the consumer count is typically reset to -C. C is the minimum number of 32-bit words required for each task activation.
出力ポートに関しては、カウントは作成側カウントと称される。なぜなら、このカウントは、関連するタスクにより作成されたデータを受け入れるために、下流側入力バッファにおいて利用可能なスペースの量を反映するためである。作成側カウントは、その値が負である場合、すなわちその符号ビットが1である場合、有効化される。有効化された作成側カウントは、下流側関連入力バッファが、関連するタスクの活性化毎に作成されるデータの最大量を収容するために利用可能なスペースを有することを示す。システム初期化時または再設定時に、作成側カウントは、典型的にはP−S−1にリセットされる。なお、Pはタスク活性化毎に作成される32ビットワードの最大個数、Sは32ビットワードにおける下流側入力バッファのサイズである。 For output ports, the count is referred to as the producer count. Because this count reflects the amount of space available in the downstream input buffer to accept data created by the associated task. The producer count is validated if its value is negative, ie if its sign bit is one. The enabled creator count indicates that the downstream associated input buffer has space available to accommodate the maximum amount of data created per activation of the associated task. At system initialization or reset time, the producer count is typically reset to P-S-1. Here, P is the maximum number of 32-bit words created for each task activation, and S is the size of the downstream input buffer in the 32-bit words.
消費側カウントおよび作成側カウントの両方は、典型的には負の値に初期化され、それにより、消費側カウントは開始時において無効状態にあり、一方、作成側カウントは開始時において有効状態にある。この初期状態は、入力バッファが通常はシステム初期化/再設定時において空き状態であるという事実を反映するものである。 Both consumer count and producer count are typically initialized to a negative value so that consumer count is in an invalid state at the start, while producer count is in a valid state at the start is there. This initial state reflects the fact that the input buffer is normally free at system initialization / reconfiguration.
消費側カウントおよび作成側カウントは、フォワードアクノレッジメントおよびバックワードアクノレッジメントの形の借方のシステムにより更新される。両種のアクノレッジメントは、図7に示すアクノレッジメントネットワークワード280等のネットワークワードである。アクノレッジメントネットワークワード280は、図3のネットワークワード188と同一のフィールドを有し、同じ要素/フィールドは同一の要素番号が付される。アクノレッジメントネットワーク280ワードは、タスク活性化の最終ステップとしてタスクにより送信される。両方の場合において、ペイロードフィールド198は、4個のサブフィールド、すなわち、アクノレッジメント種類サブフィールド282(1ビット)、ポートサブフィールド284、(3)タスクサブフィールド286、およびAck値サブフィールド288、を有する。
Consumer counts and producer counts are updated by the debit system in the form of forward acknowledgment and backward acknowledgment. Both types of acknowledgments are network words, such as the acknowledgment network word 280 shown in FIG. The acknowledgment network word 280 has the same fields as the
タスクが各活性化の終了時にタスクが実行する一連のアクノレッジメントが、以下に説明される。タスクの各出力ポートに対して、消費側入力ポートおよび消費側タスクを指定するフォワードアクノレッジメントが消費側ノードに送信される。Ack値は、タスクが消費側入力ポートに送信したPTPワードの個数である。出力ポートおよびタスクを指定するバックワードアクノレッジメント(自己ack)は、タスクが存在するノードに送信される。Ack値は、タスクが出力ポートを介して送信したPTPワードの個数である。 A series of acknowledgments that the task performs at the end of each activation are described below. For each output port of the task, a forward acknowledgment specifying the consumer input port and the consumer task is sent to the consumer node. The Ack value is the number of PTP words that the task has sent to the consuming input port. The backward acknowledgment (self ack) specifying the output port and task is sent to the node where the task resides. The Ack value is the number of PTP words that the task has transmitted via the output port.
タスクの各入力ポートに対して、作成側出力ポートおよび作成側タスクを指定するバックワードアクノレッジメントは、作成側ノードに送信される。Ack値は、タスクが、入力ポートのバッファから消費した32ビットワードの個数にマイナス符号を付した値である。入力ポートおよびタスクを示すフォワードアクノレッジメント(自己ack)は、タスクが存在するノードに送信される。Ack値は、タスクが入力ポートのバッファから消費した32ビットワードの個数にマイナス符号を付した値である。
ハードウェアタスクマネージャ
For each input port of the task, a backward acknowledgment specifying the creator output port and the creator task is sent to the creator node. The Ack value is a value obtained by adding a minus sign to the number of 32-bit words that the task has consumed from the buffer of the input port. Forward acknowledgment (self ack) indicating the input port and task is sent to the node where the task resides. The Ack value is a value obtained by adding a minus sign to the number of 32-bit words consumed by the task from the buffer of the input port.
Hardware task manager
図4に示すハードウェアタスクマネージャ200は、受信するアクノレッジメントに応答して消費側カウントおよび作成側カウントを更新する機能を担当するノードラッパーの1部分である。ハードウェアタスクマネージャ200はまた、これらのカウントの符号ビットを監視し、カウントの適切な組が有効化されるとタスクを起動する。この最後の任務は、ポートではなくタスクと関連付けられた2つの符号付きカウント、すなわちタスク入力カウントおよびタスク出力カウントを用いて満足される。タスクの入力(出力)カウントは、有効化されたタスク消費側(作成側)カウントの個数を反映する。タスクカウントはその値が非負である場合、有効化される。タスクは、その入力カウントおよび出力カウントの両方が有効化されると、有効化され、実行のために利用可能となる。
The
受信するアクノレッジメントは、様々なカウントを更新し、それによりタスクは以下のように起動される。フォワードアクノレッジメントが受信されると、指定されたポートが入力ポートとして解釈され、Ack値が、対応する消費側カウントに加えられる。消費側カウントが、無効状態から有効状態へと(有効状態から無効状態へと)遷移すると、指定されたタスクの入力カウントは、1だけインクリメント(デクリメント)される。バックワードアクノレッジメントが受信されると、指定されたポートが出力ポートとして解釈され、Ack値が、対応する作成側カウントに加えられる。作成側カウントが、無効状態から有効状態へと(有効状態から無効状態へと)遷移すると、指定されたタスクの出力カウントは、1だけインクリメント(デクリメント)される。バックワードアクノレッジメントまたはフォワードアクノレッジメントが受信され、指定されたタスクの入力カウントおよび出力カウントの両方が有効化されると、そのタスクは、もし実行準備完了キュー上にない場合は、実行準備完了キュー上に置かれる。タスクは、キューの先頭に到達すると起動される。 Acknowledgments that receive update the various counts so that the task is triggered as follows. When forward acknowledgment is received, the designated port is interpreted as an input port and an Ack value is added to the corresponding consumer count. When the consumer count transitions from the inactive state to the active state (from the active state to the inactive state), the input count of the designated task is incremented (decremented) by one. When a backward acknowledgment is received, the designated port is interpreted as an output port and an Ack value is added to the corresponding creator count. When the creator count transitions from the invalid state to the valid state (from the valid state to the invalid state), the output count of the designated task is incremented (decremented) by one. If a backward acknowledgment or forward acknowledgment is received and both the input count and output count of the specified task are enabled, then the task is on the ready to run queue if it is not on the ready to run queue Will be put. The task is launched when it reaches the top of the queue.
これらの動作は、タスクに対する始動規則を具体化する。これらにより、タスクは実行準備完了キューに置かれることとなり、最終的に十分な個数の消費側カウントおよび十分な個数の作成側カウントが有効化されると、タスクは実行される。これらの十分な個数の具体的数値は、タスクの入力カウントおよび出力カウントの初期値により決定される。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個が有効化されなければならない。
These actions embody start-up rules for the task. As a result, the task is placed in the execution ready queue, and the task is executed when a sufficient number of consumer counts and a sufficient number of creator counts are finally activated. These sufficient numbers of concrete values are determined by the initial values of the task's input count and output count. I (O) is the number of input (output) ports associated with the task, IC Initial (OC Initial ) is the initial value of the task's input (output) count, and all consumption as described above Assuming that the side count is initially in an invalid state and all the creator counts are initially in a valid state, the task is:
Of the I consumer counts, -IC Initiail is in active state,
If (O-OC Initial ) out of the O producer counts are in the valid state, start up.
For example, for I = 4
If IC Initial = -1, then one of the four consumer counts must be enabled.
If IC Initial = -2, then two of the four consumer counts must be validated.
If IC Initial = -3, 3 out of 4 consumer counts must be enabled.
If IC Initial = -4, then 4 of the 4 consumer counts must be enabled.
For O = 4,
If OC Initial = 3, then one of the four creator counts must be enabled.
If OC Initial = 2, then two of the four producer counts must be enabled.
If OC Initial = 1, then three of the four producer counts must be enabled.
If OC Initial = 0, then 4 of the 4 creator counts must be enabled.
図1におけるACE100および図2におけるACM200等のマルチプロセッサシステムのプログラミングは、ストリームCプログラム言語と称され得るものを用いてなされ得る。
ストリームCモジュール
Programming of a multiprocessor system such as
Stream C module
ストリームCプログラムにおいては、並行処理を表現するための機構は1つのみ存在する。その機構とは、すなわち、プログラムのモジュール(およびモジュールのようなストリーム式)の並行演算を用いることである。シンタックス的には、モジュールは、C関数と極めて類似するが、セマンティクス的には、モジュールと関数とは異なる。C関数(サブルーチン)は、コールされたときにのみ、動作を始める。コールされると、制御は、通常は入力引数とともに、C関数に渡される。次いで、C関数はタスク/演算を実行し、終了すると、出力結果とともに制御を返す。C関数とは異なり、モジュールはコールされることがなく、また制御は、モジュールに渡されることも、モジュールから返されることもない。代わって、モジュールは、他のモジュールおよび外部世界との進行中の相互作用を、入力ポートおよび出力ポートを通して実行する。これらのポートを通して、モジュールは入力値のストリームを受け取り、出力値のストリームを発行する。 In a stream C program, there is only one mechanism to express parallelism. The mechanism is to use the parallel operation of modules (and stream expressions like modules) of a program. Syntactically, modules are very similar to C functions, but semantically they are different from modules and functions. The C function (subroutine) starts its operation only when it is called. When called, control is passed to the C function, usually with input arguments. The C function then performs the task / operation and, upon completion, returns control with the output result. Unlike C functions, modules are never called, and control is neither passed to nor returned from modules. Instead, the modules perform ongoing interactions with other modules and the outside world through input and output ports. Through these ports, the module receives a stream of input values and issues a stream of output values.
モジュールプロトタイプのシンタックスはC関数プロトタイプのシンタックスと、3つの例外を除いて、同じである。第1に、キーワードstreamがモジュールプロトタイプに先行する。このキーワードは、各モジュール入力およびモジュール出力が、個別の値とではなく、指定された型の値のストリームと関連付けられていることを、コンパイラ/リンカに伝える。第2に、モジュールが複数の主力ストリームを有することを可能にするために、モジュールの戻り値型は、シンタックスにおいて入力パラメータリストと同一である、括弧で囲まれたリストにより置き換えられ得る。第3に、配列の概念をモジュールへと拡張するために、角括弧で囲まれた配列インデックスのリストは、モジュール名の直後および入力引数リストの直前に挿入され得る。モジュール配列については以下で論じる。 The syntax of module prototypes is the same as that of C function prototypes, with three exceptions. First, the keyword stream precedes the module prototype. This keyword tells the compiler / linker that each module input and module output is associated with a stream of values of the specified type, not with individual values. Second, to allow the module to have multiple main stream, the module's return type can be replaced by a parenthesized list that is identical in syntax to the input parameter list. Third, in order to extend the concept of arrays into modules, a bracketed list of array indices may be inserted immediately after the module name and just before the input argument list. The module arrangement is discussed below.
以下の式、
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);
The following formula,
stream int moduleA (int, int);
stream (int, int) moduleB (int, int);
Are two examples of module declarations. Parameter names are omitted here. Because parameter names are not required in module declarations (as opposed to module definition or module instantiation). However, parameter names may also be included at the programmer's discretion, usually as an aid to storage, to the input, and also to the output if there are multiple outputs. For example, two declarations can be expressed as:
stream int moduleA (int a, int b);
stream (int x, int y) moduleB (int a, int b);
第1の宣言は、moduleAが2つの入力ストリームを有し、その両方が整数型であること、および単一の出力ストリームを有し、これもまた整数型であることを示す。第2の宣言は、moduleBが2つの入力ストリームを有し、その両方が整数型であること、および2つの出力ストリームを有し、これらもまた整数型であることを示す。 The first declaration indicates that moduleA has two input streams, both of which are of integer type, and that it has a single output stream, which is also of integer type. The second declaration indicates that moduleB has two input streams, both of which are of integer type, and which have two output streams, which are also of integer type.
C関数の定義と同様に、モジュールの定義は、波括弧({および})で囲まれた本体を有する。C関数の定義の場合と同様に、各モジュール入力(および出力が複数ある場合は、各出力モジュール)は識別子が割り当てられる。以下は、モジュール定義の2つの例である。
stream int moduleA (int a, int, b)
{
//モジュール本体
}
stream (int x, int y) moduleB (int a, int b)
{
//モジュール本体
}
Similar to the C function definition, the module definition has a body enclosed in braces ({and}). As with the C function definition, each module input (and each output module if there is more than one output) is assigned an identifier. The following are two examples of module definition.
stream int moduleA (int a, int, b)
{
/// main body of module
}
stream (int x, int y) moduleB (int a, int b)
{
/// main body of module
}
モジュールインスタンス化は、C関数コールに対するモジュールにおける対応物である。関数コールと同様に、モジュールインスタンス化は、モジュールがどこで用いられるかである。これら2種類の表現のシンタックスは同様であるが、セマンティクスは異なる。Cコードの1部分は、以下のように表現され得る。
int x, y;
int F (int, int);
.
.
.
int z = F(4, x+5*y);
Module instantiation is the counterpart in modules to C function calls. Like function calls, module instantiation is where modules are used. The syntax of these two types of expressions is similar but the semantics are different. One part of the C code can be expressed as follows.
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を有する。 The first statement declares that x and y are positive numbers, while the second statement declares that F is a function with two integer parameters and one integer result. The last statement is an assignment statement containing the function call F (4, x + 5 * y), where the function F (4, x + 5 * y) corresponds to the two parameters, namely the two parameters of F, Equation 4 and It has the formula x + 5 * y.
この部分的コードのストリーム版は、以下のようになる。
stream int x, y;
stream int F(int, int);
.
.
.
stream int z = F(4,x+5*y);
The streamed version of this partial code is as follows:
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を有する。 In this stream version, in each of these statements, the keyword stream is at the top. Because of the change in syntax, there is also a dramatic change in semantics. Instead of individual values, a stream of values is used. Thus, the first statement declares that x and y are integer streams, while the second statement declares that F is a module with two integer stream inputs and integer stream outputs. The last statement is an assignment statement that includes module instantiation F (4, x + 5 * y). This F (4, x + 5 * y) has stream expression 4 and stream expression x + 5 * y, corresponding to two arguments, namely two parameters of F.
関数コールの場合は、代入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のインスタンスは永続的である)。
In the case of a function call, whenever substitution z = F (4, x + 5 * y) is executed, expressions 4 and 4, x + 5 * y are evaluated, and the resulting two values are used as parameters to call function F Supplied to After a certain time, F returns a value. In the case of module instantiation, the assignment statement z = F (4, x + 5 * y) is not executed, and the function F is not called. Instead, at system initialization, just before the stream C program starts execution, an instance of the function F is instantiated, whereby the instance receives an integer stream on its two input ports, And is ready to create an integer stream on its output port. When program execution is started, an instance of F retains its operating state (ie, an instance of F is permanent) until the end of the program.
この簡単な例は、ストリームCにおいて相互作用するモジュールの集団を作成するために用いられる一般的な機構を示すものである。各モジュールのインスタンス化により、別個のモジュールインスタンスがシステム初期化時に作成される。ひとたび作成(インスタンス化)されると、モジュールインスタンスは、その入力ポート上で値のストリームを受け取ること、およびその出力ポート上で値のストリームを作成することの準備が完了する。さらに、プログラム実行が開始されると、モジュールインスタンスは、プログラム終了時まで、動作状態を保持する。 This simple example shows the general mechanism used to create a collection of interacting modules in stream C. With each module instantiation, a separate module instance is created at system initialization. Once instantiated, the module instance is ready to receive a stream of values on its input port and to create a stream of values on its output port. Furthermore, when program execution is started, the module instance holds the operating state until the program end time.
複数の出力ポートを有するモジュールのインスタンス化の一般的な形は以下の通りである。
(<識別子リスト>) <モジュール識別子> (<式リスト>)
入力引数が式であるのに対し、出力引数は識別子である。これらの識別子は、名称がない出力ストリームに名称を与えるよう機能する。上記のストリーム代入文は、名称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);
The general form of instantiation of a module with multiple output ports is as follows.
(<Identifier list>) <module identifier>(<expressionlist>)
Output arguments are identifiers, while input arguments are expressions. These identifiers serve to provide a name for the unnamed output stream. The above stream assignment statement plays the same role by assigning the name z to the output stream without the name F (4, x + 5 * y). For example,
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を与えるよう機能する。
As mentioned above, F has two integer stream inputs, but in contrast to the previous example, this F has two integer stream outputs. These two output streams have identifiers (w,
Appears upon instantiation of F as a list of z). Note that this works to give the two output streams the names w and z.
モジュール本体内部の文は、2つのカテゴリー、すなわち、ストリームのみに関与するストリーム文と、Cの文の全範囲を含む他に、スレッドをストリームから読み出すこととスレッドをストリームに書き込むこととを可能にする文を含むスレッド文と、に分類される。各モジュールのインスタンス化により、別個のモジュールインスタンスがシステム初期化時に作成されるため、ストリームCにおいては、モジュールが、その本体内において、またはサブモジュールの本体内において、モジュール自体のインスタンス化を有することはできない。換言すると、モジュール参照の循環性は不可能である。この禁止は、無限個のモジュールインスタンスのインスタンス化という困難なタスクを回避することを支援する。 The statements inside the module body allow you to read threads from the stream and write threads to the stream besides stream statements involving only the stream, including the full range of C statements Are classified as thread statements that contain In stream C, a module has its own instantiation within its body, or within the body of a submodule, as a separate module instance is created at system initialization by the instantiation of each module I can not do it. In other words, the cyclicity of the module reference is not possible. This prohibition helps to avoid the difficult task of instantiating an infinite number of module instances.
ストリームCモジュールにおいて、制御を返すという概念は存在せず、したがってリターン文は適さない。モジュールにおいて、出力値はモジュールの出力ストリームに単に挿入される。しかし、それを行うためには、出力ストリームは名称を有さなければならない。括弧で囲まれた名称を有する出力ストリームのリストを有するモジュールに対しては、それは問題ではない。しかし、モジュールプロトタイプがモジュールの出力ストリームの型のみを提供する場合は、問題となる。その場合、モジュールの本体内のコードは、ストリームドメインにおいてもまたはスレッドドメインにおいても、キーワードoutをデフォルトモジュール出力ストリームの名称として用いることができる。この用法は、以下の部分的コードにおいて例示される。
stream int moduleA (int a, int b)
{
.
.
.
out = a+b;
.
.
.
There is no notion of returning control in the stream C module, so the return statement is not suitable. In modules, output values are simply inserted into the module's output stream. However, to do that, the output stream must have a name. That is not a problem for modules that have a list of output streams with names in parentheses. However, it is a problem if the module prototype only provides the type of output stream of the module. In that case, the code within the body of the module can use the keyword out as the name of the default module output stream, either in the stream domain or in the thread domain. This usage is illustrated in the partial code below.
stream int moduleA (int a, int b)
{
.
.
.
out = a + b;
.
.
.
関数がプログラムの演算ビルディングブロックを提供するのに対して、モジュール、およびモジュールと提携するストリームは、ストリームCプログラムに典型的な相互作用網および並行動作のための枠組を提供する。モジュールは値のストリームを処理するが、そのことにより、モジュールがストリーム内の個々の値にアクセスすることおよびこれらの値を関数に提供することが不可能となるわけではない。同様に、モジュールは、関数の出力値にアクセスすること、およびその値をストリームに挿入することも可能である。一方、関数はモジュールを参照することができない。なぜなら、関数内には係る相互作用のための機構が存在しないためである。能力におけるこの非対称性により、関数がプログラムヒエラルキー上でより低いレベルにある一方、モジュールはより高いレベルにあることがわかる。 The functions provide the operation building blocks of the program, whereas the modules, and the streams associated with the modules, provide a framework for interaction networks and parallel operations typical of stream C programs. A module processes a stream of values, which does not make it impossible for the module to access the individual values in the stream and to provide these values to the function. Similarly, the module can access the output value of the function and insert that value into the stream. On the other hand, functions can not refer to modules. This is because there is no mechanism for such interaction in the function. This asymmetry in capability shows that the module is at a higher level while the function is at a lower level on the program hierarchy.
モジュールと関数との違いが実質的である一方で、モジュールと関数とが同様である1つの領域が存在する。それは、モジュールおよび関数の両方が副作用をサポートする点である。すなわち、モジュールおよび関数の両方が、それぞれの入力ポートおよび出力ポートとは独立的に、外部データ構造を操作し得る。これは、モジュールが副作用を有し得るスレッドを含み得る事実に由来する。 While the differences between modules and functions are substantial, there is one domain where modules and functions are similar. That is, both modules and functions support side effects. That is, both modules and functions can manipulate external data structures independently of their respective input and output ports. This stems from the fact that a module may contain threads that may have side effects.
図8Aは、モジュール300と、モジュール300に対してデータ/制御を提供するいくつか(ゼロ個からN個)の入力ストリーム302と、次のモジュール/関数に対してデータ/制御を提供するいくつか(ゼロ個からN個)の出力ストリーム304とを含む、一般的なモジュールを示す。出力ストリームを有さないモジュールは「シンク」であり、入力ストリームを有さないストリームは「ソース」である。
FIG. 8A shows
図8Bは、2つのモジュール、すなわちモジュールA300およびモジュールB310を示す図であり、各モジュールは、入力ストリーム302および312と、出力ストリーム304および314とを有する。モジュールA300の出力ストリーム304はモジュールB310の入力ストリーム312に接続される。モジュールA300は、CPUコア308上で実行されるようマッピングされ、モジュールB310は第2のCPUコア318上で実行されるようマッピングされる。コア308、318、および328は、図2のノード180と同様である。
FIG. 8B is a diagram showing two modules, namely
図8Cは、モジュールA300およびモジュールB310をCPUコア308等の同一のCPUコアにマッピングすることを示す図である。この事例において、モジュール300および310は、任意の他の別個の制御スレッドのように動作する。第2コア318上で実行されるオペレーティングシステムは、モジュール300および310を、プリエンプティブマルチタスキングに基づいてスケジューリングするか、または完了/解放まで実行し得る。両方のモジュール300および310および入力/出力ストリーム302、312、および304、314は、「永続的」である(すなわち、これらは処理実行準備完了状態に留まる)ため、演算を実行するための「十分な」入力ストリームデータの、および出力ストリームが演算されたデータを伝達することができる「十分な」スペースの、両
方の利用可能性に基づいてモジュールをいつスケジュールするかに関する追加情報は、従来のオペレーティングシステムに提供されなければならない。
FIG. 8C is a diagram illustrating mapping of the
多様な異なるアルゴリズムが、モジュールからコアへのマッピングを実行するために用いられ得る。これらのアルゴリズムは、キャッシュ近傍を含み得る。なお、キャッシュ近傍においては、最大個数のストリームを共有するモジュールは、共有されたDRAMに後続される共有されたL3キャッシュに後続される共有されたL2キャッシュに後続されるL1キャッシュを共有するコアに置かれる。これらのアルゴリズムは、物理近傍アルゴリズムも含み得る。なお、物理近傍アルゴリズムにおいては、最大個数のストリームを共有するモジュールは、互いに物理的に近接するコアに置かれる。例えば、アルゴリズムはダイから始まり、次いで、マザーボード上の集積回路へと、次いでラック上のマザーボードへと、次いで建物の同一階のラックへと、次いで地理的に近接する建物へと移行し得る。他のアルゴリズムは、次の利用可能なフリーであり得る。なお、そこにおいては、CPU使用率(現在の使用率、または一定期間にわたる重み付き平均使用率)または順番上次に利用可能なコアに基づく次の「自由な」コアに基づいて、モジュールがコアに割り当てられる。他のアルゴリズムは、予想負荷であり得る。なお、これは、評価された統計的サンプリングに基づいて、モジュールおよびコアを選択する。コア利用の実行平均が、モジュールを、最も負荷が軽いコアにロードするために用いられ得る。他のアルゴリズムは、ユーザによる指定である。なお、ここでは、ユーザ指定によるバーチャルコアIDが、全モジュールを物理コアID上に置くために用いられる。バーチャルコアIDの個数が物理的に利用可能なコアを越えると、複数のモジュールが、利用可能な物理コアにわたって均等にロードされる。 A variety of different algorithms can be used to perform the module to core mapping. These algorithms may include cache neighborhoods. Note that in the cache neighborhood, the modules sharing the largest number of streams are to the core sharing the L1 cache following the shared L2 cache following the shared L3 cache following the shared DRAM Will be put. These algorithms may also include physical neighborhood algorithms. In the physical neighborhood algorithm, modules sharing the maximum number of streams are placed in cores physically close to each other. For example, the algorithm may start at the die and then move to integrated circuits on the motherboard, then to the motherboard on the rack, then to the rack on the same floor of the building, and then to the geographically close building. Another algorithm may be the next available free. Note that the modules are cored based on the CPU utilization (current utilization or weighted average utilization over time) or the next "free" core, which in turn is based on the next available core. Assigned to Another algorithm may be the expected load. Note that this selects modules and cores based on the estimated statistical sampling. A running average of core utilization may be used to load the module onto the lightest core. Another algorithm is user specified. Here, the virtual core ID specified by the user is used to place all modules on the physical core ID. When the number of virtual core IDs exceeds physically available cores, multiple modules are loaded evenly across the available physical cores.
図8Dは、モジュールA300に存在し、入力ストリーム302および出力ストリーム304において用いられ得る、様々なデータ構造330、332、および334を示す。メモリ/キャッシュまたはTLBのいずれかに存在し得るデータ構造330、332、および334は、シングルコアまたはマルチコアシステムが、入力ストリーム302等の入力ストリームから出力ストリーム304等の出力ストリームへとデータを搬送すること、入力ストリーム302をモジュールA300等のモジュールへと搬送すること、およびモジュールA300を出力ストリーム304へと入力することをスケジュールするために必要となる重要な情報を含む。各モジュールに対して、そのモジュールをユニークに識別し、そのモジュールに対するすべての入力ストリームをユニークに識別し、そのモジュールのすべての出力ストリームをユニークに識別し、入力ストリームおよび出力ストリームの「接続」方法をユニークに識別し、コアを識別し、モジュールが1つのコアから他のコアへとリロケートされるよう、すなわち仮想メモリを介してスワップアウトされるよう状態情報を保持する、情報が存在する。ストリームは動的にモジュールから追加または削除され得、モジュールは動的にコアから追加または削除され得る。
ストリーム
FIG. 8D shows
stream
ストリームCプログラム言語におけるストリームという用語は、すべて同じデータ型であり且つ典型的に一定期間にわたって利用可能状態となる、一連のデータ値を指す。しかし、ストリームCにおいては、ストリームは、入力および出力のための枠組を遥かに越える機能を提供する。ストリームは、第1クラスのオブジェクト、すなわち変数の地位にほぼ匹敵する地位へと高められている。これは、ストリームが識別子と結合され得る(すなわち、ストリームに名称が与えられ得る)こと、関数の入力パラメータ(すなわちモジュールの入力パラメータ)と結合され得ること、関数の出力(すなわち、モジュールの入力パラメータ)と結合され得ること、式中のパラメータと結合され得ること、および式の出力と結合され得ることを意味する。 Stream The term stream in the C programming language refers to a series of data values that are all of the same data type and are typically available for a period of time. However, in stream C, the stream provides functionality far beyond the framework for input and output. The stream is enhanced to a position that is roughly comparable to that of the first class of objects, ie, variables. This means that the stream can be combined with the identifier (ie, the stream can be given a name), that it can be combined with the input parameter of the function (ie input parameter of the module), the output of the function (ie input parameter of the module) Means that it can be combined with the parameters in the formula, and can be combined with the output of the formula.
ストリームは、単一のデータ型の値を、1つまたは複数のストリームソースから1つま
たは複数のストリームデスティネーションへと伝える。この運搬がどのように遂行されるかについての正確な詳細は、実装に依存し、とりわけ、ストリームが単一の半導体ダイに限定されるかどうか、またはストリームが数メートルまたあるいは数千キロメートルにわたるかどうかに依存する。性能問題に対処する場合を除き、プログラマはこれらの詳細を考慮する必要はなく、4つのストリーム属性、すなわち、ストリーム型、ストリーム名、ストリームソース、およびストリームデスティネーションに関する、ストリームのこれらの側面のみを考慮すればよい。
A stream conveys values of a single data type from one or more stream sources to one or more stream destinations. The exact details of how this transport is accomplished depends on the implementation, and in particular whether the stream is limited to a single semiconductor die, or whether the stream spans a few meters or even thousands of kilometers It depends on you. Unless dealing with performance issues, programmers do not need to consider these details, only the four stream attributes: stream type, stream name, stream source, and stream destination. It should be taken into consideration.
ストリーム型は、伝えられる値の型を示す。ポインタおよびtypedefにより定義されるデータ型を含む、Cの正当なデータ型であり得るストリーム型は、例えば、モジュール入力または出力パラメータとして現れることにより文脈により暗黙的に特定され得るか、または以下に説明するストリーム宣言を用いて明示的に特定され得る。 The stream type indicates the type of value being conveyed. Stream types that may be legal data types of C, including data types defined by pointers and typedefs, may be implicitly specified by context, for example by appearing as module input or output parameters, or described below It can be explicitly specified using the stream declaration.
ストリームソースは、値がストリームに置かれる位置である。可能なストリームソースは、モジュール定義の入力パラメータ、モジュールインスタンス化の出力、ストリーム式の出力、およびスレッド(以下に説明する)を含む。ストリームデスティネーションは、ストリームがそのポイントへと値を伝える位置である。可能なストリームデスティネーションは、モジュール定義の出力パラメータ、モジュールインスタンス化の入力引数、ストリーム式の入力、およびスレッドを含む。省略可能なストリーム名は、ストリームがモジュール入力またはモジュール出力として現れるときに、またはストリームがストリーム宣言において導入されるときに、ストリームに割り当てられる名称/識別子である。名称を有さないストリームの1つの例は、ストリーム割り当てにより名称が割り当てられていないストリーム式の出力ストリームである。 The stream source is where the values are placed in the stream. Possible stream sources include module defined input parameters, module instantiation outputs, stream expressions output, and threads (described below). The stream destination is the position at which the stream conveys its value to that point. Possible stream destinations include module defined output parameters, module instantiation input arguments, stream expression inputs, and threads. An optional stream name is a name / identifier assigned to a stream when the stream appears as module input or module output, or when the stream is introduced in a stream declaration. One example of a stream without a name is a streamed output stream that has no name assigned by stream assignment.
ストリーム属性の概念は、関数Fの宣言およびモジュールMの部分的な定義を含む、以下の部分的コードにより示される。
stream int F(int, int);
stream (int zStrm) M(int xStrm, int yStrm)
{
・
・
・
zStrm = xStrm*yStrm+F(xStrm, yStrm);
・
・
・
}
The notion of stream attributes is illustrated by the following partial code, including the declaration of function F and the partial definition of module 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つのデスティネーションを有する。 Here, there are three streams with names: xStrm, yStrm and zStrm, all of which are data types of int. xStrm and yStrm each have a single source which is an input parameter of module M. The destinations of xStrm and yStrm are represented by two instances of xStrm and yStrm, which appear in substitution expressions in the body of M, (remember, in C, substitution is also an expression). These instances represent inputs to assignment expressions. Thus, xStrm and yStrm each have a single source and two destinations.
ストリームの式は、ストリームの式においては変数の代わりに入力ストリームが存在す
ることを除いて、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は単一のソースおよび単一のデスティネーションを有する。
The stream expression is the same as the C expression except that in the stream expression there is an input stream instead of a variable. The stream expression also has an output stream, which conveys the results from the expression evaluation. By default, the output stream does not have a name, but it is possible to assign a name by using stream substitution just as you did in the above substitution. Therefore, the stream expression xStrm * yStrm + F (xStrm, yStrm)
The output stream of is stream assignment zStrm = xStrm * yStrm + F (xStrm, yStrm)
Assigns the name zStrm. Either of these two formulas can be considered to be the source of zStrm. The destination of zStrm is the output stream of module M indicated by the output parameter zStrm of module M.
stream (int zStrm) M (int xStrm, int yStrm)
Thus, xStrm has a single source and a single destination.
ストリームの最も重要な属性は、ストリームが値を伝える際に果たす役割に関する。係る属性は4つ存在する。すなわち、a)値は、ストリームソースにおけるか、またはinitialize()関数を使用するシステム初期化時以外は、ストリームに入らない、b)単一のソースにおいてストリームに入る値は、完全に時間順に整列される、c)ひとたびストリームに入ると、値はやがてはすべてのストリームデスティネーションに送達され、もしデスティネーションが複数存在する場合は、値の別個の複写が各デスティネーションに送達される、およびd)単一ソースからの値は、値がストリームに入ったのと同一の順番で(すなわち、ストリームにおいて値の飛び越しは存在しない)、各ストリームデスティネーションにおいて受け取られる。これらの4つの属性が、ストリームが値の運搬について提供する唯一の保証である。これら4つの属性から論理的帰結として従わない任意の他の属性は、一般的なストリーム属性ではない。 The most important attribute of the stream relates to the role that the stream plays in conveying the value. There are four such attributes. That is, a) the value does not enter the stream except at the stream source or at system initialization using the initialize () function, b) the value entering the stream at a single source is completely ordered in time (C) once in the stream, the values are delivered to all stream destinations eventually, and if there are multiple destinations, separate copies of the values are delivered to each destination, and d The values from the single source are received at each stream destination in the same order as the values entered the stream (ie there is no jump in values in the stream). These four attributes are the only guarantees that the stream provides for the transport of values. Any other attribute that does not follow as a logical outcome from these four attributes is not a general stream attribute.
ストリームが義務を負うのは、ただ最終的に値を送達することのみである。したがって、ストリームのレイテンシ、すなわち値がストリームソースからストリームデスティネーションへと移動するに要する時間は不定である。事実、レイテンシは、時間に応じて、または同じストリームのソース・デスティネーション対の間で、変動し得る。しかし、レイテンシが一定であるかまたは少なくとも限界を有することは、(プログラミングモデルよりもむしろ)システム実装により提供される保証に依存することにより達成され得る。例えば単一半導体ダイに限定されるソース・デスティネーション対は、通常、そのレイテンシは限界を有する。 The stream is obligated only to deliver the value ultimately. Thus, the latency of the stream, ie the time it takes for the value to move from the stream source to the stream destination, is indeterminate. In fact, latency can vary with time, or between source-destination pairs of the same stream. However, constant or at least bounded latency can be achieved by relying on the guarantees provided by the system implementation (rather than the programming model). For example, source-destination pairs limited to a single semiconductor die usually have limited latency.
また、上述の4つの属性は、ストリームの決定性および非決定性(不確定性)を暗示する。単一ソースを有するストリームに対しては、4つの属性は決定的なストリーム挙動を保証する。それは、値が単一ソースストリームに置かれる順番が、値がすべてのストリームデスティネーションに送達される順番を完全に決定することを意味する。しかし、複数のソースを有するストリームの場合、状況は大きく異なる。複数のストリームソースから生じる問題を示すために、以前のセクションに継続する以下の部分的コードの以下の適用を考慮してみる(outは単一出力モジュールのデフォルト出力ストリームである)。
int F(int);
stream int M(int xStrm, int xStrm)
{
・
・
・
out = xStrm*xStrm + F(xStrm);
・
・
・
}
Also, the four attributes mentioned above imply the determinacy and non-determinacy (uncertainty) of the stream. For streams with a single source, four attributes ensure deterministic stream behavior. That means that the order in which the values are placed in a single source stream completely determines the order in which the values are delivered to all stream destinations. However, in the case of a stream with multiple sources, the situation is very different. To illustrate the problem arising from multiple stream sources, consider the following application of the following partial code continuing to the previous section (out is the default output stream of a single output module):
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のそれぞれのデスティネーションに到達する前に、合併または交互配置されることを意味する。 The two input parameters of module M are identical xStrm. From the four attributes, the values entered into xStrm through the first input parameter of module M will be received at each of the three destinations of xStrm in the same order as these values entered the stream. The values entered into xStrm through the second input parameter of module M will be received in each of the three destinations of xStrm in the same order as these values entered the stream. This means that the values of the two streams are merged or interleaved before reaching the respective destinations of xStrm.
どのように交互配置が実行されるかは、一般に、プログラムの構成により影響される。例えば、上記のプログラムの欠落部分は、パラメータ1とパラメータ2との値の間で正確な交互配置がされるように構成され得る。例えば、モジュールMの2つの入力パラメータ(ストリーム)xStrmに到達する整数が、次の順序
How the interleaving is performed is generally influenced by the configuration of the program. For example, the missing part of the above program may be configured to be correctly interleaved between the values of
を有する場合、式
out = xStrm*xStrm + F(xStrm)
のxStrmの3つのデスティネーションのそれぞれに到着する順序は、
If we have the formula out = xStrm * xStrm + F (xStrm)
The order of arrival at each of the three xStrm destinations is
という形になり得る。しかしながら、このようにプログラムにより課される決定性がい
つも成り立つとは限らず、複数のストリームソースからの値が非決定的に交互配置される場合もある。さらに、ターゲットシステムによっては、これらの非決定的交互配置が、ストリームデスティネーション毎に異なり得る。したがって、例えば、モジュールMの2つ
の入力パラメータ(ストリーム)上に到達する値が上記の場合と同じである場合、xStrmの3つのデスティネーションに到達する順序は、
It can be in the form of However, the determinacy imposed by the program does not always hold in this way, and values from multiple stream sources may be interleaved non-deterministically. Furthermore, depending on the target system, these non-deterministic alternations may differ from one stream destination to another. Thus, for example, if the values reached on the two input parameters (streams) of module M are the same as in the above case, the order of arriving at the three destinations of xStrm is
という形で始まり得る。複数ソースストリームのデスティネーションにおける到着順序
の非決定性は、単一ソースストリームのすべてのデスティネーションにわたる到着順序の一定性と対比的である。到着順序が一定である場合、以下の有用な表記を適用することが可能となる。単一ソースストリームssStrmおよび非負である整数iに対して、
ssStrm (i)
はssStrmのすべてのデスティネーションに現れる第i番目の値を示す。慣例的に、ssStrm(0)はすべてのデスティネーションに現れる第1の値を示す。
It can start in the form of The nondeterminism of arrival order at multiple source stream destinations is in contrast to the consistency of arrival order across all destinations of a single source stream. If the arrival order is fixed, it is possible to apply the following useful notation: For a single source stream ssStrm and a non-negative integer i
ssStrm (i)
Indicates the ith value that appears in all destinations in ssStrm. By convention, ssStrm (0) denotes the first value appearing at all destinations.
値がストリームデスティネーションに到達すると、そのデスティネーションがモジュール定義またはモジュールインスタンス化入力引数である場合、その値は、モジュール境界の他方の側におけるストリームへと渡される。このように値は、移行状態に留まる。デスティネーションがストリーム式の入力またはスレッドである場合、値はFIFOキューに置かれる。 When the value reaches the stream destination, if the destination is a module definition or module instantiation input argument, the value is passed to the stream on the other side of the module boundary. Thus, the value remains in transition. If the destination is a streamed input or thread, the value is placed in the FIFO queue.
移行状態に留まることを示すために、以下の部分的コードを示す。
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の外部にあるストリームに達する。
The following partial code is shown to indicate staying in transition:
stream int module1 (int);
stream int module2 (int xStrm)
{
・
・
・
out = modulel1 (xStrm);
・
・
・
}
This partial code contains two modules, namely module1 and module2, each of these two modules having a single input stream and a single output stream, and streams xStrm and yStrm with two names (both and exists in the definition (body) of module2. The only destination of xStrm, module1 (xStrm), is an input argument for instantiation of module1. The value reaching this destination simply passes the boundary of
The same is true for the values reaching. Because this destination is an output parameter of
他の例は、ストリームデスティネーションが以下の部分的コード等のストリーム式の入力である場合である。
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が個々の値を供給されるべきであることを意味する。
Another example is where the stream destination is a streamed input, such as the following partial code:
stream int F (int, int);
stream int M (int xStrm, int yStrm)
{
・
・
・
out = xStrm * yStrm + F (xStrm, yStrm);
・
・
・
}
Stream expression xStrm * yStrm + F (xStrm, yStrm)
Is in the body of module M, this stream expression contains two destinations of xStrm and two destinations of yStrm. This stream expression includes two operators * and + and a function F, which are normal C syntax. This means that two operators and the function F should be supplied with individual values in order to evaluate this expression.
キューはストリームCのリンカ/ローダにより自動的に挿入され、ストリームCのランタイムにより管理される。ランタイムの任務の中には、キューが空き状態にあるときに信号を発すること、およびどのキューも確実にオーバーフローしないようにすることである。プログラマは特定の量を以下で説明するようにpragmaコマンドにより要求し得るが、各キューは関連するデータ型の少なくとも2つの値の容量を有することが保証される。この例のストリームにおいて、4つのキュー、すなわち4つのストリームデスティネーション(ストリーム式入力)のそれぞれに対して1つのキュー、が存在する。これらのキューは、プログラマに対しては大半が不可視である。 The queue is automatically inserted by the stream C linker / loader and managed by the stream C runtime. Some of the runtime's mission is to signal when queues are free and to ensure that no queues overflow. The programmer may request a specific amount with pragma commands as described below, but each queue is guaranteed to have a capacity of at least two values of the associated data type. In the stream of this example, there are four queues, one for each of the four stream destinations (streaming inputs). These cues are mostly invisible to the programmer.
ひとたびストリームCプログラムが実行(動作)を開始すると、値がストリームに入る唯一の方法は、ストリームソースによる。より多くのストリームのうちの1つは、すでにストリーム中に含まれている値を要求する、有向サイクル(directed cycle)を形成し得る。最も簡単な係るサイクルは、
xStrm = xStrm+yStrm
と等価である
xStrm += yStrm
におけるように、ストリーム代入の両辺にストリームが現れるときに生じる。
Once the stream C program starts executing (action), the only way the value gets into the stream is by the stream source. One of the more streams may form a directed cycle, which requires the values already contained in the stream. The simplest such cycle is
xStrm = xStrm + yStrm
Is equivalent to xStrm + = yStrm
This occurs when streams appear on both sides of the stream assignment, as in.
図9Aはこの代入の第1の図的表現400である。なお、この代入においては、有向サイクルが、+演算子の出力から同一の+演算子の2つの入力のうちの1つに向かうフィードバック経路からなる。+演算子が各入力ストリームからの値を消費して出力ストリーム上において値を作成することができないのは、この経路上において値が欠落しているため
である。ゆえに、第2の図的表現402に示すように、値404が、実行の開始前に、フィードバック経路上に置かれない限り、+演算子は決して始動することがない。
FIG. 9A is a first
他の問題は、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)と(以下同様)対となる。
Another problem relates to the change in offset of one single source stream to another single source stream. For example, both aStrm and bStrm are graphically represented in FIG. 9B,
aStrm + bStrm
Etc. If the input to the same module or stream expression, etc., that module or expression consumes one stream from these streams, ie one value from aStrm and one value from bStrm. When it is desired that aStrm (n) (ie, the nth reaching value on aStrm) be paired with bStrm (n + 2) (ie, the n + 2th reaching value on bStrm). Therefore, aStrm (0) is paired with bStrm (2), and aStrm (1) with bStrm (3) (the same applies hereinafter).
両方の問題に対するソリューンは、
<ストリーム識別子>.initialize(<値リスト>);
の形を取る、ストリーム初期化文により提供される。
The solution to both problems is
<Stream identifier>. initialize (<value list>);
Provided by the stream initialization statement, which takes the form of
ストリームCコンパイラ/リンカ/ローダがこの文と遭遇すると、ストリームCコンパイラ/リンカ/ローダは、FIFOキューを<ストリーム識別子>の各デスティネーションに挿入すること(デスティネーションがモジュール定義の出力パラメータである場合も、ストリーム文またはスレッドの入力引数である場合も)と、そのキューのサイズを、Tデータ型の少なくともn+1個の値を保持することができるよう設定すること(ただし、nは<値リスト>中の値の個数であり、Tは<ストリーム識別子>のデータ型である)と、<値リスト>中の値を、<値リスト>中の第1番目の値がキューの前部(頭部)に置かれる状態の順序でキューに置くこととを指示するものとして、この文を解釈する。 When the stream C compiler / linker / loader encounters this statement, the stream C compiler / linker / loader inserts a FIFO queue into each <stream identifier> destination (if the destination is a module defined output parameter) Set the size of the queue so that it can hold at least n + 1 values of T data type (even if n is a <value list>) Where T is the data type of <stream identifier> and the values in <value list>, the first value in <value list> is the front of the queue (head Interpret this sentence as indicating that it should be queued in the order of the states to be put into).
例えば、図9Aにおいて、デッドロックを防ぐために、図的表現402において、値404が、フィードバック経路に、および、式出力にも、
xStrm.initialize(0);
により挿入される。この文により、2つのFIFOキューが、xStrmの各デスティネーションに対して、作成される(フィードバック経路のデスティネーションにおけるキューは、前のセクションで説明したように、すでに挿入されている)。xStrmがint型であると仮定すると、各ストリームのサイズは少なくとも2×sizeof(int)であり、システム初期化時においてint値0が各キューの先頭に位置する。このことは、図9Aにおけるフローチャート402において図示される。このようにxStrmが初期化され、代入xStrm += yStrmの出力は、
For example, in FIG. 9A, to prevent deadlock, in
xStrm. initialize (0);
Inserted by This statement creates two FIFO queues for each destination of xStrm (the queues at the destination of the feedback path have already been inserted as described in the previous section). Assuming that xStrm is of type int, the size of each stream is at least 2 × sizeof (int), and an int value of 0 is located at the head of each queue at system initialization. This is illustrated in
となる。図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の出力に現れる値は、
It becomes. AStrm to bStrm in the second
Varying the offset of is addressed in a similar manner. However, here, two values are inserted into the aStrm FIFO queue. This is because it may be desirable to offset aStrm by two values for bStrm. This means that 1 and 2 are selected as two
Is achieved by using The result of this initialization is illustrated in
となる。 It becomes.
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のみが許可される。
As in the case of C variables, certain stream declarations are made implicit from the context, for example, by appearing as module input or output parameters, but all streams must be declared before use. The syntax of explicit stream declaration follows the syntax of C variable declaration, but the declaration in this case starts with the keyword stream.
stream <storage class identifier> Optional <type><identifierlist>;
Here are some examples of stream declarations that do not have storage class identifiers:
stream int xStrm, yStrm;
stream char cStrm;
stream double dStrm;
Of the five C storage class identifiers: auto, register, static, extern, and typedef, in the stream declaration:
stream static int xStrm, yStrm;
Like, only static is allowed.
staticならびに非staticのストリーム宣言は、宣言が現れる文脈により決定される。係る文脈は3つ存在し、それぞれが、それぞれのスコープ規則を有する。それぞれの場合において、ストリーム宣言のスコープ規則は、変数宣言の対応物のスコープ規則と同じである。記憶クラス識別子を有さず且つモジュールの内部に現れるストリーム宣言に対しては、宣言スコープは、宣言からモジュールの終わりまで及ぶ。記憶クラス識別子を有さず且つモジュール(および関数)の外部に現れるストリーム宣言に対しては、宣言スコープはグローバルであり、すなわち、プログラム全体に対して可視である。static記憶クラス識別子を有し且つすべてのモジュール(および関数)の外部に現れるストリーム宣言に対しては、その宣言のスコープは、宣言から、宣言が現れるソースファイルの終わりまで及ぶ。 Static and non-static stream declarations are determined by the context in which they appear. There are three such contexts, each with its own scoping rules. In each case, the scope rules of the stream declaration are the same as those of the counterparts of the variable declaration. For stream declarations that do not have a storage class identifier and appear inside a module, the declaration scope extends from declaration to the end of the module. For stream declarations that do not have a storage class identifier and appear outside of a module (and function), the declarative scope is global, ie visible to the whole program. For stream declarations that have static storage class identifiers and appear outside of all modules (and functions), the scope of the declaration extends from the declaration to the end of the source file where the declaration appears.
変数には関係するがストリームには関係しない記憶クラス識別子に関するいくつかの宣言形態は、このリストに現れない。Cにおいては、auto記憶クラス識別子を用いて宣
言された、またはまったく識別子を用いないで宣言された、これらの変数は、関数呼び出しの間では値を失う。ストリームはモジュール内においてのみ作用し、モジュールは呼び出されないため(モジュールは常に動作状態にある)、自動ストリームはそもそも無意味な概念である。したがって、auto記憶クラス識別子はストリーム宣言に適用されない。
Some declarative forms relating to storage class identifiers related to variables but not to streams do not appear in this list. In C, these variables, declared with or without the auto storage class identifier, lose their value between function calls. Since streams operate only in modules, and modules are not called (modules are always in operation), autostreaming is a meaningless concept in the first place. Thus, the auto storage class identifier does not apply to stream declarations.
static識別子を用いて宣言され且つ関数の内部に現れる変数宣言は、宣言された変数が関数コール(関数呼び出し)間においてその値を保持することを示す。しかしモジュールの場合には、コールの概念が存在せず、したがって、static識別子はモジュール内部では無意味である。したがって、static識別子はモジュールスコープ内では用いられない。 A variable declaration declared using a static identifier and appearing inside a function indicates that the declared variable holds its value between function calls (function calls). However, in the case of modules, there is no notion of a call, so static identifiers are meaningless inside the module. Therefore, static identifiers are not used within module scope.
変数宣言に対して、extern記憶クラス識別子は、宣言および定義として働くグローバル変数のこれらの宣言と、単に宣言として働くグローバル変数の宣言とを区別することを支援する。しかしストリームの場合には、ストリーム宣言において記憶領域が決して除外されないため、宣言は決して定義にはならない。記憶領域は、以下のストリームFIFOのセクションにおいて説明されるように、ストリーム定義時においてのみ割り当てられる。registerおよびtypedefの記憶クラス識別子は、ストリームにおいてはまったく妥当性がなく、ストリーム宣言において現れることがない。 For variable declarations, extern storage class identifiers help to distinguish between those declarations of global variables that act as declarations and definitions, and those of global variables that merely act as declarations. However, in the case of a stream, the declaration is never defined, as storage is never excluded in the stream declaration. Storage areas are allocated only at stream definition, as described in the stream FIFO section below. The storage class identifiers of register and typedef are not valid at all in streams and can not appear in stream declarations.
ストリーム式は、通常のC式に対するストリームにおける対応物である。すべての変数に対して入力ストリームが取って代わること、および結果に対して出力ストリームが取って代わることは別として、これら2つの種類の式は極めて類似性が高い。式においては、変数と定数とが組み合わされて新しい値が作成されるが、一方、ストリーム式においては、ストリームと定数とが組み合わされて、新しいストリームが作られる。C式とストリーム式の構造はほぼ同一である。すべてのC演算子は、ストリーム式において有効な演算子である。同じ演算子の優先度が、C式とストリーム式との両方に当てはまる。C関数コールは、ちょうどC式で認められるのと同様に、ストリーム式においても認められる。単一の出力ストリームを有するモジュールのインスタンス化はストリーム式において認められ、関数コールと同様に取り扱われる。 A stream expression is the counterpart in the stream to a normal C expression. Apart from the fact that the input stream replaces all variables and that the output stream replaces the result, these two types of expressions are very similar. In expressions, variables and constants are combined to create new values, while in stream expressions, streams and constants are combined to create new streams. The structures of the C equation and the stream equation are almost identical. All C operators are valid operators in stream expressions. The same operator precedence applies to both C expressions and stream expressions. C function calls are also accepted in stream expressions, just as in C expressions. Instantiation of modules with a single output stream is allowed in stream expressions and is treated the same as function calls.
C式とストリーム式との間の相違点は、第1に、評価が行われる時点および方法にある。C式については、制御のスレッドが、式を含む文に到達した時点で、評価が行われる。その評価は、最初に、各変数をその現時点での値に置き換え、次いで、演算子の優先度にしたがって必要な演算を行うことにより、行われる。次いで、最後の演算により返される値が評価結果として供給される。 The differences between equation C and the stream equation are primarily at the time and manner in which the evaluation takes place. For C expressions, evaluation occurs when the thread of control reaches a statement that contains the expression. The evaluation is done by first replacing each variable with its current value and then performing the necessary operations according to the precedence of the operator. The value returned by the last operation is then provided as the evaluation result.
C式の評価とは異なり、Cストリームプログラム言語におけるストリーム式の評価は、制御のスレッドには縛られない。代わって、ストリーム式は、便宜主義的に評価される。従来のように、評価は、演算子の優先度にしたがって必要な演算を行うことにより行われる。変数に対して値を置き換える代わりに、値は、式入力に属する各FIFOキューから消費(ポップ)される。FIFOキューは、ストリーム式の入力であるすべてのストリームデスティネーションにおいて挿入される。評価は便宜主義的である。なぜなら、式の各入力FIFOキューに少なくとも1つの値が存在するときは常に評価が行われるためである。従来のように、評価により作られる結果は、最後の演算により返された値である。しかし結果は、C式の場合とは異なる方法で対処される。C式に対しては、結果が代入される用法は、式の文脈により決定される。ストリーム式に対しては、結果は式の出力ストリーム(式が代入かどうかに応じて、名称を持つ場合も持たない場合もある)に単に代入される。 Unlike the evaluation of C expressions, the evaluation of stream expressions in the C stream programming language is not tied to the thread of control. Instead, stream expressions are evaluated opportunistically. As is conventional, the evaluation is done by performing the necessary operations according to the priority of the operators. Instead of replacing the values for the variables, the values are popped from each FIFO queue belonging to the expression input. A FIFO queue is inserted at every stream destination that is a streamed input. Evaluation is opportunistic. This is because evaluation is performed whenever there is at least one value in each input FIFO queue of the equation. As is conventional, the result produced by the evaluation is the value returned by the last operation. However, the results are dealt with differently than in the case of the C formula. For C expressions, the usage in which the result is substituted is determined by the context of the expression. For stream expressions, the result is simply assigned to the output stream of the expression (which may or may not have a name, depending on whether the expression is a substitution).
ストリーム式の1例が、xStrm、yStrm、およびzStrmがすべてint型のストリームである、以下の式
xStrm*yStrm + 5*zStrm
において示され得る。これら3つのストリームに到達する値は、次のように始まる。
The following equation xStrm * yStrm + 5 * zStrm, where xStrm, yStrm, and zStrm are all int type streams.
Can be shown in The values reaching these three streams begin as follows:
すると、xStrm*yStrm + 5*zStrmの(名称を有さない)出力スト
リームに代入される最初の3つの値は、以下のようになる。
Then the first three values assigned to the (without a name) output stream of xStrm * yStrm + 5 * zStrm are as follows:
ストリーム式の中では、特にストリーム代入が注目される。係るストリーム代入には2つの型が存在し、第1の型は
<ストリーム識別子>=<ストリーム式>
の形を有する。
In stream expressions, stream assignment is particularly noted. There are two types of such stream assignment, and the first type is <stream identifier> = <stream expression>
It has the form of
そのCにおける対応物、すなわち変数への代入と同様に、この型のストリーム代入は副作用を有する。その出力ストリームに値を供給することに加えて、ストリーム代入は、右辺(RHS:right−hand−side)式の出力を左辺(LHS:left−hand−side)のソースにし、そのプロセス中に、RHS式の出力ストリームを代入の出力ストリームとする。ストリーム代入は、RHS式の出力ストリームが名称を有さない場合は、その出力ストリームに名称も与える。より大きい式の部分式の出力ストリームに名称は必要ではないが、名称は、出力ストリームが任意の包含するsuper式(superexpression)の外側のデスティネーションに宛てられなければならない場合は、不可欠となる。 As with its counterpart in C, that is, assignment to a variable, this type of stream assignment has side effects. In addition to supplying values to the output stream, stream substitution makes the output of the right-hand (RHS) expression the source of the left-hand-side (LHS), and during the process Let the output stream of RHS expression be the output stream of substitution. Stream substitution also gives a name to the output stream of the RHS expression if the output stream does not have a name. The name is not required for the output stream of the larger expression subexpression, but the name is essential if the output stream has to be addressed to a destination outside of any containing 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の出力パラメータを有する。
The formula substitution statement in the partial coat below is an example. A stream expression becomes a stream statement when a semicolon is added at the end, in both assignment and other cases.
int F (int, int);
int G (int);
stream int M (int xStrm, int yStrm)
{
.
.
.
out = F (xStrm, G (yStrm));
.
.
.
}
Formula F (xStrm, G (yStrm)) and subexpression G (yStrm) each have a stream statement as a stream expression. For G (yStrm), the output stream has no name. Because the destination of the stream is apparent from the context of the expression. That is, the destination is the second input argument of the function F in the super expression F (xStrm, G (yStrm)). However, in the case of an output stream of F (xStrm, G (yStrm)), a name is required. Because the destination is outside the expression. Its name is the assignment expression out = F (xStrm, G (yStrm))
Assigned at By this substitution, the output of F (xStrm, G (yStrm)) becomes the source of zStrm, and zStrm has a single destination, the output parameter of module 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番目のストリームのソースとなり、モジュールの出力ストリームが名称を有さない場合には、その出力ストリームに名称が与えられる。
The second type of stream assignment is
(<List of stream identifiers separated by commas>) = <Module instantiation>
Take the form of This type occurs when it is desired to make the output of multiple output modules the source of a stream with multiple names. To illustrate, if the first output of tap is the source of int stream x and the second output of tap is the source of int stream y, the following multiple output module stream (int, int) tap (int, int, int);
It is. This is stream assignment (int x, int y) = tap (arg1, arg2, arg3);
Is achieved using By this substitution, the ith output of the module becomes the source of the ith stream, and if the output stream of the module does not have a name, the output stream is given a name.
モジュール本体内の文は、2つのカテゴリー、すなわち、スレッドおよびストリームに分類される。ストリーム文はストリームを取り扱うが、変数は取り扱わない。スレッド文は変数を取り扱い、いくつかの場合においては、ストリームも取り扱う。スレッドドメインにおける文は、大部分がC文であり、C文と同様に、本質的に命令的(手続的)であって、ステップ毎の手順を定義する。制御の逐次フロー(多くの場合、スレッドと称される)は、係る手順と関連付けられ、文が実行される順序を支配する。それに対して、ストリーム文は宣言型である。係る文のそれぞれは、文中に現れるストリームについて宣言する。スレッドドメインにおいて存在するようなステップ毎の手順の概念は存在せず、したがって、モジュール本体内におけるストリーム文の順序は、1つの例外を除いて、重要ではない。変数は使用前に宣言される必要があるように、ストリームもまた使用前に宣言されなければならない。 The statements in the module body fall into two categories: threads and streams. Stream statements deal with streams but not variables. Thread statements deal with variables, and in some cases also streams. Sentences in the thread domain are mostly C sentences, and like C sentences, are essentially imperative (procedural) and define step-by-step procedures. The sequential flow of control (often referred to as a thread) is associated with such a procedure and governs the order in which statements are executed. In contrast, stream statements are declarative. Each such statement declares a stream that appears in the statement. There is no notion of a step-by-step procedure as in the thread domain, so the order of stream statements within the module body is not important, with one exception. Just as variables need to be declared before use, streams must also be declared before use.
ストリームドメインの性質により、制御フローを取り扱うこれらのC文、特に、if−else、else−if、switch、for、while、do−while、break、continue、goto、およびreturnに対する対応物は存在しな
い。事実、ストリームドメインにおける唯一の文型は、C式文に対するストリームにおける対応物であり、Cにおけるように、最も一般的な式文は代入文である。ストリーム式文は、次の2つの形
<ストリーム式>;
stream <ストリーム式>;
のうちの1つを有する。一方、ストリーム代入文は、次の2つの形
<ストリーム識別子>=<ストリーム式>;
stream<ストリーム識別子>=<ストリーム式>;
(<コンマで分割されたストリーム識別子のリスト>)=<モジュールインスタンス化>
のうちの1つを有する。
Due to the nature of the stream domain, there is no counterpart to those C statements that handle control flow, in particular if-else, else-if, switch, for, while, do-while, break, continue, goto, and return. In fact, the only sentence type in the stream domain is the counterpart in the stream to a C expression sentence, and as in C, the most common expression sentence is an assignment sentence. The stream expression statement has the following two forms <stream expression>;
stream <stream expression>;
Have one of the On the other hand, the stream assignment statement has the following two forms <stream identifier> = <stream expression>;
stream <stream identifier> = <stream expression>;
(<List of stream identifiers separated by commas>) = <Module instantiation>
Have one of the
モジュール、ストリームインスタンス化、ストリーム宣言、ストリーム式、およびストリーム文を使用する用途例は、デジタル信号処理において一般に使用される構文である有限インパルス応答(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つの結果として生じた積が加算されるためである。
Examples of applications that use modules, stream instantiations, stream declarations, stream expressions, and stream statements are finite impulse response (FIR) filters, a syntax commonly used in digital signal processing. FIR filters convert discrete time input signals into discrete time output signals. FIG. 10 is a diagram of a 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つの値分だけオフセット(遅延)させる効果を有する。
Discrete time signals are represented as a stream of samples. Each of
stream int UnitDelay (int X)
{
out = X;
out. initialize (0);
}
In the body of UnitDelay, a stream assignment statement out = X;
Thus, X, which is an input stream of UnitDelay, becomes a source of out which is a default output stream of UnitDelay. On the other hand, the stream initialization statement out. initialize (0);
Inserts the
以下は、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);
}
The following is a stream C implementation of a 5-tap FIR filter, such as
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の出力の他は通常の逐次コードと類似するコードから、この並列性は現れたものである。変数に代わって、ここではストリームが存在する。 This implementation shows parallelism, but without using explicit parallelism syntax. This parallelism emerges from a code similar to a normal sequential code except for the output of taps with multiple names. Instead of variables, here a stream exists.
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つの例である。
Each of the four instantiations of tap within the body of FIR 5 has the formula yIn + h * xOut
Compute its own copy in parallel with the three other tap instantiations. This is made possible by the opportunistic nature of stream expressions, and by the continuous arrival of new input values into each of the tap's instantiations. These new values are provided by the five internal streams of FIR5.
X conveys a value from the input of FIR 5 to the input of the first tap.
x2 and y2 convey values from the output of the first tap to the input of the second tap.
x3 and y3 convey values from the output of the second tap to the input of the third tap.
x4 and y4 convey values from the output of the third tap to the input of the fourth tap.
The input h of each instantiation of tap is replaced by a constant. This causes the stream C compiler to replace all instances of h in the tap instantiation with constants. All operations performed by the instantiation of tap convert the FIR5 input values to FIR5 output values.
These last output values are provided by the default output stream of FIR5.
out conveys a value from the output of the fourth tap to the output of FIR5.
This implementation is one example of how many digital signal processing functions are handled in stream C.
上述のFIRフィルタ例においては、5つの係数すなわち10、20、30、40、50が、コンパイル時に既知である。しかしFIR5係数がコンパイル時に未知である場合、または係数が長い期間にわたって一定であるが、随時変更される場合は、他の技術を用いる必要がある。係る場合においては、これらの擬似的定数は、変化するため真の定数で
はなく、また、ストリーム式またはスレッドにより消費(FIFOキューからポップ)されないため、真のストリームではない。
In the example FIR filter described above, five coefficients are known at compile time: 10, 20, 30, 40, 50. However, if the FIR5 coefficients are unknown at compile time, or if the coefficients are constant over time, but are changed from time to time, other techniques need to be used. In such a case, these pseudo constants are not true constants because they change, and they are not true streams because they are not consumed (streamed from a FIFO queue) by a stream expression or thread.
擬似的定数ストリームは、いくつかの面において通常のストリームに類似する。擬似的定数ストリームは、型と、1つまたは複数のソースと、1つまたは複数のデスティネーションと、名称とを有する。擬似的定数ストリームは、指定されたソースから指定されたデスティネーションへと指定された型を伝える。しかし、いくつかの点において、擬似的定数ストリームは通常のストリームとは異なる。通常のストリームがFIFOキューを有するのに対して、擬似的定数ストリームは、指定された型の1つの値のための記憶領域(変数と関連付けられた記憶領域に極めて類似する)を有する。係る記憶領域に存在する値は、ストリーム式またはスレッドによりアクセスされたときに、ポップされることも消費されることもなく、記憶領域内に留まり続ける。記憶された値は、新しい値がストリームソースのうちの1つからストリームに入ると、更新される。係るとき、新しい値は単に古い値を上書きする。この更新は典型的にはシステム動作とは非同期的になされるため、更新がストリームデスティネーションにおいて認識される時点は、一般に、非決定的である。擬似的定数ストリームの宣言は、システム初期化時に各ストリーム記憶位置に記憶される初期値を指定しなければならない。 Pseudo-constant streams are similar to regular streams in some aspects. The pseudo-constant stream has a type, one or more sources, one or more destinations, and a name. The pseudo-constant stream conveys the specified type from the specified source to the specified destination. However, in some respects, pseudo-constant streams differ from regular streams. Whereas a regular stream has a FIFO queue, a pseudo-constant stream has a storage area for one value of the specified type (very similar to the storage area associated with a variable). The values present in such storage areas continue to stay in the storage area without being popped or consumed when accessed by a streaming expression or thread. The stored values are updated as new values enter the stream from one of the stream sources. When involved, the new value simply overwrites the old value. Because this update is typically made asynchronous to system operation, the point at which the update is recognized at the stream destination is generally non-deterministic. The declaration of a pseudo-constant stream must specify an initial value to be stored in each stream location at system initialization.
擬似的定数ストリームは、単独型の宣言においても、モジュールの入力または出力パラメータリストにおいても、以下のシンタックス
const<ストリーム型><ストリーム識別子>=<初期値>
を用いて宣言される。通常は変数のみに対して適用される既存のCキーワードconstは、宣言されるストリームが擬似的定数ストリームであることを示す(constの使用は、新規キーワードの導入の手間を省く)。
The pseudo-constant stream has the following syntax, either in the singleton declaration or in the module's input or output parameter list:
const <stream type><streamidentifier> = <initial value>
Declared using. The existing C keyword const, which normally applies only to variables, indicates that the stream being declared is a pseudo-constant stream (the use of const saves the effort of introducing a new keyword).
これらの考えは、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);
}
These ideas are illustrated in the following modifications of the FIR5 module. Here, the five coefficients in the original example, namely 10, 20, 30, 40 and 50, are replaced by five pseudo constant streams h0, h1, h2, h3 and h4. Because the initial values inserted into these streams at system initialization are identical to the original coefficients, the new FIR 5 starts operating with the same coefficients as the original. However, for the new FIR5, these coefficients can be updated if the situation permits.
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は、実装に応じて、仮想メモリスペース上、物理メモリスペース上、および登録ファイルスペース上に存在し得る。
FIG. 11A shows
図11Aにおけるような入力ストリームFIFOに対する高レベルのスケジューリングアルゴリズムの1例を以下に示す。
a.次の場合、モジュールを実行するようスケジュールする{
入力ストリーム(単数または複数)の入力FIFOにデータが存在する
且つ
現在のモジュールの出力ストリームに接続されたモジュールの入力ストリームFIFOに利用可能スペースが存在する
}
One example of a high level scheduling algorithm for an input stream FIFO as in FIG. 11A is shown below.
a. Schedule a module to run if:
Data is present in the input FIFO (s) of the input stream (s)
and
Available space in the module's input stream FIFO connected to the current module's output stream
}
図10Bにおけるような出力ストリームFIFOに対する高レベルのスケジューリングアルゴリズムの1例を以下に示す。
b.次の場合、モジュールを実行するようスケジュールする{
現在のモジュールの入力ストリーム(単数または複数)に接続されたモジュールの出力ストリームFIFOにデータが存在する
且つ
出力ストリーム(単数または複数)のFIFOに利用可能スペースが存在する
}
One example of a high level scheduling algorithm for an output stream FIFO as in FIG. 10B is shown below.
b. Schedule a module to run if:
There is data in the output stream FIFO of the module connected to the input stream (s) of the current module
and
Available space in FIFO of output stream (s)
}
図10Cにおけるような入力および出力ストリームFIFOに対する高レベルのスケジューリングアルゴリズムの1例を以下に示す。
c.次の場合、モジュールを実行するようスケジュールする{
入力ストリーム(単数または複数)の入力FIFOにデータが存在する
且つ
(現在のモジュールの出力ストリームに接続されたモジュールの入力ストリームFIFOに利用可能スペースが存在する
または
出力ストリーム(単数または複数)のFIFOに利用可能スペースが存在する)
}
スレッド
One example of a high level scheduling algorithm for the input and output stream FIFOs as in FIG. 10C is shown below.
c. Schedule a module to run if:
Data is present in the input FIFO (s) of the input stream (s)
and
(Available space exists in the input stream FIFO of the module connected to the output stream of the current module
Or
Available space in FIFO of output stream (s)
}
thread
スレッドは、ストリームCが完全且つ包括的な言語となるにあたり必要不可欠な能力を提供する。スレッドは、C関数(すなわち、その入力が個別の値であり、その出力が単一の値である関数)の本体内か、またはモジュール(すなわち、その入力および出力が値のストリームである関数)の本体内に、現れ得る。これら2種類のスレッドは、モジュールの本体内のスレッドがストリームCストリームにアクセスし得(通常はストリームCストリームにアクセスする)、その理由のために、通常は終了しないことを除いて、同じである。また、C関数の本体内のスレッドは、ストリームCストリームにアクセスせず、すべての(良好な挙動を示す)Cスレッドと同様に、終了する。 Threads provide the essential capabilities needed to make stream C a complete and comprehensive language. A thread is in the body of a C function (ie a function whose input is a discrete value and whose output is a single value) or a module (ie a function whose input and output are a stream of values) It can appear in the body of the. These two types of threads are the same except that threads in the body of the module can access stream C stream (usually access stream C stream), and for that reason they do not normally terminate. . Also, the threads in the body of the C function do not access the stream C stream and terminate like all C threads (showing good behavior).
ストリームCスレッドの顕著な特性は、並列問題からの完全な乖離である。並列構文は存在せず、他のスレッドと直接的に相互作用することはなく、および新規スレッドは生成されない。したがって、ストリームCスレッドに関しては、ストリームCスレッドが複数スレッド環境で動作中であることを意識する必要がない。したがって、スレッドドメインで作業するプログラマは厳格に逐次的な問題に集中してよい。 A striking property of stream C threads is the complete departure from parallel problems. There is no parallel syntax, no direct interaction with other threads, and no new threads are created. Therefore, as for the stream C thread, it is not necessary to be aware that the stream C thread is operating in a multi-thread environment. Thus, programmers working in the thread domain may focus strictly on serial issues.
ストリームCにおける関数宣言および関数定義は、Cにおける対応物と同じシンタックスおよびセマンティクスを有する。ストリームCにおける関数コールに関しては、シンタックスおよびセマンティクスは、コールが(a)関数の本体に現れるか、または(b)ストリーム式に現れるかに依存する。同じ関数(再帰関数)の本体、または他の関数の本体におけるストリームC関数コールは、通常のC関数コールと同じシンタックスおよびセマンティクスを有する。ストリーム式におけるストリームC関数コールは、C関数コールと同じシンタックスを有するが、ただし、ストリームが関数コール引数における変数と置き換わる。係るコールのセマンティクスは同じであるが、通常の関数コールのセマンティクスとは同じでない。相違点は、関数の各評価(コール)がどのように行われるかに関する。さらに詳細には、相違点は、(1)関数コール引数に現れるパラメータ(ストリーム)に対して値がどのように取得されるか、(2)関数コール出力のデスティネーション、および(3)制御がどのように取り扱われるか、に関する。 The function declarations and function definitions in stream C have the same syntax and semantics as their counterparts in C. For function calls in stream C, the syntax and semantics depend on whether the call appears (a) in the body of the function or (b) in the stream expression. Stream C function calls in the same function (recursive function) body, or in the body of other functions, have the same syntax and semantics as normal C function calls. Stream C function calls in stream expressions have the same syntax as C function calls, except that the stream replaces variables in the function call arguments. The semantics of such calls are the same, but not the semantics of normal function calls. The differences relate to how each evaluation (call) of the function is performed. More specifically, the difference is that (1) how values are obtained for parameters (streams) that appear in function call arguments, (2) destination of function call output, and (3) control It relates to how it is handled.
Cにおいて、関数コールに現れる引数に現れるパラメータはすべて変数であり、係る関数入力変数に代入される値は、その変数の現在値である。ストリームCにおいては、ストリーム式関数コールの引数に現れるパラメータはすべてストリームであり、係る関数入力ストリームのそれぞれに代入される値は、(a)通常のストリームの場合は、ストリームデスティネーションにおけるFIFOキューからポップ(消費)される値である、または(b)擬似的定数ストリームの場合は、そのストリームデスティネーションにおける現在の値である、のいずれかである。 In C, all parameters appearing in arguments appearing in function calls are variables, and the value assigned to the function input variable is the current value of that variable. In stream C, all parameters appearing in the arguments of the stream expression function call are streams, and the value assigned to each of such function input streams is (a) in the case of a normal stream, from the FIFO queue in the stream destination It is either a value that is popped (consumed) or (b) in the case of a pseudo-constant stream, it is the current value at that stream destination.
Cにおいて、関数コールにより変えられる値は、関数コール元に渡される。ストリームCにおいては、ストリーム式関数コールにより返される値は、関数コール出力ストリーム(名称を有する場合も有さない場合もある)に代入される。ストリーム式そのものであるため、ストリーム式関数コールは常に出力ストリームを有する。出力値のデスティネーションは、ストリームのデスティネーションにより決定される。 In C, the value changed by the function call is passed to the function caller. In stream C, the value returned by the stream expression function call is assigned to the function call output stream (which may or may not have a name). Because it is a stream expression itself, stream expression function calls always have an output stream. The destination of the output value is determined by the destination of the stream.
Cにおいて、関数は、制御のスレッドがその関数に対するコールと遭遇するとき、コールされる。ストリームCにおいては、ストリーム式関数コールは、制御スレッドに関わりなく評価される(すなわち、関数がコールされる)。代わって、関数は、関数コールの通常の入力ストリームのそれぞれのFIFOキューに少なくとも1つの値が存在するときは常に便宜主義的にコールされる。擬似的定数入力ストリームは、値を供給する準備が常に整っており、したがって、関数コールまたはストリーム式の評価を決して妨げることはない。 In C, a function is called when the thread of control encounters a call for that function. In stream C, streamed function calls are evaluated regardless of the control thread (ie, the function is called). Instead, the function is opportunistically called whenever there is at least one value in each FIFO queue of the normal input stream of the function call. The pseudo-constant input stream is always ready to supply a value, and thus never prevents the evaluation of a function call or stream expression.
これら3つの相違点は別として、通常のC関数コールおよびストリーム式関数コールのセマンティクスは同じである。このことは、両方の場合においてスレッドに基づくセマンティクスが関数実行に適用されることを意味する。 Apart from these three differences, the semantics of normal C function calls and streamed function calls are the same. This means that in both cases thread-based semantics apply to function execution.
以下の関数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つの関数コールを有するストリーム式
}
One example of a thread in a C stream with the following definition of function GDC and module GDC4 may be shown.
int GCD (int a, int b) // Recursion function {
if ((a> = b) && (a% b) == 0) // Start of thread
{
return (b);
}
if (a <b)
{
return GCD (b, a); // Function call
}
return GCD (b, (a% b)); // Function call}
stream int GCD4 (int w, int x, int y,
int z) // module {
out = GCD (GCD (w, x), GCD (y, z)); / / Stream expression with / 3 function calls}
再帰関数の古典的な例である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 ))
がこの文の中に存在する。
GCD, a classic example of a recursive function, returns the greatest common divisor of two integers. GCD has two integer inputs a and b and returns one integer result. GCD 4 has 4 integer stream inputs, w, x, y and z, and has 1 integer stream output. Stream expression statement out = GCD (GCD (w, x), GCD (y, z));
Exist in the body of GCD4, and stream expression GCD (GCD (w, x), GCD (y, z))
Is present in this sentence.
この式は、ストリーム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)の最大公約数である、出力値のストリームが作成される。 Since this equation includes the destinations of streams w, x, y and z, there is a FIFO queue at each of these four destinations. These queues allow the function calls GCD (w, x) and GCD (y, z) to be evaluated (implemented) opportunistically and in parallel as described above. Like these two calls, the third call to the GCD is opportunistically performed using the input values obtained from the FIFO queues of the two input streams. These input streams were created as output streams of two other calls to GCD, so that the FIFO queues on these two streams are such that the third call to GCD is the first two calls. Allows to be performed in parallel. The output stream of this third function call is directed to the output stream of GCD 4 by stream assignment to out. This configuration of function calls to GCD, represented in the data flow diagram in FIG. 12, is such that data from four input streams, w, x, y and z, are streamed through three parallel operation function calls , And as a result, the maximum of w (i), x (i), y (i), and z (i) for several integers i, each output value being i> = 0 A stream of output values is created, which is a common divisor.
ストリームの観点からすると、どのようにモジュールが入力ストリーム値を出力トリーム値に変換するかは、重要ではない。重要であるのは、入力から出力への変換(単数または複数)(および任意の副作用)のみである。これまで挙げてきた例においては、これらの変換は、ストリーム式、すなわち特定用途用ハードウェア、再設定可能なハードウェア(図1および図2における等の)、逐次コードを実行するプロセッサまたは何らかの他の機構を用いて実装され得る式に関して表されてきた。 From the stream point of view, it is not important how the module converts input stream values to output stream values. What is important is only the transformation (s) from input to output (and any side effects). In the examples given so far, these transformations may be streamed, ie application specific hardware, reconfigurable hardware (such as in FIGS. 1 and 2), a processor that executes serial code or some other It has been expressed in terms of expressions that can be implemented using the mechanism of.
これらの変換は、モジュールの本体内に存在する逐次コードとして明示的に表され得る。係るコードは、記憶されたプログラム逐次プロセッサ(stored−program
sequential processor)上で実行され得、スレッドドメインと称され得るものの中に存在し得る。モジュールの本体は、排他的にストリームドメインまたはスレッドドメインにおける文を典型的には含むであろうが、しかし、このことにより、同じモジュール本体内において両種の文が排除されるわけではない。その場合、2つのドメインは、並んで(すなわち並列的に)動作する。
These transformations can be explicitly represented as sequential code present in the body of the module. Such code is stored program
It can be run on a sequential processor) and can be in what can be referred to as a thread domain. The body of the module will typically exclusively contain statements in the stream domain or thread domain, but this does not exclude both types of statements within the same module body. In that case, the two domains operate side by side (i.e. in parallel).
スレッドドメインのシンタックスおよびセマンティクスは、Brian W. KernighanおよびDennis M. Ritchie共著「C Programming Language」(1978年)により非公式に、およびISOのC規格ISO/IEC 9899により公式に定義されるC言語のスーパーセットである。標準C言語に対する追加は、スレッドが、モジュール入力ストリーム、モジュール出力ストリーム、モジュール本体に対して内部にあるストリーム、またはグローバルストリームであれ、スレッドに対して可視であるこれらのストリームにアクセスすることを可能にする動作に関するものである。これらのストリームアクセス動作は、2つのカテゴリー、すなわちブロック型および非ブロック型に分類される。これらの動作を理解するために、ストリームにおける値のフローを規制するために用いられる機構、およびタスク(タスクはモジュールインスタンスと等価である)を管理するための機構が、図4におけるノードラッパーを参照して説明したように重要である。 The syntax and semantics of the thread domain are: Kernighan and Dennis M. It is a superset of the C language, informally defined by Ritchie, co-authored "C Programming Language" (1978), and officially defined by the ISO C standard ISO / IEC 9899. Additions to the standard C language allow threads to access module input streams, module output streams, streams internal to the module body, or global streams that are visible to threads Relates to the action to be taken. These stream access operations fall into two categories: block and non-block. To understand these operations, the mechanism used to regulate the flow of values in the stream, and the mechanism for managing tasks (tasks are equivalent to module instances) refer to the node wrapper in Figure 4 It is important as I explained.
フロー制御およびタスク管理は、ストリームCランタイムサポートシステムにより提供される重要なサービスである。フロー制御は、FIFOキューのオーバーフロー(すなわち、すでにフル状態であるキューにデータを書き込みこと)およびFIFOキューのアンダーフロー(すなわち、空き状態のキューからデータを読み込みむこと)を防ぐ。タスク管理は、いつタスクが実行状態に置かれるか、いつかの場合においては、いつタスク実行が終了されるか、を制御する。ストリームCフロー制御システムおよびタスク管理システムにおいては、3つの重要な要素、すなわち消費側カウント、作成側カウント、およびタスクマネージャが存在する。 Flow control and task management are important services provided by the Stream C runtime support system. Flow control prevents FIFO queue overflow (i.e. writing data to a queue that is already full) and FIFO queue underflowing (i.e. reading data from a free queue). Task management controls when the task is put into execution state, and in some cases when the task execution is ended. In the stream C flow control system and the task management system, there are three key elements: consumer count, producer count, and task manager.
整数消費側カウントは、通常の(擬似的定数ではない)ストリームの各FIFOキューと関連付けられる。特定ストリームの特定スレッドによるすべての読み込みは、同一のFIFOキューをアクセスし、したがって、同一の消費側カウントにアクセスする。消費側カウントの符号ビットは、FIFOキューが空き状態であるかどうかを示す。1の符号ビット(消費側カウントは負である)は、キューが空き状態であることを示す。0の符号ビット(消費側カウントは非負である)は、キューが非空き状態であることを示す。 An integer consumer count is associated with each FIFO queue of a normal (not pseudo-constant) stream. All reads by a particular thread in a particular stream access the same FIFO queue, and thus access the same consumer count. The consumption count sign bit indicates whether the FIFO queue is empty. A sign bit of 1 (consumer count is negative) indicates that the queue is empty. A sign bit of 0 (consumer count is non-negative) indicates that the queue is non-empty.
整数作成側カウントは、各通常(擬似的定数ではない)ストリームの各ソースと関連付けられる。作成側カウントの符号ビットは、このストリームソースに挿入された値を受け取るために下流側FIFOキューに利用可能スペースが存在するかどうかを示す。0の符号ビット(作成側カウントは非負である)は、すべての下流側キューが、この出力ストリームにおいて値を受け取るためのスペースを有するとは限らないことを示す。1の符号ビット(作成側カウントは負である)は、すべての下流側キューが、この出力ストリームにおいて値を受け取るためのスペースを有することを示す。 An integer producer count is associated with each source of each normal (not pseudo-constant) stream. The sign bit of the producer count indicates whether there is space available in the downstream FIFO queue to receive the value inserted into this stream source. A sign bit of 0 (creator count is non-negative) indicates that not all downstream queues have space for receiving values in this output stream. A sign bit of 1 (creator count is negative) indicates that all downstream queues have space to receive values in this output stream.
図2におけるノード180等の各プロセシングコアは、実行を開始するに必要な入力データを含むすべてのリソースを有する、タスクの先入れ先出し・実行準備完了キーを有する。各プロセシングコアは、タスクの実行を管理し、且つ必要な調節信号をタスク間に提供するタスクマネージャを有する。タスクマネージャは、データがFIFOキューにプッシュされた(書き込まれた)ときに消費側カウントをインクリメントすることと、データ
がFIFOキューからポップされた(消費された)ときに消費側カウントをデクリメントすることと、スペースがデスティネーションFIFOキューにおいて利用可能となったことを示すためのバックワードアクノレッジメントを、ストリームソースへと送信すること(デフォルトは、各値が各FIFOキューから消費された後にバックワードアクノレッジメントを送信する)と、を自動的に行う。タスクマネージャは、データがモジュールの出力ストリームに書き込まれた場合にそのストリームの作成側カウントをインクリメントすることと、モジュールの出力ストリームに対するバックワードアクノレッジメントが受け取られた場合にその出力ストリームの作成側カウントをデクリメントすることと、タスクが、入力データと、タスクが進行するために必要である任意の他の要求されるリソースと、を有する場合に、プロセシングコアの実行準備完了タスクキューにタスクを置くことと、も実行する。タスクマネージャは、タスクが実行準備完了タスクキューの先頭にあり且つ実行ユニットが利用可能である場合に、タスクを実行状態に置き、タスクが進行するために必要な入力データを有さない場合またはタスクがタイムアウトする場合に、タスクの実行を停止する。
Each processing core, such as
ブロック型ストリームアクセス演算は、モジュール本体に現れるスレッドが、モジュール入力ストリーム、モジュール出力ストリーム、モジュール本体に対して内部にあるストリーム、およびグローバルストリーム等の、スレッドに対して可視であるストリームにアクセスすることを可能にする。これらはストリームにアクセスするための好適な方法である。なぜなら、非ブロック型ストリームアクセス動作とは異なり、ブロック型ストリームアクセス動作は非決定性を生じさせないためである。係る演算のブロックおよび非ブロックは、プロセシングコアのタスクマネージャにより自動的に対処される。 A block type stream access operation is such that a thread appearing in a module body accesses a stream that is visible to threads, such as a module input stream, a module output stream, a stream internal to the module body, and a global stream. Make it possible. These are the preferred methods to access the stream. This is because, unlike the non-block type stream access operation, the block type stream access operation does not cause nondeterminism. Such blocks of operations and non-blocks are handled automatically by the task manager of the processing core.
係る演算は3つあり、それぞれの演算はC++における同様の演算にちなんで作られたものである。演算子>>は、ストリームFIFOキューから単一の値をポップ(消費)し、その値を変数に代入するために用いられる。演算子>>は
<ストリーム識別子> >> <変数識別子>;
の形の文において用いられる。この文により、単一の値が左側のストリームからポップされ、右側の変数に代入される。しかし、ストリームに対するFIFOキューが、ストリームの消費側カウントの符号ビットにより示されるように空き状態である場合、文はブロック(ストール)され、キューが、ストリームの消費側カウントの符号ビットにより示されるように再び非空き状態となるまで、ブロック状態に保持される。
There are three such operations, each of which was created after a similar operation in C ++. The operator >> is used to pop (consume) a single value from the stream FIFO queue and assign that value to a variable. The operator >> is <stream identifier>>><variableidentifier>;
Used in sentences of the form This statement pops a single value from the left stream and assigns it to the right variable. However, if the FIFO queue for the stream is free as indicated by the stream's consumer count's sign bit, then the statement is blocked (stalled) and the queue is indicated by the stream's consumer count's sign bit. It is held in a blocked state until it becomes non-empty again.
演算子<<は、変数の現在の値をストリームに代入するために用いられる。演算子<<は、
<ストリーム識別子> << <変数識別子>;
の形の文において用いられる。この文により、右側の変数の値は左側のストリームに代入される。しかし、1つまたは複数の下流側キューが、ストリームソースにおける作成側カウントの符号ビットにより示されるように、係るデータを受け取るスペースを有さない場合、文は、ブロック(ストール)され、すべての下流側キューが、ストリームの作成側カウントの符号ビットにより示されるように再び値を受け取るスペースを有するようになるまで、ブロック状態に保持される。
The operator << is used to assign the current value of a variable to a stream. The operator << is
<Stream identifier><<<variableidentifier>;
Used in sentences of the form This statement assigns the value of the right variable to the left stream. However, if one or more downstream queues do not have space to receive such data, as indicated by the creator count's sign bit in the stream source, the statement is blocked (stalled) and all downstream It is held blocked until the side queue has space again to receive the value as indicated by the sign bit of the stream's creator count.
peek演算子は、ストリームFIFOキューの先頭における値を、ポップ(消費)せずに、取得するために用いられる。peek演算子は、
<ストリーム識別子>.peek()
の形の式において用いられる。この式は、<ストリーム識別子>のFIFOキューの先頭における現在の値を返すが、キューから値をポップ(消費)しない。しかし、ストリームに対するFIFOキューが、ストリームの消費側カウントの符号ビットにより示されるように空き状態である場合、文は、ブロック(ストール)され、キューが、ストリームの消
費側カウントの符号ビットにより示されるように再び非空き状態となるまで、ブロック状態に保持される。
The peek operator is used to obtain the value at the beginning of the stream FIFO queue without popping (consumption). The peek operator is
<Stream identifier>. peek ()
Used in the formula of the form This expression returns the current value at the beginning of the <stream identifier>'s FIFO queue but does not pop (consume) values from the queue. However, if the FIFO queue for the stream is free as indicated by the stream's consumer count's sign bit, then the statement is blocked (stalled) and the queue is indicated by the stream's consumer count's sign bit It is held in the blocked state until it becomes non-empty again.
ブロック型のストリームアクセス演算子と同様に、非ブロック型ストリームアクセス演算は、モジュール本体に現れるスレッドが、モジュール入力ストリーム、モジュール出力ストリーム、モジュール本体に対して内部にあるストリーム、およびグローバルストリーム等の、スレッドに対して可視であるストリームにアクセスすることを可能にする。しかし、ブロック型演算とは異なり、非ブロック型演算は、典型的には、演算の結果に影響する競合状態に関与するものであり、したがって、非決定性を導入する。係る演算は2つある。 Similar to block type stream access operators, non-block type stream access operations are such that threads appearing in a module body are module input streams, module output streams, streams internal to the module body, global streams, etc. Allows access to streams that are visible to threads. However, unlike block-type operations, non-block-type operations are typically involved in race conditions that affect the result of the operation, thus introducing non-determinism. There are two such operations.
<ストリーム識別子>.consumerCount()
の形の式は<ストリーム識別子>の消費側カウントを返す。なお、<ストリーム識別子>は、>>演算またはpeek演算を介して、スレッドにより読み込まれるストリームである。この式は、<ストリーム識別子>のFIFOキューが空き状態である場合に>>演算またはpeek演算を回避するために、<ストリーム識別子>の消費側カウント符号ビットをテストするために、主に用いられる。
<Stream identifier>. consumerCount ()
An expression of the form returns a consumer count of <stream identifier>. Note that <stream identifier> is a stream read by a thread via >> operation or peek operation. This expression is mainly used to test the consumer count sign bit of <stream identifier> to avoid >> operation or peek operation when FIFO queue of <stream identifier> is empty .
<ストリーム識別子>.producerCout()
の形の式は、<ストリーム識別子>の作成側カウントを返す。なお、<ストリーム識別子>は<<演算を介して、スレッドにより書き込まれたストリームである。この式は、1つまたは複数の下流側キューが係る新しい値を受け取るスペースを有さない場合に、<<演算を回避するために、<ストリーム識別子>の作成側カウント符号ビットをテストするために、主に用いられる。
<Stream identifier>. producerCout ()
An expression of the form returns the creator count of <stream identifier>. Note that <stream identifier> is a stream written by a thread via << operation. This expression is to test the creator count sign bit of <stream identifier> to avoid the << operation, if one or more downstream queues do not have space to receive such a new value. , Mainly used.
モジュール本体内のスレッドが多数の異なる形を取り得るが、多くの変化例が、以下の典型的な形となるであろう。
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)結果を出力ストリームに代入すること、を含む無限ループに入る。
配列
The threads in the module body may take many different forms, but many variations would be the following typical form.
stream int moduleA (int strm1, ..., int strmN)
{
int var1,. . . , VarN, result; // Declare variable
while true // loop forever
{
strm1 >>var1;
// Read value from input stream
・
・
strmN >>varN;
・ / / Calculate the result
・
・
out <<result; // Assign result to output stream
}
}
Here, moduleA is a module having one or more input streams and a single output stream. The data types of the input and output streams are optionally chosen to be integer types. The first thing the threads in the body of module A execute is to declare the values for each input stream and the single output stream.
The thread is then put into an infinite loop, including (a) reading (consuming) values from each input stream, (b) calculating the result, and (c) assigning the result to the output stream. enter.
Array
他の言語におけるのと同様に、配列は、データ要素の配列ばかりではなく、ストリーム配列およびモジュール配列もまた、ストリームCにおいて重要な役割を果たす。実際のデータ値の配列(データ値の配列へのポインタではなく)は、複数のストリーム上で並列的に伝えられる。ストリーム配列は、モジュールの配列とともに用いられるとき、特に有用である。 As in other languages, sequences play an important role in stream C, as well as sequences of data elements, as well as stream and module sequences. An array of actual data values (as opposed to a pointer to an array of data values) is conveyed in parallel over multiple streams. Stream arrays are particularly useful when used with an array of modules.
ストリーム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]));
}
Stream C inherits from C syntax and semantics for data arrays. This means that when the name of the array is used as a (function) argument, the value passed to the function is the position or address of the beginning of the array, and the array element is not copied. The same is true for stream inputs (arguments) and module outputs. For illustration purposes, the GDC4 module described above may be used.
stream int GCD4 (int w, int x, int y,
int z) / / with two integer arguments {// module
out = GCD (GCD (w, x), GCD (y, z));
}
Instead of supplying GCD 4 with 4 separate integer stream arguments, a single stream argument is supplied, each value being an array of 4 integers. GCD4 will be transformed as follows.
stream int GCD4 (int * wxyz) // module with one array argument {
out = GCD (GCD (wxyz [0], wxyz [1]),
GCD (wxyz [2], wxyz [3]));
}
C言語の規則によれば、GCD4の単一の引数はint*型、すなわち整数へのポインタであり、この場合、4つの整数の配列における第1の整数である。GCD4の本体内のこれらの4つの整数は、標準的なC言語の演算子[]を用いてアクセスされる。C言語型のデータ配列をモジュールに供給することが、ストリームの文脈において配列を取り扱うための1つの方法である。 According to the rules of the C language, the single argument of GCD4 is an int * type, ie a pointer to an integer, in this case the first integer in an array of 4 integers. These four integers in the body of GCD4 are accessed using the standard C language operator []. Providing a C language type data array to a module is one way to handle the array in the context of a stream.
いくつかの用途に関しては、モジュールに配列ポインタのストリームを供給することは、その用途に固有の並列性を十分に利用するためには不十分である。したがって、配列のストリームよりもむしろ、ストリームの配列は、データ値の配列へのポインタではなく、実際のデータ値の配列が、複数のストリーム上で並列的に伝えられることを可能にする。ストリーム配列の宣言は、2つの相違、すなわちキーワードstreamが宣言に先行すること、および配列のサイズがコンパイル時に既知でなければならないことを除き、通常のC言語の配列の宣言と同じである。この制限は、モジュールと同じくアプリケーション内のすべてのストリームがコンパイル時にインスタンス化されるので、必要である。 For some applications, supplying a stream of array pointers to the module is not sufficient to take full advantage of the application-specific parallelism. Thus, rather than a stream of arrays, an array of streams is not a pointer to an array of data values, allowing an array of actual data values to be conveyed in parallel over multiple streams. The declaration of a stream array is the same as a normal C-language array declaration, except that there are two differences: the keyword stream precedes the declaration, and that the size of the array must be known at compile time. This limitation is necessary because all streams in the application as well as modules are instantiated at compile time.
ストリーム配列宣言の例を以下に挙げる。
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つを示す。
An example of a stream array declaration is given below.
stream int array1D [4];
stream int array2D [4] [16];
stream int array3D [4] [16] [9];
The first declaration declares that array1D is a one-dimensional array of four integer streams. Similarly, it is declared that array2D is a two dimensional array of 64 integer streams, and array3D is a three dimensional array of 576 integer streams. The individual streams of the stream array are accessed in the same way as the individual elements of the data array. For example,
array3D [3] [15] [7]
Indicates one of 576 streams of array3D.
ひとたびストリーム配列が宣言されると、配列全体、配列内のサブ配列、または配列内の個々のストリームは参照され得る。これらの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つのモジュールの入力型を以下に示す。
Once a stream array is declared, the entire array, subarrays within the array, or individual streams within the array may be referenced. These three cases are illustrated in the partial code below.
stream int moduleA (int); // module declaration stream int moduleB (int [4]); // module declaration stream int moduleC (int [3] [4]); // module declaration
stream int moduleD (int W [3] [4]) // module definition {
・
・
・
stream int X = moduleA (W [2] [0]);
// Stream type
stream int Y = moduleB (W [2] [0]);
// Stream type
stream int Z = moduleC (W); // stream expression
・
・
・
}
Here, declarations for moduleA, moduleB, and moduleC and partial definitions of moduleD are shown. The input types of these four modules are shown below.
moduleDの本体内のmoduleA、moduleB、およびmoduleCのインスタンス化に供給される入力引数を以下に示す。 The input arguments supplied to the instantiation of moduleA, moduleB, and moduleC in the body of moduleD are shown below.
それぞれの場合において、モジュールインスタンス化引数型は、モジュール入力型と一
致し、したがって各モジュールインスタンス化は、ストリームCの型づけの強い要件を満足する。
In each case, the module instantiation argument type matches the module input type, so each module instantiation satisfies the strong requirement of stream C typing.
ストリーム式内におけるストリーム配列の個々のストリームをアクセスすることも、この複素数乗算モジュール例に示すように、単純明快である。
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つの減算は、並列的に評価される。
Accessing individual streams of stream arrays within a stream expression is also straightforward, as shown in this example complex multiplication module.
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];
}
Because the operators in the stream expression are active in parallel, the stream expressions X [0] * Y [0] -X [1] * Y [1] and X [0] * Y [1] + X [1] The four multiplications, one addition, and one subtraction at Y [0] are evaluated in parallel.
並列処理に対する最も普及している手法の1つであるデータ並列性は、同一のタスクが同一のデータ構造(典型的には配列)の異なる部分上で並列的に(並行して)実行される、並列性の1つの形態である。ストリームCにおいて、データ並列性は、モジュール配列によりサポートされる。 Data parallelism, one of the most prevalent approaches to parallel processing, is the same task performed in parallel (in parallel) on different parts of the same data structure (typically an array) , Is a form of parallelism. In stream C, data parallelism is supported by the module arrangement.
モジュール配列は、その名称が暗示するように、モジュールの配列である。モジュール配列は、モジュール名と入力パラメータのリストとの間に角括弧で囲まれた配列次元を挿入することにより宣言される。以下はモジュール配列宣言の2つの例である。
stream int moduleA[3][4](int, int);
stream(int, int)modu1eB[3][4](int, int);
両方の場合において、配列次元は3×4である。
A module array is, as the name implies, an array of modules. A module array is declared by inserting an array dimension enclosed in square brackets between the module name and the list of input parameters. The following are two examples of module array declarations.
stream int moduleA [3] [4] (int, int);
stream (int, int) modu1eB [3] [4] (int, int);
In both cases, the array dimension is 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)
{
//モジュール本体
}
Similar to the normal (stand-alone) module definition, the module arrangement definition has a body enclosed in curly brackets ({and}). The following are two examples of module sequence definitions. The first example has a single (default) output stream, whereas the second example has two output streams with names.
stream int moduleA [3] [4] (int a, int b)
{
// Module body}
stream (int x, int y) moduleB [3] [4] (int a, int b)
{
// Module body}
ひとたびモジュール配列が宣言(宣言または定義)されると、配列全体、配列内のサブ配列、または配列内の個々のモジュールは、データ配列およびストリーム配列と同じ方法で、ストリーム式内でインスタンス化され得る。moduleA[3][4]に対して、これら3つの場合が示される。 Once a module array is declared (declared or defined), the entire array, subarrays within the array, or individual modules within the array can be instantiated within the stream expression in the same manner as data arrays and stream arrays . These three cases are shown for module A [3] [4].
モジュール配列の重要な属性は、モジュール配列がシステム初期化時にインスタンス化されるとき、顕著なものとなる。モジュール配列の各要素は、別個のモジュールインスタンス化として、インスタンス化される。その結果、すべての配列要素が並列的に動作することが可能となる。moduleA[3][4]がこの概念の1つの例である。モジュールがインスタンス化されると、moduleAの12(3×4)個の別個のインスタンス化が作られ、それぞれのインスタンス化は、他の11個のインスタンス化と並列的に動作する。さらに、このインスタンス化の乗算は、moduleA[3][4]の各インスタンス化に当てはまる。したがって、moduleA[3][4]の3つのインスタンスが存在する場合、moduleAの36(3×12)個の別個のインスタンス化が作られる。 An important attribute of the module array becomes noticeable when the module array is instantiated at system initialization. Each element of the module array is instantiated as a separate module instantiation. As a result, all array elements can operate in parallel. moduleA [3] [4] is an example of this concept. When a module is instantiated, 12 (3 × 4) separate instantiations of module A are created, each instantiation operating in parallel with the other 11 instantiations. Furthermore, this instantiation multiplication applies to each instantiation of moduleA [3] [4]. Thus, if there are three instances of moduleA [3] [4], 36 (3 × 12) separate instantiations of moduleA are created.
モジュール配列インスタンス化のパーソナル化は、インスタンス化がどのデータ上で演算されるかを決定する。インスタンス化は、各モジュールインスタンス化にそれ自体のユニークなデータをインスタンス化の入力ストリームを通して供給することにより、パーソナル化され得る。各モジュールインスタンス化が、その配列インデックスを、インデックス演算子を用いて特定することが可能となり、それにより、インスタンス化が、グローバル配列のそれ自体のユニークな部分にアクセスすることが可能となることにより、インスタンス化はパーソナル化され得る。 The personalization of the module array instantiation determines which data the instantiation is to operate on. The instantiation can be personalized by supplying each module instantiation with its own unique data through the input stream of the instantiation. By allowing each module instantiation to specify its array index using the index operator, this allows the instantiation to access its own unique part of the global array , Instantiation can be personalized.
ストリーム配列がモジュール配列の各要素にユニークなデータを供給するために用いられ得る第1タイプのパーソナル化が以下に示される。第2タイプのパーソナル化は、各配列モジュールの配列インデックスのインスタンス化がコンパイル時に既知であるという事実を利用する。これらのインデックスにアクセスするために、プログラマは、以下のシンタックス
int index(int i)
で演算子を使用する。なお、式中、iはコンパイル時に定数へと評価される整数式である。コンパイル時に、index(i)はインスタンス化の第1番目のインデックスと置き換えられる。iが配列境界外である場合、コンパイル時エラーまたはランタイムエラーが生じる。
The first type of personalization that can be used to provide unique data for stream arrays to each element of a module array is shown below. The second type of personalization takes advantage of the fact that the instantiation of the array index of each array module is known at compile time. To access these indices, the programmer uses the following syntax: int index (int i)
Use operators in. In the equation, i is an integer expression that is evaluated to a constant at compile time. At compile time, index (i) is replaced with the first index of the instantiation. If i is out of array bounds, compile-time or runtime errors occur.
ストリーム配列およびモジュール配列は、ストリームCの特別な配列結合機能を用いてストリーム配列とモジュール配列とが結合されたときに、最大の有用性を発揮する。結合に対しては、3つの要件、すなわちa)ストリーム配列およびモジュール配列が同じ次元を有さなければならないこと、b)ストリーム配列がモジュール配列の入力または出力と
接続(結合)されていなければならないこと、およびc)ストリーム配列型がモジュールの入力/出力型と一致しなければならないこと、が存在する。
Stream and module arrangements provide maximum utility when stream and module arrangements are combined using the special arrangement combining function of stream C. For combining, three requirements, a) the stream array and the module array must have the same dimensions, b) the stream array must be connected (coupled) with the input or output of the module array And c) the stream array type must match the input / output type of the module.
係る結合が生じると、ストリーム配列内の各個別ストリームは、同一のインデックスを有するモジュール配列の個々のモジュールの入力/出力ストリームに接続(結合)される。したがって、0<=i1<D1, 0<=i2<D2...0<=in<Dnに対して、ストリーム配列S[D1][D2]...[Dn]がモジュール配列M[D1][D2]...[Dn]の入力/出力に結合されると、各個別ストリームS[i1][i2]...[in]は個別モジュールM[i1][i2]...[in]の入力/出力に接続される。 When such a combination occurs, each individual stream in the stream array is connected (coupled) to the input / output stream of an individual module of the module array having the same index. Therefore, 0 <= i 1 <D 1 , 0 <= i 2 <D 2 . . . For 0 <= i n <D n , the stream array S [D 1 ] [D 2 ]. . . [D n ] is a module array M [D 1 ] [D 2 ]. . . When coupled to the input / output of [D n ], each individual stream S [i 1 ] [i 2 ]. . . [I n ] are individual modules M [i 1 ] [i 2 ]. . . Is connected to the input / output [i n].
以下は、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である、
ためである。
The following is an example of a stream array coupled to the output of one module array and the input of another module array.
stream int moduleA [3] [2] (); // first combined module stream void moduleB [3] [2] (int); // second combined module stream void parentModule ()
{
stream int cStrm [3] [2]; // Combined stream
cStrm [] [] = moduleA [] [] (); // output of moduleA coupled to cStrm
moduleB [] [] (cStrm [] []); // cStrm coupled to the input of moduleB
}
Here, the output stream of moduleA [3] [2] is coupled to cStrm [3] [2], and cStrm [3] [2] is coupled to the input stream of moduleB [3] [2]. These are regular combinations. Because
CStrm [3] [2], moduleA [3] [2], and moduleB [3] [2] all have the same dimensions,
• cStrm [3] [2] is connected to the output of moduleA [3] [2] and the input of moduleB [3] [2],
The type of cStrm [3] [2], the output type of moduleA [3] [2], and the input type of moduleB [3] [2] are all int,
It is for.
以下の表は、cStrm[3][2]の各個別ストリーム、すなわち(a)出力がストリームソースであるモジュール、(b)cStrm[3][2]における個別ストリーム、および(c)インプットがストリームデスティネーションであるモジュールをリストする。 The following table shows each individual stream of cStrm [3] [2]: (a) a module whose output is a stream source, (b) an individual stream in cStrm [3] [2], and (c) an input stream List the modules that are the destination.
PING PING
モジュールが他のモジュールに対して、そのモジュールが実行する特定の演算、副作用が完了したことを通知することが必要となる状況が存在する。例えば、モジュールがグローバルメモリ内のデータ構造に関する演算を実行するとき、おそらく同一のデータ構造に関する演算を実行する多数のモジュールのうちの1つとして、そのモジュールは、典型的には、演算が完了したため下流側の演算またはタスクが開始され得ることを下流側モジュールに通知する必要がある。これらの状況においては、値を返す必要はなく、特定のタスクが完了した信号を返すのみでよい。値ではなく信号が必要とされるこれらの状況に対して、ストリームCはpingデータ型を提供する。ping(ping型の値)は、特性を有さず、互いに対して完全に区別がつかない。 There are situations where a module needs to notify other modules that a particular operation that the module is performing, that a side effect has been completed. For example, when a module performs an operation on a data structure in global memory, that module will typically complete the operation, perhaps as one of many modules that perform the operation on the same data structure. It is necessary to notify the downstream module that the downstream operation or task can be started. In these situations, it is not necessary to return a value, only a signal that a particular task has been completed. For those situations where a signal rather than a value is required, stream C provides the ping data type. Ping (ping type values) has no property and is completely indistinguishable from one another.
pingは、3つの演算子、すなわち、(1)タスクの同期を提供するjoin演算子、(2)>>ストリームアクセス演算子、および(3)<<ストリームアクセス演算子、とともに用いられる。第1の使用法はストリームのみに関するが、第2および第3の使用法は、ストリームおよびスレッドに関する。 Ping is used with three operators: (1) join operator to provide task synchronization, (2) >> stream access operator, and (3) << stream access operator. The first usage relates only to streams, while the second and third usages relate to streams and threads.
pingキーワードは、1つまたは複数のping型のストリームを宣言するときに用いられる。例えば、以下の式
stream ping pStrm0, pStrm1, pStrm2;
は、pStrm0、pStrm1、およびpStrm2がping型のストリームであることを宣言する。pingキーワードは、
stream ping moduleName(int, ping);
のように、モジュール入力または出力がping型であることを宣言するモジュールプロトタイプ/定義にも用いられる。
The ping keyword is used when declaring one or more ping type streams. For example, the following equation stream ping pStrm0, pStrm1, pStrm2;
Declares that pStrm0, pStrm1, and pStrm2 are ping type streams. The ping keyword is
stream ping moduleName (int, ping);
It is also used for module prototypes / definitions that declare that module inputs or outputs are of ping type.
pingの第1の使用法はjoin演算子に関し、join演算子は、pingストリームと他の1つまたは複数のストリームとを繋いで、単一の出力ストリームを作る機能を有する。この演算子は、他のいくつかの演算モデルにおいて見られる接合演算(rendezvous operation)と同様である。join演算子を含む式は、2つの形
<pingストリーム配列>.join()
<pingストリーム>.join(<ストリーム式>)
のうちの1つを取る。すべてのストリーム式と同様に、これらの形のうちの1つにおける式の各評価は、各入力ストリームから単一の値/pingを消費し、式の(名称を有さない)出力ストリーム上に単一の値/pingを作る。入力ストリームが空き状態(値が存在しない)である場合、すべての入力ストリームが少なくとも1つの値/pingを有するまで、評価はストール(ブロック)される。非ping式に対しては明示的なjoin演算は必要ない。なぜなら、join演算の効果はすでに式評価のセマンティクスにより包含されるためである。
The first usage of ping relates to the join operator, which has the ability to connect the ping stream with one or more other streams to create a single output stream. This operator is similar to the rendezvous operation found in some other arithmetic models. Expressions that include the join operator have two forms: <ping stream array>. join ()
<Ping stream>. join (<stream expression>)
Take one of the. As with all stream expressions, each evaluation of the expression in one of these forms consumes a single value / ping from each input stream, and on the output stream (without a name) of the expression Make a single value / ping. If the input stream is idle (no value present), evaluation is stalled (blocked) until all input streams have at least one value / ping. No explicit join operation is required for non-ping expressions. Because the effect of the join operation is already covered by the semantics of expression evaluation.
第1の型の式が評価されると、単一のpingがpingストリームの配列内の各ストリームから消費され、単一のpingが式の出力ストリーム上に発行される。 When the first type of expression is evaluated, a single ping is consumed from each stream in the array of ping streams, and a single ping is issued on the output stream of the expression.
第2の形の式が評価されると、<pingストリーム>からの単一のpingと、<ストリーム式>の評価とが消費される。このストリーム式<ストリーム式>は、pingを含む任意の型であり得る。<ストリーム式>の評価から得られる値は、join演算の出力ストリーム上に発行される。式がping型である場合、式は単一のpingに評価される。このように、pingストリームは、上述の>>演算子の場合と同じく、<pingストリーム>にpingが存在する場合にのみ評価の進行を許可する守衛として機能する。 Once the second form of expression is evaluated, a single ping from <ping stream> and an evaluation of <stream expression> are consumed. This stream expression <stream expression> may be of any type including ping. The values obtained from the evaluation of <stream expression> are issued on the output stream of the join operation. If the expression is of ping type, the expression is evaluated to a single ping. Thus, the ping stream functions as a guard that allows the progress of evaluation only when there is a ping in <ping stream>, as in the case of the above-mentioned >> operator.
join演算の2つの形が図13Aおよび13Bに図示される。図13Aにおいては、サイズがnである1次元pingストリーム配列の個別ストリームが繋がれて、単一の(名称を有さない)出力pingストリームが作られる。図13Bにおいては、単一のpingストリームであるpingStrmが式exprと繋がれて、exprと同じ型を有する単一の(名称を有さない)出力ストリームが作られる。 Two forms of the join operation are illustrated in FIGS. 13A and 13B. In FIG. 13A, individual streams of a one-dimensional ping stream array of size n are concatenated to create a single (nameless) output ping stream. In FIG. 13B, a single ping stream, pingStrm, is concatenated with the expression expr to create a single (no name) output stream having the same type as expr.
join演算の1例は、データ構造Xを含み得る。ただし、データ構造Xについて、2つの演算、すなわち演算Aおよび演算Bが行われる。これらの演算は、以下の要件、すなわちa)go信号に応答して実行される以外には、演算Aも演算Bも実行されないこと、b)go信号が受信されると、演算Aおよび演算Bが並列的に実行されること、およびc)演算Aまたは演算Bのいずれかが開始される前に、直前のgo信号に応答して実行された両方の演算が完了していなければならないこと、を満足する。 One example of a join operation may include data structure X. However, for the data structure X, two operations, ie, operations A and B, are performed. These operations have the following requirements: a) neither operation A nor operation B is performed except in response to the go signal; b) operation A and operation B when the go signal is received Are performed in parallel, and c) both operations performed in response to the immediately preceding go signal must be completed before either operation A or operation B is started, Satisfy.
この問題に対する簡単なソリューションは、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信号を受け取る。
A simple solution to this problem is to use two instances of the join operation.
stream ping moduleA (ping pStrm)
{
while (true)
{
pStrm >>ping;
// execute operation A on data structure X
out <<ping;
}
}
stream ping module B (ping pStrm)
{
while (true)
{
pStrm >>ping;
// perform operation B on data structure X
out <<ping;
}
}
stream ping moduleC (ping goStrm)
{
stream ping startStrm = goStrm. joi
n (doneStrm);
stream ping StrmA = moduleA (startStrm);
stream ping StrmB = module B (startStrm);
stream ping doneStrm = StrmA. join (StrmB);
doneStrm. initialize (ping);
out = doneStrm;
}
moduleA and moduleB encapsulate operation A and operation B, respectively. Each has an input ping stream that starts one operation per ping and an output ping stream that confirms the completion of one operation per ping. moduleC contains one instance of both moduleA and moduleB and receives the go signal via the goStrm input ping stream.
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を送信する。
The six sentences in module C play the following roles.
stream ping startStrm = goStrm. join (doneStrm);
Connects goStrm and doneStrm to make startStrm. Thus, if there is a ping on the goStrm (i.e. the go signal) and a ping on the doneStrm (which indicates that operations A and B have been completed in response to the previous go signal): ping is assigned to startStrm.
stream ping StrmA = moduleA (startStrm);
Connects startStrm to the input ping stream of moduleA and connects the output ping stream of moduleA to StrmA. This means that operation A is performed in response to the go signal only after both operations associated with the previous go signal have been completed.
stream ping StrmB = module B (startStrm);
Is similar to the previous sentence, and this sentence ensures that the operation B is performed in response to the go signal only after both operations associated with the previous go signal have been completed. . However, the order in which the operation A and the operation B are performed is not limited. In other words, the operation A and the operation B are performed in parallel.
stream ping doneStrm = StrmA. join (StrmB);
Connects StrmA, which is the output ping stream of moduleA, to StrmB, which is the output ping stream of moduleB. Thus, if both operations performed in response to the previous go signal are complete, ping is substituted for doneStrm.
doneStrm. initialize (ping);
Assigns a single ping to doneStrm at system initialization. This indicates that all previous operations have been completely absent. Without this statement, moduleC will deadlock and no operation will be performed at all.
out = doneStrm;
Connects doneStrm to out which is the default output stream of moduleC. Each ping on this stream confirms that operations A and B performed in response to the go signal are complete. The behavior of module C is summarized as a go signal (ping) on the input port of module C so that operations A and B can be performed in parallel with respect to data structure X only after the previous operations have been completed. When both operation A and operation B are complete, module C sends ping as a confirmation on its output port.
pingStrm >> ping;
(式中、pingStrmはping型のストリームである)の形の文は、スレッドの実行をpingStrm内のpingと同期する機能を有する。この文がスレッドにおいて遭遇されると、単一のpingがpingStrmから読み出される(消費される)。pingStrmが空き状態(すなわち、pingStrmにpingが存在しない)である場合、この文は、pingが利用可能となるまで、ブロック(ストール)される。したがって、この文は、pingがpingStrmに存在するときにのみスレッドの進行を許可する守衛として機能する。この演算では変数は関与せず、>>通常は変数の存在が期待される演算子の右側には、キーワードpingのみが存在する。
pingStrm >>ping;
The statement in the form (where pingStrm is a ping-type stream) has the ability to synchronize the execution of a thread with the ping in pingStrm. When this statement is encountered in a thread, a single ping is read (spent) from pingStrm. If pingStrm is free (ie, there is no ping in pingStrm), this statement is blocked (stall) until a ping is available. Thus, this statement acts as a guard that only allows the thread to progress when the ping is in pingStrm. In this operation, no variable is involved, and >> Only the keyword ping exists to the right of the operator that is normally expected to exist.
pingStrm << ping;
(式中、pingStrmはping型のストリームである)の形の文は、スレッドが、特定の演算(単数または複数)が完了したことを関係者に知らせることを可能にする。この文がスレッドにおいて遭遇されると、単一のpingがpingStrmに書き込まれる(代入される)。上述の第1の文とは異なり、この文は決してブロックされない。
pingStrm <<ping;
The statement in the form (where pingStrm is a ping-type stream) allows the thread to inform interested parties that a particular operation or operations have been completed. When this statement is encountered in a thread, a single ping is written to (assigned to) pingStrm. Unlike the first sentence above, this sentence is never blocked.
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の標準出力ポートを通して、他のループ反復が完了したことを知らせる。
These two forms of stream / thread interaction involving ping are illustrated in the partial code below.
stream ping moduleA (ping pStrm)
{
// Initialize before entering loop
while (true)
{
pStrm >>ping;
// Perform operations with side effects
out <<ping;
}
}
moduleA has a single input port and a single output port, both of which are pinged. In module A, there is a thread including an infinite loop. Note that each iteration of this infinite loop has the following statement: pStrm >>ping;
It is started by This statement has the function of synchronizing the iterations of the loop with the pings in the module input stream pStrm. When pStrm is idle, this sentence is blocked, and when pStrm is non-empty, this sentence consumes a single ping from pStrm. That sentence is followed by a sentence that is always related to activities with side effects. If there are no side effects, modleA will be equivalent to inoperable. At the end of each iteration, the following statement out <<ping;
Exists. Note that this statement informs other loop iterations through the standard output port of 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ループに従うことにより、作られる。
The join operator is useful when working entirely in the stream domain. However, there may be situations where it is more convenient to perform coupling within a thread. For example, thread stream ping pingStrm [32];
Consider combining individual streams within. It can be achieved by embedding a for loop in the thread.
for (int i = 0; i <32; ++ i)
{
pingStrm [i] >>ping;
}
This loop is blocked until one ping is consumed from each of the 32 streams in pingStrm. pingStrm []. The output stream corresponding to the output stream of join () is the statement joinStrm <<ping;
It is made by following a for loop with.
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 []. These two partial codes are embedded in a while (true) loop to create a module that mimics the behavior of join (), which is the module stream ping joinArray (ping pingStrm [32])
{
while (true)
{
for (int i = 0; i <32; ++ i)
{
pingStrm [i] >>ping;
}
out <<ping;
}
}
Assigned to
埋め込まれたスレッドを有するモジュールは、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;
}
}
のようになるであろう。
The module with the embedded thread is pingStrm. It can be used to mimic the behavior of join (expr), where expr is an expression. However, in this case, the module needs not only the input stream for pingStrm but also the input stream for each input stream of expr. Thus, for example, if expr is the expression X * Y + Z, where X, Y and Z are integers, then pingStrm. The module that implements join (expr) is
stream ping joinExpr (ping pingStrm, int X, int Y, int Z)
{
while (true)
{
pingStrm >>ping;
out << X * Y + Z;
}
}
It will be like.
画素処理例は、同一のタスクが配列等の同一のデータ構造の異なる部分上で並列的に(並行して)実行される、並列性の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();
}
The pixel processing example is a form of parallelism, a ping in the implementation of data parallelism, a stream in which the same task is performed in parallel (parallel) on different parts of the same data structure such as an array, etc. The use of sequences and module sequences is shown. This example consists of a module arrangement and modules.
extern int xScaleFactor, yScaleFactor;
stream ping doPixel [64] [256] (int * baStrm) // The body is {// the thread domain
const int x = xScaleFactor * index (0);
const int y = yScaleFactor * index (1);
int * baseAddress;
while true
{
baStrm >>baseAddress;
・ / / Operation baStrm [x] [y] and
. // // Do it in the vicinity
・
out <<ping;
}
}
stream void parentModule (int * baStrm) // The body is {// the stream domain
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を発行することにより完了を知らせる。 The two-dimensional module array doPixel [64] [256] is made to match the size of the two-dimensional array of pixels. The base address of the pixel array on which doPixel [64] [256] operates is supplied by the input stream baStrm. The x-coordinates of the pixels on the individual doPixel module are obtained by multiplying the global constant xScaleFactor with index (0) (see section 5.3), which is the x index of the individual doPixel module. The y-coordinate of the pixel on the individual doPixel module is obtained by multiplying the global constant yScaleFactor with index (1), which is the y index of the individual doPixel module. The processing of each pixel begins by setting the variable baStrm to the current value of baStrm. Next, operations are performed on baStrm [x] [y] and its neighborhood. Once processed, the individual doPixel module signals completion by issuing a 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に挿入される。これにより、画素配列に関するすべての演算は、次の配列に関する演算が開始される前に、確実に完了することとなる。
The parentModule is responsible for broadcasting the base address of the pixel array to the individual modules in doPixel [64] [256]. The following statement xStrm [] [] = doPixel [] [] (jStrm.join (baStrm));
It is done by Here, the expression jStrm. In the input argument list of doPixel. join (baStrm) acts as a guard, allowing values in baStrm to pass only if there is a ping on jStrm. The following statement jStrm. initialize (ping);
The initial ping, which is inserted into jStrm by, allows just the first base address to pass undisturbed. Then ping is as follows: jStrm = xStrm [] []. join ();
(Here, xStrm [64] [256] is an array of ping streams created by the individual modules in doPixel [64] [256]) and is inserted into jStrm. Thus, a new ping is inserted in jStrm only if all modules in doPixel [64] [256] signal the completion of the previous operation by issuing a ping. This ensures that all operations on the pixel array are completed before operations on the next array begin.
標準的Cデータ型よりもむしろpingを用いることに、大きい利点が存在する。Cデータ型を用いると、先入れ先出し(FIFO)が、Cデータ型ストリームのすべてのデスティネーション、すなわち、ストリームが式への入力となるすべての位置において、データ値に必要とされる。しかしpingは互いに対して区別がつかないため、pingストリームの各デスティネーションにおいて必要とされるものは、キューに入れられたpingの個数を知らせるカウンタのみである。これにより、データ値に対する先入れ先出しキューと比較して、コストが顕著に削減されることとなる。 There are significant advantages to using ping rather than the standard C data type. With the C data type, first in, first out (FIFO) is required for data values at all destinations of the C data type stream, ie, at every position where the stream is an input to the expression. However, because pings are indistinguishable from one another, all that is required at each destination of the ping stream is a counter that tells the number of pings queued. This results in a significant cost reduction compared to a first-in-first-out queue for data values.
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コマンドは、モジュール定義の直後に続かなければならない。
The pragma command is an instruction to the stream C compiler / linker / loader. The instruction #pragma InitializeCount (m, p, n) initializes the consumption / creation side count of the input / output port p of the modules m to n. The pragma command must immediately follow the module definition #pragma FwrdsAckValue (m, s, n). This definition specifies n as the forward acknowledgment value for point-to-point connections starting from output stream s of module m. The pragma command specifies n as the backward acknowledgment value for point-to-point connections starting from output stream s of module m. #pragma BwrdsAckValue (m, s, n)
It must follow right after. The pragma command must immediately follow the module definition.
上述の概念のいくつかの利点例は、スレッドおよびマルチスレッド、すなわち、複数スレッドの並列実行のサポートである。また、SIMD、MIDM、命令レベル、タスクレベル、データ並列性、データフロー、およびSystolic等の並列性のすべての形態が表現可能である。決定的挙動がデフォルトである。非決定性は、プログラムに必要な場合にのみ明示的に追加される。なぜなら、ソフトウェアテストの容易性および信頼性をより効果的なものとするものは、逐次プログラミングの中にあるためである。上述した概念は、明示的な並列的構文を有さない。並列性は、普通の逐次コードに、少なくともシンタックスの面で、類似するストリームドメインにおけるコードから抜け落ちてしまう。したがって、スレッドドメインで作業するプログラマは厳格にシーケンシャル問題に集中してよい。プログラミングモデルは、モデルに基づく設計およびモデルに基づくテストに役立ち、プロセシングコアの任意の個数に応じて拡大縮小する。プログラミングモデルは、プロセシングコアを隔てる距離がナノメートル単位の場合にも千キロメートル単位の場合にも、等しく適用可能である。フォアグラウンドまたはバックグラウンドのタスクは存在せず、ただタスクのみが存在し、割込またはメッセージ引き渡しも存在せず、ただストリームのみが存在する。 Some example benefits of the above concept are the support of threads and multithreading, i.e. parallel execution of multiple threads. In addition, all forms of parallelism such as SIMD, MIDM, instruction level, task level, data parallelism, data flow, and Systolic can be represented. Deterministic behavior is the default. Nondeterminism is added explicitly only when needed for the program. The reason is that what makes software test easiness and reliability more effective is in sequential programming. The concepts described above do not have explicit parallel syntax. Parallelism falls out of code in similar stream domains, at least in terms of syntax, to regular sequential code. Thus, programmers working in the thread domain may focus strictly on sequential issues. The programming model is useful for model-based design and model-based testing, scaling with any number of processing cores. The programming model is equally applicable when the distance separating the processing cores is in nanometers or thousands of kilometers. There are no foreground or background tasks, only tasks, no interrupts or message passing, only streams.
本発明は、本発明に係る特定の実施形態に関して説明してきたが、これらの実施形態は単に例示に過ぎず、本発明を限定するものではない。例えば、任意の種類の処理ユニット、機能的回路または、1つまたは複数のユニットの集合、および/またはメモリ、I/O素子、その他等のリソースがノードに含まれ得る。ノードは、簡単なレジスタでもよく、または、デジタル信号処理システム等のように、より複雑なものであってもよい。本明細
書に説明したものではなく、他の種類のネットワークまたは相互接続方式も用いられ得る。本発明の特徴または態様は、好適な実施形態に関して本明細書で説明された適合システム以外のシステムにおいても達成され得る。
なお、本願発明に実施形態には、以下の発明(出願時の請求項1+6に対応)が含まれるが、これに限定されない:
<発明1>
ストリームベースのコンピュータソースコード変換して、マルチコアコンピュータシステムのランタイム動作の実行を、効率的に動作させるようにするシステムであって、
ストリームベースのコンピュータソースコードを記憶するメモリデバイスであって、
当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体を有するものと、
複数のプロセッシングコアと、
前記複数のコアのうちの少なくとも1つを含む変換システム(conversion system)であって、当該変換システムが、前記ストリームベースのコンピュータソースコードからの、1つ又は複数のプロセッシングコア上での実行のためのタスクの収集(collection)を生成し、各タスクが、前記ソースコード内のスレッドドメイン本体を伴ったモジュール定義か、前記ソースコード内のストリーム式(expression)を伴ったモジュール定義か、のいずれかの、実行可能なバージョンであり、当該タスクが、更に、前記ソースコードモジュール定義、又は、ストリーム式の入力ストリームと出力ストリームに対応する、入力ストリーム及び出力ストリームを有する、
ものと、
を備えるシステム。
<発明6>
発明1に記載のシステムであって、
前記変換システムが、各プロセッシングコアに、ゼロ又はそれより多い、実行されるべきタスクを割り当て(assigns)、
各プロセッシングコアが、それぞれのプロセッシングコアに割り当てられたタスクの各々の実行を管理するタスクマネジャを含む、
システム。
Although the invention has been described with reference to particular embodiments according to the invention, these embodiments are merely exemplary and do not limit the invention. For example, a node may include any type of processing unit, functional circuit or collection of one or more units, and / or resources such as memory, I / O elements, and the like. The nodes may be simple registers, or more complex, such as digital signal processing systems. Other types of networks or interconnection schemes may also be used, not described herein. The features or aspects of the invention may also be achieved in a system other than the adaptation system described herein with respect to the preferred embodiments.
The embodiments of the present invention include the following inventions (corresponding to
<
A system that performs stream-based computer source code conversion so that execution of runtime operation of a multi-core computer system is efficiently operated,
A memory device for storing stream based computer source code, comprising:
The source code includes one or more module definitions, and each module definition includes a list of input streams, a list of output streams, and a body.
With multiple processing cores,
A conversion system that includes at least one of the plurality of cores, for the conversion system to execute on the one or more processing cores from the stream-based computer source code. Create a collection of tasks, and each task is either a module definition with a thread domain body in the source code or a module definition with a stream expression in the source code An executable version of the task, the task further comprising an input stream and an output stream corresponding to the source code module definition or the streamed input stream and output stream,
things and,
System with
<Invention 6>
A system according to
The transformation system assigns zero or more tasks to be performed to each processing core,
Each processing core includes a task manager that manages the execution of each of the tasks assigned to the respective processing core,
system.
Claims (20)
ストリームベースのコンピュータソースコードを記憶するメモリデバイスであって、
当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体を有するものと、
複数のプロセッシングコアと、
前記複数のコアのうちの少なくとも1つを含む変換システム(conversion system)であって、当該変換システムが、前記ストリームベースのコンピュータソースコードからの、1つ又は複数のプロセッシングコア上での実行のための、ゼロ又はそれより多いタスクを生成し、各タスクが、前記ソースコード内のスレッドドメイン本体を伴ったモジュール定義か、前記ソースコード内のストリーム式(expression)を伴ったモジュール定義か、のいずれかの、実行可能なバージョンであり、当該タスクが、更に、入力ストリーム及び出力ストリームを有し、当該入力ストリーム及び出力ストリームのそれぞれが、モジュール定義の入力ストリーム及び出力ストリーム、又は、ストリーム式の入力ストリームと出力ストリームに対応する、
ものと、
を備えるシステム。 A system that translates stream-based computer source code to efficiently execute the execution of runtime operations of a multi-core computer system, comprising:
A memory device for storing stream based computer source code, comprising:
The source code includes one or more module definitions, and each module definition includes a list of input streams, a list of output streams, and a body.
With multiple processing cores,
A conversion system that includes at least one of the plurality of cores, for the conversion system to execute on the one or more processing cores from the stream-based computer source code. Either zero or more tasks , each task being a module definition with a thread domain body in the source code or a module definition with a stream expression in the source code The executable version, the task further comprises an input stream and an output stream, and the input stream and the output stream respectively are module-defined input stream and output stream, or stream- type input For streams and output streams,
things and,
System with
データ値が利用可能となった際に、タスクが、当該タスクの入力ストリームからデータ値を得るための命令に遭遇するときに、当該タスクの入力ストリームの先入れ先出しキューからデータ値を消費させ、
タスクが、データ値を、出力ストリームに配置するための命令に遭遇する際に、データ値を、当該タスクの出力ストリームに配置させる、
システム。 The system according to claim 1, wherein each task is
When the data value is available, the task when it encounters the instruction for obtaining a data value from the input stream of the task, to consume the data values from the first-in first-out queue in the input stream of the task,
Task, a data value, when encountering the instructions for placement in the output stream, the data value, Ru is arranged on the output stream of the task,
system.
データ値が利用可能となったときに、当該タスクの入力ストリームの先入れ先出しキューから、データ値を消費させ、
前記ストリーム式が評価される度に、データ値を、当該タスクの出力ストリームに配置させる、
システム。 The system according to claim 1, wherein each task corresponding to a stream expression is
When the data value is available from the first-in first-out queue in the input stream of the task, to consume the data value,
Every time the stream formula Ru is evaluated, the data values, Ru is arranged on the output stream of the task,
system.
モジュールインスタンス又はストリーム式の入力ストリームへのモジュール定義の入力ストリーム、
モジュールインスタンス又はストリーム式の入力ストリームへの、モジュールインスタンス又はストリーム式の出力ストリーム、又は、
モジュール定義の出力ストリームへの、モジュールインスタンス又はストリーム式の出力ストリーム、
のうちの1つ又は複数を接続するストリームからなる、
システム。 The system according to claim 1, wherein the stream based computer source code specifies module definition and stream type interconnection, and the module definition is defined in the computer source code or the included library. The stream expression is identical to the C expression computer program expression containing the variables , except that it is an instance of, and the variables are replaced by the stream in the stream expression , and the interconnection is
Input stream module definition in the input stream module instance or stream type,
To the input stream module instance or stream type, module instance or stream type of the output stream, or,
To the module definition of the output stream, the module instance or stream type of the output stream,
Consisting of streams connecting one or more of
system.
各プロセッシングコアが、それぞれのプロセッシングコアに割り当てられたタスクの各々の実行を管理するタスクマネジャを含む、
システム。 The system according to claim 1, wherein
Each processing core includes a task manager that manages the execution of each of the tasks assigned to the respective processing core,
system.
タスクマネジャが、
当該タスクの入力ストリームに対しての消費側(consumer)カウント、
当該タスクの出力ストリームに対しての製造側カウント、
実行の準備が整った(ready to executed)タスクの実行される準備が整った(ready-to-run)キュー、
タスクの実行の準備を整えるためにエネーブルとされるために必要とされる当該タスクの入力ストリームの数を決定する各タスクに対する入力カウント、及び、
タスクの実行の準備を整えるためにエネーブルとされるために必要とされる当該タスクの出力ストリームの数を決定する各タスクのための出力カウント、
を維持する、システム。 The system according to claim 6, wherein
The task manager
Consumer against the input stream of the task (consumer) count,
Production side count of the output stream of the task,
Ready-to-run queue, ready-to-run queue,
An input count for each task that determines the number of input streams for that task that are required to be enabled to prepare the task for execution;
An output count for each task, which determines the number of output streams of that task that are required to be enabled to prepare the task for execution.
Maintain the system.
当該第1クラスの地位が、ストリームが、識別子、関数の入力パラメータ、関数の出力、式内の又は式外のパラメータ、となるように拘束されることを可能とする、システム。 The system according to claim 1, wherein the stream based computer source code comprises a stream enhanced to a first-class status.
The position of the first class, stream identifier, the input parameters of the function, the output of the function, and allow it to be constrained such that parameters or outside expressions in a system.
ストリームベースのコンピュータソースコードを、メモリデバイスに記憶させるステップであって、当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体を有するものと、
ストリームベースのコンピュータソースコードからの、1つ又は複数のプロセッシングコア上での実行のための、ゼロ又はそれより多いタスクを生成するステップであって、各タスクが、ソースコード内のスレッドドメイン本体を伴うモジュール定義か、ソースコード内のストリーム式を伴うモジュール定義か、のいずれかの実行可能なバージョンであり、タスクが、更に、入力ストリーム及び出力ストリームを有し、当該入力ストリーム及び出力ストリームのそれぞれが、モジュール定義の入力ストリーム及び出力ストリーム、又は、ストリーム式の入力ストリーム及び出力ストリームに対応する、
ランタイム動作を実行するための、複数のプロセッシングコア上での、ゼロ又はそれより多いタスクの生成を実行するステップと、
を含む方法。 A method performed by the multi-core computer system for converting stream-based computer source code to efficiently operate the execution of runtime operations of a multi-core computer system including multiple processing cores, comprising:
Storing stream-based computer source code in a memory device, the source code comprising one or more module definitions, each module definition comprising a list of input streams, a list of output streams, and With one having the body,
Generating zero or more tasks for execution on one or more processing cores from stream-based computer source code, each task comprising a thread domain body within the source code; An executable version of either an accompanying module definition or a module definition with a stream expression in source code, the task further comprising an input stream and an output stream, each of the input stream and the output stream but the input and output streams of the module definition, or, corresponding to the input and output streams of a stream type,
Performing the generation of zero or more tasks on a plurality of processing cores to perform runtime operations;
Method including.
データ値が利用可能となった際に、タスクが、当該タスクの入力ストリームからデータ値を得るための命令に遭遇するときに、当該タスクの入力ストリームの先入れ先出しキューからデータ値を消費させ、
タスクが、データ値を、出力ストリームに配置するための命令に遭遇する際に、データ値を、当該タスクの出力ストリームに配置させる、
方法。 The method of claim 13, wherein each task is
When the data value is available, the task when it encounters the instruction for obtaining a data value from the input stream of the task, to consume the data values from the first-in first-out queue in the input stream of the task,
Task, a data value, when encountering the instructions for placement in the output stream, the data value, Ru is arranged on the output stream of the task,
Method.
データ値が利用可能となったときに、当該タスクの入力ストリームの先入れ先出しキューから、データ値を消費させ、
前記ストリーム式が評価される度に、データ値を、当該タスクの出力ストリームに配置させる、
方法。 The method according to claim 13, wherein each task corresponding to a stream expression is
When the data value is available from the first-in first-out queue in the input stream of the task, to consume the data value,
Every time the stream formula Ru is evaluated, the data values, Ru is arranged on the output stream of the task,
Method.
モジュールインスタンス又はストリーム式の入力ストリームへのモジュール定義の入力ストリーム、
モジュールインスタンス又はストリーム式の入力ストリームへの、モジュールインスタンス又はストリーム式の出力ストリーム、又は、
モジュール定義の出力ストリームへの、モジュールインスタンス又はストリーム式の出力ストリーム、
のうちの1つ又は複数を接続するストリームからなる、
方法。 The method according to claim 13, wherein the stream based computer source code specifies module definition and stream type interconnection, and the module definition is a computer source code or a module defined in an included library. The stream expression is identical to the C expression computer program expression containing the variables, except that it is an instance of, and the variables are replaced by the stream in the stream expression , and the interconnection is
Input stream module definition in the input stream module instance or stream type,
To the input stream module instance or stream type, module instance or stream type of the output stream, or,
To the module definition of the output stream, the module instance or stream type of the output stream,
Consisting of streams connecting one or more of
Method.
前記第1クラスの地位が、ストリームが、識別子、関数の入力パラメータ、関数の出力、式内の又は式外のパラメータ、となるように拘束されることを可能とする、方法。 The method according to claim 13, wherein the stream based computer source code comprises a stream enhanced to a first-class status.
The position of the first class, stream identifier, the input parameters of the function, the output of the function, and allow it to be constrained such that parameters or outside expressions in, and a method.
複数のプロセッシングコアと、
ストリームベースのコンピュータソースコードを記憶するメモリデバイスであって、当該ソースコードが、1つ又は複数のモジュール定義を含み、各モジュール定義が、入力ストリームのリスト、出力ストリームのリスト、及び、本体(body)を有するものと、
前記メモリデバイスに結合された変換器(converter)であって、当該変換器が、1つ又は複数のプロセッシングコア上での実行のために、ストリームベースのコンピュータソースコードから、ゼロ又はそれより多いタスクを生成し、各タスクが、ソースコード内でのスレッドドメイン本体を伴うモジュール定義か、ソースコード内でのストリーム式を伴うモジュール定義か、のいずれかの、実行可能なバージョンであり、タスクが、更に、入力ストリーム及び出力ストリームを有し、当該入力ストリーム及び出力ストリームのそれぞれが、モジュール定義の入力ストリーム及び出力ストリーム、又は、ストリーム式の入力ストリーム及び出力ストリームに対応し、
前記変換器が、前記ゼロ又はそれより多いタスクの各々に対して前記複数のプロセッシングコアの1つを選択し、複数のコアが、ランタイム動作の実行と並行して、ゼロ又はそれより多いタスクの生成を実行する、コンピューティングデバイス。 A programmable computing device,
With multiple processing cores,
A memory device for storing stream-based computer source code, wherein the source code comprises one or more module definitions, each module definition comprising a list of input streams, a list of output streams, and a body (body With)),
A converter coupled to the memory device, wherein the converter performs zero or more tasks from stream-based computer source code for execution on one or more processing cores And each task is an executable version of either a module definition with a thread domain body in the source code or a module definition with a stream expression in the source code, and further comprising an input and output streams, each of the input and output streams are input and output streams of the module definition, or correspond to the input and output streams of a stream type,
The converter selects one of the plurality of processing cores for each of the zero or more tasks , wherein the plurality of cores are for zero or more tasks in parallel with execution of the run-time operation. A computing device that performs generation.
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 (en) | 2010-01-21 | 2011-01-21 | Method and apparatus for a general purpose multi-core system for implementing stream-based operations |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2017004550A JP2017004550A (en) | 2017-01-05 |
| JP6495208B2 true JP6495208B2 (en) | 2019-04-03 |
Family
ID=44278406
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2012550178A Expired - Fee Related JP5990466B2 (en) | 2010-01-21 | 2011-01-21 | Method and apparatus for a general purpose multi-core system for implementing stream-based operations |
| JP2016159234A Active JP6495208B2 (en) | 2010-01-21 | 2016-08-15 | Method and apparatus for a general purpose multi-core system for implementing stream-based operations |
Family Applications Before (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2012550178A Expired - Fee Related JP5990466B2 (en) | 2010-01-21 | 2011-01-21 | Method and apparatus for a general purpose multi-core system for implementing stream-based operations |
Country Status (5)
| Country | Link |
|---|---|
| US (3) | US8843928B2 (en) |
| EP (1) | EP2526494B1 (en) |
| JP (2) | JP5990466B2 (en) |
| KR (1) | KR101814221B1 (en) |
| WO (1) | WO2011091323A1 (en) |
Families Citing this family (28)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9110692B2 (en) | 2001-03-22 | 2015-08-18 | Frederick Master | Method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system |
| US9274921B2 (en) * | 2006-12-27 | 2016-03-01 | International Business Machines Corporation | System and method for managing code displacement |
| 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 (en) | 2012-01-27 | 2016-01-13 | 株式会社トプスシステムズ | Processor core and multi-core processor system |
| JP5867120B2 (en) * | 2012-02-01 | 2016-02-24 | 日本電気株式会社 | Information processing apparatus, information processing method, and program |
| CN103092807B (en) * | 2012-12-24 | 2015-09-09 | 杭州华为数字技术有限公司 | Node Controller, parallel computation server system and method for routing |
| 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 |
| US9223767B1 (en) | 2014-06-28 | 2015-12-29 | Vmware, Inc. | Unified graphical user interface for displaying a plan of operations in a datacenter |
| US9389848B2 (en) * | 2014-06-28 | 2016-07-12 | Vmware, Inc. | Scheduling a plan of operations in a datacenter |
| 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 |
| US9442714B2 (en) | 2014-06-28 | 2016-09-13 | Vmware, Inc. | Unified visualization of a plan of operations in a datacenter |
| CN105656973B (en) | 2014-11-25 | 2018-11-13 | 中国科学院声学研究所 | Method for scheduling task and system in a kind of distributed node group |
| US9846574B2 (en) * | 2014-12-19 | 2017-12-19 | Signalfx, Inc. | Representing result data streams based on execution of data stream language programs |
| CN113641627A (en) * | 2015-05-21 | 2021-11-12 | 高盛有限责任公司 | General parallel computing architecture |
| US11449452B2 (en) | 2015-05-21 | 2022-09-20 | Goldman Sachs & Co. LLC | General-purpose parallel computing architecture |
| CN107561950B (en) * | 2016-06-30 | 2020-11-27 | 西门子瑞士有限公司 | Programming method of controller in building and server for providing programming tool of controller |
| US10459509B2 (en) * | 2017-04-10 | 2019-10-29 | Intel Corporation | Dual path sequential element to reduce toggles in data path |
| JP2019164713A (en) | 2018-03-20 | 2019-09-26 | 東芝メモリ株式会社 | Storage system and data transfer method |
| JP7035751B2 (en) * | 2018-04-12 | 2022-03-15 | 富士通株式会社 | Code conversion device, code conversion method, and code conversion program |
| 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 |
| EP4011030A4 (en) * | 2019-08-07 | 2023-12-27 | Cornami, Inc. | CONFIGURATION OF A COMPUTING PROCESSOR ARCHITECTURE WITH A REDUCED INSTRUCTION SET TO EXECUTE A FULLY HOMOMORPHOUS ENCRYPTION ALGORITHM |
| WO2021046581A1 (en) * | 2019-09-06 | 2021-03-11 | Intellogence Inc. | Systems, apparatus, and methods of conveyor belt processing |
| US11886377B2 (en) * | 2019-09-10 | 2024-01-30 | Cornami, Inc. | Reconfigurable arithmetic engine circuit |
Family Cites Families (510)
| 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 |
| US4143793A (en) | 1977-06-13 | 1979-03-13 | The Cornelius Company | Apparatus and method for dispensing a carbonated beverage |
| US4377246A (en) | 1977-06-13 | 1983-03-22 | The Cornelius Company | Apparatus 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 (en) | 1982-07-16 | 1984-01-27 | Nec Corp | Pipeline arithmetic device |
| US4549675A (en) | 1982-09-07 | 1985-10-29 | The Cornelius Co. | Beverage dispensing valve |
| US4936488A (en) | 1982-09-07 | 1990-06-26 | The Cornelius Company | Beverage dispensing valve |
| US5129549A (en) | 1982-09-07 | 1992-07-14 | Imi Cornelius Inc. | Beverage dispensing valve |
| US4509690A (en) | 1982-12-06 | 1985-04-09 | The Cornelius Company | Carbonated beverage mixing nozzle for a dispenser |
| 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 |
| US4466342A (en) | 1983-02-22 | 1984-08-21 | General Foods Corporation | Carbonation chamber with sparger for beverage carbonation |
| 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 (en) | 1984-06-25 | 1985-12-26 | Isoworth Ltd | METHOD AND APPARATUS FOR CARBONIZATION |
| 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 |
| WO1990001192A1 (en) | 1988-07-22 | 1990-02-08 | United States Department Of Energy | Data flow machine for data driven computing |
| US4901887A (en) | 1988-08-08 | 1990-02-20 | Burton John W | Beverage dispensing system |
| DE3829831A1 (en) | 1988-09-02 | 1990-03-15 | Hansa Metallwerke Ag | DEVICE FOR TAPING A SELECTABLE QUANTITY OF LIQUID, IN PARTICULAR QUANTITY OF WATER |
| 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 (en) | 1989-02-24 | 1997-12-04 | At & T Corp | Adaptive work sequence planning for multiple processing systems |
| 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 (en) * | 1989-09-16 | 1991-04-26 | Fujitsu Ltd | Process execution system |
| US4961533A (en) | 1989-09-27 | 1990-10-09 | Viac Inc. | Inventory control system |
| GB2236736A (en) | 1989-09-27 | 1991-04-17 | Isoworth Ltd | Carbonation apparatus for dispensing drinks, with plural carbonation chambers |
| 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 |
| JPH085515B2 (en) | 1990-02-27 | 1996-01-24 | ザ・コカ―コーラ・カンパニー | Microgravity dispenser |
| JP3210319B2 (en) | 1990-03-01 | 2001-09-17 | 株式会社東芝 | Neurochip and neurocomputer using the chip |
| 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 |
| JP3213765B2 (en) | 1991-03-11 | 2001-10-02 | サン・マイクロシステムズ・インコーポレーテッド | Method and apparatus for optimizing cost-based heuristic instruction scheduling for pipeline processors |
| 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 (en) | 1991-09-30 | 2001-01-15 | 富士通株式会社 | Information vending machine |
| 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 |
| US5914953A (en) | 1992-12-17 | 1999-06-22 | Tandem Computers, Inc. | Network message routing using routing table information and supplemental enable information for deadlock prevention |
| 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 |
| JPH08507889A (en) | 1993-03-15 | 1996-08-20 | シーメンス アクチエンゲゼルシヤフト | Method for mechanically generating instruction groups that can be processed in parallel from a program for a superscalar microprocessor |
| JP3499252B2 (en) | 1993-03-19 | 2004-02-23 | 株式会社ルネサステクノロジ | Compiling device and data processing device |
| 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 |
| FI932605A7 (en) | 1993-06-07 | 1994-12-08 | Nokia Telecommunications Oy | Base station receiver equipment |
| 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 (en) | 1993-07-02 | 2001-04-23 | 日本電気株式会社 | Pipeline arithmetic processing unit |
| JPH0728786A (en) | 1993-07-15 | 1995-01-31 | Hitachi Ltd | Vector processor |
| 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 |
| WO1995009390A1 (en) | 1993-09-28 | 1995-04-06 | Namco Ltd. | Pipeline processor, clipping processor, three-dimensional simulator and pipeline processing method |
| 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 |
| EP0652510B1 (en) | 1993-11-05 | 2000-01-26 | Intergraph Corporation | Software scheduled superscalar computer architecture |
| KR960010668B1 (en) | 1993-11-06 | 1996-08-07 | 엘지전자 주식회사 | Refrigerator |
| 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 (en) | 1994-03-04 | 1994-07-26 | Spal Ind Brasileira De Bebidas | Soft drink dispensing machine |
| 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 (en) | 1994-09-05 | 1997-01-03 | Sgs Thomson Microelectronics | SIGNAL PROCESSING CIRCUIT FOR IMPLEMENTING A VITERBI ALGORITHM |
| JP3525353B2 (en) | 1994-09-28 | 2004-05-10 | 株式会社リコー | Digital electronic still camera |
| JPH08106375A (en) | 1994-10-03 | 1996-04-23 | Ricoh Co Ltd | Signal processing calculator |
| 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 (en) | 1994-12-27 | 2004-02-12 | BSH Bosch und Siemens Hausgeräte GmbH | Device for repeated, independent dosing of precisely metered amounts of a powdery cleaning agent in water-carrying cleaning machines, in particular household dishwashers and household washing machines |
| KR0146100B1 (en) | 1995-01-07 | 1998-09-15 | 이헌조 | Information acquisition and analysis device |
| 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 |
| CN1312549C (en) | 1995-02-13 | 2007-04-25 | 英特特拉斯特技术公司 | Systems and methods for secure transaction management and electronic rights protection |
| US5892900A (en) | 1996-08-30 | 1999-04-06 | Intertrust Technologies Corp. | Systems and methods for secure transaction management and electronic rights protection |
| 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 |
| US5737631A (en) | 1995-04-05 | 1998-04-07 | Xilinx Inc | Reprogrammable instruction set accelerator |
| US6085740A (en) | 1996-02-21 | 2000-07-11 | Aerogen, Inc. | Liquid dispensing apparatus and methods |
| US5835753A (en) | 1995-04-12 | 1998-11-10 | Advanced Micro Devices, Inc. | Microprocessor with dynamically extendable pipeline stages and a classifying circuit |
| US5611867A (en) | 1995-04-12 | 1997-03-18 | Maytag Corporation | Method of selecting a wash cycle for an appliance |
| 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 |
| US6021186A (en) | 1995-04-17 | 2000-02-01 | Ricoh Company Ltd. | Automatic capture and processing of facsimile transmissions |
| 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 (en) | 1995-07-11 | 1997-08-08 | Alcatel Business Systems | COMMUNICATION SYSTEM AND CORRESPONDING EQUIPMENT FOR SUBSCRIBER INSTALLATION |
| 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 |
| US5646545A (en) | 1995-08-18 | 1997-07-08 | Xilinx, Inc. | Time multiplexed programmable logic device |
| US5778439A (en) | 1995-08-18 | 1998-07-07 | Xilinx, Inc. | Programmable logic device with hierarchical confiquration and state storage |
| US5784313A (en) | 1995-08-18 | 1998-07-21 | Xilinx, Inc. | Programmable logic device including configuration data or user data memory slices |
| 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 (en) | 1995-09-01 | 1997-01-23 | Philips Patentverwaltung | Local network operating according to the asynchronous transfer mode (ATM) with at least two ring systems |
| 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 (en) | 1995-12-19 | 1999-05-01 | 김광호 | Beverage supply device of refrigerator |
| 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 (en) | 1996-03-01 | 1998-04-30 | Bull Sa | SYSTEM FOR CONFIGURING PRECONFIGURED SOFTWARE ON NETWORK OPEN SYSTEMS IN A DISTRIBUTED ENVIRONMENT AND METHOD IMPLEMENTED BY SUCH A SYSTEM |
| 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 (en) | 1996-08-14 | 2001-01-09 | 日本電気株式会社 | Channel selection method for wireless communication system |
| 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 Industrial 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 |
| 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 |
| US6061580A (en) | 1997-02-28 | 2000-05-09 | Randice-Lisa Altschul | Disposable wireless telephone and method for call-out only |
| JP3340343B2 (en) | 1997-03-13 | 2002-11-05 | 株式会社東芝 | Processor and information processing device |
| 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 |
| 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 |
| 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 |
| DE69835314T2 (en) | 1997-04-15 | 2007-05-10 | Hewlett-Packard Development Co., L.P., Houston | Method and device for format-controlled interaction between devices |
| US6041322A (en) | 1997-04-18 | 2000-03-21 | Industrial Technology Research Institute | Method and apparatus for processing data in a neural network |
| JP3555729B2 (en) | 1997-04-22 | 2004-08-18 | 日本ビクター株式会社 | Method and apparatus for processing variable-length encoded data |
| 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 (en) | 1997-06-18 | 2000-06-30 | Nokia Mobile Phones Ltd | A method for identifying base stations in a time division cellular network in a mobile station and a mobile station |
| 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 |
| US5987105A (en) | 1997-06-25 | 1999-11-16 | 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 |
| ES2301896T3 (en) | 1997-07-17 | 2008-07-01 | Matsushita Electric Industrial Co., Ltd | SYNCHRONIZATION PROCEDURE FOR A CDMA SYSTEM. |
| 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 (en) | 1997-09-23 | 2000-04-01 | 구자홍 | Dispenser assembly for refrigerator and control method thereof |
| 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 |
| US5873045A (en) | 1997-10-29 | 1999-02-16 | International Business Machines Corporation | Mobile client computer with radio frequency transceiver |
| US5993739A (en) | 1997-10-29 | 1999-11-30 | Chaircare | Continuous washing system |
| 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 (en) | 1997-10-31 | 1999-05-07 | Sgs Thomson Microelectronics | IMPROVED PROCESSING PROCESSOR |
| WO1999023761A1 (en) | 1997-11-03 | 1999-05-14 | Harris Corporation | A field programmable radio frequency communications equipment including a configurable if circuit and method therefor |
| 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 |
| 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 |
| US6046603A (en) | 1997-12-12 | 2000-04-04 | Xilinx, Inc. | Method and apparatus for controlling the partial reconfiguration of a field programmable gate array |
| 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 |
| DE69827589T2 (en) | 1997-12-17 | 2005-11-03 | Elixent Ltd. | Configurable processing assembly and method of using this assembly to build a central processing unit |
| JPH11184674A (en) | 1997-12-24 | 1999-07-09 | Fujitsu Ltd | Register file |
| 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 (en) | 1998-03-11 | 1999-09-24 | Oki Electric Ind Co Ltd | Receiver |
| 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 |
| CA2334212A1 (en) | 1998-06-05 | 1999-12-09 | I2 Technologies, Inc. | Computer implemented scheduling system and process using abstract local search technique |
| 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 (en) | 1998-06-30 | 2002-09-17 | 주식회사 하이닉스반도체 | Mehod for forming metal wire of semiconductor device by using TiAlN antireflection layer |
| 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 |
| US6421809B1 (en) | 1998-07-24 | 2002-07-16 | Interuniversitaire Micro-Elektronica Centrum (Imec Vzw) | 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 |
| US6467009B1 (en) | 1998-10-14 | 2002-10-15 | Triscend Corporation | Configurable processor system unit |
| 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 |
| 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 (en) | 1999-01-28 | 2003-09-08 | 日本電気株式会社 | Programmable device |
| WO2000049496A1 (en) | 1999-02-15 | 2000-08-24 | Koninklijke Philips Electronics N.V. | Data processor with a configurable functional unit and method using such a data processor |
| US20020083423A1 (en) | 1999-02-17 | 2002-06-27 | Elbrus International | List scheduling algorithm for a cycle-driven instruction scheduler |
| JP3033575B1 (en) | 1999-02-17 | 2000-04-17 | 日本電気株式会社 | Image processing device |
| US6718541B2 (en) | 1999-02-17 | 2004-04-06 | Elbrus International Limited | Register economy heuristic for a cycle driven multiple issue instruction scheduler |
| US6510138B1 (en) | 1999-02-25 | 2003-01-21 | Fairchild Semiconductor Corporation | Network switch with head of line input buffer queue clearing |
| US6150838A (en) | 1999-02-25 | 2000-11-21 | Xilinx, Inc. | FPGA configurable logic block with multi-purpose logic/memory circuit |
| 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 |
| WO2000068784A1 (en) | 1999-05-06 | 2000-11-16 | Koninklijke Philips Electronics N.V. | Data processing device, method for executing load or store instructions and method for compiling programs |
| KR100761328B1 (en) | 1999-05-07 | 2007-09-27 | 모픽스 테크놀로지 아이엔씨 | Heterogeneous Programmable Gate Array |
| US6263057B1 (en) | 1999-05-07 | 2001-07-17 | Lucent Technologies Inc. | Automatic telecommunications provider selection system |
| 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 (en) | 1999-07-12 | 2002-10-25 | 한국전자통신연구원 | Hardware-Efficient Demodulator for CDMA Adaptive Antenna Array Systems |
| 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 (en) * | 1999-11-17 | 2001-12-21 | Bull Cp8 | METHOD FOR LOADING APPLICATIONS IN A MULTI-APPLICATION ON-BOARD SYSTEM, CORRESPONDING ON-BOARD SYSTEM, AND METHOD FOR EXECUTING AN APPLICATION OF THE ON-BOARD SYSTEM |
| EP1107512A1 (en) | 1999-12-03 | 2001-06-13 | Sony International (Europe) GmbH | Communication device and software for operating multimedia applications |
| JP2001166947A (en) | 1999-12-06 | 2001-06-22 | Nec Corp | Compile processing system |
| 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 |
| 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 |
| US6601158B1 (en) | 1999-12-30 | 2003-07-29 | Pmc-Sierra, Inc. | Count/address generation circuitry |
| KR100682736B1 (en) | 2000-01-28 | 2007-02-15 | 엠 디솔루션 코포레이션 | Configuration Generation Method for Configurable Spread Spectrum Communication Devices |
| AU2001236590A1 (en) | 2000-01-28 | 2001-08-07 | 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 |
| US7509420B2 (en) | 2000-02-18 | 2009-03-24 | Emc Corporation | System and method for intelligent, globally distributed network storage |
| US6735621B1 (en) | 2000-02-18 | 2004-05-11 | Nortel Networks Limited | Method and apparatus for messaging between disparate networks |
| 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 (en) | 2000-04-10 | 2001-12-06 | Francotyp Postalia Gmbh | Arrangement and method for providing a message when loading service data for a terminal |
| 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 |
| AU2001260728A1 (en) | 2000-05-20 | 2001-12-03 | Young-Hie Leem | On demand contents providing method and system |
| 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 |
| US6684319B1 (en) | 2000-06-30 | 2004-01-27 | Conexant Systems, Inc. | System for efficient operation of a very long instruction word digital signal processor |
| US6410941B1 (en) | 2000-06-30 | 2002-06-25 | Motorola, Inc. | Reconfigurable systems using hybrid integrated circuits with optical ports |
| AU2001283124A1 (en) | 2000-07-31 | 2002-02-13 | Morphics Technology, Inc. | Generic finger architecture for spread spectrum applications |
| US7003015B2 (en) | 2000-07-31 | 2006-02-21 | Infineon Technologies Ag | Apparatus and method for configurable multi-dwell search engine for spread spectrum applications |
| AU2001278148A1 (en) | 2000-08-01 | 2002-02-13 | 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 (en) | 2000-08-29 | 2002-03-01 | Canon Res Ct France Sa | Configuration of a peripheral for processing of electronic documents in a communication network, uses user data to access level of service available to that user on a network and prepares configuration from user data and service level data |
| JP3473695B2 (en) | 2000-08-30 | 2003-12-08 | Necエレクトロニクス株式会社 | Cell search method and circuit in W-CDMA system |
| US6754470B2 (en) | 2000-09-01 | 2004-06-22 | Telephia, Inc. | System and method for measuring wireless device and network usage and performance metrics |
| KR100342483B1 (en) | 2000-09-09 | 2002-06-28 | 윤종용 | Apparatus and method for searching base station in umts |
| US6718182B1 (en) | 2000-09-18 | 2004-04-06 | Compal Electronics, Inc. | Modularized functionality enhancement for a cellular telephone |
| US6538470B1 (en) | 2000-09-18 | 2003-03-25 | Altera Corporation | Devices and methods with programmable logic and digital signal processing regions |
| JP2004512716A (en) | 2000-10-02 | 2004-04-22 | アルテラ・コーポレイション | Programmable logic integrated circuit device including dedicated processor device |
| JP3933380B2 (en) | 2000-10-05 | 2007-06-20 | 富士通株式会社 | compiler |
| AU2001292362A1 (en) | 2000-10-06 | 2002-04-22 | Yozan Inc. | Receiver |
| 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 (en) | 2000-11-09 | 2003-06-09 | 松下電器産業株式会社 | Matched filter and correlation detection calculation method |
| 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 |
| EP1360795B1 (en) | 2001-01-12 | 2006-08-09 | Broadcom Corporation | Implentation of the SHA1 algorithm |
| 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 |
| JP2005503047A (en) | 2001-02-06 | 2005-01-27 | エン ガルデ システムズ、インコーポレイテッド | Apparatus and method for providing a secure network |
| 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 |
| 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 |
| US7249242B2 (en) | 2002-10-28 | 2007-07-24 | Nvidia Corporation | Input pipeline registers for a node in an adaptive computing engine |
| 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 |
| US7653710B2 (en) | 2002-06-25 | 2010-01-26 | Qst Holdings, Llc. | Hardware task manager |
| 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 |
| US7061928B2 (en) | 2001-03-26 | 2006-06-13 | Azurn Networks, Inc. | Unified XML voice and data media converging switch and application delivery system |
| JP4642264B2 (en) | 2001-04-03 | 2011-03-02 | 株式会社日立国際電気 | Correlation circuit for spread spectrum communication |
| 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 |
| US6912515B2 (en) | 2001-06-04 | 2005-06-28 | Xerox Corporation | Method and system for algorithm synthesis in problem solving |
| US7032229B1 (en) | 2001-06-04 | 2006-04-18 | Palmsource, Inc. | Automatic tracking of user progress in a software application |
| 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 |
| WO2003052587A2 (en) * | 2001-12-14 | 2003-06-26 | Koninklijke Philips Electronics N.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) |
| US20030172175A1 (en) | 2002-03-11 | 2003-09-11 | Mccormack Jonathan I. | System for standardizing updates of data on a plurality of electronic devices |
| US20030212684A1 (en) | 2002-03-11 | 2003-11-13 | Markus Meyer | System and method for adapting preferences based on device location or network topology |
| US20040039801A9 (en) | 2002-03-11 | 2004-02-26 | Venkatachary Srinivasan | System and method for delivering data in a network |
| 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 (en) | 2002-05-30 | 2006-12-20 | シャープ株式会社 | Self-synchronous logic circuit having test circuit and method for testing self-synchronous logic circuit |
| 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 (en) * | 2005-08-10 | 2007-06-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | Compiler, control method, and compiler program |
| 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 |
-
2011
- 2011-01-21 KR KR1020127021744A patent/KR101814221B1/en not_active Expired - Fee Related
- 2011-01-21 WO PCT/US2011/022152 patent/WO2011091323A1/en not_active Ceased
- 2011-01-21 JP JP2012550178A patent/JP5990466B2/en not_active Expired - Fee Related
- 2011-01-21 EP EP11735276.5A patent/EP2526494B1/en active Active
- 2011-01-21 US US13/011,763 patent/US8843928B2/en active Active - Reinstated
-
2014
- 2014-09-22 US US14/492,705 patent/US10073700B2/en active Active
-
2016
- 2016-08-15 JP JP2016159234A patent/JP6495208B2/en active Active
-
2018
- 2018-09-10 US US16/126,918 patent/US11055103B2/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| US20110179252A1 (en) | 2011-07-21 |
| US10073700B2 (en) | 2018-09-11 |
| US8843928B2 (en) | 2014-09-23 |
| KR20130009746A (en) | 2013-01-23 |
| KR101814221B1 (en) | 2018-01-02 |
| JP2017004550A (en) | 2017-01-05 |
| WO2011091323A1 (en) | 2011-07-28 |
| US20190004813A1 (en) | 2019-01-03 |
| JP2013518327A (en) | 2013-05-20 |
| EP2526494A1 (en) | 2012-11-28 |
| US20150012725A1 (en) | 2015-01-08 |
| EP2526494A4 (en) | 2017-02-01 |
| US11055103B2 (en) | 2021-07-06 |
| JP5990466B2 (en) | 2016-09-14 |
| EP2526494B1 (en) | 2020-01-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP6495208B2 (en) | Method and apparatus for a general purpose multi-core system for implementing stream-based operations | |
| EP3525087B1 (en) | A method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system | |
| JP6018021B2 (en) | Resource management in multi-core architecture | |
| US8533716B2 (en) | Resource management in a multicore architecture | |
| Charousset et al. | Revisiting actor programming in C++ | |
| JP2016526220A (en) | Memory network processor with programmable optimization | |
| 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 | |
| Lin et al. | A parameterized dataflow language extension for embedded streaming systems | |
| Chadwick | Communication centric, multi-core, fine-grained processor architecture | |
| Ginosar | The plural many-core architecture-high performance at low power | |
| Bosch Pons | Breaking host-centric management of task-based parallel programming models | |
| Pons | Breaking host-centric management of Task-Based Parallel Programming Models | |
| Uddin | Microgrid-The microthreaded many-core architecture | |
| Barker | Leveraging Design-Time Abstractions for Accelerator Design and Integration | |
| Lankamp | Design and evaluation of a multithreaded many-core architecture | |
| Kadakia | Data routing in multicore processors using dimension increment method | |
| Ustrell | Task Mapping and NI Device Driver for NoC based architecture with Linux kernel |
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 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |