JP4130465B2 - メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術 - Google Patents

メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術 Download PDF

Info

Publication number
JP4130465B2
JP4130465B2 JP2006325471A JP2006325471A JP4130465B2 JP 4130465 B2 JP4130465 B2 JP 4130465B2 JP 2006325471 A JP2006325471 A JP 2006325471A JP 2006325471 A JP2006325471 A JP 2006325471A JP 4130465 B2 JP4130465 B2 JP 4130465B2
Authority
JP
Japan
Prior art keywords
ppe
primitive
size
spe
partial data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006325471A
Other languages
English (en)
Other versions
JP2007157146A (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 JP2007157146A publication Critical patent/JP2007157146A/ja
Application granted granted Critical
Publication of JP4130465B2 publication Critical patent/JP4130465B2/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/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/52Indexing scheme relating to G06F9/52
    • G06F2209/521Atomic

Description

本出願は、その優先日と同時に出願され、本出願と譲受人が共通する米国特許出願「発明の名称:特定のSPEを使ったCELLプロセッサのアトミックなコンペア・アンド・スワップ処理(CELL PROCESSOR ATOMIC COMPARE AND SWAP USING DEDICATED SPE)、James E.Marr,John P.Bates」に関連し、関連出願の主題は、ここに引用により組み込まれる。
本実施例は、CELLプロセッサに関連し、より詳細には、CELLプロセッサのアトミック処理、に関する。
CELLプロセッサとは、並行処理可能なマイクロプロセッサの一種である。基本構成のCELLプロセッサには、1つのPPE(Power Processor Element)(「Processing Element」すなわち「PE」ともよばれる)と、複数のSPE(Synergistic Processing Elements)が含まれる。PPEとSPEは、EIB(Element Interconnect Bus)とよばれる内部高速バスによって接続される。CELLプロセッサは、携帯型デバイスからメインフレームまでのさまざまなアプリケーションについて対応可能に設計されている。
CELLプロセッサは、通常、1つのPPEと最高8つのSPEを持つ。通常、各SPEは、単一チップであるか、メインプロセッサ(main processor)や補助プロセッサ(co-processor)を含む単一チップの一部である。各SPEは、通常、SPU(Synergistic Processor Unit)とローカルストア(LS:Local store)を含む。PPEは、通常、PPU(Power Processor Unit)と1以上のキャッシュを含む。全てのSPEとPPEは、バスなどを介してメインメモリにアクセスできる。SPEは、PPEにて実行されるプログラムと連携して複数の処理を並列実行できる。SPEとPPEにおける並列処理の調整のために、アトミックな命令を実装することが多い。アトミック命令とは、SPUやPPUが単一操作にて(しばしば「アトミック」として参照されるアドレスである)メモリアドレスへの読み書きを実行し、その間は他のプロセッサの「アトミック」へのアクセスを禁じるような命令である。アトミック命令とは、相互排他的な(ミューテックス(mutex:mutual exclusion))「ロック(locked)」命令か「ロックフリー(lock-free)」命令である。ミューテックス処理では、プロセッサがアトミックをロックすると、ロックが解除されるまで他のプロセッサはアトミックへの書き込みができなくなる。「ロックフリー」処理では、1度に1つのプロセッサだけがアトミックアドレスに書き込み可能であり、他のプロセッサはアトミックに書き込まれたところに上書きできる。ロックフリーのアトミック命令は、「予約(resservation)」命令を使用する。予約命令は、予約を行ったプロセッサに対して、予約後にアトミックが上書きされたかどうかを通知する。
CELLプロセッサでアトミック命令を実行するときに問題となるのは、PPUとSPUの間でアトミック命令のための予約サイズが違うことである。アトミック命令のサイズの違いは、PPUとSPUの間におけるメモリアクセス能力のサイズ違いに起因する。PPUのメモリアクセスは、一般的には、PPUコアのレジスタサイズにより制約される。SPUのアトミック処理のサイズは、CELLプロセッサ・アーキテクチャによって定義されるものではない。SPUはメモリ・フロー・コントローラ(MFC:memory flow controller)を介してメインメモリにアクセスできる。MFCは、PPUコアのレジスタサイズよりもはるかに大きなサイズにてデータ転送できる。あるCELLプロセッサの実装においては、SPU用のMFCは128バイトの大きさ(chunk)でメインメモリにデータ入出力転送するが、PPUは8バイトの大きさ(chunk)(あるいはそれ以下)でしかデータ転送できない。単一操作(single operation)あたりのPPUの最大メモリ転送サイズは、PPUのレジスタ・セットのサイズによって決まる。PPUのレジスタの長さは8バイトである。1バイトは8ビットなので64ビットサイズとなる。MFCはSPUのアトミック・サイズを設定する。SPUのローカルストアは、16バイト、すなわち、128ビットレジスタのかたちで形成される。SPUのローカルストアのレジスタは、メインメモリのアドレスとは結びついていない。SPUは、MFCを介してメモリとアクセスする。MFCは128バイトの大きさ(chunk)で動作する。MFCは、SPUのアトミック操作と非アトミック操作の両方についてのDMA処理に対応する。あるCELLの実装では、SPUの全てのアトミック命令は128バイトとなる。しかし、MFCが扱う非アトミック命令のサイズは1バイトから16キロバイトの範囲にわたる。そこで、SPUは予約付き読み出し(read with reservation)を実行し、128バイト分をローカルストアにコピーする。予約単位のサイズは任意である。アトミック・アクセスのサイズよりも大きなサイズであれば、論理的には正しく動作するであろう。
SPUが大容量のデータをアトミックに扱えることはとても強力であるが、PPUが1度に8バイトしかアトミックに扱えないことは不自由となりうる。アトミック予約サイズの違いは、ロックフリー・アルゴリズムの特徴を制限してしまう可能性がある。連結リストは、ミューテックスを使わなくても、ロックフリー・アルゴリズムで扱うことができる。しかし、もっと大きなアトミックを扱えれば、整数型よりも大きなサイズの型を一度の操作でアトミックに更新できるので、ロックフリー・アルゴリズムをもっと複雑な操作にも応用できる。
したがって、PPEとSPEが異なるサイズのレジスタ・ラインを持つCELLプロセッサにおいて、アトミックな命令を実行するための技術、が必要である。
上記課題を解決するために、本発明のある態様では、異なるサイズのレジスタ・ラインで動作するPPE(Power Processor Element)とSPE(Synergistic Processor Element)を含む2以上のプロセッサおよびメインメモリを備えるプロセッサ・システムにおいて、アトミック処理を実行するための方法を開示する。プリミティブ(Primitive)が保持されているメインメモリのアドレスは、パリティ・バイトと2以上の部分データ(portion)に分割される。「パリティ・バイト」は1ビット以上のサイズとなる。パリティ・バイト値は、2以上の部分データのうちのどれが有効部(valid portion)でどれが無効部(invalid portion)かを示す。プリミティブのメモリ・サイズは、PPEの最大メモリ転送サイズよりも大きく、SPEの最大メモリ転送サイズ以下となっている。
SPEは、パリティ・バイト値と有効部を予約付き読み出ししてプリミティブを更新できる。SPEは有効部を更新する。条件付きで、SPEはパリティ・バイト値を変更せずに書き戻し、更新済の有効部をプリミティブのアドレスに記録する。更新済の有効部をプリミティブのアドレスに記録するには、予約が失効していないことが条件となる。予約が失効していたら、条件付き書き込みが成功するまで、SPEは「予約付き読み出し」、「更新」、「条件付き書き込み」を繰り返してもよい。
PPEはパリティ・バイトを予約付き読み出しして、無効部の1以上の小区分(subsection)に書き込むことにより、プリミティブを更新してもよい。この小区分のサイズは、PPEが単一のメモリ転送操作にて更新可能なサイズである。PPEは、パリティ・バイトに新しい値を条件付き書き込みできる。条件付き書き込みに成功すると、パリティ・バイトの値は新しい値に変更され、無効部は有効部に反転する。
PPEは、パリティ・バイトの初期値を予約付き読み出しし、無効部の1以上の小区分を連続的に読み出すことにより、プリミティブの値を読み出してもよい。小区分は、PPEが単一のメモリ転送操作にて更新可能なサイズの区分である。PPEは、パリティ・バイトにPPEの初期値を条件付き書き込みできる。
本発明の教示するところは、添付図面とあわせて以下の詳細な説明を考慮することにより容易に理解されるでろう。
以下の記述においては、例示のために多くの特定的な詳細を含むけれども、本発明の範囲内において、以下の詳細について多くの変形や変更が可能であることは、当業者には理解されるところである。したがって、下記に示す本発明の実施例は、請求項に記載の発明の一般性を失わせるものでも制約を設けるものでもない。
制約的な意味ではない設例として、図1は、CBEA(CELLブロードバンドエンジン・アーキテクチャ:Cell Broadband engine architecture)として知られるアーキテクチャ準拠のCELLプロセッサ100を示している。同図設例に示すようにCELLプロセッサは、PPEの複数個の集合(PPEグループ)と、SPEの複数個の集合(SPEグループ)を備えることができる。あるいは、CELLプロセッサは、単一のSPEと単一のPPEにより、単一のSPEグループと単一のPPEグループだけを備えてもよい。グループ内の各ユニットは、ハードウェア資源を共有できる。ただし、ソフトウェアからは、SPEとPPEは独立した要素として見えなければならない。
図1に示す例では、CELLプロセッサ100は、SG−0、・・・、SG−nといった多数のSPEグループと、PG−0、・・・、PG−pといった多数のPPEグループを含む。各SPEグループは、SPE0、・・・、SPEgといった多数のSPEを含む。また、CELLプロセッサ100は、メインメモリ(MEM)と入出力機能(I/O)も含む。
各PPEグループは、PPE−0、・・・、PPE−gといった多数のPPEを含む。この例では、SPEグループは、単一のキャッシュSL1を共有する。キャッシュSL1は、ローカルストレージとメインストレージの間におけるDMA転送のためのファーストレベルキャッシュである。グループ内の各PPEは、それぞれ専用のファーストレベル(内部)キャッシュL1を持つ。加えて、グループ内のPPEは、単一のセカンドレベル(外部)キャッシュL2を共有する。図1では、SPEとPPEのためのキャッシュが示されているが、一般的なCELLプロセッサ、特にCBEA準拠プロセッサにとってこれは必須の構成ではない。
要素接続バスEIBは、上記に示したさまざまなコンポーネントを接続する。各SPEグループにおけるSPEと各PPEグループにおけるPPEは、バス・インタフェース・ユニットBIUを介して、EIBにアクセスできる。CELLプロセッサ100は、通常、プロセッサ内に2つのコントローラを含む。1つは、EIBとメインメモリMEMの間のデータの流れを制御するメモリ・インタフェース・コントローラMICである。もう一つは、I/OとEIBの間のデータの流れを制御するバス・インタフェース・コントローラBICである。MIC、BIC、BIU、EIBについての実装はさまざまであるが、各実装に応じた機能や回路については当業者にとっては既知のものである。
各SPEは、SPU(SPU0、・・・、SPUg)を備える。SPEグループにおける各SPUは、専用のローカルストレージ領域LSと専用のメモリ・フロー・コントローラMFCを備える。MFCは、メモリ管理ユニットMMUと対応づけられる。MMUは、メモリ保護やアクセス許可に関する情報の保持および処理を行う。
PPEは、キャッシュ付きの64ビットのパワーPC・プロセッサ・ユニット(PPU)である。CBEA準拠システムでは、PPEは、ベクトル・マルチメディア・拡張ユニット(vector multimedia extension unit)を内蔵する。PPEは汎用処理用ユニットであり、(メモリ保護テーブルのような)システム管理資源にアクセスできる。CBEA定義のハードウェア資源は、PPEから見えるように物理アドレスに明示的にマップされる。それゆえ、いずれのPPEも、適切かつ有効なアドレス値により、どんなリソースでも直接アドレスできる。PPEの主要機能は、システム内におけるSPEタスクの割り当てと管理である。
SPEは、PPEに比べれば計算ユニットとしては複雑ではない。SPEにはシステム管理機能がないからである。SPEは、SIMD(single instruction,multiple data)による処理機能を備え、割り当てられたタスクを実行するために必要なデータ転送を(PPEによってセットアップされたアクセス属性にしたがって)開始する。SPUの目的は、計算ユニットのいっそうの高密度集積を要求し、所与の命令セットを効果的に実行できるようなアプリケーションを実現とすることである。システムにおいて、PPEに管理されるべきSPUの数は、さまざまなアプリケーションについてコスト的に効率的な処理を実現できるように決められる。SPUは、新たな命令セットアーキテクチャを実装する。
MFCコンポーネントは、本質的にはデータ転送エンジンである。MFCは、CELLプロセッサのメインストレージとSPEのローカルストレージの間におけるデータの転送、保護、同期に関する主要機能を担う。MFCコマンドは、転送の実行を示す。アーキテクチャ上におけるMFCの最重要目的は、できるかぎり高速・正確にデータ転送を実行し、CELLプロセッサの全体としてのスループットを最大化することである。データ転送用コマンドは、MFC・DMAコマンドとして参照される。これらのコマンドが変換されて、ローカルストレージ領域とメインストレージ領域の間のDMA転送となる。
通常、各MFCは、同時に複数のDMA転送をサポートし、複数のMFCコマンドを保持・処理できる。このような機能を実現するため、MFCは、MFCコマンドキューを保持・処理する。MFCは、複数個の転送要求とキューに投入したり、それらを同時発行することもできる。各MFCは、対応するSPUのためのキュー(MFC・SPU・コマンドキュー)と、他のプロセッサやデバイスのためのキュー(MFC・プロキシ・コマンドキュー)を備える。論理的には、MFCキューの集合は、常に、CELLプロセッサ内の各SPUに対応づけられている。しかし、アーキテクチャ実装によっては、SPUグループのように複数のSPU間で単一の物理的なMFCを共有することもできる。このような場合にも、ソフトウェアからは、すべてのMFCに関連する装置がSPUごとに別々にあるように見えなければならない。各MFC・DMA・データ転送要求コマンドは、ローカルストレージのアドレス(LSA:local strage address)と有効アドレス(EA:effective address)の両方を含む。ローカルストレージアドレスは、該当SPUのローカルストレージ領域だけを直接アドレスできる。有効アドレスは、もう少し一般的に応用できる。実アドレス空間にエイリアス(別名:aliase)がなされているときには(すなわち、MFC-SR1[D]に'1'がセットされるとき)、全SPUのローカルストレージ領域も含めて、メインストレージを参照できるからである。
MFCは2種類のインタフェースを提供する。1つは、SPU用であり、もう1つは、プロセスグループ内における他のプロセッサやデバイス全てのためである。SPUは、MFC制御用にチャネルインタフェース(channel interface)を使う。この場合、SPUで実行されるコードは、当該SPU用のMFC・SPU・コマンドキューにだけアクセスできる。他プロセッサやデバイスは、メモリマップされたレジスタにより、MFCを制御できる。システム内のプロセッサやデバイスは、MFCを制御し、SPUに代わってMFC・プロキシ・要求コマンドを発行できる。MFCは、また、帯域予約やデータ同期もサポートする。SPU間、および/または、SPUとPPU間、SPEとPPE間の通信用の装置には、シグナルイベントと対応づけられるシグナル通知レジスタが含まれる。通常、PPEとSPEは、PPEがSPEへメッセージを転送するルーターの役割を担うスター型トポロジーにて接続される。このようなトポロジーでは、SPE同士はダイレクトに通信しない。代わりに、各SPEや各PPEは、一方通行のシグナル通知レジスタを持ち、これは、メールボックスとして参照される。メールボックスは、SPEとホストOSの同期をとるために使うことができる。
IICコンポーネントは、PPEに対する割り込みの優先順位を管理する。IICの主目的は、プロセッサ内の他のコンポーネントからの割り込みを、メインシステムの割込コントローラを使わずに扱うことである。IICは、実際、セカンドレベルのコントローラである。CBEA準拠プロセッサに対する内部割り込み、あるいは、CBEA準拠プロセッサによるマルチプロセッサシステム内における割り込みの全てを扱うように想定されている。通常、システム割込コントローラは、CELLプロセッサに対する外部割り込みの全てに対応する。
CELLプロセッサシステムにおいては、ソフトウェアは、まず、外部のシステム割込コントローラからの割り込みがあったかを判定するために、しばしば、IICをチェックしなければならない。IICは、全てのI/Oデバイスからの割り込みの処理に関し、メインのシステム割込コントローラを代替するものではない。
CELLプロセッサには、2種類のストレージドメイン(storage domain:記憶領域)がある。ローカルストレージドメインとメインストレージドメインである。SPEのローカルストレージは、ローカルストレージドメイン内にある。他の装置やメモリは、全てメインストレージドメイン内にある。ローカルストレージは、記憶領域を1以上の分離領域から成り、各領域は特定のSPUと関連付けられる。各SPUは、(データのロードやストアといった操作も含めて)自己に関連するローカルストレージドメイン内の命令のみを実行可能である。ローカルストレージのエイリアスが有効化されていないときには、システム内の他のストレージを対象とするデータ転送要求は、常に、(各SPUの)ローカルストレージドメインとメインストレージドメインの間でデータを転送するためのMFC・DMAコマンドを発行することでしか実行できない。
SPUプログラムは、ローカルアドレスによりローカルストレージドメインを参照する。ただし、特権ソフトウェアは、MFC-SR1の第Dビットを「1」にセットすることによって、SPUのローカルストレージドメインをメインストレージドメインにエイリアスできる。各ローカルストレージ領域には、メインストレージドメイン内の実アドレスが割り当てられることになる(実アドレスは、システムメモリにおけるバイト単位アドレスかI/Oデバイスにおけるバイト単位アドレスのいずれかである。)。これにより、特権ソフトウェアは、アプリケーションの有効アドレス空間にローカルストレージ領域を割り当てることが可能となり、あるSPUのローカルストレージと別のSPUのローカルストレージの間のDMA転送が可能となる。
別プロセッサやデバイスは、メインストレージドメインへのアクセスにより、直接的に、ローカルストレージ領域をアクセス可能となる。このローカルストレージ領域は、メインストレージドメインによって示される実アドレス空間に対して、所定の変換方式にてマップされている有効アドレスやI/Oバスアドレスによって、メインストレージドメインとエイリアスされている。
メインストレージドメインとエイリアスされているローカルストレージ領域を使ったデータ転送では、キャッシュが禁じられる。このようなアクセスは、ローカルストレージドメインにおいて、SPUのローカルストレージへのアクセス(たとえば、SPUのロード、ストア、命令フェッチ)と一貫性を保てないからである。ローカルストレージ領域をメインストレージドメインの実アドレス空間とエイリアスさせることにより、メインストレージ領域へアクセスする他のプロセッサやデバイスは、ローカルストレージに直接アクセスすることができる。しかし、エイリアスされたローカルストレージは、キャッシュ禁止にて処理されなければならないので、PPEのロード命令やストア命令による大量のデータ転送ではパフォーマンスが悪くなる。ローカルストレージドメインとメインストレージドメインの間におけるデータ転送では、ストール(stall)を避けるためにMFC・DMA・コマンドを使用する。
CBEAにおけるメインストレージへのアドレッシングは、パワーPC・アーキテクチャにおいて定義されているアドレッシングと互換性がある。CBEAは、パワーPCアーキテクチャのコンセプトを基礎としつつも、MFCによるメインストレージへのアドレッシングにまで拡張されている。
SPUやその他のプロセッサ、デバイス上において実行されるアプリケーションプログラムは、メインメモリにアクセスするために有効アドレスを使う。有効アドレスは、PPEがロード、ストア、分岐、キャッシュ命令を実行したり、後続命令をフェッチするときに計算される。SPUのプログラムは、MFCコマンドのパラメータとして有効アドレスを示さねばならない。「PowerPC Architecture,Book3」の「overview of address translation」に記載されている処理方法により、有効アドレスから実アドレスへの変換がなされる。実アドレスとは、変換された有効アドレスによって参照されるメインストレージ上における位置である。メインストレージは、システム内の全てのPPE、MFC、I/Oデバイスによって共有される。このレベルのストレージに保持される情報の全ては、システム内の全プロセッサ、全デバイスから見ることができる。このストレージ領域は、構造的にはフラットであってもよいし、階層的なキャッシュ構造を備えてもよい。プログラムは、有効アドレスによってこのレベルのストレージを参照する。
システムのメインメモリは、通常、システムコンフィギュレーション(system configuration)、データ転送同期、メモリマップドI/O、I/Oサブシステムといった処理用の特殊ハードウェアレジスタやアレーと、汎用の不揮発性記憶媒体も含む。メインメモリには、さまざまな設定をすることができる。制約的な意味ではない設例として、表1は、CBEAとして知られる実装のCELLプロセッサについて、メインメモリにおけるアドレス空間のサイズを示す。
Figure 0004130465
CELLプロセッサ100は、プロセッサとシステム内においてクリティカル・リソース(critical resource)の管理機能を持ってもよい。CELLプロセッサの管理対象となるリソースは、TLB(translation lookaside buffers)とデータ、命令キャッシュである。これらのリソースは実装依存のテーブルによって制御される。
TLBやキャッシュを管理するためのテーブルはRMTとして参照され、各MMUと対応づけられる。このようなテーブルはオプショナルなものであるが、システムのボトルネックとなりうるクリティカル・リソースのためのテーブルは有用であることが多い。SPEグループは、DMA転送のためのファーストレベルキャッシュとなるSL1キャッシュをキャッシュ階層に含んでもよい。SL1キャッシュも、RMTを持ってもよい。
本実施例におけるメインメモリMEMには、SPEやPPEがロックフリー形式にてアトミックにアクセス可能なプリミティブ102が保持される。プリミティブ102は、2以上の部分データD1、D2、パリティ・バイトPを含み、更に、ユーティリティ・バイトUを含んでもよい。プリミティブ102は、SPEにおいて実行されるタスクについての情報(description)を示してもよい。この場合、プリミティブ102は、実行対象コードのメモリ位置やそのコードのパラメータを示してもよい。あるいは、プリミティブ102はアプリケーションの状態情報を示してもよい。ビデオゲームであれば、ゲームの変数(たとえば、プレーヤーの生命力)、仮想環境の情報(たとえば、ある岩オブジェクトの場所)、あるいは、音声処理情報といった情報などでもよい。プリミティブを操作するコード104、106は、1以上のSPEのローカルストア、1以上のPPEのL1キャッシュ、メインメモリMEMなどに保持される。後述するように、SPEとPPEでは命令(instruction)が多少違っている。このため、SPE用命令セットである第1セット104と、PPE用命令セットである第2セット106という2種類の命令体系が存在する。実装上は、第1セット104はSPEが必要とするときにSPEのローカルストアに転送され、第2セット106はPPEが必要とするときにL1キャッシュに転送されることになる。コード104、106は、メインメモリMEMにあるもっと大きなプログラム108を呼び出すためのサブルーチンコールやファンクションコールであってもよい。
コードセット104、106を実行することにより、SPEやPPEはアトミックにプリミティブ102にアクセスしてこれを更新する。どちらのコードセットもパリティ・バイトPに依存する。パリティ・バイトPは、部分データD1、D2のうちのどちらが有効部でどちらが無効部かを示す。有効部は関連情報を持ち、無効部は非関連情報を持つ。第1コード104の実行により、SPEは部分データとパリティ・バイトを読み出して有効部を更新できるが、パリティ・バイトPを変更することはできない。第2コード106の実行により、PPEは有効部を読み出したり、プリミティブ102の無効部を更新したり、パリティ・バイトPを変更して無効部を有効部に変更したりできる。
SPEとPPEのどちらもプリミティブ102にアクセスできるので、どちらのコードセット104、106も、「第1のプロセッサ(SPEまたはPPE)がプリミティブを読み出したあと、第1のプロセッサがプリミティブを更新する前に第2のプロセッサがプリミティブを更新した」という状況が発生したときに、PPEまたはSPEにそれを通知する。このために「予約付き読み出し」や「条件付き書き込み」のような既知の命令を使う。予約付き読み出しコマンドは、アドレスからデータをロードすると同時にそのアドレスに「予約」を設定する。この「予約」とは、予約がなされてからそこに値を書き込もうとするまでの間に、そのアドレスになんらかのデータをロードしようとした別のプロセッサがあることをプロセッサに通知することの予約である。このコマンドは、条件付き書き込みコマンドとの関連で使われることが多い。条件付き書き込みコマンドにおいて、プロセッサは、予約が失効していないことを条件として、そのアドレスへの書き込みを行う。予約失効は、予約されたデータアドレスが更新された可能性を示すが、実際に更新されたかどうかは明確にしていない。更新されたか否かを明確にするためには、(たとえば、予約付きで)そのアドレスを読み出し、現在の値と予約時にそのアドレスにあった値とを比較しなければならない。
条件付き書き込みと予約付き読み出しの処理方法を以下に示す。あるSPUがプリミティブ102に条件付き書き込みするとする。別のSPUがプリミティブ102に書き込みをしていなければ、この条件付き書き込みは成功する。第1のSPUが条件付き書き込みする前に第2のSPUがプリミティブ102を更新したとする。ここで第1のSPUが条件付き書き込みを実行しようとすると、予約が失効しているので条件付き書き込みは失敗し、プリミティブ102の値は更新されない。
CELLプロセッサの実装技術について更に詳述する。以下の内容は、本発明の実施例に関連したデータ構造と処理方法について説明するものである。以下の実施例は上記したアーキテクチャを持つCELLプロセッサについての実装を制約するものではない。とはいえ、以下の実施例は、多かれ少なかれ、SPEとPPEの両方についてのアトミック命令が直面し利用されうる環境としてのCELLアーキテクチャによる実装を示す。
図2は、本実施例に関して、PPEやSPEにより取り扱い可能なアトミック命令を実装するCELLプロセッサ200の一例を示す。このCELLプロセッサは、メインメモリ202と、単一のPPE204、8つのSPE206を備えている。ただし、CELLプロセッサには任意の数のSPEを設置できる。図2において、リング型のエレメント相互接続バス210により、メモリ、PPE、SPEは、互いに、また、I/Oデバイス208とも通信可能である。メモリ202は、上記したプリミティブ102と特徴において共通するプリミティブ203を保持する。メモリ202のプログラム209は、上記したプログラム108と特徴において共通する。少なくとも1つのSPE206のローカルストアにあるコード205は、上記したコード104と特徴において共通する。PPEはL1キャッシュに、上記したコード106と特徴が共通するコード207を含む。コード205、207は、SPEやPPEからアクセスするために、必要に応じてメモリ202に保持されてもよい。
図3は、本実施例におけるプリミティブ300の例である。プリミティブ300は、2つの対等な部分データに分かれる。左部分データ302と右部分データ304は同じサイズである。プリミティブ全体のサイズは、SPEが1回のDMA転送処理で扱えるサイズである。PPEは、もっと小さな小区分(サブセクション)単位にてプリミティブにアクセスする。制約的な意味ではない例として、プリミティブ300は、一度に128バイトをアトミックに扱うSPEや一度に8バイトをアトミックに扱うPPEが内部的に操作できるように形成されてもよい。実装上においては、プリミティブ300は、PPEとSPEの両方とも更新可能な63バイトのアトミック型に基づいてもよい。SPEが取り扱える128バイトのデータ要素を取り出し、63バイトの部分データを2つ取り出し、それぞれについて1バイトずつ取り出せばよい。第1残余バイトはパリティ・バイト306となる。第2残余バイトはユーティリティ・バイト308として使われる。上記したように、2つの部分データ302、304のうちの一方だけが意味のある値を持つ。他方は未定義となるか、意味のない値を持つ。1ビット程度の小さなパリティ・バイト306は、どちらの部分データが有効部であるかを示す。プリミティブ300の分割やパリティ・バイト306の初期値の設定は、プリミティブ300を取り扱うプログラム108の初期化処理において実行してもよい。同図上側では、パリティ・バイト306は「0」に設定されているので、左部分データ302は有効、右部分データ304は無効となる。同図下側では、パリティ・バイト306は「1」にセットされているので、左部分データ302は無効、右部分データ304は有効となる。
SPUはアトミックにプリミティブの有効部302を更新できるが、パリティ・バイト306の値は変更しない。最初に読み出したパリティ・バイトの値がなんであれ、SPUはこれを書き戻す。実装上は、SPUは部分データ302全体を読み出して、有効部だけを変更し、更新値(と更新されないパリティ・バイト値)をメインメモリのプリミティブ302のあるところに書き戻す。PPUは、8バイトずつ無効部を更新し、パリティ・バイトをアトミックに変更する。
図4Aは、SPEによるプリミティブ300のアトミックな更新処理過程を示すフローチャートである。同図左側に示す処理過程400は、SPUの実行命令として実装される。処理過程400の各ステップは、上記した命令コード104に対応している。ステップ402において、SPEはプリミティブ300の全128バイトを予約付き読み出しする。同図に示すように、プリミティブ300全体がSPEのローカルストア401にロードされる。ステップ404において、SPEはパリティ・バイトをチェックして、有効部を特定する。同図の場合、パリティ・バイト値が「0」となっているので、左部分データ302は有効、右部分データ304は無効である。また、左部分データの値は「10」となっている。SPUは、SPE用実行命令コードにより、ローカルストアの有効部302の値を、たとえば、「20」に変更する。有効部の1バイト以上のカウンタ値をインクリメントするとしてもよい。ただし、パリティ・バイト306値は変更しない。ステップ406において、SPEは、メインメモリにおけるプリミティブ300のアドレスに対する条件付き書き込みの実行により、メインメモリのプリミティブ値を更新しようとする。少なくとも有効部302とパリティ・バイト306は、条件付き書き込みの対象となる。実装上は、SPEは、無効な右部分データ304も含めて、更新後のプリミティブ300全体を書き戻す方が簡単である。ステップ408において条件付き書き込みが成功すると、アトミック300は更新完了となる。SPEは、ステップ409の次の処理を実行する。
条件付き書き込みが失敗しない唯一の条件は、ステップ402の予約付き読み出しからステップ406の条件付き書き込みまでに、プリミティブ300への書き込みが割り込み発生しないことである。図4Bは、条件付き書き込みが成功しない場合のフローチャートである。
図4Bの左側に示す処理過程410は、SPUの実行命令として実装される。処理過程410の各ステップも、上記した命令コード104に対応している。図4Aと同じく、ステップ412において、SPE1は、プリミティブ300の全128バイトを予約付き読み出しして、プリミティブ300の値をSPEのローカルストア401にロードする。ステップ414において、SPEはパリティ・バイトをチェックして、有効部を特定する。先の例と同じく、パリティ・バイト値は「0」なので、左部分データ302は有効、右部分データ304は無効である。先の例と同じく、左部分データ302の値は「10」である。先の例と同じく、SPEは、SPE用実行命令コードにより、ローカルストアの有効部302の値を「20」に変更する。SPEは、パリティ・バイト306の値は変更しない。ステップ416において、SPE1は、メインメモリにおけるプリミティブ300のアドレスに対する条件付き書き込みの実行により、メインメモリのプリミティブ値を更新しようとする。
ここでは、SPEは単一操作(single operation)にてプリミティブ300の全128バイトを読み出しているが、SPUは、2以上のステージに分けてプリミティブ300を読み出してもよい。コード104をシンプルにするため、SPEはパリティ・バイト306も含めてプリミティブ300の半分をローカルストアに読み出してもよい。SPEは、最初に右部分データ304とパリティ・バイト306を読んでもよい(このとき、ユーティリティ・バイト308も読み込んでもよい)。SPEは、有効部を読み出したか判断するためにパリティ・バイト306をチェックする。有効部を読み出していれば、更新可能である。読み出したのが有効部でなければ、SPUはプリミティブの残り部分をローカルストアの最初に読み出し部分に上書きする。このような処理方法によれば、ローカルストアに並列させるのではなく、ローカルストアの同じ場所に更新したいデータをロードできる。
図4Bに示す例では、ステップ416にSPE1が条件付き書き込みを実行する前のステップ415において、SPE2がプリミティブ300有効部302に「30」を書き込んでいる。この場合、SPE1の予約は失効し、ステップ418における条件付き書き込みは失敗する。ステップ412の予約付き読み出しからステップ416の条件付き書き込みまでの間にPPEが無効な右部分データ304を更新したときにも、予約失効となる。プリミティブを更新するためには、SPE1の条件付き書き込みが成功しなければならない。しかし、これは、必ずしも、SPE2によるプリミティブ300の更新値に依存しないかもしれない。たとえば、SPE2が有効部の1バイトかそれ以上について値を設定しても、それはあるプロセスが完了したことを示すだけであり、プリミティブ300の値自体は更新されていないかもしれない。もしそうであれば、SPE1はプリミティブ300の値を更新する必要はない。それでも、SPE1がプリミティブ300値を更新する必要があるかもしれない。ステップ420において、SPE1はアトミックの新しい値を予約付き読み出しし、更新し、必要であれば、再度条件付き書き込みを実行する。このときに割り込みが発生しなければ、書き込みは成功する。
本実施例においては、SPEはプリミティブ300の無効部を更新したり、パリティ・バイト306を変更することはない。ただし、SPEによるプリミティブ300のアドレスへの書き込みでは、通常、全128バイトがアトミックに書き込まれる。SPEが全128バイトを書き戻すときには、以前に読み出された元々のパリティ・バイトと、元々の無効部も書き戻す。このため、PPUが8バイト区分を更新している間に無効部が上書きされることがある。このような事象が発生していることをPPUに通知するために、PPEはパリティ・バイト306の予約付き読み出しと条件付き書き込みを実行する。パリティ・バイトの予約付き読み出しと条件付き書き込みにより、PPUはパリティ・バイト306の条件付き書き込み時において、更新中の部分が予約失効後に上書きされたことがわかる。
図5Aは、PPEがどのようにしてプリミティブ300をアトミックに更新するかを示す。同図左側に示す処理過程500は、PPUの実行命令として実装される。処理過程500の各ステップは、上記した命令コード106のサブセットに対応している。この例では、PPEは、L1キャッシュ501のレジスタを介して、無効部に「30」という値を書き込むことによってプリミティブを更新しようとしている。ステップ502において、PPEはパリティ・バイト306だけを予約付き読み出しする。パリティ・バイトの値はPPEのL1キャッシュ501にあるレジスタに読み出される。この例では、パリティ・バイト306の値は「0」となっているので、左部分データ302は有効、右部分データ304は無効となる。ステップ504において、1回当たり8バイトかそれ以下の小区分単位にて、無効な右部分データ304の位置への連続的な書き込みにより、無効部304を更新する。PPEは無効部をアトミックに更新する必要はない。非アトミック処理でも安全に実行できる。パリティ・バイトの書き込みだけはアトミックに実行しなければならない。実装によっては、アトミックな書き込みがPPEの「アーリー・アウト(early out)」を引き起こすことがある。その場合、無効部へのアトミックな書き込みに失敗すると、更新プロセスがリスタートする可能性がある。PPEがアーリー・アウトを使用しないなら、アトミックにパリティ・バイトを更新しようとする前に全63バイトを更新しなければならないであろう。PPEは、プリミティブ300の情報を更新するために、必要な数だけの小区分503を書き込む。書き込みがなされると、ステップ506において、PPEは、条件付き書き込みによって、パリティ・バイトの値を変更しようとする。ステップ508において予約が失効していれば、パリティ・バイトの条件付き書き込みをが失敗し、SPUはアボートし、無効な右部分データ304の更新プロセスが再スタートする。ステップ508において予約が失効していなければ、条件付き書き込みは成功して、ステップ509においてPPUはパリティ・バイト306の値を変更する。この例ではパリティ・バイト306の値が0から1に変化し、右部分データ304が有効になり、左部分データ302が無効となっている。
図5Bは、PPEがどのようにしてプリミティブ300をアトミックに読み出すかを示す。同図左側に示す処理過程510は、PPUの実行命令として実装される。処理過程510の各ステップは、上記した命令コード106の別のサブセットに対応する。ステップ512において、PPUはパリティ・バイト306を予約付き読み出しする。この例では、パリティ・バイトの値は「0」となっているので、左部分データ302は有効、右部分データ304は無効となる。ステップ514において、1回当たり8バイト程度の小区分503の単位にて、パリティ・バイト306によって指定されている有効な左部分データ302をL1キャッシュ501のレジスタに読み出す。ステップ516において、PPUは、PPUによる読み出し中にプリミティブ300の値が更新されたかどうかを判定するために、メインメモリのパリティ・バイト306に対して条件付き書き込みを実行する。PPUは、プリミティブの有効部を読み出しても更新はしないので、予約付き読み出しのステップにおいて読み出したパリティ・バイトの値の再書き込みとなる。PPEが有効な左部分データ302を読み出している間に、別のプロセッサ(たとえば、SPU)がプリミティブを更新していれば、ステップ518におけるパリティ・バイトへの条件付き書き込みは失敗し、そうでなければ成功する。PPEは、パリティ・バイトへの条件付き書き込みが成功するまで、シーケンスを繰り返す。PPEは、アプリケーション(たとえば、プログラム209)によるアトミック300の更新理由によっては他の処理を実行してもよい。たとえば、アプリケーションが左部分データ302の値をアトミックにインクリメントしようとしているのなら、インクリメントできるまでループしてもよい。毎回同じ値に更新する必要はない。
ユーティリティ・バイト308は、アトミック処理の機能を拡張する。たとえば、PPUからプリミティブにアクセスしやすいアプリケーションを考える。このようなアプリケーションでは、プリミティブの更新についてはSPUよりもPPUの方が重要である。制約的な意味ではない例として、ユーティリティ・バイト308の値は、プリミティブ300の更新についてPPUを優先すべきか否かをSPEに示す。ユーティリティ・バイトが所定値のときには、プリミティブ300を読み出そうとするSPEは、プリミティブの読み書きの前の待機サイクル数を設定する。ユーティリティ・バイト308には、SPUの待機サイクルを示すための(数)ビットが含まれてもよい。ユーティリティ・バイト308はプリミティブをマスクするサイズを示してもよい。すなわち、プリミティブが何分割され、各部分データの大きさがどのくらいとなるかを示してもよい。ユーティリティ・バイト308は、他のユーティリティ機能、たとえば、フラグ、SPEの優先度、その他アプリケーション特有の機能などのために使用されてもよい。当業者であれば、実装機能に応じてユーティリティ・バイト308として2バイト以上を割り当ててもよいことは用意に理解されるであろう。
本実施例によれば、所定のアプリケーションを2以上のPPUやスレッドに対して実装できる。一般的には、ある時点においてプリミティブ300を更新できるのは1つのPPUスレッドだけである。オペレーティング・システム(OS:Operating System)のレベルのミューテックスは、別々のPPUスレッドを排他制御するために使用される。これに対して、本実施例に示したプリミティブの処理はロックフリーである。更新中にPPUプロセスがコンテキスト・スイッチ(context switch)しても、SPUはプリミティブの更新を続けることができる。SPUとPPUが必要なときに共通のアトミック型を操作できるので、合理的で妥当な処理方法となる。CELLプロセッサにおいて、ロックフリーなプログラミングの実装はとても重要である。(たとえば、CD−ROM・コントローラやネットワーク・カードについての)I/O処理は、通常、PPUプロセスの仕事である。SPUとPPUの両方がアトミックに操作できるプリミティブにより、PPUが別のI/O処理に移行してもSPUは処理を継続できる。これは、パフォーマンスの大幅な低下を避ける上で有効である。
上述した内容は、単一のPPEと複数のSPUを備えるCELLプロセッサについて言及しているが、本実施例は複数のPPEを備えるCBEAのようなCELLプロセッサ・アーキテクチャにも応用可能であることは当業者には理解されるであろう。複数のPPEを備えるCELLプロセッサにおいては、すべてのPPEのために1つのミューテックスを用意して、ある時点においては1つのPPEの1つのプロセスだけがアトミックを更新できる方が望ましい。
本実施例は、メインメモリを共有するアトミックなプロセスがもっと小さくても機能する。本実施例は、別々のプロセッサが同一のメインメモリにアクセスする上で、アトミックなプロセス(すなわち、128バイトのデータ構造を63バイトに分割して、2つの残余バイトを取り出すプロセス以外のプロセス)についてアクセスの「粒度(grain)」の違いにも対応できる。かなり大きなサイズのプリミティブは、適切な数の部分データに分割すればよい。パリティ・バイトが3値以上を示せるように設定してた上で、アトミックのどの部分データが有効かを示してもよい。たとえば、65バイトのアトミックを、8バイトサイズ×8個の部分データに分割し、パリティ・バイトのために、3ビット以上のエクストラ・バイトを設定してもよい。パリティ・バイトの値は0から7のいずれかとなり、8つの部分データうちどれが有効かを示す。
本実施例によれば、SPEが取り扱える大きなサイズでアトミック処理を実行できる一方、PPEが取り扱える小さなサイズでもアトミック処理を実行できる。本実施例は、SPUタスクの管理において、特に、SPUとPPUの両方が新たに実行すべきタスクをアトミックに追加する必要があるときに有用である。
以上は、本発明の最適な実施例の完全な記述であるが、さまざまな変更、変形、等価物への置き換えが可能である。それゆえ、本発明の範囲は、上記記述に関してではなく、請求項により定義されるべきであり、完全な等価物の範囲も含まれる。記述された特徴は、それが好ましいものであれ、そうでないものであれ、上記したさまざまな特徴と組み合わされてもよい。請求項においては、通常、特に断らない限りは、各要素は1またはそれ以上の数量を想定している。請求項の記載事項は、「〜手段」のような記載によって、明示される場合のほかは、いわゆるミーンズ・プラス・ファンクション特有の限定的意味で解してはならない。
本実施例において、CELLのタスクおよびデータの管理を実装するCELLブロードバンドエンジンアーキテクチャの模式図である。 本実施例におけるCELLプロセッサの模式図である。 本実施例におけるデュアル・アクセス・プリミティブのブロック図である。 本実施例において、SPUがデュアル・アクセス・プリミティブを更新するときのフローチャートである。 本実施例において、SPUによるデュアル・アクセス・プリミティブの更新処理が中断するときのフローチャートである。 本実施例において、PPUがデュアル・アクセス・プリミティブを更新するときのフローチャートである。 本実施例において、PPUがデュアル・アクセス・プリミティブを読み出すときのフローチャートである。

Claims (32)

  1. メモリ転送容量の異なるPPE(Power Processor Element)とSPE(Synergistic Processing Element)、および、メインメモリを含む2以上のプロセッサを備えるプロセッサ・システムにおいて実行される処理方法であって、
    PPEのメモリ転送処理の最大サイズよりも大きく、SPEのメモリ転送処理の最大サイズ以下のサイズのプリミティブ(Primitive)について、
    メインメモリにおける前記プリミティブのアドレスは、2以上の部分データと前記2以上の部分データのうちのいずれが有効部でいずれが無効部であるかを示す1ビット以上のパリティ・バイトに分割されており、
    b)SPEにより、パリティ・バイトと少なくとも有効部についての予約付き読み出しを実行するステップと、
    c)SPEにより、有効部を更新して更新済有効部を生成するステップと、
    d)SPEにより、条件付きにて、パリティ・バイトの値を変更せずに書き戻し、更新済有効部を前記プリミティブのあるアドレスに記録することにより、予約が失効していないことを条件として更新済有効部を前記プリミティブのアドレスに記録するステップと、
    e)予約が失効していれば、条件付き書き込みが成功するまでSPEにb)、c)、d)のステップを再実行させるステップと、
    を備えることを特徴とするアトミック処理方法。
  2. PPEにより、パリティ・バイトの予約付き読み出しを実行することにより無効部を更新するステップと、
    PPEが単一のメモリ転送処理にて更新できるサイズの小区分にて、無効部の1以上の小区分に書き込むステップと、
    PPEにより、パリティ・バイトに対する更新値の条件付き書き込みを実行するステップと、
    PPEにより、条件付き書き込み処理が成功したときに、パリティ・バイトの値を変更するステップと、
    を更に備えることを特徴とする請求項1に記載のアトミック処理方法。
  3. PPEによる無効部の更新中にパリティ・バイトについての予約が失効したとき、PPEはパリティ・バイトを再度予約付きで読み出し、PPEの1以上のレジスタに有効部を読み出すことを特徴とする請求項2に記載のアトミック処理方法。
  4. PPEにより、パリティ・バイトの初期値の予約付き読み出しを実行し、PPEが単一のメモリ転送処理にて更新できるサイズの小区分にて、有効部の1以上の小区分の連続的な読み出しを実行することにより有効部の値を読み出すステップと、
    PPEにより、パリティ・バイトへの前記初期値の条件付き書き込みを実行するステップと、
    を更に備えることを特徴とする請求項1に記載のアトミック処理方法。
  5. 前記プリミティブのサイズは、SPEのレジスタのサイズ以下であることを特徴とする請求項1に記載のアトミック処理方法。
  6. 前記プリミティブのサイズは、SPEのレジスタのサイズ以下であって、
    小区分は、PPEのレジスタのサイズ以下のサイズであることを特徴とする請求項1に記載のアトミック処理方法。
  7. 前記プリミティブのサイズは128バイトであることを特徴とする請求項1に記載のアトミック処理方法。
  8. 前記プリミティブのサイズは128バイトであって、前記小区分のサイズは8バイトであることを特徴とする請求項1に記載のアトミック処理方法。
  9. 前記プリミティブのサイズは128バイトであって、前記2以上の部分データには、63バイト・サイズの部分データが2つ含まれることを特徴とする請求項1に記載のアトミック処理方法。
  10. PPEは一回あたり8バイトをアトミックに操作し、
    SPEは一回あたり128バイトをアトミックに操作し、
    前記プリミティブのサイズは128バイトであって、前記2以上の部分データには、63バイト・サイズの部分データが2つ含まれることを特徴とする請求項1に記載のアトミック処理方法。
  11. 前記プリミティブは、更に、SPEとPPEからアクセスできる追加情報を保持するユーティリティ・バイトを含むことを特徴とする請求項1に記載のアトミック処理方法。
  12. 前記追加情報は、前記プリミティブの更新に関してPPEと他のSPEのいずれが優先されるかをSPEに通知するための情報であることを特徴とする請求項11に記載のアトミック処理方法。
  13. 前記ユーティリティ・バイトは、前記プリミティブをマスクするサイズを示すことを特徴とする請求項11に記載のアトミック処理方法。
  14. 前記プリミティブは、第1部分データと第2部分データに分割され、
    前記第1部分データは、前記パリティ・バイトを含むことを特徴とする請求項1に記載のアトミック処理方法。
  15. 前記b)のステップは、
    前記第1部分データをPPEのローカルストア・レジスタに読み込むステップと、
    前記第1部分データが有効部か否かを前記パリティ・バイトにより判定するステップと、
    前記第1部分データが有効部でなければ、前記第2部分データをPPEのローカルストア・レジスタに読み込むステップと、を含み、
    有効部である部分データをPPEのローカルストア・レジスタ内に並べることを特徴とする請求項14に記載のアトミック処理方法。
  16. 前記b)のステップは、
    1回の操作にてPPEのローカルストア・レジスタに前記プリミティブ全体を読み込むステップと、
    前記パリティ・バイトにより、どの部分データが有効部であるかを判定するステップと、
    を含むことを特徴とする請求項1に記載のアトミック処理方法。
  17. データバスと、
    前記データバスに接続され、1以上のタスク定義情報を保持するメインメモリと、
    前記データバスに接続されるPPE(Power Processor Element)と、
    前記データバスに接続される1以上のSPE(Synergistic Processing Element)と、を備え、
    各SPEは、SPU(Synergistic Processing Unit)とローカルストア(Local Store)を含み、
    前記メインメモリは、PPEのメモリ転送処理の最大サイズよりも大きく、SPEのメモリ転送処理の最大サイズ以下のサイズであって、パリティ・バイトと2以上の部分データを含むプリミティブ(Primitive)を保持し、
    前記パリティ・バイトは、前記2以上の部分データのうちのいずれが有効部でいずれが無効部であるかを示す1ビット以上のデータを含むことを特徴とするCELLプロセッサ。
  18. SPEによる前記プリミティブの更新処理方法を示す命令セットとして、1以上のSPEのローカルストアにプロセッサの実行命令セットを保持し、
    前記更新処理方法は、
    a)SPEにより、パリティ・バイトと少なくとも有効部についての予約付き読み出しを実行するステップと、
    b)SPEにより、有効部を更新して更新済有効部を生成するステップと、
    c)条件付きにて、パリティ・バイトの値を書き戻し、更新済有効部を前記プリミティブのあるアドレスに記録することにより、予約が失効していないことを条件としてSPUが更新済有効部を前記プリミティブのアドレスへ記録するステップと、
    d)予約が失効していれば、条件付き書き込みが成功するまでSPEにa)、b)、c)のステップを再実行させるステップと、
    を備えることを特徴とする請求項17に記載のCELLプロセッサ。
  19. PPEによる前記プリミティブの更新処理方法を示す命令セットとして、PPEの1以上のレジスタにプロセッサの実行命令セットを保持し、
    前記更新処理方法は、
    PPEにより、パリティ・バイトを予約付きで読み出し、PPEが単一のメモリ転送処理にて更新できるサイズの小区分により無効部の1以上の小区分に書き込むステップと、
    パリティ・バイトに対する更新値の条件付き書き込みを実行するステップと、
    条件付き書き込み処理が成功したときに、PPEによりパリティ・バイトの値を前記更新値に変更するステップと、を含み、
    前記更新値は、有効部を無効部に、無効部を有効部に反転させる値であることを特徴とする請求項17に記載のCELLプロセッサ。
  20. PPEによる有効部の読み出し方法を示す命令セットとして、PPEの1以上のレジスタにプロセッサの実行命令セットを保持し、
    前記読み出し方法は、
    PPEにより、パリティ・バイトの初期値の予約付き読み出しを実行するステップと、
    有効部の1以上の小区分を連続的に読み出すステップと、
    前記初期値のパリティ・バイトへの条件付きで書き込みを実行するステップと、
    を含むことを特徴とする請求項17に記載のCELLプロセッサ。
  21. 前記プリミティブのサイズは、SPEのレジスタのサイズ以下であることを特徴とする請求項17に記載のCELLプロセッサ。
  22. 前記プリミティブのサイズは、SPEのレジスタのサイズ以下であって、
    小区分は、PPEのレジスタのサイズ以下のサイズであることを特徴とする請求項17に記載のCELLプロセッサ。
  23. 前記プリミティブのサイズは128バイトであることを特徴とする請求項17に記載のCELLプロセッサ。
  24. 前記プリミティブのサイズは128バイトであって、前記小区分のサイズは8バイトであることを特徴とする請求項17に記載のCELLプロセッサ。
  25. 前記プリミティブのサイズは128バイトであって、前記2以上の部分データには、63バイト・サイズの部分データが2つ含まれることを特徴とする請求項17に記載のCELLプロセッサ。
  26. PPEは一度に8バイトをアトミックに操作し、
    SPEは一度に128バイトをアトミックに操作し、
    前記プリミティブのサイズは128バイトであって、前記2以上の部分データには、63バイト・サイズの部分データが2つ含まれることを特徴とする請求項17に記載のCELLプロセッサ。
  27. 前記プリミティブは、更に、SPEとPPEからアクセスできる追加情報を保持するユーティリティ・バイトを含むことを特徴とする請求項17に記載のCELLプロセッサ。
  28. 前記追加情報は、前記プリミティブの更新に関してPPEが優先権を持つことをSPEに通知するための情報であることを特徴とする請求項27に記載のCELLプロセッサ。
  29. 前記ユーティリティ・バイトは、前記プリミティブをマスクするサイズを示すことを特徴とする請求項27に記載のCELLプロセッサ。
  30. 前記プリミティブは、第1部分データと第2部分データに分割され、
    前記第1部分データは、前記パリティ・バイトを含むことを特徴とする請求項27に記載のCELLプロセッサ。
  31. レジスタ・ラインのサイズが異なるPPE(Power Processor Element)とSPE(Synergistic Processing Element)、および、メインメモリを含む2以上のプロセッサを備えるプロセッサ・システムにおいて実行され、SPEによる単一操作にて読み書きが可能なプリミティブ(Primitive)をPPEによりアトミックに更新するための方法であって、
    前記プリミティブのサイズは、PPEのメモリ転送処理の最大サイズよりも大きく、SPEのメモリ転送処理の最大サイズ以下であって、
    メインメモリにおける前記プリミティブのアドレスは、2以上の部分データと前記2以上の部分データのうちのいずれが有効部でいずれが無効部であるかを示す1ビット以上のパリティ・バイトに分割されており、
    PPEにより、パリティ・バイトの予約付き読み出しを実行するステップと、
    PPEにより、PPEが単一のメモリ転送処理にて更新できるサイズの小区分にて、無効部の1以上の小区分に書き込むステップと、
    PPEにより、パリティ・バイトに対する更新値の条件付き書き込みを実行するステップと、
    条件付き書き込み処理が成功したときに、PPEによりパリティ・バイトの値を変更するステップと、
    を更に備えることを特徴とするアトミック更新方法。
  32. メモリ転送容量の異なるPPE(Power Processor Element)とSPE(Synergistic Processing Element)、および、メインメモリを含む2以上のプロセッサを備えるプロセッサ・システムにおいて実行され、SPEによる単一操作にて読み書きが可能なプリミティブ(Primitive)をPPEによりアトミックに読み出すための方法であって、
    前記プリミティブのサイズは、PPEのメモリ転送処理の最大サイズよりも大きく、SPEのメモリ転送処理の最大サイズ以下であって、
    メインメモリにおける前記プリミティブのアドレスは、2以上の部分データと前記2以上の部分データのうちのいずれが有効部でいずれが無効部であるかを示す1ビット以上のパリティ・バイトに分割されており、
    PPEにより、パリティ・バイトの初期値を予約付きで読み出すステップと、
    PPEが単一のメモリ転送処理にて更新できるサイズの小区分にて、有効部の1以上の小区分を連続的に読み出すステップと、
    PPEにより、パリティ・バイトへの前記初期値の条件付き書き込みを実行するステップと、
    を備えることを特徴とするアトミック読出方法。
