JP2009510613A - セルプロセッサのためのspuタスクマネージャ - Google Patents

セルプロセッサのためのspuタスクマネージャ Download PDF

Info

Publication number
JP2009510613A
JP2009510613A JP2008533495A JP2008533495A JP2009510613A JP 2009510613 A JP2009510613 A JP 2009510613A JP 2008533495 A JP2008533495 A JP 2008533495A JP 2008533495 A JP2008533495 A JP 2008533495A JP 2009510613 A JP2009510613 A JP 2009510613A
Authority
JP
Japan
Prior art keywords
task
spu
data
tasks
processor
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
JP2008533495A
Other languages
English (en)
Other versions
JP4712877B2 (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.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
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 Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2009510613A publication Critical patent/JP2009510613A/ja
Application granted granted Critical
Publication of JP4712877B2 publication Critical patent/JP4712877B2/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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Image Processing (AREA)
  • Multi Processors (AREA)

Abstract

セルプロセッサにおけるセルプロセッサタスク管理を述べる。セルプロセッサは、メインメモリ、1以上のパワープロセッサユニット(PPU)、1以上のシナジスティックプロセッシングユニット(SPU)をもつ。各SPUはプロセッサとローカルメモリをもつ。1以上のSPUで動作するSPUタスクマネージャ(STM)は、メインメモリに格納された1以上のタスク定義を選択されたSPUのローカルメモリに読み出す。タスク定義に含まれる情報にもとづいて、SPUはタスク定義に関するコードおよび/またはデータをメインメモリから読み出し、選択されたSPUのローカルメモリにロードする。その後、選択されたSPUはこのコードおよび/またはデータを用いて1以上のタスクを実行する。
【選択図】図1

Description

[著作権表示]
この特許書類の開示の一部には、著作権のある内容が含まれる。著作権者は、特許商標庁の特許ファイルや記録にある通りに、特許書類または特許開示のいずれかを複写して再生することには異議を唱えないが、それ以外についてはすべての著作権を留保する。
[関連出願との相互参照]
本出願は、2005年9月27日に出願された、本出願と譲受人が共通する特許文献1に関連し、その開示内容全体をここに援用する。
本出願はまた、2005年9月27日に出願された、本出願と譲受人が共通する特許文献2に関連し、その開示内容全体をここに援用する。
本出願はまた、2005年9月27日に出願された、本出願と譲受人が共通する特許文献3に関連し、その開示内容全体をここに援用する。
本出願はまた、2005年9月27日に出願された、本出願と譲受人が共通する特許文献4に関連し、その開示内容全体をここに援用する。
US patent application 11/238,087 entitled "SPU TASK MANAGER FOR CELL PROCESSOR" to John P. Bates, Payton R. White, Richard Stenson, Howard Berkey, Attila Vass and Mark Cerny. US patent application 11/238,095 entitled "CELL PROCESSOR TASK AND DATA MANAGEMENT" to Richard B. Stenson and John P. Bates. US patent application 11/238,086 entitled "OPERATING CELL PROCESSORS OVER A NETWORK" to Tatsuya Iwamoto. US patent application 11/238,085 entitled "METHOD AND SYSTEM FOR PERFORMING MEMORY COPY FUNCTION ON A CELL PROCESSOR" to Antoine Labour John P. Bates and Richard B. Stenson.
[技術分野]
本発明は一般には並列処理に関し、特にセルプロセッサにおけるタスク管理に関する。
電子計算における主な進歩は、同時に複数の演算を実行することができるシステムが開発されてきたことである。そのようなシステムは、並行処理の実行と称されている。最近では、ハンドヘルド・ゲームデバイスからメインフレームコンピュータに至るまで、電子デバイス上で並列処理を実行するために、セルプロセッサが開発されている。典型的なセルプロセッサはパワープロセッサユニット(PPU;Power processor unit)と8個までのシナジスティックプロセッシングユニット(SPU;synergistic processing units)と呼ばれる付加的なプロセッサをもつ。各SPUは典型的には、メインプロセッサとコプロセッサを含むシングルチップまたはシングルチップの一部である。すべてのSPUとPPUは、たとえばメモリフローコントローラ(MFC)を通して、メインメモリにアクセスすることができる。SPUはメインプロセッサ上で走るプログラムと連結して演算を並列処理することができる。SPUは小さなローカルメモリ(典型的には256キロバイト)をもつ。このメモリは、コードとデータがローカルSPUメモリへ/から転送されるようにソフトウェアで管理しなければならない。
SPUは並列処理アプリケーションにおいてたくさんの利点を有する。たとえば、SPUは独立したプロセッサであり、PPUから最低限の関与しか受けずにコードを実行することができる。各SPUはRAMに対して高いダイレクトメモリアクセス(DMA)バンド幅をもつ。SPUは典型的にはPPUよりも速くメインメモリにアクセスすることができる。それに加えて、各SPUはそれ自身のローカルストアに比較的速くアクセスする。SPUはまた限定も有しており、それがSPU処理を最適化するのを難しくしている。たとえば、SPUはシンメトリック・マルチプロセッシング(SMP)を実行することはできず、共有メモリをもたず、ハードウエアキャッシュもない。さらに、共通したプログラミングモデルはSPU上でうまく動かない。
典型的なSPUプロセスは、メインメモリからコードおよび/またはデータを取り出し、SPU上でデータを操作するためにコードを実行し、データをメインメモリあるいは、ある場合には別のSPUに出力する。高いSPU性能を達成するには、比較的複雑な処理を行うアプリケーションにおいて上記のSPUプロセスを最適化することが望ましい。たとえば、コンピュータグラフィックス処理のようなアプリケーションでは、SPUは典型的にはフレーム毎に数千回タスクを実行する。与えられたタスクはいろいろなSPUコードに関係しており、データブロック数やサイズも異なる。高性能のためには、PPUソフトウエアの関与がほとんどない状態でSPUソフトウエアからSPUコードとデータを転送するように管理することが望ましい。SPUからコードとデータを管理するための多くの技術がある。しばしば、SPUからコードとデータを管理するための異なる技術をセルプロセッサ上で同時に実行する必要がある。SPU駆動型のタスク管理のためのプログラミングモデルがたくさんある。残念ながら、すべてのアプリケーションにとって正しい一つのタスクシステムというものはない。
セルプロセッサで使用された従来のタスク管理システムはSPUスレッドとして知られている。「スレッド」とは他の部分とは独立して実行できるプログラムの一部のことである。マルチスレッドをサポートするオペレーティングシステムによれば、プログラマはスレッド化された部分が並列に実行されるようにプログラムを設計することができる。SPUスレッドは、セルにおけるSPUをスレッドのためのプロセッサとみなすことで動作する。コンテクストスイッチにより、SPUのローカルストレージの内容がメインメモリにスワップされることがある。256キロバイトのデータやコードがメインメモリからローカルストレージに差し替えられ、差し替えデータおよびコードはSPUによって処理される。コンテクストスイッチは、複数の処理が単一のリソースを共有できるように、SPUまたはPPUのステート(コンテクスト)を格納し、復元する計算処理である。コンテクストスイッチは、通常は計算量が多く、オペレーティングシステムの設計の大部分は、コンテクストスイッチの使用を最適化することに割かれる。
残念ながら、SPUスレッドとインターオペレートすることは、高性能アプリケーションにとっての選択肢ではない。SPUスレッドにもとづくアプリケーションは、大きなバンド幅要求をもち、PPUから処理される。したがってSPUスレッドベースのアプリケーションは自律的ではなく、遅くなる傾向がある。SPUスレッドはPPUから管理されるため、SPUコンテクストスイッチ(あるSPU上で現在実行中のプロセスを他のウエイト中のプロセスにスワップする)は時間がかかり過ぎる。SPUの管理にPPUが関与するのを避けることができれば、あるアプリケーションに対してはもっとよい性能を与えることができる。
これらの問題を克服するために、SPUランタイムシステム(SPURS)と呼ばれるシステムが開発された。SPURSでは、各SPUのメモリには、SPUによって扱われるタスクのスケジューリングを実行するカーネルがロードされる。残念ながら、SPURSは、SPUスレッドと同様、コンテクストスイッチを使ってSPUへ、あるいはSPUから仕事(ワーク)をスワップする。ワークは、PPUではなくSPU上で実行されるため、SPUスレッドとは違って、処理の自律性はある。しかし、SPURSはSPUスレッドと同じようにコンテクストスイッチのオーバーヘッドを受ける。このように、SPURSは自律性を提供するが、多くの利用形態に対してはあまり好ましいものではない。
SPURSはSPUタスクシステムの一例に過ぎない。ミドルウエアおよびアプリケーションには、多様な目的に応じて多様なタスクシステムが求められる。現在、SPURSはSPUスレッドのグループとして実行され、他のSPUスレッドとインターオペレートすることができる。残念ながら、上述のように、SPUスレッドには好ましくないオーバーヘッドがあり、SPUタスクシステムのインターオペレーションのためにSPUスレッドを用いることは、特定の高性能アプリケーションにとっての選択肢ではない。
セルプロセッシングでは、ミドルウエアとアプリケーションが多様なタスクシステムを用いてSPUを共有することが望ましい。多くのタスククラス、たとえば、オーディオ、グラフィックス、人工知能や、布モデリング、流体モデリング、剛体運動のような物理に対して、リソースを提供することが望ましい。これを効率的に実行するために、プログラミングモデルはコードとデータの両方を管理する必要がある。SPUミドルウエアが共通のタスクシステムとインターオペレートしないようにすることが、一つの努力目標である。残念ながら、SPUスレッドとSPURSは同じプログラミングモデルに従っており、このモデルもあまり多くの利用ケースにとって十分な性能を提供しない。このように、アプリケーションの開発者は、コードとデータの間でSPU上の限られたメモリスペースをいかに共有するかについて、依然として答えを見つけなければならない。
そのため、上述の不利な点を克服するセルプロセッサ方法および装置が技術的に求められている。使いやすく、SPUの利点を強調するようなソフトウエアモデルを用いてSPUタスク管理を実装することが望ましい。また、SPU上でキャッシュされるソフトウエアコードおよび/またはデータを用いてSMPを実装することができるのが望ましい。
本発明の実施の形態は、セルプロセッサにおけるセルプロセッサタスク管理に関する。セルプロセッサは、メインメモリ、1以上のパワープロセッサユニット(PPU)、1以上のシナジスティックプロセッシングユニット(SPU)をもつ。各SPUはプロセッサとローカルメモリをもつ。タスクを管理する方法は、1以上のSPUによって実行される。1以上のSPUで動作するSPUタスクマネージャ(STM)は、メインメモリに格納された1以上のタスク定義を選択されたSPUのローカルメモリに読み出す。タスク定義に含まれる情報にもとづいて、SPUはタスク定義に関するコードおよび/またはデータをメインメモリから読み出し、選択されたSPUのローカルメモリにロードする。その後、選択されたSPUはこのコードおよび/またはデータを用いて1以上のタスクを実行する。
これから述べる詳細な説明には、例示のために特定の詳細な内容が多く含まれるが、当業者であれば、これらの詳細な内容にいろいろなバリエーションや変更を加えても、本発明の範囲を超えないことは理解できよう。したがって、以下で説明する本発明の例示的な実施の形態は、権利請求された発明に対して、一般性を失わせることなく、また、何ら限定をすることもなく、述べられたものである。
本発明の実施の形態は、セル・プロセッサを用いて高性能を達成することが望ましい。本発明の実施の形態によれば、SPUタスク管理が完全である、すなわち、SPUタスク管理がすべての場合に動作し、スケーラブル、すなわちSPUの数に対して性能がスケールすることが好ましい。加えて、本発明の実施の形態は、PPUの使用を低く抑え、メモリ使用も少なく、DMAバンド幅の使用量も低くすることで、SPUタスク管理を効率良く実装することが望ましい。
図1は、セル・プロセッサ100の概略図である。本発明の実施の形態によれば、セル・プロセッサ100は一般にパワープロセッサユニット(PPU)102といくつかのシナジスティックプロセッシングユニット(SPU)104を含む。図1では、一つのPPU102と8個のSPU104が例示される。2つ以上のPPUや、8より多いか少ないSPUをもつセルプロセッサが本発明の実施の形態において使われてもよい。
PPU102は、大部分の計算上の作業負荷を取り扱うSPU104に対してコントローラとして働く。PPU102が他の64ビットPowerPCプロセッサと十分に類似しており、SPU104がベクトル浮動小数点コードを実行するために設計されているならば、PPU102を、従来のオペレーティングシステムを走らせるために用いてもよい。一例として、PPU102は、32KiBのインストラクション(命令)とL1データキャッシュと512KiBのL2キャッシュを含んでもよい。
PPU102とSPU104は、交換インタフェースバス(EIB)103上で互いにコードとデータを交換し合うことがでる。PPU102とSPUS104は、EIB103およびメモリ・フロー・コントローラ(MFC)(たとえば、ダイレクトメモリアクセス(DMA)ユニットのようなもの)を介して、メインメモリ106に格納されたコードとデータを交換し合うこともできる。EIB103は、反対方向に2本のチャネルをもつ循環バスであってもよい。EIB103は、L2キャッシュ、MFC108およびシステムインタフェース105(例えば外部通信のためのFlexIOのようなもの)に接続されてもよい。
各SPU104は、ローカルメモリー110をもつ。メインメモリ106から取得されたコードとデータはローカルメモリー110へロードすることができ、その結果、SPU104はタスクを処理することができる。図示されているように、SPUタスクマネージャ(STM)112として参照される、小さなソフトウェア・マネージャが、各SPU104のローカルメモリ110に存在する。好ましくは、STM112は、各ローカルメモリ110の利用可能な総メモリ空間のほんの小さい部分だけを占める。SPMM112の中心部分は「STMカーネル」と称され、典型的には各SPU上のおよそ16KBを占めている。256Kのローカルストレージの場合、これはおよそ6%のSPUローカルストアを使用したことを意味する。
たとえば、ポリシーモジュールとワークキューは次のように関連づけられてもよい。図1の下側に示すように、メインメモリ106は一組のタスクキュー116を持つタスクセット114を含んでもよい。各タスクキュー116は一つ以上のタスクキューエレメントを含み、タスクキューエレメントはタスク定義へのポインタを含む。PPU102は新しいタスクキューをタスクセット114に追加することができるが、それ以外はタスクセット114の管理にはほとんど関与することがない。タスクはPPU102上で動作するアプリケーションからタスクキュー116に追加されてもよい。Lv2OSミューテックスのようなオペレーティングシステムのミューテックスをPPUスレッドの競合のために利用してもよい。それに加えてSPU104は新しいタスクをスケジュールすることもできる。タスクがタスクキューに追加されるたびに、割り込みなしで一度実行される。PPU102は典型的にはタスクが処理されている間はタスクに割り込むことはない。PPUアプリケーションは、タスクが完了したかどうかを見るためにタスクキュー116をポーリングしてもよい。たとえば、「チェックされた」タスクが完了すると、STMカーネル112はあるビットをアトミックに設定する。このビットはPPU102からAPIを用いてポーリングすることができる。
タスクキュー116が空であるとき、各SPU上のSPUカーネルはアトミックな予約消失イベントを待つ。SPU104はアトミックミューテックス117に「チェックされた」タスクの完了を通知する。たとえば、アトミックミューテックスは、ロックステートのために使われるアトミックな4バイト、完了したタスクのカウントに使われる2バイト、および最大488タスクのステートが入る122バイトを含む。この122バイトにはタスク毎の2つのビットを含む。一つは予約のため、もう一つはステート(待ち、処理中、完了など)のためである。通知(ノティフィケーション)は控えめになされるべきである。STMタスクは、待っているPPUスレッドにSPUスレッドのイベントキューを用いて随時通知することができる。しかし、この技術のレーテンシー(SPUがイベントを送ってからPPUスレッドが通知を受けるまでにかかる時間)は、非常に長くなりうる。たとえば、アトミック・ノティフィケーションよりも約100倍も長くなる。
タスク定義118は、タスクパラメータ120とSPUタスクコードイメージ122があるメモリロケーションへのポインタを含む。コードイメージ122は必要なコードの一つ以上の実行可能でリンク可能なフォーマット(ELF)イメージの形をとる。タスクパラメータ120はタスクに関する情報を含む。これには、入出力(I/O)アドレス、I/Oサイズ、入出力タスクデータ123のアドレスのようなものが含まれるが、これに限定するものではない。STMカーネル112は、SPU104にコンテキストデータ126として格納されているコードイメージ122とパラメータ120を用いて、SPU104にコード124をロードする。その後、SPU104はコード124を走らせて、タスクデータ123をロードして処理する。メインメモリ106には、いろいろな出力データサイズを有するSPUプログラムを収容するための共有出力バッファ115がオプションとして含まれる。そのようなタスクが完了すると、PPU102は、STM PPUアプリケーションプログラミングインターフェース(API)を通じてそのタスクの出力データを取り出すことができる。
ここで述べられた多くの特徴は、SPUカーネル112の適当なコンフィグレーションを通じて実装することができる。本発明の実施の形態では、STMカーネル112用のPPUランタイムは存在しない。一般に、STMカーネル112はメインメモリ106の共有タスクキュー116からタスク定義118を取得する。タスクキュー116のサイズは使用の仕方に応じて変わる。タスクがキューに追加されるたびに、割り込みなしで一度実行される。複数のタスクキュー116を生成して一つ以上のタスクセット114にグループ分けすることができる。各タスクキュー116に優先度を割り当てることができる。STMカーネルは低い優先度のキューよりも前に高い優先度のキューを処理するために選択することができる。等しい優先度のキューを処理するときは、SPUは競合を減らすために異なるキューを処理しようとする。高い優先度のキューが準備完了になると、次に利用可能なSPUがそのキューの処理を開始する。
表1は、1つのありうるタスク定義を代表して示す。タスク定義データ構造の特定の内容は、表1の内容とは異なっていてもよい。たとえば、タスクパラメータはオプションである。さらに、タスクが同期を要求しないなら、バリアタググループ情報は必要ではない。
Figure 2009510613
SPUカーネル116は、もっとタスクを必要とするとき、タスクキューの先頭から多くのタスク定義をDMA転送する。タスクキュー116は循環しており、タスクがPPU102またはSPU104から追加されると、動的に大きくなっていく。循環キューにおいて、タスクはキューの末尾に追加され、先頭から取られる。タスクは利用可能な空間を埋め尽くした後、ラップアラウンド(循環)して、タスクがキューの末尾から取り除かれたときに利用可能となるメモリ空間を占有する。タスクキューは各キューへのアクセスの同期を取るためにアトミック・ミューテックス117を用いてもよい。一例として、このアトミック・ミューテックスは128バイトのアトミック・ミューテックスであってもよい。タスクキュー116に対するポインタとインデックスは、このアトミックの中に格納することができる。アトミック・ミューテックス117は一般に、タスクキュー116に対するアクセスがロックされているか否かを示す1以上のビットを含む。ミューテックス117はまた、タスクキューの他のどのタスクが進行中であるかについての情報、および/またはそれらのタスクの位置についての情報を提供する1以上のバイトのデータを含む。ミューテックス117はまた、タスクキュー116のどのタスクが取られたかを他のSPU104またはPPU102に通知するためにインクリメントまたはデクリメントすることのできるカウンタ用に1以上のバイトをもつ。
たくさんの独立したタスクのもとでは、プロセッサ100の性能は、SPU104の数に対して線形にスケールする傾向がある。割り当てられたSPU104の数が変化しても、アプリケーションデータ管理にはどんな変更も必要ではない。SPU104は、自分がやり遂げたときはいつでももっと多くのタスクを獲得することにより、自動的に負荷のバランスを取る。複数のタスクキュー116があるおかげで、競合によるオーバーヘッドは減らされる。
図2は、図1のセル・プロセッサ100を用いて処理する方法200を示すフローチャートである。図3は、セル・プロセッサ100のある構成要素をブロック図で示した概略図である。セル・プロセッサ100のオペレーションは図1および図3を参照して理解することができる。ステップ202で、一つ以上のSPU104で動作するSTMカーネルはタスクセット114からタスクキュー116を選択する。タスクキューの選択は優先度にもとづいてなされてもよく、優先度の高いキューは優先度の低いキューよりも前に処理される。
いったんタスクキュー116が選択されると、ステップ204でSTMカーネル112はタスクキューからタスク定義118を読み出す。タスク定義はタスクキューで決められた順序で取り出される。STMは他のSPUによって既に取られたタスク定義はスキップする。タスク定義118の情報によって、STMは、SPUタスクパラメータ120に対応するメインメモリアドレスとタスクコードイメージ122に導かれる。ステップ206でSPUはSPUタスクコード124をロードする。SPU104は、パラメータ120とコード124を用いてタスクデータ123をSPUローカルストア110に入力データ126としてロードする。ステップ208でSPU104はコード124を用いて入力データ126を処理し出力データ128を生成する。ステップ210で、出力データ128はメインメモリ106のあるアドレスに格納されるか、さらなる処理をするために別のSPU104に転送される。
コード124は、一つ以上のSPUプログラムを含んでもよい。ここでは、SPUプログラムとは、SPUが一つ以上のSPUタスクを実行するために用いることができるコードを指す。本発明のある実施の形態では、SPU104がデータ123を処理するときに使用できるように、複数のSPUプログラムをキャッシュすることができる。そのようなプログラムのキャッシュは、DMAの使用を最適化するために利用することができ、SPU104がコードをロードするためにメインメモリ106にアクセスする回数を減らすことができる。SPUプログラムはPPUのAPIを通してメインメモリに動的にロードしてもよい。SPUプログラムのELFデータは(PPUシンボルとしての)メモリ106からロードしてもよく、ファイルからロードしてもよい。SPUタスク定義118はメインメモリにロードされたSPUプログラムを参照して生成することができる。SPUプログラムはアプリケーションの開始時にメインメモリに一度だけロードされる。その後、プログラムはタスクによって必要とされたときに、SPUローカルストア110にDMA転送することができる。
本発明の実施の形態では、ここではそれぞれタイプ1、タイプ2と称する二つのタイプの一つとしてSPUプログラムを特徴づけることができる。タイプ1のSPUプログラムは位置独立コード(PIC)、すなわちメモリ内の異なる位置で実行することができるコードを利用する。PICは共有メモリで一般に用いられており、そのため、同じライブラリコードを(たとえば、仮想メモリシステムを用いて)各アプリケーションのある場所にマップすることができ、アプリケーションや他の共有ライブラリと重なることがない。ローカルストアの静的な使用の仕方、すなわちタイプ1コードがランタイムの使用のためにメモリを割り当てることはないことによってプログラムをさらに特徴づけてもよい。図4Aに示すように、タイプ1のプログラムは、STMカーネルによってSPUタイプ1のローカルストア310内で管理される。図4Bに示すように、複数のタイプ1プログラム324を同時にSPUローカルストア310にロードすることもできる。タイプ1プログラムを一定のスタックリミットをもつスタック311によって特徴づけてもよい。タイプ1プログラムコードとコンテキストデータは、STMカーネル312またはスタック311によって占有されていないLS310の残りの空間に存在する。図4Cに示すように、プログラム324はプログラムとタスク間で共有すべきデータ326をキャッシュすることができる。
タイプ1プログラムは高性能のプログラムであるが、多くの制約をもつ傾向がある。キャッシュすることができるタイプ1プログラム324の一例は、MEM COPYプログラムである。このプログラムは、メモリ転送はPPU102が行うよりもSPU104を用いてDMAによって行った方が一層速くできるという事実を利用する。MEM COPYは、利用可能なSPUを用いてメインメモリ106のある場所から別の場所へデータを転送することにより、この利点を利用する。このようなSPUにもとづくメインメモリ管理は、メインメモリからSPUまたはどこか別の場所にDMA転送する前にデータのアラインメントをする必要がある場合に特に有利である。MEM COPYの例は、本出願と譲受人が共通する米国特許出願11/238,085号、"METHOD AND SYSTEM FOR PERFORMING MEMORY COPY FUNCTION ON A CELL PROCESSOR", Antoine Labour John P. Bates and Richard B. Stensonに詳しく記載されている。この出願は本願と同日に出願されており、その開示全体は参照によりここに取り込まれる。
タイプ2のプログラムは、非位置独立コード(non−PIC)を用い、ローカルストアの空間をSPUラインタイムで動的に割り当ててもよいという事実によって特徴づけられる。典型的には、ただ一つのタイプ2プログラムが一度に一つのSPUにロードされる。もっともこの特徴に対する例外も本発明の実施の形態の範囲内にある。図4Dに示すように、タイプ2プログラムに対して、ローカルストア310はランタイムで当該プログラムによって動的に割り当てられるメモリ領域を含む。図4Eに示すように、この領域にはタイプ2のSPUプログラムコード325とコンテキストデータ326が含まれる。さらに、図4Fに示すようにローカルストア310の動的に割り当てられた領域にはmallocデータ327も含まれることがある。malloc関数はCのようなプログラミング言語においてメモリ空間を動的に割り当てるために使われる。malloc関数はこのメモリブロックにポインタを介してアクセスする。メモリがもはや使われないとき、ポインタは「解放(フリー)」に渡され、メモリはシステムによって再利用できるようになる。タイプ2プログラムは、使い残りのローカルストアの空間がグローバル、スタック、および/またはmallocの間でどのように割り当てられるかを決定する。さらに、タイプ1プログラムとは違って、タイプ2プログラムに対するスタック311のサイズは可変である。タイプ2プログラムは、SPUにプログラムコードをロードし、その後そのプログラムコードに合致するタスクを選択することが望ましい状況に特に適している。STMカーネル312は、タスクキューをずっと先まで見ても合致するものが見つからないなら、別のプログラムをロードすることができる。
図4Gは、SPUのローカルストレージ320のメモリーマップを示し、ここでは、STMカーネル312がSPMM313のもとでポリシーとして実装される。STMカーネル312は一つ以上のタスクに対するSPUプログラム324とデータ326を管理する。STMカーネルをSPMMのもとでポリシーとして走らせることにより、SPURS、SPUスレッド、開発者が設計したカスタムポリシーのような他のポリシーを実装できるという柔軟性をもたせることができる。SPMMは、本出願と譲受人が共通する米国特許出願11/238,077号、"CELL PROCESSOR METHODS AND APPARATUS", John P. Bates, Payton R. White and Attila Vassに詳しく記載されている。この出願は本願と同日に出願されており、その開示全体は参照によりここに取り込まれる。
タイプ1とタイプ2のSPUプログラムには共通の特徴がある。具体的には、タスク定義118のサイズが指定されなければならない。さらに、I/OのDMAデータに対して要求される最大ローカルストア空間を指定しなければならない。これによりカーネル112はタスクに対するローカルストアのコンテキストデータを管理することができるようになる。SPUタスクは典型的にはタスク定義118に対するコンテキストバッファとI/Oデータを共有する。タイプ1とタイプ2のプログラムは、たとえばCやC++のような任意の適切な言語で書いてもよい。プログラムはリンクされてもよく、SPUカーネルに存在するSPUプログラム内の未定義のシンボルはランタイムでカーネルシンボルにリンクすることができる。
SPUプログラムはここで、prefetch、start、spumain、finishとして参照する4つのカスタマイズ可能なコールバックをもつことができる。prefetchコールバックはprefetch(SpuTaskContext*)というシンタックスをもつ。ここで、括弧内の量はタスクに関する情報へのポインタであり、この情報にはタスク定義のメインメモリアドレスとI/Oデータ転送に対するDMAタグが含まれる。SpuTaskContextは、現在のタスクに関する情報へのローカルポインタである。このデータは、SPUプログラムがタスクを実行するために必要である。STMカーネル112はこのデータを準備し、それをSPUプログラムの各コールバックに渡す。SpuTaskContextは、このタスク定義のメインメモリ106におけるアドレスを含む。タスクはこのアドレスを用いてタスク定義118をDMA転送することができる。SpuTaskContextはまた、SPUプログラムがタスクの4つのステージのそれぞれにおいて用いることができる一時的なローカルストアバッファを含んでもよい。このコールバックはタスクキューからタスク定義118のDMA転送を開始するようにSPU104に命じる。startコールバックは、start(SpuTaskContext*)というシンタックスをもつ。このコールバックによって、SPU104はタスク定義のDMAの完了を待ち、タスク定義118によって決められた通りにコードおよび/またはデータの入力DMAを開始するようになる。spumainコールバックはspumain(SpuTaskContext*)というシンタックスをもつ。ここで、括弧内の量は前述のコールバックと同じデータである。このコールバックによって、SPU104は入力DMAが完了するのを待ち、入力データを処理し、対応する出力データのDMAを開始するようになる。finishコールバックはfinish(SpuTaskContext*)というシンタックスをもつ。ここでも括弧内の量は前述のコールバックと同じデータである。
本発明の実施の形態によれば、ここではマルチバッファリングとして参照される処理を通じてコードとデータを効率的に管理することが可能である。マルチバッファリングはSPUのある特徴を利用する。特に、SPUは一度に複数のDMAオペレーションを実行することができ、SPUプログラムを実行中もDMAオペレーションを実行可能である。マルチバッファリングでは、STMカーネルはタスクコールバックをインターリーブするため、DMAオペレーションはメイン実行中も進行する。図5はマルチバッファリングの例を示す。この例では、一つのSPUが5つのタスクを実行する。各タスクに対して、SPUは、タスク定義をプリフェッチし、必要なデータおよび/またはコードのDMAを開始(スタート)し、メインSPUコードを実行して出力を生成し、そして、DMAによってその出力を転送することで終了(フィニッシュ)しなければならない。図5の上側のチャートは、並列に、すなわち時間的にある程度重複しながら起こるSPUのオペレーションを図示する。中央のチャートはコールバックが開始される順序を示し、下側のチャートはタスク実行によって異なるタスクが時間的に重複することを示している。中央のチャートからわかるように、たとえば最初の二つのタスクに対するプリフェッチコマンド(prefetch1,prefetch2)が最初に呼び出され、その後、第1タスクに対するスタートコマンド(start1)が呼び出され、prefetch3,start2,main1と続く。上下のチャートを見ればわかるように、キューの中央付近で最大のオーバーラップが生じており、それは、異なるタスクのprefetch,start,mainおよびfinishのコールバックの部分が並列に走っているときである。
複数のタスクの異なる部分が同じSPU上で並列に走ることができる場合、タスクの同期を取れることが多くの場合、重要になる。そのようなタスク同期は、一つのタスクセットを、次のタスクセットが始まる前に完了しなければならない場合に有益である。たとえば、第1のタスクセットからの出力データが次のタスクセットに対する入力データとして用いられる場合などである。そのような同期を容易にするために、バリアコマンドをタスクキューに挿入することで、前者のタスクが完了してはじめて次のタスクが始まることを保証することができる。
図6Aはバリアコマンドを用いてタスク同期を行った例を図示する。この場合、第1タスクセット601は、第2タスクセット603に対する入力604として用いられるべき出力602を生成する。出力602はデータ606としてたとえばメインメモリに格納される。バリアコマンド608が二つのタスクセット601、603の間に設置される。バリアコマンド608は第1タスクセット601または第2タスクセット603のいずれかにおけるタスクであってもよい。バリアコマンド608は、第1タスクセット601からのタスクが完了する前に、SPUSが第2タスクセット603におけるタスクについて作業することを防ぐ。
複数のタスクセットが並列に実行される可能性がある。そのような場合、互いに同期されなけれならないタスクとそうでないタスクをバリアコマンドが区別することが重要である。この区別を容易にするために、同期が必要なタスクセットを特定するタグマスクによってバリアコマンドを特徴づけてもよい。バリアコマンドはタグマスクに含まれるタスクだけを同期させる。たとえば、バリアマスク0xFFFFFFFはすべてのタスクに影響するが、バリアマスク1<<2(0x4)はタグの値が2であるタスクだけに影響する。図6Bは、複数のタスクセットを選択的に同期づけるためにバリアタグマスクを使用する例を図示する。図6Aと同様、第1タスクセット601は、第2タスクセット603に対する入力として用いられるデータ606を生成する。しかし、他のタスクセット611、612は第1タスクセット601と並列に処理されている。この例では、第1タスクセット601の出力はタスクセット612に対する入力と同期する必要はない。そのため、第1および第2タスクセット601、602間のバリアコマンド608は、第1タスクセット601に限定して影響するタグマスクをもつ。第1タスクセット601が完了するまでは、SPUは第2タスクセット602のタスクについて作業することはできない。しかし、SPUはバリアコマンド608のタグマスクで指定されていない他のタスクセットについては作業することができる。
実施の形態においてコードおよび/またはデータのアフィニティ(親和性)を利用すれば、高性能処理を達成することができる。ここでいう「コードアフィニティ」とは、SPUが特定のタスクに関するプログラムコードを自分のローカルストアに既にロードした状況のことである。SPUが特定のタスクとコードアフィニティをもつ場合、SPUはそのタスクに対して必要なデータをDMA転送しさえすればよい。同様に、「データアフィニティ」とは、SPUが特定のタスクに関するデータを自分のローカルストアに既にロードした状況をいう。SPUが特定のタスクとデータアフィニティをもつ場合、SPUは必要なコードをDMA転送しさえすればよい。SPUカーネルが自分の現在のSPUコードと合致するタスクを選ぶなら、タスクの処理はより効率良くなされる。これはコード切り替えの発生を減らす。SPUのローカルストアにいくつかのタイプ1のプログラムをキャッシュし、必要に応じてアクセスすることも可能であることに注意されたい。そのような場合は、コードアフィニティはあまり重要ではない。
図7Aはコードアフィニティの利用を図示する。あるコード701があるSPUのローカルストア702にロードされる。メインメモリ704は複数のタスク定義をもつタスクキュー706を含む。SPUはタスクキュー706のある部分707をローカルストア702にロードする。タスクキュー706は、SPUの現在のコード701を要求するタスク708に対する定義と、SPUの現在のコード701を要求しない他のタスク710に対する定義とを含む(これらは図7で異なる網掛けで示した)。STMカーネル(図示しない)は現在のプログラム701とコードアフィニティ(親和性)をもつタスク708を選択し、そうでないタスク710はスキップする。カーネルは、スキップされたタスク710をメインメモリ706にDMA転送して戻すようにSPUに命令する。その結果、タスクキュー706は連続性を維持する。その後、SPUはコード701を変更することなく、選択されたタスク708を処理することができる。この処理の間、タスクキューのアトミックミューテックスはロックされていることに注意する。
どんなタスクも現在のコードに合致しないときもある。そのような場合、SPUはプログラムコードを切り替えることができる。これは図7Bに図示されている。タスクキュー706の当該部分705は、現在のコード701とコードアフィニティ(親和性)を有していないタスク710を含む。カーネル712は古いコード701を解放し、新しいコード703用の空間をローカルストア702内に割り当てる。カーネル712はメインメモリ704から新しいコード703のELFイメージをDMA転送する。
本発明の実施の形態では、あるSPU104がタスクを処理し終えたとき、与えられたタスクが完了したことをPPU102または他のSPU104に通知することがしばしば望ましい。このタスク完了通知を実行するためのいくつかの異なる方法がある。たとえば、任意のタスクまたはバリアにIDを割り当て、後からPPU102が完了したかどうかをポーリングすることができるようにする。タスクIDをもつバリアが、タスクグループがいつ完了するかを判定する。SPUタスクが完了時にPPU割り込みを送るように構成してもよい。
STMカーネルに関連するオーバーヘッドはタスク毎に約650SPUサイクルである。これには、共有タスクキュー116からタスク定義118を取り出すときの平均的なコストが含まれる。いったん定義が取り出されると、オーバーヘッドは典型的には最小化される。もっとも、アプリケーションが多くのバリアを使うならオーバーヘッドは増えることがある。
コード切り替えのコストは、切り替えられるコードのサイズに依存する。たとえば、200KBコードの切り替えには約48000サイクルを要し、100KBコードの切り替えには約27000サイクルを要し、50KBコードの切り替えには約17000サイクルを要し、1KBコードの切り替えには約2400サイクルを要する。
そのようなコード切り替えによるオーバーヘッドはまた、部分的にはタスクキューの構成とタスクキューに割り当たられたSPUの数に依存する。一般にキューにあるワーストケースのタスクは互い違いのコードを用いる。一般に、ワーストケースのシナリオは、異なるコードを要求するタスクがタスクキューにおいて入れ替わることである。もし一つだけのSPUがタスクキューに割り当てられるなら、オーバーヘッドは、200KBのコードの場合はタスク毎に約1840サイクル、100KBのコードの場合はタスク毎に約1520サイクル、50KBのコードの場合はタスク毎に約1360サイクル、1KBのコードの場合はタスク毎に約1200サイクルである。もし二つのSPUが同じタスクキューに割り当てられるなら、コード切り替えのオーバーヘッドは、200KB、100KB、50KB、1KBのコードに対してタスク毎に約820サイクルである。与えられたタスクキューに割り当てられるSPUの数が、そのタスクキューにおける異なるコードの数に等しい場合に、最適な性能が得られるようである。
図9A〜図9Cは、STMの使い方の例を示すCコードのリストである。図9A〜9Cに示した例はCコードで書かれているが、当業者であれば、アセンブリ言語を含め、どんなプログラミング言語でも使用できることが理解されよう。具体的には、図9Aのコードリストは初期化の例である。このコードにおいて、PPUはSTMのインスタンスを初期化する。STMカーネルが開始され、PPUプロセスはSPUプログラムイメージを追加する。図9Bはランタイムの(フレームベースの)グラフィックス処理の例である。この例では、新しいフレームが開始される。PPUはSPUタスクをキューおよびIDをもつバリアに追加する。PPUは、以前のフレームを描画するなど他の作業を行い、バリアで保護されたタスクが完了するまで出力データの処理をブロックする。その後、別のフレームに対して処理が繰り返される。
図9CはSPU上のSTMの使い方の例を示す。SPUプログラムコードは、prefetch(…)、start(…)、spumain(…)およびfinish(…)といった典型的なシーケンスが続く。上述のように、prefetch(…)コマンドはタスク定義のDMAを開始する。startコマンドによって、SPUはタスク定義のDMAの完了を待ち、タスク定義によって決められたように入力DMAを開始するようになる。spumain(…)コマンドによって、SPUは入力DMAが完了するのを待ち、入力データを処理し、出力のDMAを開始する。finish(…)コマンドはSPUに出力DMAを待つように命じる。
本発明の実施の形態の利点は、図10に示すように、比較できるほどのタスクキューをSPURSにもとづいて扱った場合とSTMにもとづいて扱った場合とで、タスク競合のオーバーヘッドの比較をすればわかる。この例では、SPURSにもとづくシステムは4つのタスクをもつタスクキューを操作した。SPURSにもとづくシステムはコード1002を用いてこのタスクキューを操作した。コードからわかるように、タスク切り替えには、イールド(yield)コールすなわち他のタスクが動作するチャンスを与えるオペレーションが必要である。グラフ1004は、イールドコール毎のSPURSサイクルの平均数という観点でSPURSにもとづくシステムの性能を示す。システムに関与するSPUの数が4から6に増えるにつれて、イールド毎のSPUサイクルの平均数はほぼ4倍になっている。
比較のため、STMにもとづくシステムは、STMにもとづくコード1006を用いて4つのSTM SPUプログラムを含むタスクキューを操作した。タスクキューは2つの異なるシナリオにしたがって構成された。ワーストケース(最悪の場合)のキュー1008では、4つのプログラムが交互に動作し、その結果、どんな二つの連続するタスクも同じコードを用いなかった。ベストケース(最良の場合)のキュー1010では、同じプログラムを要求するタスクはいつも一緒にグループ分けされた。グラフ1004は、ワーストケースのキュー1008の場合でさえ、STMにもとづくシステムは、SPURSにもとづくシステムが要求するイールドコール毎のサイクル数の1/3以下のサイクル数しか必要としない。ベストケースのキュー1010の場合であれば、STMにもとづくシステムは、10分の1以下のイールド毎のサイクル数しか必要としない。さらに、ベストケースとワーストケースのキューの両方について、イールドコール毎のサイクル数は比較的一定である。
上述のように動作する図1に示したタイプの並列処理ユニットは、図11に示したより大きなプロセッシングシステム1100の一部として実装されてもよい。システム1100は、セルプロセッサモジュール1101とメモリ1102(たとえば、RAM、DRAM、ROMのようなもの)を含む。さらに、プロセッシングシステム1100は複数のセルプロセッサモジュール1101を有してもよい。セルプロセッサモジュール1101は一般に一つ以上のプロセッサPPUと一つ以上のSPU(SPU1、SPU2、…、SPUN)を有する。SPUは上述のようにSPMMの制御下で動作するように構成されてもよい。プロセッサモジュール1101はメモリフローコントローラ(MFC)を有してもよい。セルプロセッサモジュール1101は、たとえば図1で示したタイプのセルプロセッサであってもよい。メモリ1102は上述のように構成されたデータとコードを含む。具体的には、メモリには、上述の一つ以上のタスクセット1104、タスクキュー1106、およびコードとデータ1108が含まれる。
システム1100には、周知の支援機能1110として、たとえば、入出力(I/O)エレメント1111、電源(P/S)1112、クロック(CLK)1113およびキャッシュ1114が含まれる。システム1100はオプションとして、プログラムおよび/またはデータを格納するためのディスクドライブ、CD−ROMドライブ、テープドライブなどのマスストレージデバイス1115が含まれる。コントローラはオプションとして、コントローラ1100とユーザ間の相互作用を容易にするためのディスプレイユニット1116やユーザインタフェースユニット1118を含んでもよい。ディスプレイユニット1116は、テキスト、数字、グラフィカルシンボルまたはイメージを表示するCRT(cathode ray tube)やフラットパネルスクリーンの形態を取ってもよい。ユーザインタフェース1118はキーボード、マウス、ジョイスティック、ライトペンその他のデバイスを含んでもよい。セルプロセッサモジュール1101、メモリ1102、およびシステム1100の他の構成要素は、図11に示すシステムバス1120を介して、信号(たとえばコードインストラクションやデータ)を互いにやりとりしてもよい。
ここでは、I/Oという用語は、システム1100や周辺デバイスへ/からデータを転送する任意のプログラム、オペレーションあるいはデバイスのことをいう。転送とは、一つのデバイスからの出力や別のデバイスへの入力のことである。周辺デバイスには、キーボードやマウスのような入力のみのデバイス、プリンタのような出力のみのデバイス、書き込み可能CD−ROMのような入力デバイスと出力デバイスのどちらにもなるデバイスが含まれる。「周辺デバイス」という用語は、マウス、キーボード、プリンタ、モニタ、外部Zipドライブ、スキャナなどの外部デバイスだけでなく、CD−ROMドライブ、CD−Rドライブ、内部モデムのような内部デバイスや、フラッシュメモリリーダ/ライタ、ハードドライブのような他の周辺機器を含む。
プロセッサモジュール1101は、メモリ1102に格納され、読み出され、プロセッサモジュール1101によって実行されるメインプログラム1103のデータとプログラムコードインストラクションに応じて、タスクキュー1106のタスクの性能を管理してもよい。プログラム403のコード部分は、アセンブリ、C++、JAVA(登録商標)あるいはその他の数多くの言語のような、数ある異なるプログラミング言語の任意の一つに適合するものであってもよい。プロセッサモジュール1101は汎用コンピュータを形成し、プログラムコード1103のようなプログラムを実行するときは、特定用途のコンピュータになる。プログラムコード1103はここではソフトウエアで実装され、汎用コンピュータ上で実行されるものとして記述したが、当業者であれば、タスク管理の方法は、特定用途向け集積回路(ASIC)や他のハードウエア回路のようなハードウエアを用いて実装してもよいことは理解されよう。このように、本発明の実施の形態は、全体あるいは一部が、ソフトウエア、ハードウエア、あるいはそれらの組み合わせで実装されてもよいことが理解されよう。ある実施の形態では、プログラムコード1103は、図2の方法200および/または図9A〜9Cのコードリストに共通する特徴をもつ方法を実行する、プロセッサ読み込み可能なインストラクションセットを含んでもよい。
本発明の実施の形態は、低いオーバーヘッドのコンテキストスイッチを提供し、並列のDMAとタスク実行を可能にし、コードアフィニティを用いて現在のSPUコードに合った新しいタスクを選択すし、DMAの使用を減らす。先行技術に対する本発明の実施の形態のこれらの利点は、表2に要約される。
Figure 2009510613
本発明の実施の形態は開発者に高性能で直観的なSPUプログラミングモデルを提供する。このプログラムモデルのおかげで、たくさんの異なるタスクが、SPURSやSPUスレッドほどにはコンテキストスイッチによるオーバーヘッドがなく、効率良く実行される。本発明の実施の形態は、アプリケーションコードを変更することなく、可変数のSPU上で動作可能なSPUタスク管理方法とシステムを提供する。本発明の実施の形態は、多くの短いタスクと多くの小さなSPUプログラムが必要であり、プログラムとタスクの間で共有されるデータが存在する状況において特に有益である。SPUコードキャッシングは性能を最適化するためにも有益である。本発明の実施の形態によるSPUタスク管理が有益である状況の例として、オーディオの符号化または復号がある。これには多くの異なるフィルタコードが必要であり、フィルタコードはSPUへ/SPUから動的にスワップされなければならない。各フィルタコードはRAMからの一つ以上のデータブロック上で作業する。これらをオーバーレイを用いて静的に定義することはできない場合がある。そのような場合、タスクのグループはツリーを形成する。ツリーの下の方のタスクからの出力は、ここで述べたように、後続のタスクに対する入力になりうる。
本発明の好ましい実施の形態を完全な形で説明してきたが、いろいろな代替物、変形、等価物を用いることができる。したがって、本発明の範囲は、上記の説明を参照して決められるものではなく、請求項により決められるべきであり、均等物の全範囲も含まれる。ここで述べた特徴はいずれも、好ましいかどうかを問わず、他の特徴と組み合わせてもよい。請求項において、明示的に断らない限り、各項目は1またはそれ以上の数量である。請求項において「〜のための手段」のような語句を用いて明示的に記載する場合を除いて、請求項がミーンズ・プラス・ファンクションの限定を含むものと解してはならない。
本発明の実施の形態に係るセルプロセッサの概略図である。 本発明の実施の形態に係るセルプロセッサのオペレーションを例示するフローチャートである。 本発明の実施の形態に係るセルプロセッサのオペレーションを例示する概略図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るSPUメモリ構成を示すブロック図である。 本発明の実施の形態に係るセルプロセッサSPUのマルチバッファリングオペレーションを例示するブロック図である。 本発明の実施の形態に係るバリアコマンドを用いたタスク同期を例示する概略図である。 本発明の実施の形態に係るタググループバリアの使用を例示する概略図である。 本発明の実施の形態に係るコードアフィニティを用いたSPUタスク管理を例示する概略図である。 本発明の実施の形態に係るコード切り替えを例示する概略図である。 本発明の実施の形態を実行するセルプロセッサコードのリストである。 本発明の実施の形態を実行するセルプロセッサコードのリストである。 本発明の実施の形態を実行するセルプロセッサコードのリストである。 本発明の実施の形態の利点を例示するSPU性能のグラフである。 本発明の実施の形態に係るデータ処理システムのブロック図である。

Claims (60)

  1. メインメモリ、1以上のパワープロセッサユニット(PPU)、1以上のシナジスティックプロセッシングユニット(SPU)を含み、各SPUはプロセッサとローカルメモリを含むセルプロセッサにおいて、1以上のSPUによって実行されるタスクを管理する方法であって、当該方法は、
    1以上のSPUで動作するSPUタスクマネージャ(STM)の制御下で、前記メインメモリに格納された1以上のタスク定義を選択されたSPUのローカルメモリに読み出すステップと、
    前記1以上のタスク定義に含まれる情報にもとづいて、前記タスク定義に関するコードおよび/またはデータをメインメモリから読み出し、前記選択されたSPUのローカルメモリにロードするステップと、
    前記選択されたSPUにおいて前記コードおよび/またはデータを用いて1以上のタスクを実行するステップとを含むことを特徴とする方法。
  2. 1以上のタスク定義を読み出すステップは、2以上のタスク定義を読み出すことを含む請求項1の方法。
  3. 1以上のタスク定義は、コード要求と前記コードが入ったメモリアドレスへのポインタを含む請求項1の方法。
  4. 前記コードおよび/またはデータは、前記ローカルストアにメモリスペースを静的に割り当てる位置独立コードによって特徴づけられた1以上のプログラムを含む請求項1の方法。
  5. 前記コードおよび/またはデータは、前記ローカルストアにメモリ空間を動的に割り当てるプログラムを含む請求項1の方法。
  6. 前記プログラムは位置独立コードではない請求項5の方法。
  7. 前記タスク定義は、前記選択されたSPUにロードすべき前記データおよび/またはコードのサイズを含む請求項1の方法。
  8. 前記タスク定義は入出力(I/O)ダイレクトメモリアクセス(DMA)に対して要求されるローカルストア空間の最大容量を含む請求項1の方法。
  9. 2以上のタスクがタスク定義および入出力(I/O)データに対するコンテキストバッファを共有する請求項1の方法。
  10. 前記1以上のタスクからの出力データを前記メインメモリまたは別のSPUのローカルストアに格納するステップをさらに含む請求項1の方法。
  11. 前記選択されたSPUで前記1以上のタスクを実行している間、別のタスク定義または他のコードおよび/またはデータをロードし、出力をメインメモリに格納するステップをさらに含む請求項1の方法。
  12. 前記1以上のタスク定義のそれぞれは優先度を含む請求項1の方法。
  13. 前記1以上のタスクは、1以上のタスクキューにまとめられる請求項1の方法。
  14. 高い優先度のタスクキューは低い優先度のタスクキューよりも前に処理される請求項13の方法。
  15. 前記1以上のタスクキューは循環式である請求項13の方法。
  16. 1以上のタスクを1以上のタスクキューに追加するために1以上のPPUを用いるステップをさらに含む請求項13の方法。
  17. 前記タスクキューの一つへのアクセスをアトミックミューテックスで制限するステップをさらに含む請求項13の方法。
  18. 前記アトミックミューテックスは128バイトのアトミックミューテックスである請求項17の方法。
  19. 前記アトミックミューテックスは、ロックする前記メインメモリの領域に関する情報を含む請求項17の方法。
  20. 前記アトミックミューテックスは前記タスクキューへのアクセスがロックされているかどうかに関する情報を含む請求項17の方法。
  21. 前記アトミックミューテックスは前記タスクキューの他のどのタスクが進行中であるかに関する情報を含む請求項17の方法。
  22. 前記アトミックミューテックスは前記タスクキューの進行中の他のタスクの位置に関する情報を含む請求項17の方法。
  23. アクセスを制限するステップは、前記キューのどのタスクが既に取り出されたかを他のSPUおよび/またはPPUに通知するカウンタをデクリメントまたはインクリメントするステップを含む請求項17の方法。
  24. 1以上の前記タスクキューは、1以上の以前のタスクが完了するまでは1以上の後続のタスクが始まらないことを保証するバリアコマンドを含む請求項13の方法。
  25. 前記メインメモリから前記1以上のタスク定義をロードするステップは、タスクキュー0のタスク定義から前記メインメモリ内の前記タスクのメモリアドレスを読み出すステップを含む請求項1の方法。
  26. 前記タスクの前記メモリアドレスはコードとデータの両方を含む請求項25の方法。
  27. 前記メインメモリから前記1以上のタスクをロードするステップは前記タスクに対する競合度をロードするステップを含む請求項1の方法。
  28. 前記1以上のタスクの競合を前記1以上のSPUの間でバランスするステップをさらに含む請求項1の方法。
  29. 前記メインメモリから前記1以上のタスクをロードするステップは、前記タスクに対する最大競合度および/または最小競合度をロードするステップを含む請求項1の方法。
  30. 前記1以上のタスクは1以上のタスクキューにまとめられ、当該方法は、アトミックな予約消失イベントを待つステップをさらに含む請求項1の方法。
  31. 1以上のタスクを実行するステップは、前記メインメモリのある位置から前記ローカルストアへデータをコピーし、コピーされたデータを前記ローカルストアから前記メインメモリの別の位置へ転送するステップを含む請求項1の方法。
  32. 1以上のタスク定義を読み出すステップは、単一のSPUで2以上のタスク定義を互いに並列に読み出すステップを含む請求項1の方法。
  33. 1以上のタスク定義を読み出すステップは、同一のSPUで別のタスクのためにデータを処理することと並列にタスク定義を読み出すステップを含む請求項1の方法。
  34. 1以上のタスク定義を読み出すステップは、同一のSPUで別のタスクのためにデータを処理することと並列に、かつ、さらに別のタスクからのデータを出力することと並列に、タスク定義を読み出すステップを含む請求項1の方法。
  35. 1以上のタスク定義を読み出すステップは、同一のSPUで別のタスクからのデータを出力することと並列にタスク定義を読み出すステップを含む請求項1の方法。
  36. 1以上のタスクを実行するステップは、あるSPUでタスクからのデータを処理することと並列に同一のSPUで別のタスクからのデータを出力するステップを含む請求項1の方法。
  37. 1以上のタスクを実行するステップは、第1タスクからのデータを処理することと並列に第2タスクからのデータを入力し、さらに並列に第3タスク用のタスク定義を読み出し、さらに並列に第4タスクのためにデータを出力するステップを含む請求項1の方法。
  38. データバスと、
    前記データバスに接続され、1以上のタスク定義を含むメインメモリと、
    前記データバスに接続された中央プロセッサと、
    前記データバスに接続され、それぞれがシナジスティックプロセッサユニット(SPU)とローカルストアを有する1以上のシナジスティックプロセッシングエレメント(SPE)と、
    1以上の前記SPU上で実行されるSPUタスクマネージャ(STM)とを含み、
    前記STMは前記SPUに、
    前記メインメモリに格納された1以上のタスク定義を選択されたSPUのローカルメモリに読み出し、
    1以上のタスク定義に含まれる情報にもとづいて、前記タスク定義に関するコードおよび/またはデータをメインメモリから読み出し、前記選択されたSPUのローカルメモリにロードするように命じるように構成されることを特徴とするセルプロセッサ。
  39. 1以上のタスク定義は、コード要求と前記コードが入ったメモリアドレスへのポインタを含む請求項38のプロセッサ。
  40. 各タスク定義は優先度の値を含む請求項38のプロセッサ。
  41. 各タスク定義は競合値を含む請求項38のプロセッサ。
  42. 各タスク定義は最大許容競合値を含む請求項38のプロセッサ。
  43. 各タスク定義は最小競合値を含む請求項38のプロセッサ。
  44. 各タスク定義はステートの値を含む請求項38のプロセッサ。
  45. 前記ワークキューの前記メモリアドレスはコードとデータの両方を含む請求項38のプロセッサ。
  46. 前記1以上のタスクは、1以上のタスクキューにまとめられる請求項38のプロセッサ。
  47. 前記STMは高い優先度のタスクキューを低い優先度のタスクキューよりも前に処理するために選択するように構成される請求項46のプロセッサ。
  48. 前記1以上のタスクキューは循環式である請求項46のプロセッサ。
  49. 前記タスクキューの一つへのアクセスはアトミックミューテックスで制限される請求項46のプロセッサ。
  50. 前記アトミックミューテックスは128バイトのアトミックミューテックスである請求項49のプロセッサ。
  51. 前記128バイトのアトミックミューテックスは、ロックステート用に4バイト、完了したタスクのカウント用に2バイト、および最大488タスクのステート情報が入る122バイトを含む請求項50のプロセッサ。
  52. 前記アトミックミューテックスは、ロックする前記メインメモリの領域に関する情報を含む請求項49のプロセッサ。
  53. 前記アトミックミューテックスは前記タスクキューへのアクセスがロックされているかどうかに関する情報を含む請求項49のプロセッサ。
  54. 前記アトミックミューテックスは前記タスクキューの他のどのタスクが進行中であるかに関する情報を含む請求項49のプロセッサ。
  55. 前記アトミックミューテックスは前記タスクキューの進行中の他のタスクの位置に関する情報を含む請求項49のプロセッサ。
  56. アクセス制限には、前記キューのどのタスクが既に取り出されたかを他のSPUおよび/またはPPUに通知するカウンタをデクリメントまたはインクリメントすることを含む請求項49のプロセッサ。
  57. 1以上の前記タスクキューは、1以上の以前のタスクが完了するまでは1以上の後続のタスクが始まらないことを保証するバリアコマンドを含む請求項46のプロセッサ。
  58. 前記コードおよび/またはデータは、前記メインメモリのある位置から前記ローカルストアへデータをコピーし、コピーされたデータを前記ローカルストアから前記メインメモリの別の位置へ転送するように構成されたコードを含む請求項38のプロセッサ。
  59. 1以上のパワープロセッサユニット(PPU)、1以上のシナジスティックプロセッシングエレメント(SPE)を含み、各SPEはシナジスティックプロセッサユニット(SPU)とローカルメモリを含むセルプロセッサにおいて、1以上のSPE上でコードとデータを管理する方法を実行するためのプロセッサ読み込み可能なインストラクションセットが具体化されたプロセッサ読み込み可能な媒体であって、
    当該方法は、
    1以上のSPUで動作するSPUタスクマネージャ(STM)の制御下で、前記メインメモリに格納された1以上のタスク定義を選択されたSPUのローカルメモリに読み出すステップと、
    前記1以上のタスク定義に含まれる情報にもとづいて、前記タスク定義に関するコードおよび/またはデータをメインメモリから読み出し、前記選択されたSPUのローカルメモリにロードするステップと、
    前記選択されたSPUにおいて前記コードおよび/またはデータを用いて1以上のタスクを実行するステップとを含むことを特徴とする媒体。
  60. データプロセッシングシステムであって、
    一つ以上のセルプロセッサを含み、
    各セルプロセッサは、メインメモリと、パワープロセッサユニット(PPU)と、1以上のシナジスティックプロセッシングユニット(SPU)とを含み、
    各SPUは、プロセッサとローカルメモリを有し、
    前記メモリ、前記PPU、前記SPUは互いにデータバスで結合されており、
    前記メインメモリおよび/または前記ローカルメモリは、1以上のSPU上でコードとデータを管理する方法を実行するためのプロセッサで実行可能なインストラクションを含み、
    当該方法は、
    1以上のSPUで動作するSPUタスクマネージャ(STM)の制御下で、前記メインメモリに格納された1以上のタスク定義を選択されたSPUのローカルメモリに読み出すステップと、
    前記1以上のタスク定義に含まれる情報にもとづいて、前記タスク定義に関するコードおよび/またはデータをメインメモリから読み出し、前記選択されたSPUのローカルメモリにロードするステップと、
    前記選択されたSPUにおいて前記コードおよび/またはデータを用いて1以上のタスクを実行するステップとを含むことを特徴とするデータプロセッシングシステム。
JP2008533495A 2005-09-27 2006-09-25 並列プロセッサのためのタスクマネージャ Active JP4712877B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/238,087 2005-09-27
US11/238,087 US8037474B2 (en) 2005-09-27 2005-09-27 Task manager with stored task definition having pointer to a memory address containing required code data related to the task for execution
PCT/US2006/037338 WO2007038457A1 (en) 2005-09-27 2006-09-25 Spu task manager for cell processor

Publications (2)

Publication Number Publication Date
JP2009510613A true JP2009510613A (ja) 2009-03-12
JP4712877B2 JP4712877B2 (ja) 2011-06-29

Family

ID=37671907

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008533495A Active JP4712877B2 (ja) 2005-09-27 2006-09-25 並列プロセッサのためのタスクマネージャ

Country Status (4)

Country Link
US (1) US8037474B2 (ja)
EP (2) EP2290543B1 (ja)
JP (1) JP4712877B2 (ja)
WO (1) WO2007038457A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014508982A (ja) * 2010-12-15 2014-04-10 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 異種処理デバイスの動的ワークパーティション
JP2017521796A (ja) * 2014-07-24 2017-08-03 アリフォンソ イニゲス, 動的に構成可能な先回りコプロセッシングセルを用いる並列処理のためのシステムおよび方法
WO2019159616A1 (ja) * 2018-02-16 2019-08-22 日立オートモティブシステムズ株式会社 プログラム実行制御方法および車両制御装置

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7346664B2 (en) * 2003-04-24 2008-03-18 Neopath Networks, Inc. Transparent file migration using namespace replication
US8539081B2 (en) * 2003-09-15 2013-09-17 Neopath Networks, Inc. Enabling proxy services using referral mechanisms
US8195627B2 (en) * 2004-04-23 2012-06-05 Neopath Networks, Inc. Storage policy monitoring for a storage network
US8190741B2 (en) * 2004-04-23 2012-05-29 Neopath Networks, Inc. Customizing a namespace in a decentralized storage environment
WO2006027639A1 (en) * 2004-09-09 2006-03-16 Pirelli Tyre S.P.A. Method for allowing a control of a vehicle provided with at least two wheels in case of puncture of a tyre
WO2007002855A2 (en) * 2005-06-29 2007-01-04 Neopath Networks, Inc. Parallel filesystem traversal for transparent mirroring of directories and files
US7522168B2 (en) * 2005-09-27 2009-04-21 Sony Computer Entertainment Inc. Cell processor task and data management
US7975269B2 (en) 2005-09-27 2011-07-05 Sony Computer Entertainment Inc. Parallel processor methods and apparatus
US8316220B2 (en) * 2005-09-27 2012-11-20 Sony Computer Entertainment Inc. Operating processors over a network
US7506123B1 (en) * 2005-09-27 2009-03-17 Sony Computer Entertainment Inc. Method and system for performing memory copy function on a cell processor
US7734827B2 (en) * 2005-09-27 2010-06-08 Sony Computer Entertainment, Inc. Operation of cell processors
US8131689B2 (en) * 2005-09-30 2012-03-06 Panagiotis Tsirigotis Accumulating access frequency and file attributes for supporting policy based storage management
US8595747B2 (en) * 2005-12-29 2013-11-26 Sony Computer Entertainment Inc. Efficient task scheduling by assigning fixed registers to scheduler
US7647483B2 (en) * 2007-02-20 2010-01-12 Sony Computer Entertainment Inc. Multi-threaded parallel processor methods and apparatus
GB0703974D0 (en) * 2007-03-01 2007-04-11 Sony Comp Entertainment Europe Entertainment device
US8589943B2 (en) * 2007-08-15 2013-11-19 Sony Computer Entertainment Inc. Multi-threaded processing with reduced context switching
CN101373434B (zh) * 2007-08-22 2012-01-25 国际商业机器公司 在多处理器系统中快速加载和运行程序映像的方法和系统
WO2009029549A2 (en) * 2007-08-24 2009-03-05 Virtualmetrix, Inc. Method and apparatus for fine grain performance management of computer systems
US8387041B2 (en) * 2008-01-09 2013-02-26 International Business Machines Corporation Localized multi-element processor resource sharing among logical partitions
JP5067282B2 (ja) * 2008-06-27 2012-11-07 ソニー株式会社 物体検出制御装置、物体検出システム、物体検出制御方法およびプログラム
US8732716B2 (en) 2008-09-30 2014-05-20 International Business Machines Corporation Virtualization across physical partitions of a multi-core processor (MCP)
US8438404B2 (en) 2008-09-30 2013-05-07 International Business Machines Corporation Main processing element for delegating virtualized control threads controlling clock speed and power consumption to groups of sub-processing elements in a system such that a group of sub-processing elements can be designated as pseudo main processing element
US20100257529A1 (en) * 2009-04-06 2010-10-07 Christopher Wilkerson Efficient systems and methods for consuming and providing power
US8782653B2 (en) * 2010-03-26 2014-07-15 Virtualmetrix, Inc. Fine grain performance resource management of computer systems
US8677071B2 (en) * 2010-03-26 2014-03-18 Virtualmetrix, Inc. Control of processor cache memory occupancy
US10795722B2 (en) * 2011-11-09 2020-10-06 Nvidia Corporation Compute task state encapsulation
US9229847B1 (en) 2012-04-18 2016-01-05 Open Invention Network, Llc Memory sharing for buffered macro-pipelined data plane processing in multicore embedded systems
US9122401B2 (en) 2012-08-23 2015-09-01 Apple Inc. Efficient enforcement of command execution order in solid state drives
US9146777B2 (en) * 2013-01-25 2015-09-29 Swarm Technology Llc Parallel processing with solidarity cells by proactively retrieving from a task pool a matching task for the solidarity cell to process
US9158698B2 (en) 2013-03-15 2015-10-13 International Business Machines Corporation Dynamically removing entries from an executing queue
US9588813B1 (en) * 2013-06-07 2017-03-07 Amazon Technologies, Inc. Determining cost of service call
US9501321B1 (en) * 2014-01-24 2016-11-22 Amazon Technologies, Inc. Weighted service requests throttling
CN106537343A (zh) * 2014-07-24 2017-03-22 阿方索·伊尼格斯 使用动态可配置主动协同处理单元的并行处理的系统和方法
KR101638136B1 (ko) * 2015-05-14 2016-07-08 주식회사 티맥스 소프트 멀티 스레드 구조에서 작업 분배 시 스레드 간 락 경쟁을 최소화하는 방법 및 이를 사용한 장치
CN105373430A (zh) * 2015-10-13 2016-03-02 惠州Tcl移动通信有限公司 一种动态分配编译机的系统及其方法
US10409560B1 (en) * 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs
US10949251B2 (en) 2016-04-01 2021-03-16 Intel Corporation System and method to accelerate reduce operations in graphics processor
US10552212B2 (en) * 2016-11-28 2020-02-04 Arm Limited Data processing
KR102442921B1 (ko) * 2017-12-11 2022-09-13 삼성전자주식회사 디지털 시그널 프로세서(dsp)의 태스크 관리 효율을 높일 수 있는 전자 장치
US11487573B2 (en) * 2018-05-08 2022-11-01 Thomson Reuters Enterprise Centre Gmbh Systems and method for automating security workflows in a distributed system using encrypted task requests

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04123234A (ja) * 1990-09-14 1992-04-23 Hitachi Ltd マルチプロセッサのプロセススケジューリング方式及びメモリ管理方式
JPH05216844A (ja) * 1991-07-17 1993-08-27 Internatl Business Mach Corp <Ibm> マルチプロセッサデータ処理システムにおける改良されたタスク分散のための方法および装置
WO1997006484A1 (en) * 1995-08-08 1997-02-20 Novell, Inc. Method and apparatus for strong affinity multiprocessor scheduling
JPH1055284A (ja) * 1996-05-06 1998-02-24 Sun Microsyst Inc スレッドをスケジュールする方法及びそのシステム
US6665699B1 (en) * 1999-09-23 2003-12-16 Bull Hn Information Systems Inc. Method and data processing system providing processor affinity dispatching
JP2005513587A (ja) * 2001-05-10 2005-05-12 オラクル・インターナショナル・コーポレイション マルチポリシーリソーススケジューリングのための方法およびシステム
JP2005235228A (ja) * 2004-02-20 2005-09-02 Sony Computer Entertainment Inc マルチプロセッサシステムにおけるタスク管理方法および装置
JP2005235229A (ja) * 2004-02-20 2005-09-02 Sony Computer Entertainment Inc マルチプロセッサシステムにおけるプロセッサタスクの移動方法および装置

Family Cites Families (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3496551A (en) 1967-07-13 1970-02-17 Ibm Task selection in a multi-processor computing system
US3596257A (en) * 1969-09-17 1971-07-27 Burroughs Corp Method and apparatus for allocating small memory spaces to a computer program
US5047923A (en) * 1987-08-21 1991-09-10 Siemens Aktiengesellschaft Modularly structured digital communication system for interconnecting terminal equipment and public networks
JPH01258135A (ja) 1988-04-08 1989-10-16 Nec Corp トランザクション実行制御方式
US5185694A (en) 1989-06-26 1993-02-09 Motorola, Inc. Data processing system utilizes block move instruction for burst transferring blocks of data entries where width of data blocks varies
US5136712A (en) * 1989-06-29 1992-08-04 Digital Equipment Corporation Temporary object handling system and method in an object based computer operating system
EP0416767A3 (en) * 1989-09-08 1992-04-29 Digital Equipment Corporation Position independent code location system
US5109512A (en) * 1990-05-31 1992-04-28 International Business Machines Corporation Process for dispatching tasks among multiple information processors
US5452452A (en) 1990-06-11 1995-09-19 Cray Research, Inc. System having integrated dispatcher for self scheduling processors to execute multiple types of processes
JP2809962B2 (ja) * 1993-03-02 1998-10-15 株式会社東芝 資源管理方式
US5528513A (en) 1993-11-04 1996-06-18 Digital Equipment Corp. Scheduling and admission control policy for a continuous media server
US5745778A (en) 1994-01-26 1998-04-28 Data General Corporation Apparatus and method for improved CPU affinity in a multiprocessor system
US5794017A (en) 1995-02-06 1998-08-11 International Business Machines Corporation Method and system of updating graphics memory in a graphics display system through multiple address transferring of pixel data
US5832262A (en) 1995-09-14 1998-11-03 Lockheed Martin Corporation Realtime hardware scheduler utilizing processor message passing and queue management cells
US6341324B1 (en) 1995-10-06 2002-01-22 Lsi Logic Corporation Exception processing in superscalar microprocessor
US5978843A (en) 1995-12-06 1999-11-02 Industrial Technology Research Institute Scalable architecture for media-on-demand servers
CA2249386C (en) 1996-03-19 2004-06-01 Massachusetts Institute Of Technology Computer system and computer implemented process for representing software system descriptions and for generating executable computer programs and computer system configurations from software system descriptions
US6144986A (en) 1997-03-27 2000-11-07 Cybersales, Inc. System for sorting in a multiprocessor environment
US6003112A (en) 1997-06-30 1999-12-14 Intel Corporation Memory controller and method for clearing or copying memory utilizing register files to store address information
US6378072B1 (en) 1998-02-03 2002-04-23 Compaq Computer Corporation Cryptographic system
US6295598B1 (en) * 1998-06-30 2001-09-25 Src Computers, Inc. Split directory-based cache coherency technique for a multi-processor computer system
US6289369B1 (en) 1998-08-25 2001-09-11 International Business Machines Corporation Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system
JP3993342B2 (ja) 1999-06-24 2007-10-17 株式会社日立製作所 電子計算機における処理の中断/再開方法
US6463457B1 (en) 1999-08-26 2002-10-08 Parabon Computation, Inc. System and method for the establishment and the utilization of networked idle computational processing power
DE60033615T2 (de) 1999-10-21 2007-10-31 International Business Machines Corp. Verfahren und System, um das Verteilen von IP-Datagrammen auf mehrere Server gemäß einer definierten Strategie zu erzwingen
GB2394336B (en) 1999-11-19 2004-09-08 Gen Dynamics Decisions Systems Method of allocating memory
US7058750B1 (en) 2000-05-10 2006-06-06 Intel Corporation Scalable distributed memory and I/O multiprocessor system
US7565651B1 (en) * 2000-05-25 2009-07-21 Oracle International Corporation Parallel task scheduling system for computers
US6981260B2 (en) * 2000-05-25 2005-12-27 International Business Machines Corporation Apparatus for minimizing lock contention in a multiple processor system with multiple run queues when determining the threads priorities
US20030154284A1 (en) * 2000-05-31 2003-08-14 James Bernardin Distributed data propagator
JP2002007364A (ja) 2000-06-22 2002-01-11 Fujitsu Ltd 並列計算機システムのジョブスケジューリングを行うスケジューリング装置
US6986052B1 (en) 2000-06-30 2006-01-10 Intel Corporation Method and apparatus for secure execution using a secure memory partition
US6502170B2 (en) 2000-12-15 2002-12-31 Intel Corporation Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes
US6526491B2 (en) * 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US7233998B2 (en) 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US6738378B2 (en) 2001-08-22 2004-05-18 Pluris, Inc. Method and apparatus for intelligent sorting and process determination of data packets destined to a central processing unit of a router or server on a data packet network
US7127477B2 (en) 2001-11-06 2006-10-24 Everyware Solutions Inc. Method and system for access to automatically synchronized remote files
CN1322385C (zh) 2002-08-13 2007-06-20 诺基亚有限公司 用于提供数据安全性的电路系统和方法
US7089547B2 (en) 2002-09-13 2006-08-08 International Business Machines Corporation Firmware updating
US7039736B2 (en) 2003-01-15 2006-05-02 Hewlett-Packard Development Company, L.P. Systems and methods for accessing bus-mastered system resources
JP3848268B2 (ja) 2003-02-14 2006-11-22 株式会社東芝 計算機システム、計算機装置、計算機システムにおけるデータアクセス方法及びプログラム
JP2004287801A (ja) 2003-03-20 2004-10-14 Sony Computer Entertainment Inc 情報処理システム、情報処理装置、分散情報処理方法及びコンピュータプログラム
JP2004320174A (ja) 2003-04-11 2004-11-11 Matsushita Electric Ind Co Ltd 認証システム、認証装置、認証方法
US20050022173A1 (en) * 2003-05-30 2005-01-27 Codito Technologies Private Limited Method and system for allocation of special purpose computing resources in a multiprocessor system
US7236738B2 (en) 2003-08-01 2007-06-26 Pathfire, Inc. Multicast control systems and methods for dynamic, adaptive time, bandwidth,frequency, and satellite allocations
US7516456B2 (en) * 2003-09-25 2009-04-07 International Business Machines Corporation Asymmetric heterogeneous multi-threaded operating system
US7478390B2 (en) * 2003-09-25 2009-01-13 International Business Machines Corporation Task queue management of virtual devices using a plurality of processors
US7236998B2 (en) 2003-09-25 2007-06-26 International Business Machines Corporation System and method for solving a large system of dense linear equations
US7523157B2 (en) 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
US7321958B2 (en) 2003-10-30 2008-01-22 International Business Machines Corporation System and method for sharing memory by heterogeneous processors
US8028292B2 (en) 2004-02-20 2011-09-27 Sony Computer Entertainment Inc. Processor task migration over a network in a multi-processor system
US7298377B2 (en) 2004-06-24 2007-11-20 International Business Machines Corporation System and method for cache optimized data formatting
US7304646B2 (en) 2004-08-19 2007-12-04 Sony Computer Entertainment Inc. Image data structure for direct memory access
US7522168B2 (en) 2005-09-27 2009-04-21 Sony Computer Entertainment Inc. Cell processor task and data management
US8141076B2 (en) 2005-09-27 2012-03-20 Sony Computer Entertainment Inc. Cell processor methods and apparatus
US7506123B1 (en) 2005-09-27 2009-03-17 Sony Computer Entertainment Inc. Method and system for performing memory copy function on a cell processor
US7734827B2 (en) 2005-09-27 2010-06-08 Sony Computer Entertainment, Inc. Operation of cell processors
US7975269B2 (en) 2005-09-27 2011-07-05 Sony Computer Entertainment Inc. Parallel processor methods and apparatus

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04123234A (ja) * 1990-09-14 1992-04-23 Hitachi Ltd マルチプロセッサのプロセススケジューリング方式及びメモリ管理方式
JPH05216844A (ja) * 1991-07-17 1993-08-27 Internatl Business Mach Corp <Ibm> マルチプロセッサデータ処理システムにおける改良されたタスク分散のための方法および装置
WO1997006484A1 (en) * 1995-08-08 1997-02-20 Novell, Inc. Method and apparatus for strong affinity multiprocessor scheduling
JPH1055284A (ja) * 1996-05-06 1998-02-24 Sun Microsyst Inc スレッドをスケジュールする方法及びそのシステム
US6665699B1 (en) * 1999-09-23 2003-12-16 Bull Hn Information Systems Inc. Method and data processing system providing processor affinity dispatching
JP2005513587A (ja) * 2001-05-10 2005-05-12 オラクル・インターナショナル・コーポレイション マルチポリシーリソーススケジューリングのための方法およびシステム
JP2005235228A (ja) * 2004-02-20 2005-09-02 Sony Computer Entertainment Inc マルチプロセッサシステムにおけるタスク管理方法および装置
JP2005235229A (ja) * 2004-02-20 2005-09-02 Sony Computer Entertainment Inc マルチプロセッサシステムにおけるプロセッサタスクの移動方法および装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014508982A (ja) * 2010-12-15 2014-04-10 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 異種処理デバイスの動的ワークパーティション
JP2017521796A (ja) * 2014-07-24 2017-08-03 アリフォンソ イニゲス, 動的に構成可能な先回りコプロセッシングセルを用いる並列処理のためのシステムおよび方法
WO2019159616A1 (ja) * 2018-02-16 2019-08-22 日立オートモティブシステムズ株式会社 プログラム実行制御方法および車両制御装置
JP2019144627A (ja) * 2018-02-16 2019-08-29 日立オートモティブシステムズ株式会社 プログラム実行制御方法および車両制御装置
JP7042105B2 (ja) 2018-02-16 2022-03-25 日立Astemo株式会社 プログラム実行制御方法および車両制御装置
US11645124B2 (en) 2018-02-16 2023-05-09 Hitachi Astemo, Ltd. Program execution control method and vehicle control device

Also Published As

Publication number Publication date
EP1934739A1 (en) 2008-06-25
WO2007038457A1 (en) 2007-04-05
EP2290543A2 (en) 2011-03-02
EP2290543A3 (en) 2012-06-06
US8037474B2 (en) 2011-10-11
JP4712877B2 (ja) 2011-06-29
US20070074207A1 (en) 2007-03-29
EP2290543B1 (en) 2018-12-26

Similar Documents

Publication Publication Date Title
JP4712877B2 (ja) 並列プロセッサのためのタスクマネージャ
JP4964243B2 (ja) プロセッサ方法と装置
JP4712876B2 (ja) 並列プロセッサ方法と装置
US7647483B2 (en) Multi-threaded parallel processor methods and apparatus
JP5939524B2 (ja) サブバッファオブジェクト
US9928109B2 (en) Method and system for processing nested stream events
US7962923B2 (en) System and method for generating a lock-free dual queue
JP5335743B2 (ja) タスクのスケジューリングを支援する装置
US9250979B2 (en) Asynchronous grace-period primitives for user-space applications
JP2004252983A (ja) コプロセッサの性能を強化するシステムおよび方法
JPH10240546A (ja) 実行時プログラム翻訳方法
US7890740B2 (en) Processor comprising a first and a second mode of operation and method of operating the same
US20130166887A1 (en) Data processing apparatus and data processing method
JP4631442B2 (ja) プロセッサ
Gaster et al. HSA Queuing Model

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101116

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20101126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110131

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110131

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110323

R150 Certificate of patent or registration of utility model

Ref document number: 4712877

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

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