JP2010521730A - インタフェース・プロセッサ - Google Patents

インタフェース・プロセッサ Download PDF

Info

Publication number
JP2010521730A
JP2010521730A JP2009553206A JP2009553206A JP2010521730A JP 2010521730 A JP2010521730 A JP 2010521730A JP 2009553206 A JP2009553206 A JP 2009553206A JP 2009553206 A JP2009553206 A JP 2009553206A JP 2010521730 A JP2010521730 A JP 2010521730A
Authority
JP
Japan
Prior art keywords
thread
port
activity
processor
indication
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.)
Granted
Application number
JP2009553206A
Other languages
English (en)
Other versions
JP5271287B2 (ja
JP2010521730A5 (ja
Inventor
メイ,デービット
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xmos Ltd
Original Assignee
Xmos Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xmos Ltd filed Critical Xmos Ltd
Publication of JP2010521730A publication Critical patent/JP2010521730A/ja
Publication of JP2010521730A5 publication Critical patent/JP2010521730A5/ja
Application granted granted Critical
Publication of JP5271287B2 publication Critical patent/JP5271287B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3237Power saving characterised by the action undertaken by disabling clock generation or distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Abstract

本発明は、第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な第1のポートと、第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるよう動作可能な第2のポートとを含むプロセッサを提供する。このプロセッサは、マルチプルスレッドを実行するように構成された実行ユニットと、インディケーションを受信するために接続され、インディケーションに基づいて、実行ユニットによる実行用マルチプルスレッドをスケジュールするように構成されたスレッド・スケジューラを含む。スケジューリングは、それぞれのインディケーションを受信するまで、スレッドの実行を一時中断することを含む。第1のアクティビティと第2のアクティビティは、それぞれ、対応するそれぞれのスレッドに関係付けられている。

Description

本発明は、インタフェース・プロセッサに関し、特に、他のプロセッサまたは外部装置との接続を行うインタフェース・プロセッサに関するが、これに限定されるものではない。
プロセッサ設計者の挑戦の1つとして、プロセッサとの通信を要求する外部装置の数が増加の一途をたどることをどのように扱うかである。一般に、これは、外部装置に接続されたポートに発生するアクティビティを処理するために、プロセッサにある種類の割込み処理能力を持たせることにより対処される。例えば、1ポートにつき複数の外部装置に対処するために、より高度なインタフェース・ロジックが、これらのポートにおいて用いられることになる。
インターフェイシングは多種多様の異なる状況において必要とされる。背景的な例としてここで述べる1つの状況は、モバイル・アプリケーション処理である。
図1は、モバイル・アプリケーション・プロセッサ2のアプリケーション例を示す。アプリケーション・プロセッサ2は、CPU4と、複数の周辺装置8との接続を行う複数のインタフェース・コントローラ6を含む。インタフェース・コントローラは、ハード・ディスク・ドライブ(HDD)8a及びSDRAMメモリ8bとの接続を行うためのメモリ・コントローラー6a;カメラ8cとの接続を行うためのビデオ・コントローラ6b;LCDディスプレイ8dとの接続を行うためのディスプレイ・コントローラ6c;マイクロホン8e、スピーカー8f、ヘッドセット8gとの接続を行うためのオーディオ・コントローラ6d;キーボード8h、ユニバーサル・シリアル・バス(USB)デバイス8i、セキュア・ディジタル(SD)カード8j、マルチメディア・カード(MMC)8k、ユニバーサル非同期送受信装置(UART)デバイス8lとの接続を行うための接続コントローラ6eとを含む。インタフェース・コントローラ6は、一般的にはバス3を介してCPU4に接続される。システムはまた電力コントローラ10と無線プロセッサ12を含む。
尚、インタフェース・コントローラ6は、多少模式的に示されているが、概してある種の専用のI/Oロジックまたは特別に構成されたポートを表している。
従来は、外部インターフェイシングは、割り込みを用いて、またはポーリングにより達成されている。割り込みが用いられる場合、外部の周辺装置は、プロセッサに入力するデータの用意ができた、またはプロセッサに対してデータを要求している、のいずれかをプロセッサに通知するための信号を送る。ポーリングが用いられる場合、プロセッサは、絶えずデバイスの状態をチェックして、データを供給するかまたは受け取る用意ができているかどうかを判定する。
図1のようなアプリケーション・プロセッサ2を実現する1つの可能性は、アプリケーション・スペシフィック・インテグレーテド・サーキット(Application Specific Integrated Circuit)マイクロコントローラ(ASIC)を用いることである。ASICは、特定用途に専用化され、そのアプリケーションに適応するように最適化されたマイクロプロセッサーを含むであろうハードワイヤードのデバイスである。これらは、機能の割には、概して割安であり、他の構成を選択する場合よりも電力消費が少ない。しかしながら、これらは設計が複雑であり、事前設計が必要であり、容易には再構成ができない。
他の可能性はフィールド・プログラマブル・ゲート・アレイ(Field Programmable Gate Array)(FPGA)デバイスを用いることである。FPGAは、製造後に「現場において」構成できる半導体デバイスである。FPGAを構成するには、先ずコンピューターを用いて、例えば、回路図を描くまたは機能を記述したテキスト・ファイルを作成することによって、所望の論理機能をモデル化する。FPGAは、静的に構成された相互接続を介して通信するルックアップ・テーブルのアレイを含む。そのコンピュータ・モデルはFPGAベンダによって提供されるソフトウェアを用いてコンパイルされ、FPGAルックアップ・テーブルにダウンロードされ得るバイナリ・ファイルを作成する。これにより、装置メーカーは自分の個々のニーズを満たすFPGAを仕立てることができる。
この例では、インタフェース・コントローラ6はFPGAとして実現される。これには、携帯電話のメーカーが汎用のFPGAデバイス2を購入することができ、これらを所望のアプリケーションに固有になるようにオンサイトで(つまり「現場で」)構成するという利便性がある。しかしながら、FPGAの短所はASICより高価で、スピードがより遅く、電力消費がより多いということである。
代替例として、チップ2全体をFPGAで実現することもでき、または、チップ2を、チップ2とそれぞれの周辺装置8の間に接続される個別のFPGAチップを備えた汎用プロセッサとすることもできる。しかしながら、これらの選択肢は、大抵の携帯電話や他のコンシューマ・デバイスにとって、さらにより高価で、また電力消費が法外に大きくなるだろう。
ASICなみの価格、スピード、適用範囲、エネルギー消費量レベルを備えており、かつFPGAの構成容易性を達成することが有益であると考えられる。
本発明の1つの態様によれば、次を含むプロセッサが提供される:第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるように動作可能な第1のポートと;第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるように動作可能な第2のポートと;マルチスレッドを実行するように構成された実行ユニットと;前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行のために前記マルチスレッドをスケジューリングするように構成されたスレッド・スケジューラであって、前記スケジューリングはそれぞれのインディケーションの受信までスレッドの実行を一時中断することを含むスレッド・スケジューラを含み、第1のアクティビティと第2のアクティビティは、それぞれ対応するそれぞれのスレッドに関係付けられている。
スレッドのそれぞれがそれぞれのポートのアクティビティに関係付けられ、そしてスレッド・スケジューラはそのアクティビティのインディケーションを待つ間、スレッドを一時中断するために接続されるので、その結果、プロセッサは、ポートにおいて発生するアクティビティにすばやく対応するために、都合よく「準備ができている」。本発明は、こうして、外部からの刺激に対して高速な応答が望まれるアプリケーションにおいて多大な進歩をもたらす。さらに、スレッドが一時中断されている間他のスレッドがまだスケジュールされるべき場合、その時、スレッド・スケジューラはそれらのスレッドをスケジュールし始めることが可能である。
この一時中断スレッド・アプローチは、高速な反応速度が必要な場合、割り込みの使用より好ましい。一時中断スレッドを用いると、スレッド・スケジューラは、関係付けられたアクティビティを見込んでスレッドを実行する用意をすることが可能である。このことは、上記のように、プロセッサは反応する用意ができているということを意味する。これとは対照的に、割り込みを用いると、実行ユニットは外部装置からの信号によって割り込まれ、さらに場合によっては何か無関係なコードを実行することになる。割り込みケースでは、割り込みが作動する前に、現時点のプログラム状態は保存されなければならない。したがって、割り込みを用いる場合の反応速度は非常に遅い。ポーリングは、連続的なクエリーとレスポンスが必要なため、エネルギー効率が劣る。
スレッド・スケジューラは、第1のポートに関係付けられた識別子レジスタに、第1のアクティビティを待つ間一時中断された第1のスレッドに関係する第1のスレッド識別子を、送信するように構成してもよい。スレッド・スケジューラは、第2のポートに関係付けられた識別子レジスタに、第2のアクティビティを待つ間一時中断された第2のスレッドに関係する第2のスレッド識別子を、送信するように構成してもよい。そのような実施形態では、スレッド・スケジューラはスレッドの実行を管理するよう適応している、しかし、それが、所定のアクティビティの状態であるスレッド内の命令に遭遇した時、その時は、スレッド・スケジューラは、それに対する責任をそれが関係付けられているそれぞれのポートに渡すことにより、スレッドを都合よく「脇に置く」ことができる。これはまた反応速度を促進する。
スレッド・スケジューラは、前記第1のスレッドを一時中断すると、第1のポートに関係付けられたベクトル・レジスタに継続点ベクトルを送信するように構成してもよく;また、継続点ベクトルは第1のアクティビティに依存して実行ユニットに返されるようにしてもよい。継続点ベクトルは、それぞれのアクティビティが発生した時に、実行が継続されるべきコードにおけるポイントを識別する。これは、スレッドに対する追加的責任がポートに移されることが好ましく、保留の命令で満たされたままになっている、必要のないインストラクション・バッファを解放してもよい。
さらに、継続点ベクトルを使用すると、マルチプルアクティビティ(またはイベント)が1スレッド毎に処理されることが可能になる。こうして、第1のスレッドは、そのアクティビティに依存してそれぞれのインディケーションを発生させるのにそれぞれ動作可能な複数のポートからのアクティビティに関係付けられてもよく;実行ユニットは、複数の継続点ベクトルをそれぞれ前記複数のポートのそれぞれの1つに送信するよう適応しており、その場合それぞれの継続点ベクトルはそれぞれのアクティビティに依存して返されてもよい;また、スレッド・スケジューラは、第1のスレッドの実行をそれぞれのインディケーションの少なくとも1つを受信するまで、一時中断するよう適応していてもよい。
プロセッサは、一時中断スレッドのすべてのスレッド識別子がポートに送られてしまうと、実行ユニット、スレッド・スケジューラ、クロックの内の少なくとも1つの電源を切るよう適応していてもよい。プロセッサは、それぞれのポートからスレッド識別子の少なくとも1つが返されると、実行ユニット、スレッド・スケジューラ、クロックの内の前記少なくとも1つの電源を入れるよう適応していてもよい。こうして、すべてのスレッドが、スケジュールから外され、それらのそれぞれのアクティビティに従って、それぞれのポートに渡されると、そのとき、プロセッサは、アクティビティの1つが発生するまで、いくつかまたは全部のコンポーネントの電源を切るよう適応することが可能である。これは、システムの電力消費を大きく改善する。
第1のおよび第2のポートの少なくとも1つは、アクティビティ処理ロジックを含んでもよく、且つ状態を格納するための少なくとも1つの状態レジスタに関係付けられていてもよく、その場合そのアクティビティ処理ロジックはポートにおけるアクティビティをモニターし、そして前記状態を満たす前記アクティビティに依存して前記インディケーションを発生させるように構成されている。実行ユニットは各状態レジスタにそれぞれの状態を送信するように構成されてもよい。好ましくは、ポートがより特別で多様なタイプの状態を処理できるように、スレッド・スケジューラがポートに状態を提供できるようにすることにより、システムの普遍性を改善する。
ポートイベント有効フラグは、第1のポートに関係付けられていてもよく;また、スレッド・スケジューラは、ポートイベント有効フラグを有効にすることにより、前記第1のアクティビティが前記スケジューリングを始動させることができるようにし、またポートイベント有効フラグを無効にすることにより前記第1のアクティビティが前記スケジューリングを始動できないように構成してもよい。スレッドイベント有効フラグは、第1のスレッドに関係付けられていてもよく;また、スレッド・スケジューラは、スレッドイベント有効フラグを有効にすることにより第1のスレッドが、第1のアクティビティに依存してスケジュールされることができるようにし、またスレッドイベント有効フラグを無効にすることにより第1のスレッドが、第1のアクティビティに依存してスケジュールされることができないようにするよう適応していてもよい。スレッド・スケジューラは、ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つが無効にされている時、ポートからの第3のアクティビティの第3のインディケーションを待つ間、第1のスレッドの実行を一時中断するように構成していてもよい。
ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つは第1のアクティビティの発生によって自動的に無効にされてもよい。
複数のポートイベント有効フラグのそれぞれは、第1のスレッドに関係付けられた複数のポートのそれぞれに関係付けられていてもよく;スレッド・スケジューラは、スレッドイベント有効フラグを有効にするように、且つ、続けて、前記複数のポートイベント有効フラグを有効にするように構成されてもよい。
プロセッサは、バスにより実行ユニットに接続されたプログラム・メモリを含んでもよいし、そこでは、スレッド・スケジューラは、第1のおよび第2のポートのそれぞれから前記インディケーションを受信するために、前記バスとは別の少なくとも1つの接続手段により接続されている。これが、ポートとスレッド・スケジューラ間の通信におけるバス調停の必要性をなくし、それによりプロセッサの反応速度をさらに改善する。
プロセッサは複数セットのスレッド・レジスタを含んでもよいし、各セットのスレッド・レジスタは前記マルチスレッドのそれぞれ1つに関係する情報を格納するように割り付けられている。プロセッサは、前記セットの少なくとも2つの間の少なくとも1つのチャネルを含んでもよく、またスレッド・スケジューラは、前記チャネル上に発生するアクティビティに基づいて、スレッドをスケジュールするよう適応していてもよい。
プロセッサはチップ上に実装されてもよい。前記第1と第2のポートの少なくとも1つは前記チップ上の他のプロセッサと通信するための内部ポートであってもよい。前記第1と第2のポートの少なくとも1つは前記チップの外のデバイスと通信するための外部ポートであってもよい。少なくとも1つの外部ポートは、チップの物理的な境界におけるピンに発生する立ち上がり信号エッジまたは立ち下がり信号エッジを検出するためのピンポートであってもよい。少なくとも1つの外部ポートは、ポートにおける1個以上のビットの瞬間の論理レベルを処理するためのデータポートであってもよい。
実行ユニットは、スレッドを一時中断しそして実行するための専用の命令を認識し実行させるように構成してもよい。
スレッド・スケジューラは、割り込みに基づいてスレッドをスケジュールするのにさらに適応していてもよい。割り込みに基づいてスケジュールされたスレッドは第1のスレッドであり、その割り込みは一時中断中第1のスレッドに割り込む。
スレッド・スケジューラは、もし関係付けられたアクティビティがそのアクティビティに依存したスレッド内のインストラクションの実行時または前に発生した場合、一時中断なしでそのスレッドをスケジュールするように構成していてもよい。
本発明のさらなる態様によれば、第1のポートと第2のポートを有するプロセッサ内で実行のためマルチプルスレッドをスケジューリングする方法が提供され、その方法は次を含む:第1のポートにおける第1のアクティビティと第2のポートにおける第2のアクティビティに対応するそれぞれのスレッドを関係付けるステップと;第1のアクティビティに依存して第1のポートの第1のインディケーションを発生させるステップと;第2のアクティビティに依存して第2のポートの第2のインディケーションを発生させるステップと;前記インディケーションに基づいて実行するためスレッドをスケジューリングするステップであって、それぞれのインディケーションの受信までスレッドの実行を一時中断することを含むステップと;前記スケジューリングに依存してそれらを実行することによりスレッドをランさせるステップ。
本発明の他の態様によれば、マルチスレッドの実行のためのスケジューリングにおいて使用されるポートが提供され、そのポートは次を含む:ポートにおけるアクティビティに依存するインディケーションを発生させるように構成されたアクティビティ処理ロジックと、前記アクティビティに関係付けられたスレッドを識別する情報を格納するためのレジスタと、状態を格納するためのレジスタと;を含み、前記アクティビティが前記状態を満たす時、アクティビティ処理ロジックはオンチップで第1のインディケーションを送信するよう適応している。
本発明の他の態様によれば、第1のポートと第2のポートを有するプロセッサ内での実行のためマルチスレッドをスケジュールするためのスレッド・スケジューラが提供され、そこにおいて:スレッド・スケジューラは、第1のポートにおける第1のアクティビティに依存するその第1のポートが発生させた第1のインディケーションを受信するよう適応しており;スレッド・スケジューラは、第2のポートにおける第2のアクティビティに依存するその第2のポートが発生させた第2のインディケーションを受信するよう適応しており;そしてスレッド・スケジューラは、前記インディケーションに基づいて、実行ユニットによる実行のため前記マルチスレッドをスケジュールするよう構成しており、前記スケジューリングは、スレッドの実行をそれぞれのインディケーションの受信まで一時中断することを含んでおり;その場合、第1のアクティビティと第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられている。
本発明の他の態様によれば、モバイル・アプリケーション・プロセッサと、少なくとも1つの周辺装置と、そして該モバイル・アプリケーション・プロセッサと該周辺装置の間に接続されたインタフェース・プロセッサを有するモバイル端末が提供され、そのインタフェース・プロセッサは次を含む:第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な該第1のポートと;第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるよう動作可能な該第2のポートと;マルチスレッドを実行するように構成された実行ユニットと;前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行のため前記マルチプルスレッドをスケジュールするように構成され、前記スケジューリングは、それぞれのレディ信号の受信まで、スレッドの実行を一時中断することを含む、スレッド・スケジューラと;を含み、第1のアクティビティと第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられている。
本発明の他の態様によれば、相互に接続されたプロセッサのアレイが提供され、 前記プロセッサの少なくとも1つは次を含んでいる:第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な該第1のポートと;第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるよう動作可能な該第2のポートと;マルチプルスレッドを実行するように構成された実行ユニットと;前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行のため前記マルチプルスレッドをスケジュールするように構成され、前記スケジューリングはそれぞれのレディ信号の受信までスレッドの実行を一時中断することを含む、スレッド・スケジューラと;を含み、第1のアクティビティと第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられ、且つ、前記第1と第2のポートの少なくとも1つは、前記少なくとも1つのプロセッサを、アレイ内の他のプロセッサに接続している。
本発明のよりよい理解のために、また、同発明がどのように実施されてもよいかを示すために、対応する図面がここで、例として引用される。
図1は、当該技術で公知のFPGAデバイスの適用例を示す。 図2は、インタフェース・プロセッサの適用応用例を示す。 図2aはインタフェース・プロセッサの他の適用例を示す。 図3は、インタフェース・プロセッサのアーキテクチャの模式図である。 図4は、ポートの模式図である。 図5は、スレッド・レジスタ・セットの模式図である。 図6は、スレッド・スケジューラのオペレーションを示す流れ図である。 図7は、スレッド・レジスタ・セット間のチャネルの模式図である。 図7Aは、チャネル・エンドの模式図である。
図2は、インタフェース・プロセッサの携帯電話への適用例を示している。モバイル・アプリケーション・プロセッサ2は複数の周辺装置8と通信する必要がある。アプリケーション・プロセッサ2は、図1に示されているようにパワー・コントローラ10と無線プロセッサ12に加えて、バス3、CPU4、ハード・ディスク・ドライブ(HDD)8aとSDRAMメモリ8bとの接続を行うためのメモリ・コントローラー6aを備える。
しかしながら、図2の構成は、専用コントローラ6の代わりに、CPU4が汎用ポート7を介して外部と通信することを可能にしている。この例では、カメラ8cとLCDディスプレイ8dとの接続を行うために汎用ポート7aと7bを備えており、マイクロホン8e、スピーカー8f、ヘッドセット8gとの接続を行うために汎用ポート7cを備えており、キーボード8h、ユニバーサル・シリアル・バス(USB)デバイス8i、セキュア・ディジタル(SD)カード8j、及びマルチメディア・カード(MMC)8k、ユニバーサル非同期送受信装置(UART)デバイス8lとの接続を行うために汎用ポート7dを備えている。
図2において、インタフェース・プロセッサ14a、14b、14cは、関連するポート7の出力側に置かれている。すなわち、第1のインタフェース・プロセッサ14aを画像デバイス8c〜8dと汎用ポート7a〜7bの間に接続し、第2のインタフェース・プロセッサ14bをオーディオデバイス8e〜8gとの間に接続し、第3のインタフェース・プロセッサ14bを汎用ポート7dと様々な接続デバイス8h〜8mの間に接続している。アプリケーション固有のディスプレイ、オーディオ、接続機能は、インタフェース・プロセッサ14a〜14cによって後述する方法で実現されるので、ポート7は単に汎用ポートであればよい。FPGAが提供する柔軟性と構成性は、インタフェース・プロセッサ14が提供するので、ポート7はFPGAロジックを用いる必要はない。インタフェース・プロセッサ14aは、ポート7aと7bに接続されたポート22aと22bを、また、外部装置8c〜8gに接続されたポート22c、22d、22eと22fを有している。インタフェース・プロセッサ14bと14cは、図2には示されていないが、同様のポートを有している。
インタフェース・プロセッサは、一般的には、インタフェース部を介してデータを転送するために用いる特定のプロトコル、パラレル・フォーマットとシリアル・フォーマット間変換を含んだデータのリフォーマッティング、そして場合によってはそれを符号化し、圧縮し、暗号化するといったより高い水準の機能の実現に関係している。
インタフェース・プロセッサの他の適用例は、図2aに示されたマルチ・プロセッサ・チップ202におけるタイル状に並べられた形である。このようなチップ202は、チップ202上のプロセッサ14相互間の通信をサポートする高性能相互接続204と、システムがマルチチップで容易に構成できるようにするチップ間リンク206を使用している。各プロセッサ14はそれぞれ、そのチップ間リンク206に接続され、ポート22を介して高性能接続204に接続されている。
下記にさらに詳しく述べるインタフェース・プロセッサの重要な特徴は、ポート22におけるアクティビティを処理する能力である。各インタフェース・プロセッサはそれぞれCPUとメモリと通信部を備える。CPUとポートの間の直接的で応答的な接続を可能にするために、各プロセッサはそれぞれ多くの並行プログラム・スレッドの実行に対してハードウェア・サポートを有しており、それぞれは一連の命令を含み、少なくともそれらのうちのいくつかはポートにおけるアクティビティの処理を特に担っている。下記にさらに詳しく述べるように、ハードウェア・サポートは次のものを含んでいる:
- 各スレッド向けの1セットのレジスタ、
- どのスレッドを実行するかを動的に選択するスレッド・スケジューラ、
- 入出力に用いられる1セットのポート(ポート22)。
各プロセッサ上で小セットのスレッドを使用すると、プロセッサにより処理される他の保留タスクと一緒に通信または入出力が進行することが可能になり、リモート・インタフェース・プロセッサとの通信中に他のスレッドが一時中断されている間いくつかのスレッドを継続させていることにより相互接続内にラテンシが隠れていることが可能になる。
図3は本発明の一実施形態係わるインタフェース・プロセッサ14のアーキテクチャ例を概略的に示している。プロセッサ14はスレッド・スケジューラ18の制御の下でインストラクションのスレッドを実行するための実行ユニット16を備える。プロセッサ14は、プログラムコードと他のデータを保持するためのランダムアクセスメモリ(RAM)24と、ブートコードのような永続情報を格納するためのリードオンリーメモリ(ROM)(図示せず)とをさらに備える。
スレッド・スケジューラ18は実行ユニット16がどのスレッドを実行すべきか動的に選択する。従来、スレッド・スケジューラの機能は、プロセッサを全面的に占有させておくためにプログラム・メモリからのスレッドを単にスケジュールすることであった。しかしながら、本発明によれば、スレッド・スケジューラ18によるスケジューリングもポート22におけるアクティビティと関連している。尚、この点において、スレッドがポートにおける入力または出力アクティビティの結果として実行可能になる場合に、遅延を最小にするようにスレッド・スケジューラがポート22に直接結合されてもよい。
スレッド・スケジューラ18によって考慮中のm個のスレッドのそれぞれは、スレッド・スケジューラ18がアクセスを持つ、一揃いのレジスタ20におけるスレッド・レジスタ20〜20のそれぞれのセットによって表される。メモリ24から取り出された命令を実行ユニット16へ次に送出する前に一時的に保持するために、インストラクション・バッファ(INSTR)19も備えられている。これらのレジスタとバッファの詳細は後で述べる。
m個のスレッドの中から、スレッド・スケジューラ18はn個の実行可能なスレッドのセットを維持する。そのセットは「ラン」と命名され、そこから命令が、順に、好ましくはラウンドロビン方式で取り込まれる。スレッドが継続できない時は、それを実行セットから取り外すことにより一時中断される。その理由は、例えば、そのスレッドが下記のタイプのアクティビティの1つ以上を待っているためであってもよい:
- そのレジスタは実行することが可能になる前に初期化されている、
- それは、準備ができたポートまたは利用可能なデータが全く無いポートからの入力を試みた、
- それは、準備ができたポートまたはデータ用の余地が全く無いないポートに出力を試みた、
- それは、ポートが入力に対して準備ができた状態になる時に生成され得る1つ以上のイベントを待たせる命令を実行した。
尚、ここに用いられている用語「イベント」は、基本的な入出力操作とはわずかに異なる特定タイプの操作を指す。その区別は、図4と図5に関連して以下で述べる。
好ましくは、高速反応速度を促進するために、直結ハードワイヤード接続28がスレッド・スケジューラ18と実行ユニット16の間に設けられ、スレッド・スケジューラ18が、実行ユニット16がどのスレッドを取り出して実行するべきかを、制御できるようにしている。直結ハードワイヤード・パス30a、30b、30cが同様にスレッド・スケジューラ18とポート22のそれぞれの間に設けられており;また、直結ハードワイヤード・パス29〜29がスレッド・スケジューラ18とレジスタ20のそれぞれの間に設けられている。これらの直結パスは、スレッド・スケジューラが、1つ以上のポート22にそれぞれのスレッドを関係付け、あるアクティビティが生じた時、そのポートからレディ・インディケーションを特定的に返すことを可能にする制御パスを好適に提供し、そしてそのプロセッサがポート22に生じるアクティビティまたは刺激に速く対応することを可能にする。ポートに関してのスレッド・スケジューラの動作は、図4と図6に関して以下で述べる。
実行ユニット16はまた、直結接続27と31を介してポート22a〜22cのそれぞれとレジスタ20〜20のそれぞれに対してアクセスを行い、それによりコア・プロセッサ、レジスタ、外部環境の間の直接リンクを提供する。好ましくは、これらの直結パスは、実行ユニットが状態をポートへ渡すことができるようにする制御パスをさらに提供する。これは、図4に関してさらに詳細に以下で述べる。直結パス27と31は、同様にデータがスレッド・レジスタ20とポート22の間で直接入出力されるようにしてもよく、それによりスレッドが外部環境に直接通信することが可能になる。例えば、データはメモリ24に書き込まれた後に取り出されるのではなく、外部装置からスレッドのオペランド・レジスタのうちの1つに直接書き込まれるように構成できる。逆に、あるオペレーションの後に、オペランド・レジスタからのデータは実行ユニット16によってピックアップされ、ポート22から外へ直接送り出されてもよい。これは反応速度を著しく改善する。
なお、「直結接続」または「直結パス」というのは実行ユニットとプログラム・メモリ24の間の接続とは別の接続を意味している。こうして、例えば、スレッド・スケジューラ18と実行ユニット16は、データが格納され、然る後にメモリ24から取り出するということではなく、ポート22からのデータ入力にアクセスを持つ。特定的には、実行ユニット16とメモリ24の間の接続がバス3を介したものであると、その場合、「直結の」接続またはパスは、そのバスとは別のものを意味する。こうして、ポート22、レジスタ20、スレッド・スケジューラ18、実行ユニット16の間の様々な通信は全てバス調停を必要とせずに起こり得るものであって、これが反応速度改善する。ポート22は、また、バス13との追加の接続(図示せず)を備え留こうし得とすることもできる。
本アプリケーションに用いられている用語「ポート」は、「ピンポート」または「データポート」のいずれを指す場合も可能である。ピンポートは、プロセッサチップの物理的な境界のピンに生じる信号の個々の論理的な変遷、つまり立ち上り・立ち下りエッジの検出を担っている。データポートはこれらが、典型的にはI/Oバッファに蓄積されてワードのようなデータの一部を構成する1個以上のビットを処理することが可能であるという点において「より高いレベル」である。立ち上り・立ち下りエッジを検出する代わりに、データポートは、特定の瞬間のビット(複数可)の状態かロジック・レベルを処理する。データポートはオン/オフ・チップであってもよく、または、同じチップ上に埋め込まれた他のプロセッサへのポートであってもよい。尚、「ピンポート」と「データポート」は、実は、同じ実在のポートの異なるモードを指してもよい。
図4は本発明の好ましい実施形態によるポート22を模式的に示している。ポート22は、プロセッサ14との間の入出力データをパスするI/Oバッファ32を含む。さらに、各ポート22は、ポートに生じるアクティビティをモニターし、少なくとも1レディ・ビットまたはフラグ37によってあるアクティビティの発生を伝えるアクティビティ処理ロジック36を含む。レディ・フラグ37は直結パス30を介してスレッド・スケジューラに好適に伝えられる。ポートが検出し得る可能なアクティビティは次のものを含んでいる:
- データがポートに入力された、
- ある特定データがポートに入力された、かつ/または、
- ポートは出力に使用可能になった。
このようなアクティビティの検出を容易にするために、ポート22は1セットのレジスタ38を備えている。これらは、関連するスレッドの識別子を格納するためのスレッド識別子(TID)レジスタ、1つ以上の状態を格納するためのコントロール(CTRL)レジスタ、実行が一時中断されたプログラム上の位置を格納するための継続点ベクトル(VECTOR)レジスタ、また状態に関連したデータを格納するためのデータ(DATA)レジスタを含む。TID値は、直結パス30(図3では、30a、30b、30c)を介してスレッド・スケジューラ18によってレジスタ38に書き込まれ、VECTOR、CTRL、DATA値は、直結パス31を介して実行ユニット16によって書き込まれる。TIDは、関連するスレッドを識別するために、所望のアクティビティを検出すると、スレッド・スケジューラ18に返される。アクティビティ・ロジックはまたイネーブルフラグ39を含む。これについては、以下でさらに詳細に述べる。
なお、レジスタ38は、ポート22内に含まれている形で、図4に示されているが、これらは実際、プロセッサ14内のどこか他のところに位置して、単にポート22に関係付けられていてもよい。
図5はスレッドを表すために用いられているスレッド・レジスタ20のバンク例を示す。バンク20はスレッド・スケジューラ18によって現在想定されているスレッドT〜Tのそれぞれに対応する複数セットのレジスタを含む。この好適な例で、各スレッドの状態は、2個のコントロール・レジスタ、4個のアクセス・レジスタと12個のオペランド・レジスタという18個のレジスタによって表されている。これらは以下のとおりである。
コントロール・レジスタ:
-PCはプログラム・カウンタである
-SRはステータス・レジスタである
アクセス・レジスタ:
-GPはグローバル・プール・ポインタである
-DPはデータ・ポインタである
-SPはスタック・ポインタである
-LRはリンク・レジスタである
オペランド・レジスタ:OP1〜OP12
コントロール・レジスタは、スレッドのステータスについての情報と、スレッドの実行を制御する際に使用される情報を格納する。特に、スレッドがイベントまたは割り込みを受理する能力は、スレッド・ステータス・レジスタSRの中に保持された情報によって制御される。アクセス・レジスタは、プロシージャのローカル変数に用いられるスタック・ポインタと、プロシージャ間で共有されるデータに通常用いられるデータ・ポインタと、大きな定数やプロシージャ・エントリ・ポイントにアクセスするために用いられる定数プールポインタとを含む。オペランド・レジスタOP1〜OP12は、算術・論理演算を実行し、データ構造にアクセスし、サブルーチンを呼び出す命令によって用いられている。
多くのインストラクション・バッファ(INSTR)19もまた、スレッドの実際の命令を一時的に格納するために提供されている。各インストラクション・バッファは、64ビット長が好適であるが、各命令を16ビット長とすれば、1バッファ当たり4命令が可能になる。命令は、スレッド・スケジューラ18の制御の下でプログラム・メモリ24から取り出され、インストラクション・バッファ19に一時的に置かれる。
実行ユニットは、レジスタ20とバッファ19のそれぞれにアクセスを行う。さらに、スレッド・スケジューラ18は少なくとも各スレッドそれぞれに対するステータス・レジスタSRにアクセスを行う。
上述のように、ここに用いられているような用語「イベント」は、特定タイプのオペレーション、または、その特定タイプのオペレーションに対応するアクティビティを指す。イベントベースのオペレーションは、基本的な入出力オペレーションやワークとはわずかに以下のように異なる。イベントは、実行ユニット16からの継続点ベクトルと、スレッド・スケジューラ18からのスレッド識別子を、ポート22に関係付けられたVECTORとTIDのレジスタ38に、好適には直結パス31と30を介して、転送することでスレッド用に最初にセットされる。関係付けられた状態とコンディション・データもポート22のCTRLとDATAのレジスタ38に書き込むように構成することもできる。イベントは、ポートにこのようにセットされるが、必ずしもイネーブルにする必要はない。ポートをイネーブルにしてイベントのインディケーションを発生させるためには、ポートのイネーブルフラグ39も好適には直結パス30経由スレッド・スケジューラ18により有効にされなければならない。さらに、スレッドそのものをイベント受理可能にするために、スレッド向けのそれぞれ対応するステータス・レジスタSRのイベントイネーブル(EE)フラグは、イベントイネーブルドにセットされなければならない。一旦イベントがこのようにセットされイネーブルになれば、スレッドは、スレッド・スケジューラ18に作用するイベントベースの待ち命令を用いて、イベント待ちで一時中断させることができる。この点では、現時点での保留命令は、関連するインストラクション・バッファ19から廃棄してもよい。イベントが発生した時、例えば、あるデータがポートに入力された時、その発生は、ポート22からのスレッド識別子と継続点ベクトルが返されることによって、スレッド・スケジューラ18と実行ユニット16へ伝えられる。これが、継続点ベクトルにおける命令が、プログラム・メモリ24からインストラクション・バッファ19へ取り出され、コードの然るべきポイントにおける実行の再開を可能にする。
イベントが発生した時、スレッドが発生直後のイベントに直ちに応答するのを防ぐために、それぞれ対応のステータス・レジスタSRにおけるそのスレッドのEEフラグをイベントディスエーブルドにセットすることもできる。イネーブルフラグ39は、イベントが発生した時に、そのスレッドが命令を実行する結果として、無効にすることもできる。
イネーブルフラグ39は、1つ以上のポートからのイベントを待つことに備えて、多くのポートをセットアップする間に、有効にすることもできる。そのスレッドのEEフラグは、1セットのポート・イネーブル・フラグをイネーブルにする前に、同様に、イベントイネーブルドにセットすることもできる。この場合、イネーブルにする最初に準備ができたポートは、継続点ベクトルにおける命令を直ちに取り出し実行することにより、現時点での命令を捨てて実行を進行させるイベントを発生する。
ポートのイネーブフラグ39とステータス・レジスタEEフラグの利点は、イベントのイネーブリングとディスエーブリングが、イベントのセットアップと待ち命令によるスレッドの一時中断の両方から分離されるということである。こうして異なる入出力状態が、特定のスレッドンに対して、および/または様々な異なるスレッドに対して、オンとオフが容易に切り替えることができるようになる。例えば、イベントは、例えそのイベントがディスエーブルになっていても、ポート22でセットアップ状態が残されていてもよい。こうして、イベントは、スレッドによって再度用いることができる。その理由は、そのイベントは既に一旦発生したものであるものの、そのスレッド識別子、継続点ベクトル、状態はポート22のTID、VECTOR、CTR、DATAの各レジスタ38にまだ格納されているからである。したがって、スレッドがイベントを再使用する必要がある場合、ポートのレジスタ38は書きかえる必要はないが、その代わりに、ポートのイネーブルフラグ39を単に再度有効にするか、および/または、スレッド用のステータス・レジスタSRのEEフラグをイベントイネーブルドに再セットすればよい。その場合、さらなる待ち命令は、同じイベントが再び発生するまでの間、スレッドを一時中断することになる。
さらに、継続点ベクトルを使用するとマルチイベントを1スレッド毎に処理することが可能になる。すなわち、一つのスレッドは、ポート22aに継続点ベクトルを転送することにより、そのポート22aに1つのイベントをセットアップし、他のポート22bに別の継続点ベクトルを転送することにより、そのポート22bに他のイベントをセットアップする、などである。スレッドは、個々のそれぞれのポートに対して異なるイネーブルフラグ39を別々に有効にするか、無効にすることにより、同様に個々に様々なイベントをイネーブルにし、またはディスエーブルにすることが可能である。待ち命令は、その場合、イネーブルにされたイベントを待って、スレッドを一時中断にすることになる。
イベントとは対照的に、基本的なI/Oオペレーションを用いると、スレッド・スケジューラ18は、VECTORレジスタに継続点ベクトルを送らず、且つ、ステータス・レジスタSRのポートのイネーブルフラグ39またはEEフラグを用いない。代わりに、保留になっている命令は、インストラクション・バッファ19の中に単に残され、また、必要ならば、実行は、入力または出力のためにポートが利用可能になることを待っている間、レディ・フラグ37によって示されるように単に休止される。実施形態では、TIDレジスタだけが基本的なI/Oによるスケジューリングに必要かもしれない。基本的なI/OはCTRLとDATAのレジスタの状態を用いてもよいし、用いなくてもよい。もしそのような状態が用いられなければ、ポートがレディになれば、直ちにI/Oは完了することになる。
なお、イベントに従って、一旦スレッドの実行が再開されれば、それは勿論続いて基本的なI/Oオペレーションを実行してもよい。逆に、スレッドは、基本的なI/Oに続いて一旦再開されれば、続いてイベント・オペレーションを含んでもよい。そのようなイベントとI/Oのいかなる連携もスレッドに含めるように構成することができる。例えば、イベントがディスエーブルになっており(つまりポートのイネーブルフラグ39、および/または、ステータス・レジスタのEEフラグが無効にされている)、イベント・ベクトルと状態とがレジスタ38にセット状態で未だ残っている間は、基本的なI/Oオペレーションは2つのイベントベースの待ち命令の間に差し込むこともできる。すなわち、イベントは、第1のイベントベース待ちオペレーション、同じポートを用いて続いて実行された基本的なI/O、そして第2のイベントベース待ちオペレーションにおいて使用するために再度イネーブルにされた同イベントの完了を以ってディスエーブルにされてもよい。上記に述べたように、基本的なI/Oオペレーションはスレッドを休止および休止解除を行うが、ステータス・レジスタにおけるポートのイネーブルフラグ39またはEEフラグは発効させないし、コントロールをイベント・ベクトルに移動させることもしない。
スレッド・スケジューラと2つの例示的なポートのオペレーションが、図6の流れ図を参照しながら、ここに説明される。ステップ100において、実行ユニット16は、スレッド・スケジューラ18の管理のもとに、第1と第2のスレッドの実行を始める。ステップ102では、スレッド・スケジューラは、例えばポート22aのある特定の信号を受信するなどの、あるイベントに依存した第1のスレッド内のコードの一部に遭遇する。ステップ104では、スレッド・スケジューラは、一旦イベントが検出されるとプログラムのどのポイントにおいてスレッドの実行が継続されるべきであるかを指定する継続点ベクトル(VECTOR)と、そしてまた他の全ての必要とされるコンディション・コントロール情報(CTRL)と関係データ(DATA)と一緒に、第1のスレッドのスレッド識別子(TID)をポート22aに送る。例えば、データは、命令がポートにおいて受信することを予期している信号の値であってもよい。ステップ104では、スレッド・スケジューラは、同様に第1のポートのイネーブルフラグ39をセットしてもよいし、第1のスレッドのステータス・レジスタSRをイベントイネーブルドにセットしてもよい。
ステップ106では、ポート22aはスレッド・スケジューラ18からのこの情報を受信する。ステップ108では、スレッド・スケジューラ18は、第1のスレッドの実行を一時中断する。ステップ110では、ポート22aはそのポートのアクティビティをモニターし始める。
ステップ112では、スレッド・スケジューラ18は、第2のスレッドが未解決であると判定し、実行ユニット16が、スレッド・スケジューラ18の管理のもとに、第2のスレッドの実行を継続する。ステップ114において、スレッド・スケジューラ18は、イベントに依存するコードの一部に遭遇する。ステップ116では、スレッド・スケジューラ18は、継続点ベクトルと他の全ての必要とされる状態情報と共に、スレッド識別子をポート22bに送る。ステップ116では、スレッド・スケジューラは、同様に第2のポートのイネーブルフラグ39をセットしてもよいし、第2のスレッドのステータス・レジスタをイベントイネーブルドにセットしてもよい。ステップ118では、ポート22bはこの情報を受信する。ステップ120では、スレッド・スケジューラは、第2のスレッドの実行を一時中断する。ステップ122では、ポート22bは、そのポートで発生するアクティビティをモニターし始める。
ステップ124では、スレッド・スケジューラは、スケジュールすべき未解決のスレッドは現在もう存在しないと判定し、そしてシステムがポート22aと22bを除くすべてのコンポーネントの電源を切る。ステップ128では、ポート22aは関連するイベント、例えばDATAレジスタにおいて格納されている信号の受信を検出し、その結果、スレッド識別子(TID)と継続点ベクトル(VECTOR)を返す(第1のスレッドのステータス・レジスタをイベントディスエーブルドにセットするのに加えて)。ステップ126では、スレッド・スケジューラ18は返された識別子を受信する。ここで実行は継続できるので、ステップ130では、システムが再び電源を入れる。ステップ134では、実行ユニット16は、スレッド・スケジューラ18の管理のもとに第1のスレッドの実行を完了する。ステップ138では、ポート22bは、第2のスレッド用の関連するイベントを検出し、そのスレッド識別子と継続点ベクトル(第2のスレッドのステータス・レジスタをイベントディスエーブルドにセットするのに加えて)を返す。ステップ136では、スレッド・スケジューラ18は返された情報を受信し、そしてステップ138では、実行ユニット16は、スレッド・スケジューラ18の制御の下で第2のスレッドの実行を完了する。尚、電源を遮断するステップをステップ134と136の間に追加することも可能である。
図7に示されているように、発明の原理は、スレッド間の、またはより正確にはスレッドを表す情報を格納したスレッド・レジスタ・セット20の間の通信へ同様に拡張できる。説明の目的のために、4つのスレッド・レジスタ・セット20〜20だけが図7において示されており、それぞれ対応するスレッドT〜Tのための情報を格納している。各スレッド・レジスタ・セットはそれぞれ、少なくともスレッド・レジスタ・セット20の2つの間でデータを直接転送するために、少なくとも1つのチャネルを確立するように動作可能な相互接続システム40によって、他のセットのそれぞれに接続される。チャンネルはオペランド・レジスタOP間でデータを転送するために好適に用いられているが、原理的には、ステータス・レジスタSRのような他のタイプのレジスタとの間で情報を転送するために使用することもできる。スレッド・スケジューラ18は、上記のポートに関連して述べたのと同様のやり方でチャネル上に発生するアクティビティに基づいて、スレッドをスケジュールできる。
図7Aに示されるように、チャネル・エンド42のそれぞれは、入力バッファ44と出力バッファ46を備えた、1対のポートに似ている。ポート22と同様に、各チャンネル入力バッファ44と出力バッファ46は、チャネル上に発生するアクティビティをモニターし、少なくとも1つのレディ・フラグ37'によって所与のアクティビティの発生を伝えるアクティビティ処理ロジック36‘を有していてもよい。チャネル・エンドが検出し得る可能なアクティビティは、データがチャネルに入力されたこと、またはそのチャネルが出力のために使用可能になったことを含む。チャネルがいっぱい過ぎてデータを取り入れることができない時に、出力命令が実行されれば、その場合、その命令を実行したスレッドは休止し、命令がうまく完了するための十分な余裕がチャネルにある場合には再開される。同様に、命令が実行され、扱える十分なデータがない時、その場合、スレッドは休止し、その後、十分なデータがアベイラブルになった時、再開される。
再び、ポート22と同じように、そのようなアクティビティの検出を容易にするために各チャネル・エンドはそれぞれレジスタ38'と関係付けられる。これらは、関連するスレッドの識別子を格納するためのスレッド識別子(TID)レジスタと、イベントが発生した時に実行を再開すべきプログラム中の位置を格納するための継続点ベクトル(VECTOR)レジスタとを含む。これらのTIDとVECTORのレジスタは、その場合、スレッド・スケジューラ18と実行ユニット16が、ポート22の場合と同じ方法でスレッドをスケジュールするために使用することができる。VECTORレジスタは、チャネルがイベントと割り込みを発生させることを可能にする。チャネル・エンドは、同様に、チャネルがイベントを発生させることを可能にするイネーブルフラグ39'を持っている。実施形態では、チャネル・エンド42はCTRLとDATAのレジスタを備える必要はない。
同じチャネル・エンド42はスレッド・レジスタからのデータをポート22を介して外部環境へ伝えるために用いられてもよい。すなわち、実行ユニット16は、チャネル・エンド42を介してレジスタ20のコンテンツをピックアップし、そしてポート22を介してそれを直接パスしてもよいし、逆に、実行ユニット16は、同様にポート22からの入力を受信し、チャネル・エンド42を介してレジスタ20にそれを直接転送してもよい。こうして、もし本発明による2つ以上のインタフェース・プロセッサがともに接続された場合、図2Aに例えば示されたように、チャネルもそれらのプロセッサ間に確立できる。インタープロセッサ・システム内で、各プロセッサはそれぞれ、他のプロセッサとの同時接続を可能にする多くの双方向物理リンク204を介してシステム相互接続にインタフェースしてもよい。
ポート、チャネル、及びアクティビティの他のソース、を包含するのにここに用いられている一般的用語は、「リソース」である。
インタフェース・プロセッサは、そのスレッドベースの構造によるいくつかのプログラミング・アプローチをサポートできる。それは、標準の入力と出力を実行する単一の従来型プロセッサとして扱われることが可能であり、または、何百もの通信コンポーネントの並列アレイの部分としてプログラムされることも可能である。これらのオプションをサポートするインストラクション・セットが提供される。そのインストラクション・セットは、初期化、終了、スタートと停止スレッドをサポートし、且つ入力/出力通信を提供する、特別の命令を含んでいる。その入出力命令は外部装置との非常に速い通信を可能にする。それらは高速であり、遅延時間の小さい入出力と、ハイレベルの並列処理プログラミング技術をサポートする。これにおいて、ポート・アクティビティを処理するそれらのアプリケーションは、下記でより詳細に述べ、また、本発明を実現するために用いることができる命令の例を説明している。リソースは、必要なリソースのタイプを規定するGETR命令を用いて、まずスレッドに対して予約され、FREER命令を用いて予約解除される。
ポートは入力または出力モードに用いることができる。入力モードでは、状態は、スレッドにパスされたデータをフィルターするために、用いることができる。ポートは、データが以下に述べられるようにアベイラブルになった場合、イベントまたは割り込みを発生させるために用いることができる。これにより、スレッドがいくつかのポートをモニターし、レディになっているものだけにサービスすることが可能になる。入出力命令INとOUTは、一旦レディとなったポートとの間でデータを転送するために使用できる。この場合、IN命令は、n−ビット・ポートから、n個の最下位ビットを入力してゼロ・エクステンドし、OUT命令は、n個の最下位ビットを出力する。
さらに2つの命令、INSHRとOUTSHR、はデータ転送を最適化する。INSHR命令は、レジスタの内容をnビットだけ右へシフトさせて、左端のnビットをn−ビット・ポートからのデータ入力で満たす。OUTSHR命令はデータのn個の最下位ビットをnビット・ポートに出力し、レジスタの内容をnビットだけ右へシフトさせる。
OUTSHR port, s port <− s[bits 0 for width(port)]; output from
s ← s >> width(port) port and shift INSHR
port, s s ← s >> width(d ); shift and input port −> s[bits (bitsperword - width(d)) for width(d)] from port
ここで、" −> "は入力を表し、"<− "は出力を表す。
ポートは、使用可能にする前に、設定されなければならない。それは、ポートのいくつかの独立の設定を定義するために用いられるSETC命令を用いて設定される。これらのそれぞれはそれぞれデフォルト・モードを持っており、異なるモードが必要な場合、単に設定しさえすればよい。
SETC port, mode port[ctrl] ← mode set port control
SETCモード設定の効果が以下に述べられる。各設定それぞれにおける第1のエントリはデフォルト・モードである。
モード 効果
OFF アクティブでないポート;ピン ハイインピーダンス
ON アクティブ
IN ポートは入力
OUT ポートは出力(しかし、入力は現時のピン値を返す)
EVENT ポートはイベントをおこす
INTERRUPT ポートは割り込みを立てる
DRIVE ピンは高くそして低く動かされる
PULLDOWN ピンがビット0をプルダウン、そうでなければハイインピーダンス
PULLUP ピンがビット1をプルアップ、そうでなければハイインピーダンス
UNCOND ポートは常にレディ;入力は直ちに完了
EQUAL ポートの値がそのDATA値と等しい場合、ポートはレディ
NE ポートの値がそのDATA値と異なる場合、ポートはレディ
TRANSITION ポートの値がそのDATA値に向けて変化する場合、ポートはレディ
GR ポートの値がそのDATA値より大きい場合、ポートはレディ
LS ポートの値がそのDATA値より小さい場合、ポートはレディ
DRIVE、PULLDOWN、PULLUPモードは、ポートの方向がOUTである場合のみ正当である。TRANSITION状態は1ビットのポートに対してのみ正当であり、また、GR、LS状態は、1ビット以上のポートに対してのみ正当である。
各ポートは、ポートを通るデータのフローを制御するために用いられているレディ・ビット37を持っており、ポートが入力または出力命令を完了することができるかを定義する。レディ・ビットはポート・コンフィギュレーションに依存して異なる方法でセットされる。レディ・ビットは、SETC、SETD、SETV命令のうちのいずれか実行されたらクリアされる。
入力モードのポートは状態入力を実行するように設定できる。状態は、その状態を満たすデータだけがプログラムに返されるように、入力データをフィルターする。状態がセットされた時、IN、INSHR命令はポートがレディである場合のみ完了する。上に説明されたように、レディでないポート上の入力命令を実行するとスレッドは中断される。ポートは、レディである時は、スレッド・スケジューラに伝えられるレディ・ビットをセットする。スレッドは入力命令を回復し再実行する。ポートがレディであるこの場合は、そのデータは返され、レディ・ビット37がクリアされる。
一旦ポート・レディ・ビットがセットされると、命令を満足したデータ値は、そのポート上の値が続いて変化していたとしても、ソフトウェアが命令を満足した値を得るように捕捉される。INまたはINSHR命令が実行され、レディ・ビットがセットされる時は、その場合、データが返されてレディ・ビットがクリアされる。レディ・ビットがセットされないと、その場合、レディ・ビットがセットされるまで、スレッドが中断される。もし命令がセットされると、その場合、データは状態と比較され、そして状態が満足される場合のみ、レディ・ビットはセットされる。
OUTかOUTSHR命令が実行される時は、もしレディ・ビットがクリアされているなら、その場合、データはポートによって取り込まれ、レディ・ビットがセットされる。もしレディ・ビットがセットされていると、その場合、それがポートによってクリアされるまで、そのスレッドは中断される。
2つのスレッド間で通信するために、2つのチャネル・エンドが割り付けられる必要があり、それは各スレッドそれぞれに対して1つとなる。これはGETR CHAN命令を用いることによって行われる。2つのスレッドは、その場合、出力、入力命令を用いてデータ・ワードを転送するために、リソース識別子を用いることができる:
OUT d <− s
IN d −> s
チャネルが満杯でデータを取り込むことができない時に出力命令が実行される場合は、命令を実行したスレッドは中断される。チャネルにその命令がうまく完了するための十分な余裕がある時に、再開される。同様に、入力命令が実行され、そして十分なデータがアベイラブルである時は、その場合、スレッドは中断され、そして十分なデータがアベイラブルになった時に、再開される。そのチャネルは、もはや必要とされない時は、FREER CHAN命令を用いて解放できる。そうでない場合は、他のメッセージに用いられる。
イベントと割り込みは、リソース(ポートとチャネル)がコントロールを、定義済みのイベント・ハンドラーに、自動的に転送できるようにする。スレッドがイベントまたは割り込みを受理する能力は、スレッド・ステータス・レジスタSR(図4を参照)の中に保持されている情報によって制御され、TSEとTSD命令を用いて明示的に制御されてもよい。この情報は、イベントイネーブルフラグ(EE)と割り込みイネーブルフラグを含む(IE)。
TSE s SR ← SR ∨ s スレッド ステート イネーブル
TSD s SR ← SR ∧ ¬ s スレッド ステート ディスエーブル
これらのインストラクションのオペランドは次のもののうちの1つであるはずである:
EE イベントをイネーブルにするかディスエーブルにする
IE 割り込みをイネーブルにするかディスエーブルにする
イベントはそれらがセットアップされたのと同じ適用範囲において処理される。従って、イベントの上では、すべてのスレッドの状態はイネーブルであり、これによりスレッドがイベントに素早く対応できるようになっている。スレッドは、いくつかまたはすべてのイベント情報を不変のまま残しながら、イベントを生じさせたポートを用いて入出力オペレーションを実行できる。これは、スレッドがイベントの処理を完了し、直ちに他の同様のイベントを待つことを、可能にする。
イベント・ハンドラーのプログラム位置は、SETV命令を用いてイベントをイネーブルにする前にセットされなければならない。ポートは、これらがいつイベントを発生させるか判定する状態を有しており、これらはSETCとSETD命令を用いてセットされる。チャンネルは、これらが十分なデータを含んでいるか、出力用データを受理するための余地があるとすぐに、レディであると考えられる。
特定のポートまたはチャネルによるイベントの発生は、イベントイネーブル・アンコンディショナル(EEU)命令を用いてイネーブルにされることが可能であり、またイベント・ディスエーブル・アンコンディショナル(EDU)命令を用いてディスエーブルにされることが可能である。イベントイネーブルツルー(EET)命令は、もしそのコンディション・オペランドが真であれば、そのイベントをイネーブルにし、もしそうでないならば、ディスエーブルにする;逆に、イベントイネーブルフォルス(EEF)命令は、もしそのコンディション・オペランドが偽であれば、そのイベントをイネーブルにし、もしそうでないならば、ディスエーブルにする。これらの命令はガード付入力の実行を最適化するために用いられる。下記は、ポート上のイベントを設定するためのいくつかのインストラクション・フォーマットの例であるが、同じ命令がチャネルに対して適用可能であることは理解されよう。
SETV port, v port[vector] ← v セットイベントベクトル
SETD port, d port[data] ← d セットイベントデータ
SETC port, c port[ctrl] ← c セットイベントコントロール

EET port, b port[enable]← b; port[tid] ← thread
イベントイネーブルツルー
EEF port, b port[enable]←¬b; port[tid] ← thread
イベントイネーブルフォルス
EDU port port[enable]← false; port[ tid] ← thread
イベント・ディスエーブル
EEU port port[enable]← true; port[tid] ← thread
イベントイネーブル
スレッドは、1つ以上のリソース上のイベントをイネーブルにしておくことによって、少なくとも1つのイベントを待つためのWAITEU命令を用いることができる。これは、EE(イベントイネーブル)フラグのクリアによりイベントをディスエーブルにされた対応するイベント・ベクトルによって特定されるイベント・ハンドラーに、コントロールが転送されて、イベントが直ちに起きるという結果になってもよい。または、スレッドはイベントが起こるまで一時中断されてもよく、この場合、イベントが起こればEEフラグはクリアされ、そしてスレッドは実行を再開する。
WAITET b if b then SR[EE] ← true ツルーならイベント待ち
WAITEF b if ¬ b then SR[EE] ←true フォルスならイベント待ち
WAITEU SR[EE] ← true イベント待ち

CLRE SR[EE] ← false; 全イベント・ディスエーブル

for all port for thread
if port[tid] = thread then port[enable] ← false
コンディションが発生するまで、1つ以上のイベントを繰り返し待つ共通ケースを最適化するために、イベント待ち命令のコンディショナル形式が提供される。WAITET命令はそのコンディション・オペランドが真の場合のみ待ち、また、WAITEFは、そのコンディション・オペランドが偽の場合のみ待つ。
スレッドによってイネーブルになったイベントはすべて単一のCLRE命令を用いてディスエーブルにすることができる。これは、スレッドによってイネーブルにされたイベントを持っていた全てのポートにおけるイベント発生をディスエーブルにする。CLRE命令は、同様にスレッドのステータス・レジスタにおけるイベントイネーブルド・ステータスをクリアする。
高優先順位のリソースに対するスレッドの応答性を最適化するためには、ポートおよび/またはチャネルをイネーブルにすることを開始し、イベント待ち命令のうちの1つを使用する前に、スレッド上のイベントを先ずイネーブルにするためにTSE EE命令を用いることができる。このように、プロセッサは、リソースを通して優先度順に走査することができる。これにより、イベントがイネーブルになるとすぐに処理できるようする。
イベントとは対照的に、割り込みは現時点の適用範囲内では処理されない、したがって、現時点のPCとSR(可能性として同様に他のレジスタのうちのいくつかまたは全部)は、割込みハンドラの実行に先立って保存されなければならない。割り込みがリソースrによって発生された場合、下記のものが自動的に起きる:
SAVEPC ← PC;
SAVESR ← SR;
SR[EE] ← false;
SR[IE] ← false;
PC ← r[vector]
ハンドラが完了した時、中断されたスレッドの実行はRFINT命令によって実行できる。
RFINT PC ← SAVEPC; 割込みから戻る
SR ← SAVESR
割り込みはスレッドを中断することがあり得るが、一方イベントを待って一時中断さることもある。
次の例は、入力、出力、論理演算を実行するために、命令がスレッドによってどのように用いられているか示す。その例に、下記の命令が用いられている:
LDFI: レジスタに命令アドレスをロードする
LDI: レジスタに定数値をロードする
EQI: レジスタ値が定数と等しい場合、ブール(真理値)値を生成する
OR: 2つのレジスタ値の論理和を生成する
ADD: 2つのレジスタ値を加算する
ADDI: レジスタ値に定数を加算する
SHL: レジスタの内容を左へシフトする
BBF: ブール値がフォルスの場合、プログラム中の他のポイントに分岐する
OUT: データを出力する
次は、ピンから8ビットバイトを直列に入力するためのコード例を示している。第2のポートで外部クロックから受信された信号が、データが取り込まれるべきであることを示すために0から1に変化した時、データの各ビットはそれぞれ第1のポートから入力される。高水準の言語では、そのオペレーションは下記のようである:
PROC inbyte(clock, data)
VAR byte;
{FOR n = 0 FOR 8
WHEN clock ? TO 1 DO {data? bit; byte = (byte << 1) + b};
RETURN byte
}
このためのインストラクションレベルのプログラムを以下に示す。
SETC clock, TRANSITION
SETD clock, 1
LDI byte, 0
LDI count, 0
loop:
IN clock, c
IN data, bit
SHL byte, byte, data
ADD byte, byte, bit
ADDI count, count, 1
EQI go, count, 8
BBF go, Loop
2つ以上のそのようなコード・シーケンスを、それらの内のおのおのをそれ自身のスレッドに割り付けることにより、同時に実行することが可能であろう。
次は、上記の命令のうちのいくつかを用いて、2つの入力xとyのうちの1つが状態を変えた場合に常に起き上がるNAND型プロセスを実現するためのコード例を示す。その高レベルのコードは次のとおりである:
PROC nand(x, y, z) IS
WHILE TRUE
{WHEN x? TO notx DO {notx:= NOT notx; z! (notx OR noty)}
| WHEN y? TO noty DO {noty:= NOT noty; z! (notx OR noty)}
}
低レベルのコードでは、プロセスは、ベクトル「xv」と「yv」をそれぞれ備えた二つのポートxとyを初期化し、これらのポートがイベントを発生することを可能にする単一のスレッドを含む。その対応するインストラクションレベルのプログラムは以下のとおりである:
nand:
LDI notx, 1
LDI noty, 1
SETC x, TRANSITION
SETD x, notx
SETC y, TRANSITION
SETD y, noty
LDFI temp, xv
SETV temp, x
LDFI temp, yv
SETV temp, y
EEU x
EEU y
WAIT

xv:
EQI notx, notx, 0
SETD x, notx
OR temp, notx, noty
OUT z, temp
WAIT

yv:
EQI noty, noty, 0
SETD y, noty
OR temp, notx, noty
OUT z, temp
WAIT
オペレーションにおいては、x入力が変化するかまたはy入力が変化すとコントロールはxvかyvのいずれかに移る。いずれの場合においても、応答コードは5つの命令を実行し、次の入力の状態変化を待つ。入力変化から出力変化までの遅延は約10サイクル未満であってもよい。1GHzのプロセッサは100MHzのロジックをエミュレートすることができる。
他の例として、次に、入力が状態を変えた場合に常に起動するが外部クロックによってクロック制御された時は単に出力を変化させるのみのD型フリップフロップ・ロジックを実現するためのプロセスを示す。そのハイレベルのプログラムは次のとおりである:
PROC dtype(d, ck, q) IS
WHILE TRUE
{WHEN d? TO notd DO notd:= NOT notd
| WHEN ck? TO TRUE DO q! NOT notd
}
その対応するインストラクションレベルのプログラムは次のとおりである:
dtype:
IN d, temp
EQI temp, temp, 0
SETC d, TRANSITION
SETD d, temp
SETC ck TRANSITION
LDI temp, 1
SETD ck, temp
LDFI temp, dv
SETV d, temp
LDFI temp, ckv
SETV ck, ckv
EEU d
EEU ck
WAIT

dv:
IN d, temp
SETD d, temp
WAIT

ckv:
EQI temp, notd, 0
OUT q, temp
WAIT
オペレーションにおいては、d入力が変化するか、またはck入力が変化する。いずれの場合も、応答コードは3つの命令を実行し、次の入力状態変化を待つ。入力変化から出力変化までの遅延は約10サイクル未満であってもよい。また、1GHzのプロセッサは、100MHzのロジックをエミュレートすることができる。
下記に、もう少し複雑なロジックの例を挙げる。Dタイプのように、それは入力データ(数ビット幅であり得る)を、外部クロックが到着する時にセットアップされるように、追跡する(他の方法はクロックのデータを単に読込むことであろう。その場合には、そのデータには0でないホールド時間が存在することになるであろう)。その出力が計算され(ルックアップ・テーブルによる以下の例の中では)、クロックをもとに出力される。入力のより複雑な関数が計算され得るかもしれないし、また、これが、可能性として以下で示されたポイントにおいてより多くの命令をつけ加えることになるかも知れない。しかしながら、プロセッサは、ほんの少数の命令で非常に複雑な関数(小さなLUTに関する)を計算することができる。その高レベルのコードは次のとおりである:
PROC lookup(d, ck, q) IS
WHILE TRUE
{WHEN d? x: x!= lastx DO lastx:= x
| WHEN ck? TO TRUE DO q! lookup[lastx]
}
その対応するインストラクションレベルのプログラムは次のとおりである:
logic:
IN d, data
SETC d, NE
SETD d, data
SETC ck, TRANSITION
LDI temp, 1
SETD ck, temp
LDFI temp, dv
SETV d, temp
LDFI temp, ckv
SETV ck, temp
EEU d
EEU ck
WAIT

dv:
IN d, data
SETD d, data
WAIT

ckv:
LDW temp, lookup, data // replace this to change function
OUT temp, q
WAIT
オペレーションにおいては、d入力が変化するかまたはck入力が変化する。いずれの場合も、応答コードは3つの命令を実行し、次の入力状態変化を待つ。入力変化から出力変化までの遅延は約10サイクル未満であってもよい。
また、1GHzのプロセッサは、100MHzのロジックをエミュレートすることができる。
尚、上記の例が、所定のスレッドがマルチイベントのようなマルチアクティビティをどのように処理することができるかを実証する。
イベントとは対照的に、割り込みは、その状態がエントリ時に割込みハンドラに保存され、そしてハンドラ内での使用が可能となるようにレジスタをアベイラブルにするため、終了時にこれを戻すことが必要となる。さらに、ハンドラは通常、直近の入力された時の状態を回復し、また次に入力される場合に備えて状態を保存するする必要がある。割込みハンドラの簡単な例を以下に示す。これは、いくつかの追加の命令を用いている:
LDWSP スタック・ポインタを用いて、メモリから値をロードする
STWSP スタック・ポインタを用いて、メモリに値を格納する
LDWDP データ・ポインタを用いて、メモリから値をロードする
STWDP データ・ポインタを用いて、メモリに値を格納する
EXTSP 新規の値用のスペースを作るためにスタックを拡張するべく用いられる
LDAWSP スタックから値を捨てるために用いられる
この例は、1バイトのデータを一度に1ビットづつ入力する;イベントを用いる上述の例とは対照的に、これは割込みハンドラを用いている。高レベルのプログラムは次のとおりである:
PORT clock: INT, TRANSITION, 1;
VAR byte;
VAR count;
byte:= 0;
count:= 0;
ENABLE clock;
// program to be interrupted follows here
HANDLER inbyte()
{data? bit; byte := (byte << 1) + bit;
count:= count + 1;
IF count = 8 THEN DISABLE clock
}
ポートが割り込みを生成するべくイネーブルになっている場合、外部クロックがトランジションをロジック1にする毎に、割込みハンドラが開始される。ハンドラはデータ・ビットを取り込み、1バイトを構成する。そのバイトは、ビット入力のカウントと一緒にメモリのロケーションに格納され、データ・ポインタを介してアクセスされる。8ビットが入力された場合、そのハンドラは、そのバイトをプログラムが使用するためレディにしておいて、さらなる割り込みをディスエーブルにする。その対応するインストラクションレベルのプログラムは次のとおりである:
SETD clock, 1
SETC clock, TRANSITION
SETC clock, INT
LDI r0, 0
STWDP r0, byte
STWDP r0, n
EEU clock
… // program which will be interrupted

int: // interrupt handler
EXTSP 2
STWSP R0, 0
STWSP R1, 1
IN clock, r0
IN data, r0
LDWDP r1, byte
SHL byte, byte, 1
ADD byte, byte, r0
STWDP r1, byte
LDWDP r0, n
ADDI r0, r0, 1
STWDP r0, n
EQI r0, r0, 8
EEF clock, r0
LDWSP R1, 1
LDWSP R0, 0
LDAWSP 2
RFINT
上記の説明と例から、それぞれのポートにおけるアクティビティを対応するそれぞれのスレッドに関連付けること、及びそのアクティビティから発生するイベントに基づいたこれらのスレッドをスケジューリングすることが、外部刺激にすばやく対応できるプロセッサを、いかに好適に提供するかが分かる。
上記の実施形態が例としてのみ述べられていることが理解されよう。他の実施形態においては、異なるセットのレジスタと命令がチップの所望の仕様に応じて提供され得る。ある実施形態においては、スレッド識別子はポートに送られる必要はなく、スレッド・スケジューラが担ったままであるか、または、他のどこかに格納され得る。あるいは、スレッド識別子が正しいレディ信号を選択するためポートに渡されるが、アクティビティを検出した時にスレッド・スケジューラに返す必要がないように、各スレッドはそれぞれポートにおける個々のレディ・フラグを与えられることがある。さらに、状態および/またはコンディション・データはポートに送られる必要はない。代わりに、状態はポートに事前設定され、および/または、スレッド・スケジューラまたは他のどこかで評価され得る。スレッドは、ポートとチャネル以外の他のソースからのアクティビティに基づいてスケジューリングされてもよい。異なる相互接続がプロセッサの様々なコンポーネント間に提供されてもよい。同様に、本発明はモバイル・アプリケーション・プロセッサを備えたモバイル端末への使用に特定されない。他への適用および構成は当業者には明白であろう。本発明の範囲は説明された実施形態によって限定されるものではなく、下記の特許請求の範囲によってのみ限定される。

Claims (56)

  1. 第1のポートであって、該第1のポートで第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な第1のポートと、
    第2のポートであって、該第2のポートで第2のアクティビティに依存する第2のインディケーションを発生させるよう動作可能な第2のポートと、
    マルチスレッドを実行するように構成された実行ユニットと、
    前記インディケーションを受信するために接続され、前記インディケーションに基づいて、前記実行ユニットによる実行用のマルチプルスレッドをスケジューリングするように構成されるスレッド・スケジューラであって、前記スケジューリングは、それぞれのインディケーションの受信までスレッドの実行を一時中断することを含むスレッド・スケジューラとを含み、
    前記第1のアクティビティと前記第2のアクティビティは、それぞれ対応するそれぞれのスレッドに関係付けられているプロセッサ。
  2. 前記スレッド・スケジューラは、前記第1のポートに関係付けられた識別子レジスタに、第1のアクティビティを待つ間一時中断された第1のスレッドに関係する第1のスレッド識別子を送信するように構成されている請求項1に記載のプロセッサ。
  3. 前記スレッド・スケジューラは、前記第2のポートに関係付けられた識別子レジスタに、第2のアクティビティを待つ間一時中断された第2のスレッドに関係する第2のスレッド識別子を送信するように構成されている請求項2に記載のプロセッサ。
  4. 一時中断スレッドのすべてのスレッド識別子がポートに送られてしまうと、実行ユニット、スレッド・スケジューラ、クロックの内の少なくとも1つの電源を切るよう適応している請求項1に記載のプロセッサ。
  5. それぞれのポートからスレッド識別子の少なくとも1つが返されると、実行ユニット、スレッド・スケジューラ、クロックの内の前記少なくとも1つの電源を入れるよう適応している請求項4に記載のプロセッサ。
  6. 前記第1のおよび第2のポートの少なくとも1つは、アクティビティ処理ロジックを含み、且つ状態を格納するための少なくとも1つのコンディション・レジスタに関係付けられており、該アクティビティ処理ロジックは、ポートにおけるアクティビティをモニターし、前記状態を満たす前記アクティビティに依存して前記インディケーションを発生させるように構成されている請求項1に記載のプロセッサ。
  7. 前記実行ユニットは、各コンディション・レジスタにそれぞれの状態を送るように構成されている請求項6に記載のプロセッサ。
  8. バスにより前記実行ユニットに接続されたプログラム・メモリをさらに含み、前記スレッド・スケジューラは、前記第1のおよび第2のポートのそれぞれから前記インディケーションを受信するために前記バスとは別の少なくとも1つの接続により接続されている請求項1に記載のプロセッサ。
  9. スレッド・スケジューラは前記第1のスレッドを一時中断すると、第1のポートに関係付けられたベクトル・レジスタに継続点ベクトルを送信するように構成され、また、継続点ベクトルは第1のアクティビティに依存して実行ユニットに返される請求項2に記載のプロセッサ。
  10. 前記第1のスレッドは、複数のポートからのアクティビティに関係付けられており、各ポートは、該アクティビティに依存してそれぞれのインディケーションを発生させるよう動作可能であり、前記実行ユニットは、複数の継続点ベクトルをそれぞれ前記複数のポートのうち対応する1つに送信するよう適応しており、それぞれの継続点ベクトルはそれぞれのアクティビティに依存して返され、前記スレッド・スケジューラは、第1のスレッドの実行を、それぞれのインディケーションの少なくとも1つを受信するまで、一時中断するよう適応している請求項9に記載のプロセッサ。
  11. ポートイベント有効フラグが第1のポートに関係付けられており、前記スレッド・スケジューラは、ポートイベント有効フラグを有効にすることにより前記第1のアクティビティが前記スケジューリングを始動させることができるようにし、ポートイベント有効フラグを無効にすることにより前記第1のアクティビティが前記スケジューリングを始動させることができないようにするよう適応している請求項10に記載のプロセッサ。
  12. スレッドイベント有効フラグが第1のスレッドに関係付けられており、前記スレッド・スケジューラは、スレッドイベント有効フラグを有効にすることにより第1のスレッドが、第1のアクティビティに依存してスケジュールされることができるようにし、スレッドイベント有効フラグを無効にすることにより第1のスレッドが、第1のアクティビティに依存してスケジュールされることができないようにするよう適応している請求項11に記載のプロセッサ。
  13. 前記ポートイベント有効フラグと前記スレッドイベント有効フラグの少なくとも1つは、第1のアクティビティの発生によって自動的に無効にされる請求項11に記載のプロセッサ。
  14. 前記スレッド・スケジューラは、ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つが無効にされている時、ポートからの第3のアクティビティの第3のインディケーションを待つ間、第1のスレッドの実行を一時中断するよう適応している請求項11に記載のプロセッサ。
  15. 複数のポートイベント有効フラグのそれぞれは、第1のスレッドに関係付けられた複数のポートのそれぞれに関係付けられており、前記スレッド・スケジューラは、スレッドイベント有効フラグを有効にし、続けて、前記複数のポートイベント有効フラグを有効にするように構成されている請求項12またはその従属請求項に記載のプロセッサ。
  16. 複数セットのスレッド・レジスタをさらに含み、各セットは、前記マルチスレッドのそれぞれ1つに関係する情報を格納するように割り付けられている請求項1に記載のプロセッサ。
  17. 前記プロセッサはチップ上に実現され、前記第1と第2のポートの少なくとも1つは前記チップ上の他のプロセッサと通信するための内部ポートである請求項1に記載のプロセッサ。
  18. 前記プロセッサはチップ上に実現され、前記第1と第2のポートの少なくとも1つは前記チップの外のデバイスと通信するための外部ポートである請求項1に記載のプロセッサ。
  19. 少なくとも1つの外部ポートは、チップの物理的な境界におけるピンに発生する立ち上がり信号エッジまたは立ち下がり信号エッジを検出するためのピンポートである請求項18に記載のプロセッサ。
  20. 少なくとも1つの外部ポートは、ポートにおける1個以上のビットの瞬間の論理レベルを処理するためのデータポートである請求項18または19に記載のプロセッサ。
  21. 前記実行ユニットは、スレッドを一時中断しそして実行させるための専用の命令を認識し実行するよう適応している請求項1に記載のプロセッサ。
  22. 前記セットの少なくとも2つの間の少なくとも1つのチャネルをさらに含み、前記スレッド・スケジューラは、前記チャネル上に発生するアクティビティに基づいて、スレッドをスケジュールするよう適応している請求項16に記載のプロセッサ。
  23. 前記スレッド・スケジューラは、割り込みに基づいてスレッドをスケジュールするようさらに適応している請求項1に記載のプロセッサ。
  24. 割り込みに基づいてスケジュールされたスレッドが、第1のスレッドであり、該割り込みが一時中断中の第1のスレッド中断する請求項23に記載のプロセッサ。
  25. 前記スレッド・スケジューラは、関係付けられたアクティビティが、そのアクティビティに依存したスレッド内の命令の実行時または実行前に発生した場合、一時中断なしでそのスレッドをスケジュールするよう適応している請求項1に記載のプロセッサ。
  26. 第1のポートと第2のポートを有するプロセッサ内で実行のためマルチスレッドをスケジューリングする方法であって:
    第1のポートにおける第1のアクティビティと第2のポートにおける第2のアクティビティに対応するそれぞれのスレッドを関連付けるステップと、
    第1のアクティビティに依存して第1のポートの第1のインディケーションを発生させるステップと、
    第2のアクティビティに依存して第2のポートの第2のインディケーションを発生させるステップと、
    前記インディケーションに基づいてスレッドの実行をスケジューリングするステップであって、前記スケジューリングはそれぞれのインディケーションの受信までスレッドの実行を一時中断するステップと、
    前記スケジューリングに依存してそれらを実行することによりスレッドを実行させるステップとを含む方法。
  27. 第1のアクティビティを待つ間一時中断されている第1のスレッドに関係する第1のスレッド識別子を、第1のポートに関係付けられた識別子レジスタに送信するステップをさらに含む請求項26に記載の方法。
  28. 第2のアクティビティを待つ間一時中断されている第2のスレッドに関係する第2のスレッド識別子を、第2のポートに関係付けられた識別子レジスタに送信するステップをさらに含む請求項27に記載の方法。
  29. 中断されたスレッドの全てのスレッド識別子がポートに送られてしまうと、前記スレッドを実行するのに使用される実行ユニット、前記スレッドをスケジュールするのに使用されるスレッド・スケジューラ、クロックのうちの少なくとも1つの電源を切るステップをさらに含む請求項28に記載の方法。
  30. それぞれのポートからスレッド識別子の少なくとも1つが返されると、実行ユニット、スレッド・スケジューラ、クロックの内の前記少なくとも1つの電源を入れるステップをさらに含む請求項29に記載の方法。
  31. 前記第1と第2のポートの少なくとも1つは、アクティビティ処理ロジックを含み、状態を格納するための少なくとも1つのコンディション・レジスタに関係付けられており、該方法は、アクティビティ処理ロジックを用いて、ポートにおけるアクティビティをモニターし、前記状態を満たす前記アクティビティに依存して前記インディケーションを発生させるステップをさらに含む、請求項26に記載の方法。
  32. 各コンディション・レジスタにそれぞれの状態を送るステップをさらに含む請求項31に記載の方法。
  33. 前記プロセッサが、バスによって実行ユニットに接続されたメモリを含み、該方法は、前記バスとは別の少なくとも1つの接続により、第1と第2のポートのそれぞれから前記インディケーションを送るステップをさらに含む請求項26に記載の方法。
  34. 前記第1のスレッドを一時中断すると、第1のポートに関係付けられたベクトル・レジスタに継続点ベクトルを送信するステップと、第1のアクティビティに依存して継続点ベクトルを返すステップとをさらに含む請求項26に記載の方法。
  35. 第1のスレッドを複数のポートからのアクティビティに関係付けるステップと、複数の継続点ベクトルをそれぞれ前記複数のポートのうち対応する1つに送信するステップとを含み、前記スケジューリングは第1のスレッドの実行を、継続点ベクトルの少なくとも1つが返されるまで、一時中断する請求項34に記載の方法。
  36. ポートイベント有効フラグを有効にすることにより、前記第1のアクティビティが前記スケジューリングを始動させることができ、ポートイベント有効フラグを無効にすることにより、前記第1のアクティビティが前記スケジュールを始動させられないようにするステップを含む請求項34に記載の方法。
  37. スレッドイベント有効フラグを有効にすることにより、第1のアクティビティに依存して、第1のスレッドをスケジュールすることができ、スレッドイベント有効フラグを無効にすることにより、第1のアクティビティに依存して、第1のスレッドをスケジュールすることができないようにするステップを含む請求項34に記載の方法。
  38. 第1のアクティビティの発生により、ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つを自動的に無効にするステップを含む請求項36または37に記載の方法。
  39. ポートイベント有効フラグとスレッドイベント有効フラグの少なくとも1つを無効にした後、第1のスレッドの実行を再開し、続いて、ポートイベント有効フラグとスレッドイベント有効フラグの前記少なくとも1つが無効にされている時、ポートからの第3のアクティビティの第3のインディケーションを待つ間、第1のスレッドの実行を一時中断するステップと、
    ポートイベント有効フラグとスレッドイベント有効フラグの前記少なくとも1つを再度有効にするステップと、
    ポートイベント有効フラグとスレッドイベント有効フラグの前記少なくとも1つを再度有効にした後、第1のアクティビティの再発生を待つ間、スレッドの実行を一時中断するステップとをさらに含む請求項36に記載の方法。
  40. 複数のポートイベント有効フラグはそれぞれ、第1のスレッドに関係付けられた複数のポートのそれぞれと関係付けられ、該方法は、スレッド有効フラグを有効にし、続いて前記複数のポートイベント有効フラグを有効にするステップを含む請求項34に記載の方法。
  41. スレッド・レジスタのそれぞれのセットにおける前記スレッドのそれぞれを表す情報を格納するステップをさらに含む請求項26に記載の方法。
  42. 前記プロセッサはチップ上に実現され、また、前記第1と第2のポートの少なくとも1つは前記チップ上の他のプロセッサと通信するための内部ポートである請求項26に記載の方法。
  43. 前記プロセッサはチップ上に実現され、また、前記第1と第2のポートの少なくとも1つは前記チップの外のデバイスと通信するための外部ポートである請求項26に記載の方法。
  44. 少なくとも1つの外部ポートは、チップの物理的な境界のピンにおいて発生する立ち上がり信号エッジまたは立ち下がり信号エッジの検出のためのピンポートである請求項43に記載の方法。
  45. 少なくとも1つの外部ポートは、ポートにおける1ビット以上の瞬間の論理レベルを処理するためのデータポートである請求項43または44に記載の方法。
  46. スレッドを一時中断しそして実行させるための専用の命令を実行するステップをさらに含む請求項26に記載の方法。
  47. 前記プロセッサが、前記セットの少なくとも2つの間の少なくとも1つのチャネルをさらに含み、該方法は、前記チャネル上に発生するアクティビティに基づいてスレッドをスケジュールするステップを含む請求項41に記載の方法。
  48. 前記割り込みに基づいてスレッドをスケジュールするステップをさらに含む請求項26に記載の方法。
  49. 前記割り込みに基づいてスケジュールされたスレッドが第1のスレッドであり、その割り込みが、一時中断中の第1のスレッドを中断する請求項48に記載の方法。
  50. 関係付けられたアクティビティが、そのアクティビティに依存するスレッド内の命令の実行時または実行前に発生する場合、一時中断なくそのスレッドをスケジュールするステップをさらに含む請求項26に記載の方法。
  51. 第1のポートと第2のポートを有するプロセッサ内での実行のためマルチスレッドをスケジュールするためのスレッド・スケジューラにおいて、
    スレッド・スケジューラは、第1のポートにおける第1のアクティビティに依存する該第1のポートが発生させた第1のインディケーションを受信するよう適応しており、
    スレッド・スケジューラは、第2のポートにおける第2のアクティビティに依存する該第2のポートが発生させた第2のインディケーションを受信するよう適応しており、
    スレッド・スケジューラは、前記インディケーションに基づいて、前記実行ユニットによる実行用マルチプルスレッドをスケジュールするよう適応しており、前記スケジューリングは、スレッドの実行をそれぞれのインディケーションの受信まで一時中断し、
    前記第1のアクティビティと前記第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているスレッド・スケジューラ。
  52. マルチプルスレッドの実行のためのスケジューリングにおいて使用されるポートであって、ポートにおけるアクティビティに依存するインディケーションを発生させるように構成されたアクティビティ処理ロジックと、前記アクティビティに関係付けられたスレッドを識別する情報を格納するためのレジスタと、状態を格納するためのレジスタとを含み、前記アクティビティが前記状態を満たす時、アクティビティ処理ロジックはオンチップで第1のインディケーションを送信するよう適応している、ポート。
  53. モバイル・アプリケーション・プロセッサと、少なくとも1つの周辺装置と、該モバイル・アプリケーション・プロセッサと該周辺装置の間に接続されたインタフェース・プロセッサを有するモバイル端末であって、該インタフェース・プロセッサは、
    第1のポートであって、該第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な第1のポートと、
    第2のポートであって、該第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるよう動作可能な第2のポートと、
    マルチスレッドを実行するように構成された実行ユニットと、
    前記インディケーションを受信するために接続され、前記インディケーションに基づいて、実行ユニットによる実行のため前記マルチスレッドをスケジュールするように構成されたスレッド・スケジューラであって、前記スケジューリングが、それぞれのレディ信号の受信まで、スレッドの実行を一時中断することを含むスレッド・スケジューラと、を含み、前記第1のアクティビティと前記第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているモバイル端末。
  54. 相互に接続されたプロセッサのアレイであって、前記プロセッサの少なくとも1つは、
    第1のポートであって、該第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるよう動作可能な第1のポートと、
    第2のポートであって、該第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるよう動作可能な第2のポートと、
    マルチプルスレッドを実行するように構成された実行ユニットと、
    前記インディケーションを受信するために接続され、前記インディケーションに基づいて、前記実行ユニットによる実行用マルチプルスレッドをスケジュールするように構成されたスレッド・スケジューラであって、前記スケジューリングはそれぞれのレディ信号の受信までスレッドの実行を一時中断することを含むスレッド・スケジューラと、
    を含み、前記第1のアクティビティと前記第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられ、
    前記第1と第2のポートの少なくとも1つは、前記少なくとも1つのプロセッサを、アレイ内の他のプロセッサに接続するアレイ。
  55. 第1のポートにおける第1のアクティビティに依存する第1のインディケーションを発生させるための第1のポート手段と、
    第2のポートにおける第2のアクティビティに依存する第2のインディケーションを発生させるための第2のポート手段と、
    マルチスレッドを実行するための実行手段と、
    前記インディケーションを受信し、前記インディケーションに基づいて、前記実行ユニットによる実行用マルチスレッドをスケジュールするよう構成されたスレッド・スケジュール手段であって、前記スケジューリングはそれぞれのインディケーションの受信までスレッドの実行を一時中断することを含むスレッド・スケジューリング手段と、
    を含み、
    前記第1のアクティビティと前記第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているプロセッサ。
  56. 第1のポートと第2のポートを有するプロセッサ内での実行のためマルチスレッドをスケジュールするスレッド・スケジューラであって、
    第1のポートにおける第1のアクティビティに依存する第1のポートが発生させた第1のインディケーションを受信するための手段と、
    第2のポートにおける第2のアクティビティに依存する第2のポートが発生させた第2のインディケーションを受信するための手段と、
    前記インディケーションに基づいて、前記実行ユニットによる実行用マルチプルスレッドをスケジュールする手段であって、それぞれのインディケーションの受信までスレッドの実行を一時中断することを含む手段と、
    を含み、
    前記第1のアクティビティと前記第2のアクティビティはそれぞれ対応するそれぞれのスレッドに関係付けられているスレッド・スケジューラ。
JP2009553206A 2007-03-14 2008-03-13 インタフェース・プロセッサ Active JP5271287B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/717,622 2007-03-14
US11/717,622 US8219789B2 (en) 2007-03-14 2007-03-14 Interface processor
PCT/GB2008/000870 WO2008110799A1 (en) 2007-03-14 2008-03-13 Interface processor

Publications (3)

Publication Number Publication Date
JP2010521730A true JP2010521730A (ja) 2010-06-24
JP2010521730A5 JP2010521730A5 (ja) 2013-02-21
JP5271287B2 JP5271287B2 (ja) 2013-08-21

Family

ID=39433789

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009553206A Active JP5271287B2 (ja) 2007-03-14 2008-03-13 インタフェース・プロセッサ

Country Status (6)

Country Link
US (1) US8219789B2 (ja)
EP (1) EP2137616B1 (ja)
JP (1) JP5271287B2 (ja)
KR (1) KR101501181B1 (ja)
CN (1) CN101681274B (ja)
WO (1) WO2008110799A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5173714B2 (ja) 2008-09-30 2013-04-03 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ及びその割り込み処理方法
US20110173420A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Processor resume unit
US8447960B2 (en) * 2010-01-08 2013-05-21 International Business Machines Corporation Pausing and activating thread state upon pin assertion by external logic monitoring polling loop exit time condition
JP2014211890A (ja) * 2014-06-25 2014-11-13 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ及びその割り込み処理方法
CN110908491B (zh) * 2018-08-28 2023-08-08 上海忆芯实业有限公司 功耗控制方法、控制部件及其电子系统
US11288072B2 (en) * 2019-09-11 2022-03-29 Ceremorphic, Inc. Multi-threaded processor with thread granularity

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
JP2002183073A (ja) * 2000-12-18 2002-06-28 Nec Kofu Ltd バッファ制御装置、汎用ポート制御装置、入出力システム、情報処理装置
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
JP2003508954A (ja) * 1999-08-27 2003-03-04 インターナショナル・ビジネス・マシーンズ・コーポレーション ネットワーク・スイッチ及びコンポーネント及び操作方法
JP2003167748A (ja) * 2001-11-30 2003-06-13 Fujitsu Ltd マルチスレッド計算機
US6661794B1 (en) * 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US6976095B1 (en) * 1999-12-30 2005-12-13 Intel Corporation Port blocking technique for maintaining receive packet ordering for a multiple ethernet port switch
US6952824B1 (en) * 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US7480706B1 (en) * 1999-12-30 2009-01-20 Intel Corporation Multi-threaded round-robin receive for fast network port
US6799317B1 (en) * 2000-06-27 2004-09-28 International Business Machines Corporation Interrupt mechanism for shared memory message passing
WO2002059731A2 (en) * 2000-11-17 2002-08-01 Links Point, Inc. Methods and systems for reducing power consumption in computer data communications
US20030065741A1 (en) * 2001-09-29 2003-04-03 Hahn Vo Concurrent bidirectional network communication utilizing send and receive threads
KR100429543B1 (ko) * 2002-05-25 2004-04-29 삼성전자주식회사 네트워크 프로세서에서 다양한 개수의 포트들을 처리하기위한 방법
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US7496915B2 (en) * 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US7350060B2 (en) * 2003-04-24 2008-03-25 International Business Machines Corporation Method and apparatus for sending thread-execution-state-sensitive supervisory commands to a simultaneous multi-threaded (SMT) processor
US7424599B2 (en) * 2003-08-28 2008-09-09 Mips Technologies, Inc. Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor
US7203100B2 (en) * 2004-11-01 2007-04-10 Sun Mircosystems, Inc. Efficient implementation of a read scheme for multi-threaded register file
US7149832B2 (en) * 2004-11-10 2006-12-12 Microsoft Corporation System and method for interrupt handling
US8745627B2 (en) * 2005-06-27 2014-06-03 Qualcomm Incorporated System and method of controlling power in a multi-threaded processor
US8074026B2 (en) * 2006-05-10 2011-12-06 Intel Corporation Scatter-gather intelligent memory architecture for unstructured streaming data on multiprocessor systems

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
JP2003508954A (ja) * 1999-08-27 2003-03-04 インターナショナル・ビジネス・マシーンズ・コーポレーション ネットワーク・スイッチ及びコンポーネント及び操作方法
US6661794B1 (en) * 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
JP2002183073A (ja) * 2000-12-18 2002-06-28 Nec Kofu Ltd バッファ制御装置、汎用ポート制御装置、入出力システム、情報処理装置
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
JP2003167748A (ja) * 2001-11-30 2003-06-13 Fujitsu Ltd マルチスレッド計算機

Also Published As

Publication number Publication date
KR20090122992A (ko) 2009-12-01
US8219789B2 (en) 2012-07-10
CN101681274A (zh) 2010-03-24
US20080229311A1 (en) 2008-09-18
JP5271287B2 (ja) 2013-08-21
EP2137616A1 (en) 2009-12-30
CN101681274B (zh) 2014-12-17
KR101501181B1 (ko) 2015-03-18
WO2008110799A1 (en) 2008-09-18
EP2137616B1 (en) 2013-10-30

Similar Documents

Publication Publication Date Title
JP5382735B2 (ja) プロセッサにおけるスレッドのスケジューリング
JP5222937B2 (ja) 時限ポート
EP2137628B1 (en) Clocked ports
JP5271287B2 (ja) インタフェース・プロセッサ
EP2165253A1 (en) Data transfer between thread register sets
JP2010521730A5 (ja)
EP2165265B1 (en) Processor communication tokens
EP2137618B1 (en) Processor instruction set
EP2137617B1 (en) Processor instruction set
WO2009007172A1 (en) Token protocol
EP2137613B1 (en) Processor register architecture

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121227

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20121227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130129

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130325

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: 20130416

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130510

R150 Certificate of patent or registration of utility model

Ref document number: 5271287

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250