JP2006325471A 2005-12-01 2006-12-01 メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術 Active JP4130465B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/291,306 US7398368B2 (en) 2005-12-01 2005-12-01 Atomic operation involving processors with different memory transfer operation sizes

Publications (2)

Publication Number Publication Date
JP2007157146A JP2007157146A (ja) 2007-06-21
JP4130465B2 true JP4130465B2 (ja) 2008-08-06

Family

ID=38120157

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006325471A Active JP4130465B2 (ja) 2005-12-01 2006-12-01 メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術

Country Status (2)

Country Link
US (1) US7398368B2 (ja)
JP (1) JP4130465B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509463B2 (en) * 2005-12-01 2009-03-24 Sony Computer Entertainment, Inc. Cell processor atomic compare and swap using dedicated synergistic processor element
US8024521B2 (en) * 2007-03-13 2011-09-20 Sony Computer Entertainment Inc. Atomic operation on non-standard sized data using external cache
US8387041B2 (en) * 2008-01-09 2013-02-26 International Business Machines Corporation Localized multi-element processor resource sharing among logical partitions
US20100083269A1 (en) * 2008-09-29 2010-04-01 International Business Machines Corporation Algorithm for fast list allocation and free
JP5514120B2 (ja) * 2008-11-14 2014-06-04 株式会社日立メディコ 超音波診断装置及び超音波画像生成方法
US8412862B2 (en) 2008-12-18 2013-04-02 International Business Machines Corporation Direct memory access transfer efficiency
US8949529B2 (en) * 2009-12-30 2015-02-03 International Business Machines Corporation Customizing function behavior based on cache and scheduling parameters of a memory argument

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU645785B2 (en) * 1990-01-05 1994-01-27 Maspar Computer Corporation Parallel processor memory system
JPH0954761A (ja) * 1995-08-15 1997-02-25 Sony Corp デイジタル信号処理装置及び情報処理システム
US5835925A (en) 1996-03-13 1998-11-10 Cray Research, Inc. Using external registers to extend memory reference capabilities of a microprocessor
US5864738A (en) 1996-03-13 1999-01-26 Cray Research, Inc. Massively parallel processing system using two data paths: one connecting router circuit to the interconnect network and the other connecting router circuit to I/O controller
US7274706B1 (en) 2001-04-24 2007-09-25 Syrus Ziai Methods and systems for processing network data
US20050120185A1 (en) 2003-12-01 2005-06-02 Sony Computer Entertainment Inc. Methods and apparatus for efficient multi-tasking

Also Published As

Publication number Publication date
US7398368B2 (en) 2008-07-08
US20070130438A1 (en) 2007-06-07
JP2007157146A (ja) 2007-06-21

Similar Documents

Publication Publication Date Title
JP4977159B2 (ja) 特定のプロセッサを使ってアトミックなコンペア・アンド・スワップ命令を実行するための技術
US10210092B1 (en) Managing cache access and streaming data
US6665749B1 (en) Bus protocol for efficiently transferring vector data
JP5876458B2 (ja) Simdベクトルの同期
US6141734A (en) Method and apparatus for optimizing the performance of LDxL and STxC interlock instructions in the context of a write invalidate protocol
US6813701B1 (en) Method and apparatus for transferring vector data between memory and a register file
JP4421561B2 (ja) ハイブリッドdmaキュー及びdmaテーブルのデータ処理方法、装置及びシステム
US7590774B2 (en) Method and system for efficient context swapping
US6513107B1 (en) Vector transfer system generating address error exception when vector to be transferred does not start and end on same memory page
JP4130465B2 (ja) メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術
JPS63238631A (ja) I/oプロセツサ用の実行装置
US6553486B1 (en) Context switching for vector transfer unit
JPH1185618A (ja) 仮想メモリ変換を制御する方法
US6625720B1 (en) System for posting vector synchronization instructions to vector instruction queue to separate vector instructions from different application programs
US8024521B2 (en) Atomic operation on non-standard sized data using external cache
US20030135717A1 (en) Method and apparatus for transferring vector data

Legal Events

Date Code Title Description
A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20080213

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20080227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080311

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080415

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080521

R150 Certificate of patent or registration of utility model

Ref document number: 4130465

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110530

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110530

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120530

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130530

Year of fee payment: 5

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250