JP6218833B2 - 処理リソース割り当て - Google Patents

処理リソース割り当て Download PDF

Info

Publication number
JP6218833B2
JP6218833B2 JP2015528554A JP2015528554A JP6218833B2 JP 6218833 B2 JP6218833 B2 JP 6218833B2 JP 2015528554 A JP2015528554 A JP 2015528554A JP 2015528554 A JP2015528554 A JP 2015528554A JP 6218833 B2 JP6218833 B2 JP 6218833B2
Authority
JP
Japan
Prior art keywords
call
data
code
identifying
resource allocation
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
JP2015528554A
Other languages
English (en)
Other versions
JP2015526821A5 (ja
JP2015526821A (ja
Inventor
キャメロン,ドナルド,ケヴィン
Original Assignee
キャメロン,ドナルド,ケヴィン
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by キャメロン,ドナルド,ケヴィン filed Critical キャメロン,ドナルド,ケヴィン
Publication of JP2015526821A publication Critical patent/JP2015526821A/ja
Publication of JP2015526821A5 publication Critical patent/JP2015526821A5/ja
Application granted granted Critical
Publication of JP6218833B2 publication Critical patent/JP6218833B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • H04L47/78Architectures of resource allocation
    • H04L47/788Autonomous allocation of resources
    • 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/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本出願は、その全体を参照により、本明細書及び特許請求の範囲に援用する、西暦2012年8月20日付け出願の米国特許仮出願第61/684,813号の利益を主張する。
本出願は、処理リソース割り当ての分野に関する。
例示的なシナリオに応じて、コンピュータ・システムは種々のデータ処理アプリケーションの実現のための有用なツールであり得る。しかし、コンピュータ・プログラム及びデータ記憶のパラダイムが一層高度になり続けるにつれ、コンピュータ・システムが、迅速勝つ効率的に、比較的複雑なプログラムを実行し、比較的大量のデータを処理する能力は経時的に一層重要になり得る。
よって、例えばマルチプロセッサ・アーキテクチャなどの処理リソースを効率的に割り当てる能力は、現代のコンピュータ・システム及び将来のコンピュータ・システムにとって不可欠なツールとなり得る。
本概要は、詳細な説明において以下に更に説明された、単純化された形式での概念の選択肢を紹介するために提供する。本概要は、特許請求の範囲に記載の主題の主要な構成又は必須の構成を識別することを意図するものでなく、特許請求の範囲に記載の主題の範囲の判定を助けるものとして使用されることを意図するものでもない。
一実施例では、処理リソース割り当て方法を開示する。方法は、予め選択されたデータ場所(データの配置された場所(data location))を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいた第2のPUに第1の処理装置(PU)からの命令のコールを転送するか否かを判定する工程を含み得る。
更に、一実施例では、処理リソース割り当て方法が開示され、方法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいて第2のPUに第1の処理装置(PU)からの命令のコールを転送するか否かを処理リソース割り当て装置によって判定する工程も含み得る。
更に、一実施例では、コンピュータ読み取り可能な媒体が開示され、コンピュータ読み取り可能な媒体は、実行されると、処理リソース割り当ての方法をコンピュータ・システムに行わせる命令の組を記憶する。方法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程を含み得る。方法は更に、予め選択されたデータ場所に基づいて第2のPUに第1のPUからの命令のコールを転送するか否かを判定する工程を更に含み得る。
本明細書に組み入れられ、本明細書の一部を構成する添付図面は、本願の手法の実施例を例証し、詳細な説明とともに以下に説明する原理を説明する役目を担う。
実施例による例示的な処理アーキテクチャを示すブロック図である。 実施例による例示的な分散処理アーキテクチャ(DPA)を示すブロック図である。 実施例による例示的な進歩解析を示す図である。 実施例による例示的な処理リソース割り当て方法を示すフローチャートである。 実施例による例示的な処理リソース割り当てパラダイムを示すブロック図である。 実施例による第1の例示的なコール転送パラダイムを示すブロック図である。 実施例による例示的なメモリ割り当てパラダイムを示すブロック図である。 実施例による第2の例示的なコール転送パラダイムを示すブロック図である。 実施例による例示的なPU識別パラダイムを示すブロック図である。 実施例による例示的なリダイレクト・コール識別パラダイムを示すブロック図である。 実施例による例示的なターゲット・コード実行パラダイムを示すブロック図である。 実施例による第3の例示的なコール転送パラダイムを示すブロック図である。 実施例による例示的なコール転送判定パラダイムを示すブロック図である。 実施例による例示的なメモリ・・パーティショニング・パラダイムを示すブロック図である。 実施例による例示的な処理リソース割り当てシステムを示すブロック図である。 実施例による例示的なリダイレクト解析を示すフローチャートである。 実施例による例示的なグローバル・コード・ライブラリ・パラダイムを示すブロック図である。 実施例による第4の例示的なコール転送パラダイムを示すブロック図である。 実施例による第5の例示的なコール転送パラダイムを示すブロック図である。 実施例による第6の例示的なコール転送パラダイムを示すブロック図である。 実施例による例示的なコード・インジェクション・パラダイムを示すブロック図である。 実施例による例示的なコード選択パラダイムを示すブロック図である。 実施例による例示的な仮想関数テーブル(VFT)置換を示すブロック図である。 実施例による例示的なVFT修正パラダイムを示すブロック図である。 実施例による例示的な修正命令選択パラダイムを示すブロック図である。 実施例による例示的な第1の仮想関数リマッピング・パラダイムを示すブロック図である。 実施例による例示的なコール・サイト修正パラダイムを示すブロック図である。 実施例による例示的な第2の仮想関数リマッピング・パラダイムを示すブロック図である。 実施例による例示的な自動コール転送パラダイムを示すブロック図である。 実施例による例示的なメモリ・ロード・パラダイムを示すブロック図である。 実施例による例示的なデータ受け渡し(データ・パッシング(passing))パラダイムを示すブロック図である。 実施例による例示的なポインタ・リマッピング・パラダイムを示すブロック図である。 実施例による例示的なリモート・プロシージャ・コール(RPC)転送パラダイムを示すブロック図である。 実施例による例示的なデータ記憶パラダイムを示すブロック図である。 実施例による例示的なRPC構成パラダイムを示すブロック図である。 実施例による例示的な実行可能なルーチン動作パラダイムを示すブロック図である。 実施例による例示的な実行可能なルーチン転送パラダイムを示すブロック図である。 実施例による例示的なコンピュータ・システムを示すブロック図である。 実施例による例示的な命令実行システムを示すブロック図である。
明細書中で参照する図面は、別途明記しない限り、縮尺通りに描かれているものと解されるべきでなく、前述の図面は本質的に例示的なものである。
次に本願の手法の実施例を詳細に参照し、その例は添付図面に示す。本願の手法は種々の実施例に関して説明しているが、前述の実施例は本願の手法を制限することを意図するものでない。むしろ、本願の手法は、種々の代替、修正、及び均等物を包含するものとして解されるべきである。
更に、本願の手法の詳細な理解をもたらすために、本明細書及び特許請求の範囲において数多くの具体的な詳細を記載している。しかし、前述の具体的な詳細は本質的に例示的なものであり、前述の具体的な詳細なしで本願の手法を実施し得る、場合によっては、本明細書及び特許請求の範囲に記載した例示的な実施例の局面を不必要に分かりにくくすることのないように、周知の方法、プロシージャ、構成部分、回路、及びシステムを詳細に説明していない。
更に、特定の動作又は処理が行われることを示す語を使用する本願の詳細な説明を通じた記載は、コンピュータ・システム又は同様な電子コンピューティング装置の動作及び処理を表し得る。例えば、コンピュータ・システム又は同様な電子コンピューティング装置は、コンピュータ・システムのレジスタ及びメモリ内の物理的(例えば、電子的)数量として表されるデータを、操作し、コンピュータ・システム・メモリ内若しくはレジスタ内、又は、前述の他の情報記憶装置内、伝送装置内、若しくは表示装置内の物理的数量として同様に表される他のデータに変換する。本願の手法は更に、例えば光学式コンピュータ及び機械式コンピュータなどの他のタイプのコンピュータ・システムの使用によく適している。
よって、本願の手法は、コンピュータによって実行される、プログラム・モジュールなどのコンピュータ実行可能な命令の一般的なコンテキストで説明している場合がある。前述のプログラム・モジュールには例えば、特定のタスク、又は、特定の抽象データ・タイプを実現するルーチン、プログラム、オブジェクト、構成部分、データ構造等が含まれ得る。更に、本願の手法は更に、通信ネットワークを介してリンクされた遠隔処理装置により、タスクが行われる分散コンピューティング環境において実施し得る。分散コンピューティング環境では、プログラム・モジュールは、局所並びに遠隔のデータ記憶媒体及びコンピュータ・メモリ装置に配置し得る。
上記に係わらず、更に、特定の動作又は処理が行われることを示す語は手作業の動作又は処理を表し得る。実際に、本願の手法の種々の実施例は、コンピュータによって実現される1つ又は複数の動作若しくは処理と、手作業の1つ又は複数の動作若しくは処理との組み合わせを実現する。更に、コンピュータによって実現される動作又は処理の1つ若しくは複数は、例えば、(1)特定のユーザ入力、(2)適格因子若しくはパラメータ、又は(3)先行する動作若しくは処理の生起などに応じて自動的に行い得る。
更に、「結合された」との語は、必ずしも、直接の物理的関係を示す訳でない。例えば、2つの構成部分が、互いに「結合された」ものとして表される場合、2つの構成部分の間で結合されているか、接続しているか、一体化されている等の1つ又は複数の他の部品、材料等(例えば、接着剤又は信号伝送路)が存在し得る。そういうものとして、「結合された」との語には、別途明記しない限り、その考えられる最も広い意味が与えられるべきである。
更に、「通信するよう関連付けられた」は必ずしも物理的関係を示すものでない。例えば、2つの構成部分が、互いに「通信するよう関連付けられている」として説明されている場合、前述の構成部分は、例えば、無線及び/又は有線通信プロトコルを使用して互いに通信するよう構成し得る。そういうものとして、「通信するよう関連付けられた」との語には、別途明記しない限り、その考えられる最も広い意味が与えられるべきである。
更に、「パラダイム」との語は、参照された主題の先行して知られている理解を示すものとして解されるべきでない。むしろ、例えば、本願の手法の実施例に応じて提示された配置、構成、又はモデルを単に表すものとして解され得る。実際に、「パラダイム」との語には、別途明記しない限り、その考えられる意味が与えられるべきである。
更に、明りょう性の目的で、「プログラム」との語は、アルゴリズム若しくは一連の命令、又は、あるいは、特定のタスクの実行のためのコード化された命令を提供する動作を表し得る。前述の例示的な定義にかかわらず、「プログラム」との語には、別途明記しない限り、その考えられる意味が与えられるべきである。
更に、「処理」との語は例えば、プログラム(若しくはアルゴリズム)が実行される活動、又は、実行されているコンピュータ・プログラムの特定のインスタンスを表し得る。あるいは、「処理」との語は、単に、例えば、結果を実現するために講じられる一連の動作、又は、あるいは、結果を実現するために一連の処理を行う動作を表し得る。前述の例示的な定義にかかわらず、「処理」の語には、別途明記しない限り、その考えられる最も広い意味が与えられる。
最後に、「コンピュータ読み取り可能な媒体」との用語は、例えば、一時的な、又は一時的でないコンピュータ読み取り可能な媒体を表すものとして解し得る。しかし、「コンピュータ読み取り可能な媒体」との用語は、いつでも、本来、1つ又は複数の信号(例えば、1つ又は複数の一時的な伝搬信号)のみを含むものとして解されないものとする。更に、「コンピュータ読み取り可能な媒体」との用語が「一時的でないコンピュータ読み取り可能な媒体」として解される場合、「一時的でないコンピュータ読み取り可能な媒体」との、結果として生じる用語は、コンピュータ読み取り可能な媒体全てを包含し、唯一の例外は、1つ又は複数の信号(例えば、1つ又は複数の一時的な、伝搬信号)のみを備えるコンピュータ読み取り可能な媒体であると解されるべきである。
I 概要
例示的なシナリオによれば、処理アーキテクチャ内のプロセッサはメモリ(例えば、ランダム・アクセス・メモリ(RAM)又はレベル2(L2)キャッシュ)を共有し、各プロセッサはメモリのそれ自身のビューを備えたそれ自身のキャッシュを有する。各プロセッサは単一のプロセッサとしてプログラムされ、よって、マルチプロセッサ・アーキテクチャは、実質的に単一プロセッサ・アプローチを利用する。更に、プロセッサ間で存在する実現された通信機構は共有メモリ経由である。前述のアプローチでは、いくつかの課題が生じ得る。例えば、プロセッサ間の通信をどのようにして行うかを優先順位付けすることは困難であり得、プロセッサ間での小量の情報の転送の試行は効率的でないことがあり得、キャッシュ・コヒーレンシ問題に直面し得る。
例示的な一シナリオに従えば、キャッシュ・コヒーレンシの課題は特に、やっかいであり得る。例えば、データが実際には別々の多くの場所に保存されている以外、各プロセッサがデータの同じビューをみていることが重要であり得る。特に、キャッシュ・アーキテクチャでは、プロセッサは、例えばレベル1(L1)キャッシュとして表し得るそれ自身のキャッシュに書き込み、その他のプロセッサは、何が書き込まれているかをみることができない。前述のL1キャッシュが共有メモリでないからである。したがって、データ変更が第2のレベルのキャッシュ(又はL2キャッシュ)に伝達され、次いで、その他のプロセッサの個別のL1キャッシュそれぞれに、その他のプロセッサがそれをみることが可能である状態になる前に供給される。よって、データ変更が実現される場合、前述の変更は実質的に、キャッシュ線を「ダーティー」にし、その場合、当面、そのデータを使用しない旨をプロセッサそれぞれに伝えるために信号が送出される。よって、別々のL1キャッシュに同じデータ値の複数の複製を記憶することにより、キャッシュ・コヒーレンシ問題が生じ得る。
前述のキャッシュ・コヒーレンシ問題に対する1つの例示的な解決策に従って、相互排他(mutex)ロックを実現し得る。例えば、第1のプロセッサが、特定のデータ変数に書き込むことを意図する場合、データ変数は、ロックされた状態にある間、他のプロセッサが書き込むことができないようにロックされた状態になる。第1のプロセッサは次いで、ロックされたデータ変数に書き込み、次いで、新たなデータ値がL2キャッシュに送出され、次いで、残りのL1キャッシュそれぞれに供給されるようにアンロックすることができる。しかし、前述のタイプのシステムはスケーリングが好適でないことがあり得るという問題が前述の例示的な解決策に対して発生し得る。例えば、実現されたアーキテクチャが100個のプロセッサを含む場合のmutexロックの実現の試行には、かなりの量の追加ハードウェアが関係し得る。
上記に加えて、動作に注力した種々の手法の目的は、移動させる対象に応じて特定の対象を移動させるのに要する時間を最小にすることである。上記例示的なシナリオに従って、移動させられるのはデータである。実際に、コードは固定である(こと、及び充填し、後に再充填し得る命令コードが提供されること)から、コードを移動させることは必要でないことがあり得る。しかし、本願の手法の実施例によれば、データ自体は移動させず、これは、上記問題の解決を助ける。例えば、本願手法の実施例は、全体のデータ移動及びキャッシュ・コヒーレンシ要件を最小にすることにより、より好適な並列処理及び動作を可能にするハイブリッド・コンピュータ・アーキテクチャを提供する。更に、コンテキスト・スイッチをどのようにして誘導するかについての情報をソフトウェアに提供し、コード・リンクに対する新たな手法が、これを利用するように実現される。
一実施例に従えば、「ワンダリング・スレッド」を利用する手法が実現される。前述の実現形態の目標は、プロセッサを局所キャッシュ外で動作させ、キャッシュ・ミスを最小にすることである。前述の手法は、例えば、グループでメモリに密結合されたCPUを使用したマルチコア/多コアの非均等メモリ・アクセス(NUMA)処理アーキテクチャ内で実現し得る。更に、処理アーキテクチャが統合大域アドレス空間を有する場合、修正なしで、より好適な動作を実現するための機構を、予め定義された単一スレッド・コードとともに使用することが可能である。よって、前述の手法は、既存のコードをサポートするように、かつ、「ダイ・スタッキング」を使用してメモリ及びプロセッサが構築され、コア数が比較的高い(キャッシュ・コヒーレントでない)NUMAマシンを使用して実現し得る。
II 例示的なアーキテクチャ、手法、及びパラダイム
本願の手法の種々の例示的な実施例について次に述べる。しかし、本願の手法は前述の例示的な実施例に制限されず、本願の手法は更に、本明細書及び特許請求の範囲記載の例示的な実施例及び実現形態の自明な変形を含む。更に、本明細書及び特許請求の範囲記載の種々の原理を不必要にわかりにくくすることのないように、種々の周知の構成部分を概して、添付図面に示していない一方、前述の周知の構成部分は、本願手法の種々の実施例を実施するために当業者によって実現し得る。
A 例示的な処理アーキテクチャ
次に、いくつかの例示的な処理アーキテクチャについて掘り下げてみる。しかし、本願の手法は前述の例示的な処理アーキテクチャ手法に制限されず、他の処理アーキテクチャ手法を実現し得る。
例示的なシナリオでは、コンピュータ・システム・プロセッサ開発は、メモリの開発とも、種々のICプロセスの使用とも無関係であり得る。よって、かなりの数のコンピュータ・アーキテクチャは、メモリ・チップとPUとの間のデータ及びコードの移動の管理に注力し得る。これは、移動中のデータの一時的な複製を保持する複数層のキャッシュをもたらし得る。シリコンICプロセス・スケーリングの属性により、プロセッサ速度は、横這い、すなわち「頭打ち」になり得、単一コアの性能は、動作中にデータ及びコードを移動させる平均的な物理距離の関数であり得る。コア・サイズの増加は有益でないことがあり得るので、プロセッサは、PU/ICパッケージ毎に複数コアで構築し得、前述の複数コアは、図1に示したような、含まれたメモリへのアクセスを共有する。
次に図1を参照すれば、実施例による例示的な処理アーキテクチャ100を示す。例示的な処理アーキテクチャ100は、例示的なPU110、120などの1つ又は複数のプロセッシング・ユニット(PU)を含む。前述のPUはそれぞれ、例示的なプロセッシング・コア111、121などの少なくとも1つのプロセッシング・コアを含み、前述のプロセッシング・コアそれぞれは例えばCPUとして表し得る。前述のPUの1つ又は複数は更に、更なるプロセッシング・コア112乃至114、122乃至124などの1つ又は複数の更なるプロセッシング・コアを任意的に含み得る。前述のプロセッシング・コアはそれぞれ、コンピュータ読み取り可能な命令が電子ディジタル信号の形式で前述のコアにルーティングされる場合などに、電子情報を処理するよう構成される。更に、一実施例では、実現されたプロセッシング・コアは、シーケンシャル・コードを実行することができる予め定義された、又は拡張されたプロセッサ(例えば、x86、ARM又はMIPSプロセッサ)である。
更に、一実施例では、前述のPUの1つ又は複数はそれぞれ、例示的なキャッシュ・メモリ装置115、125などの少なくとも1つのキャッシュ・メモリ装置を含む。前述のキャッシュ・メモリ装置はそれぞれ、通信するよう、同じPU内に含まれるプロセッシング・コアに結合され、又は関連付けられる。更に、前述のキャッシュ・メモリ装置それぞれは、コンピュータ読み取り可能な命令及びデータを表す電子ディジタル情報などの電子情報を記憶するよう構成される。例えば、一実施例では、別々のコンピュータ読み取り可能な命令が、外部ソースから例示的なPU110、120それぞれに電子ディジタル情報の形式でルーティングされる。例示的なPU110、120それぞれにおいて前述の命令が受信されると、又は例示的なPU110における前述の命令の受信の後に、受信された命令は、例示的なキャッシュ・メモリ装置115、125それぞれに記憶される。その後、特定のキャッシュ・メモリ装置と同じPU内のプロセッシング・コアは、前述のキャッシュ・メモリ装置内に記憶されたデータ及び命令にアクセスし、アクセスされたデータに基づいて前述の命令を実行し、いくつかの処理結果を、当該結果が記憶されるキャッシュ・メモリ装置に返す。
よって、種々の実施例により、複数のPUが実現される。実現された、PU、又は、いくつかのその構成している構成部分は、集積回路(IC)チップ内又はパッケージ内に含まれ得る。しかし、本願の手法は、ICチップ又はパッケージの実現形態に制限されない。
なお図1を参照するに、PUはそれぞれ、通信するよう、バス130(例えば、データ/アドレス・バス)に関連付けられ、又は結合される。実施例では、バス130(及び/又は、例示的な処理アーキテクチャの種々の構成部分をリンクするその他の物理伝送路の1つ又は複数)は、例えば、チップ外PCBトラックなどの印刷回路基板(PCE)トラックを含む。バス130は、通信するよう、例示的なメモリ・コントローラ140、150などの1つ又は複数のメモリ・コントローラに関連付けられ、又は結合される。更に、前述のメモリ・コントローラはそれぞれ、通信するよう、例示的なメモリ装置141乃至144、151乃至154などの1つ又は複数のメモリ装置に接続又は結合される。前述のメモリ装置の1つ又は複数は例えば、ダイナミックRAM(DRAM)などのRAMを含み得る。
例示的な実現形態では、例示的なメモリ装置141乃至144、151乃至154などの1つ又は複数のメモリ装置は、命令及び/又はデータを記憶するよう構成され、例示的なメモリ・コントローラ140、150などの1つ又は複数のメモリ・コントローラは、前述のメモリ装置との間で移動する情報のフローを管理するよう構成される。命令及び/又はデータが、前述のメモリ装置から上記PUの1つ又は複数にルーティングされる場合、メモリ・コントローラは、前述のメモリ装置における当該情報にアクセスし、バス130に沿って適切なPUに情報をルーティングするよう構成される。
図1に示す例示的な処理アーキテクチャ100をなお参照するに、例示的なシナリオでは、前述のアーキテクチャは、種々の通信チャネルの競合、及び任意の動作についての長い転送経路に見舞われる。そういうものとして、実施例では、コアとそのデータ及びコードとの間の距離を最小にし、コア間の競合を最小にし、コード及びデータの移動を最小にするやり方でコア及びメモリが再構成される。これは単一のICプロセスでは困難であり得るが、ICの「ダイ・スタッキング」を行うことができることにより、これを実現することが容易になり、それにより、共有メモリ・バスがボトルネックのないネットワークで置き換えられ、複数のメモリ装置からの各メモリに、直接関連付けられたプロセッサが有り、CPUが複数のプロセッシング・コアを有し得る、図2に示すものなどのアーキテクチャが提供される。
更に例証するに、かつ、次に図2を参照するに、実施例による、例示的な分散処理アーキテクチャ(DPA)200を示す。例示的なDPA200は、例示的なPU210、220、230などの複数のPUを含み、前述のPUは、任意的には、「ダイ・スタッキング」された構成で配置し得る。例えば、「ダイ・スタッキング」は例えば、単一の半導体パッケージ内の他の1つの上に複数の構成部分(例えば、半導体チップ)をスタッキングする処理として定義し得る。したがって、実施例では、実現されたPUの2つ以上が互いの上にスタッキングされ、前述のスタッキングされたPUは、例えば、PCB上に搭載された単一の半導体パッケージ内に含まれる。
実施例では、実現されたPUは、通信するよう、ネットワーク240に結合され、又は関連付けられ、ネットワーク240は、前述のPUとの間の情報をルーティングするよう構成される。一実施例では、ネットワーク240は、局所及び/又は遠隔に配置されたコンピュータ及びサーバの分散ネットワークであり得る。しかし、本願の手法は、何れの特定のタイプのネットワークにも限定されない。
なお図2を参照するに、実現されたPUそれぞれは、例示的なCPU211、221、及び231などの少なくとも1つのCPUを含み、各CPUは、コンピュータ読み取り可能な命令が電子ディジタル信号の形式でCPUにルーティングされる場合などに電子情報を処理するよう構成される。一実施例では、実現されたCPUは、シーケンシャル・コードを実行することができる、予め定義された、又は拡張されたプロセッサ(例えば、x86、ARM又はMIPSプロセッサ)である。実現されたPUはそれぞれ、更に、例示的なRAM212、222、及び232などの少なくとも1つのRAM装置(例えば、DRAMメモリ装置)を含み、含まれたCPUは、その個別のPU内に配置されたRAM装置に、通信するよう関連付けられ、又は結合される。実現されたRAM装置はそれぞれ、その個別のCPUによって取り出し、又はアクセスし得る命令及び/又はデータを記憶するよう構成される。
更に、一実施例では、前述の大域マッピングされたRAM装置に記憶された情報を別々のPUに配置されたCPUによってアクセスし得るように前述のRAM装置の1つ又は複数が大域マッピングされる。例証するに、RAM212は、通信するようCPU211と結合され、又は関連付けられ、それらは両方、RAM212に記憶された情報をCPUが取り出し、又はアクセスすることができるように、同じPU(PU210)内に配置される。更に、例示的な実現形態によれば、RAM212に対して別々のPUに配置されたCPU221、231は更に、RAM212に記憶された情報を取り出し、アクセスすることができるようにRAM212が大域マッピングされる。特定のRAMの存在が、2つ以上のPUに知られている場合、前述のRAMは「共有RAM」として表し得る。しかし、個々のPUのRAMは、個々のPUのRAMの一部又は全てが前述のPU専用であるようにパーティショニングし得る。更に、「共有RAM装置」は例えば、それが実際に共有されているか否かに係わらず、特定のPUにおけるRAM全てを表し得る。
更に、かつ、なお図2を参照するに、各PUは、例示的なキャッシュ・メモリ装置213、223、及び233などのキャッシュ・メモリ装置を含み、前述のキャッシュ・メモリ装置は、その個別のPU内に配置されたCPU及びRAM装置と、通信するよう関連付けられ、又は結合され、前述のキャッシュ・メモリ装置は、例えば、メモリ管理及び/又はネットワーク処理に携わるよう構成し得る。実際に、一実施例では、特定のPU内に配置されたCPU、RAM装置、及びキャッシュ・メモリ装置は、例えば、スルーシリコンビア(TSV)/ワイド入出力(Wide−IO)(オンチップ)通信アーキテクチャを介して互いに通信するよう構成される。しかし、本願の手法は前述の特定の通信アーキテクチャに制限されず、他の処理アーキテクチャを実現し得る。
更に、かつ、なお図2を参照するに、実施例では、PUそれぞれがサーバであるサーバ・ファーム内のサーバのネットワークに同じ構造が含まれ、ネットワークはパケット交換(例えば、イーサネット(登録商標)パラダイム)型である。前述のシステムでは、メモリは、サーバ間でコヒーレントに管理されないことがあり得、メッセージパッシング・プログラミング・スタイルを、システム(例えば、メッセージ・パッシング・インタフェース(MPI))をプログラミングするために使用し得る。いくつかの例示的な実現形態に従って、本明細書及び特許請求の範囲記載の手法は、前述の大規模分散システム及びより小規模の高集積並列システムをプログラミングするための統合手法を提供する。
システム性能に関しては、かつ、例示的な実現形態によれば、各プロセッサは、そのスタック・フレームを表す「コンテキスト」を有する。特に、実行されたプログラムが特定の時点において入っているルーチンを表す、その中で動作しているそのメモリ・スタックを有する。したがって、プロセッサが現在入っているルーチンは、例えば、そのコンテキストとして表し得る。更に、上記ルーチンのための情報が、前述の情報をすばやくアクセスし得るように局所CPUレジスタ内に記憶されている限り、前述のレジスタはプログラム・カウンタ(又は命令ポインタ)とともに、特定の処理のコンテキストを表すものとして解し得る。よって、「タスク・コンテキスト」は、例えば、特定のタスクであって、中断されたちょうどその時点における前述の同じタスクの首尾良く行われる継続が後続する特定のタスクの中断を可能にするために保存する対象の上記タスクによって利用される最小のデータの組として定義し得る。上記に鑑みて、一実現形態では、「コンテキスト」は、(例えば、メモリ・アドレスを有していないので)プログラマが視ることができないが、しかしながら、実行されているコードによって利用されるコール・スタック及びレジスタ内に記憶されたデータを含む。
プロセッサが、新たなルーチンをコールする場合、メモリからこの他のルーチンの新たな命令をフェッチし、次いで、実行する。これは、例えば、コールが実行された場合に、プロセッサが一フレームから別のフレームに移動する「コンテキスト・スイッチ」として表し得る。前述のコンテキスト・スイッチは、現在実行しているスレッドによって使用されるCPUレジスタを局所に保存し、次いで、実行される対象の次のスレッドによって使用される対象のレジスタをロードすることによって行い得る。更に、前述のコンテキスト・スイッチは、複数の処理が単一のCPUを共有することを可能にし得、したがって、マルチタスク・オペレーティング・システムの極めて重要な特徴であり得る。特に、前述のコンテキスト・スイッチは、複数の処理が同じプロセッサ上で同時に実行されているように見え得るように極めて高速に行われる。
図2に示す例示的なDPA200をなお参照するに、実施例では、このアーキテクチャは、ネットワーク及びキャッシュの実現形態に応じて、キャッシュ・コヒーレントである(か、又はキャッシュ・コヒーレントでない)ことがあり得るNUMAアーキテクチャである。同様に、メモリは、一大域アドレス空間を形成し、実現された複数のプロセッサのうちの各プロセッサに利用可能であるように構成してよく、しなくてもよい。
上記に係わらず、例示的なシナリオでは、前述の分散アーキテクチャに問題が存在している。特に、有限量の局所メモリ及びキャッシュがなお存在しているので、メモリ内のタスクの動作は、例示的な処理アーキテクチャ100によって実現し得るものよりも好適であり得るが、プロセッサは、要求されたデータ又はコードが特定のプロセッサについて局所に記憶されていない((x86又はARMプロセッサのように)通常コード実行が行われた場合にキャッシュ及び/又はメモリ(例えば、DRAM)との間でのデータの「スワップ」イン及び「スワップ」アウトのための管理が関係する)場合、なおストールする。更に、第2の例示的なシナリオでは、SMP処理アーキテクチャは好適にスケーリングしないことがあり得、併せて使用されるソフトウェア手法も同様であり得る。しかし、本願の手法の実施例では、例えば、コーディング・スタイルがSMPでなくメッセージパッシングであり、各「スレッド」を特定のCPUに結合し、又は割り当てることが可能な場合に前述の問題に直面することなく、DPAを効果的に使用し得る。「スレッド」は、プログラムの他のコードと無関係に実行することが可能なプログラム内の独立した命令シーケンスとして定義し得る。特に、各スレッドはコードにわたる別個の制御パスを表し、複数のスレッドが特定の処理において定義されている場合、前述のスレッドそれぞれは、実質的に互いに無関係になる。
上記に鑑みて、単純なDPAに対する、提案されたいくつかの拡張/修正について本明細書において掘り下げてみる。前述の提案された拡張/修正は、いくつかの観察によってサポートされる。まず、かつ、次に図3を参照するに、実施例による例示的な進歩解析300の図を示す。図では、垂直軸310は、プロットされた情報のサイズを測定するために使用され、水平軸320は、プロットされた情報に関連付けられた技術的進歩を測定するために使用され、技術的進歩は情報サイズの関数である。更に、データ及びコードについての観察が前述のデータ及びコードのサイズの増加とともに、プロット330及び340それぞれとしてプロットされる。図は、経時的にコード及びデータについての観察可能な結論を(例示的なシナリオに従って)もたらし、データが指数関数的に増加する一方で、コード・サイズは対数関数的に増加する。この理由は、データ容量は、(IC内のトランジスタの数が約2年毎に倍になると表す)ムーアの法則に従うようにみえる一方、コードは、経時的に再使用される傾向にあり、コール又は利用されることが多い場合がある関数を有するという点である。
更に、例示的なシナリオによれば、第2の観察では、特定のデータ・タイプについて、それに対して行われる固定数のオペレーションが存在している。これは、(以下、単に「C++」及び「C」それぞれとして表される)Cプログラミング言語に基づいたC++プログラミング言語などの「オブジェクト指向」プログラミング言語において公式化し得、データは「クラス」に属しているとして表され、クラスが例えば、データを実現することが可能な有限数の「メソッド」又はルーチンを含む。
前述の2つの観察に鑑みれば、特定のタイプの複数のデータの組それぞれが、DPAにおける特定のPUのメモリに割り当てられた場合、前述のデータを処理するよう利用されたコードはその特定のデータ・タイプの手法に注力され、実現されたコードの量は、(一実現形態によれば、)データ自体よりもずっと小さくなる。よって、特定のPU内では、局所に記憶される対象のコードは、局所に保持されたデータのメソッド・コードになる。これは、本明細書で更に掘り下げるように、比較的高い度合いの処理効率を実現することが可能になる。
B 例示的な処理リソース割り当て
次に、いくつかの例示的な処理割り当て手法について掘り下げてみる。しかし、本願の手法は前述の例示的な処理リソース割り当て手法に制限されず、他の処理リソース割り当て手法を実現し得る。
上記に鑑みれば、かつ、次いで図4を参照するに、実施例による、処理リソース割り当て400の例示的な方法を示す。処理リソース割り当て400の例示的な手法は、予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程410と、予め選択されたデータ場所に基づいて第1のPUから第2のPUに命令のコールを転送するか否かを判定する工程420とを含む。例証すれば、第1のPUに割り当てられたキャッシュ・メモリ装置にデータが現在、記憶されていないが、第2のPUに割り当てられた別のキャッシュ・メモリ装置に現在記憶されていることがあり得る例を考えてみる。第2のPUが既に、この局所的に記憶されたデータへの相対的にすばやいアクセスを有するように、この別のキャッシュ・メモリ装置が実際に、このデータを現在、記憶している場合に、上記命令が関係する「制御のスレッド」を、(第2のPUがデータにアクセスすることができる相対的なケースが理由で、かつ、このデータの局所の複製を記憶して命令を実行する処理を第1のPUが開始することを阻止するために)第1のPUから第2のPUに転送し得る。このようにして、データ自体でなく、制御のスレッドを移動させ得る。
スレッドを移動させることは一方向のタスクであり得る一方、例示的な一シナリオに従えば、要求が送出され、次いで、データが戻されるという点で、データ/コード・フェッチが双方向である。高帯域幅低レーテンシ通信チャネル(例えば、光ファイバ・チャネル)の場合、純粋に、関係する距離の結果としてデータ/コードを要求するよりも、スレッド・コンテキストを移動させるほうが速いことがあり得る。特に、電子信号は光速近くで移動するが、これはなお、ナノ秒毎数センチメートルに過ぎない。対照的に、いくつかの例示的なプロセッサは、多くのオペレーションを単一のナノ秒以内に行うことが可能である。
更に例証すれば、例示的な一実現形態では、第1のPUは(このPUが特定の「制御のスレッド」を有しているように)スレッドを実行する。次に、この第1のPUの判定点は、例えばコード・ジャンプが関係し得るジャンプ又はルーチン・コールを第1のPUが行う場合に提示される。特に、第1のPUは、ジャンプする先のメモリ・アドレスを識別し、第1のPUは次いで、それ又は別のPUがジャンプ又はルーチン・コールを行うか否かを決定する。この決定を行うために、第1のPUは、(1)どのデータが関係しているか、(2)対応するデータがどこに配置されているか(例えば、ルーチンに特定のオブジェクトが関係する場合、そのオブジェクトの場所が判定される)、及び(3)どのPUが、この特定の場所に対応する局所メモリ(例えば、L1キャッシュ又はRAM全て)を有しているかを判定する。この場所情報及び対応するPU識別情報に基づいて、第1のPUは、ジャンプ又はルーチン・コール自体を行うか、又は、さもなければ、制御のスレッドを別のPU(例えば、第2のPU、第3のPU等)に転送(又はパス)するかを判定することができる。この制御のスレッドが実際に、別のPUにパスされる場合、この他のPUはコールを行い、第1のPUは次いで、別のスレッドを実行し始めることを自由にできる。
更なる例証の目的で、例示的な実現形態では、C++において、第1のPUは、メソッドに対する実行可能なルーチン・コールを行い始め、前述のルーチンの実行のために取り出す対象の特定のオブジェクトにマッピングされたデータ・ポインタが存在している。このポインタは、実行側PUが特定のレジスタから動作するようにコール内の特定の引数内に配置される。第1のPUはこのレジスタをみて、どのメモリ値がその中に記憶されているかを判定し、そのメモリ値が第1のPUに属さない場合、コールを別のPUに転送し、その場合、第1のPUは、そのルーチンに関連付けられた更なるコードの取り出し、解析、又は処理をわざわざ行うには及ばない。
上記に鑑みれば、実施例では、第1のPUは、DPAにおける制御の上記スレッドを受け取り、特定のタイプの複数のデータの組はそれぞれ、前述のDPA内の第2のPUのメモリに割り当てられ、第1のPUの転送決定の対象であるデータは、前述のデータの組の1つに対応する。よって、第1のPUが既に、このデータの複製を記憶している訳でない場合、第1のPUはこの制御のスレッドを第2のPUに転送し、第2のPUは、その局所に記憶されたデータに対するメソッド・コードを局所に記憶する。上述のように、これは、比較的高い度合いの処理効率を実現することを可能にする。このデータを処理するために利用されるコードは、その特定のデータ・タイプのメソッドに注力し、実現されるコードの量は、(一実現形態によれば、)デ―タ自体よりもずっと小さくなる。
更に例証するに、かつ、次に図5を参照するに、実施例による、例示的な処理リソース割り当てパラダイム500を示す。特に、予め選択されたデータ場所530を有するデータ520にマッピングされた命令510が識別される(そうしたことは、第1のPU540が命令510を受け取ると行われ得る)。予め選択されたデータ場所530は、例えば、特定のPUの局所メモリ内に配置し得る。更に、予め選択されたデータ場所530に基づいて第1のPU540から第2のPU580に命令510のコール570を転送するか否かを判定するために、処理リソース割り当て装置560などにより、処理リソース割り当て550が行われる。例えば、選択されたデータ場所530が第1のPU540の局所メモリ内に配置されている場合、コール570は転送されず、この場合、第1のPU540は制御のスレッドを維持し、コール570を行う。あるいは、選択されたデータ場所530が第1のPU540の局所メモリ内に配置されていないが、第2のPU580の局所メモリ内に配置されている場合、コール570は第2のPU580に転送され、この場合、第2のPU580は制御のスレッドを取得し、コール570を行う。
なお、図5を参照するに、処理リソース割り当て550は処理リソース割り当て装置560によって行い得る。実施例では、処理リソース割り当て装置560は、第1のPU540などの、実現されたPUの1つ又は複数を含む。更に、一実施例では、処理リソース割り当て550は第1のPU540によって行われる。しかし、処理リソース割り当て550は、第1のPU540以外のPUによって行い得る。
上記に鑑みれば、例示的な実現形態には、特定のプロセッシング・コアとの間でデータを出し入れするのでなく、コンピューティング・コンテキストをその関連付けられたコード及びデータに移動させることが関係する。よって、特定のプロセッサが、(1)特定の処理時間スパン内のデータ・タイプの特定の部分集合のみを扱い、(2)命令のキャッシュをミスせず、(3)データのキャッシュをミスする可能性が低いように局所性を維持するやり方で大域共有メモリにわたってデータを分散させる。実際に、同じデータを使用したスレッドは同じプロセッサに誘導されるので、プロセッサ間キャッシュ・コヒーレンシが実現されるか否かにかかわらず、比較的高い度合いの処理効率が実現される。前述の手法は例えば、「ワンダリング・スレッド」として表し得る。単一の制御スレッドは、別々のメモリ領域にアクセスしている間にプロセッサ間でのワンダリングを行い得る。更に、一実施例では、実現されるプロセッサが多いほど、スレッドが同じプロセッサ上にあり、リソースに対する競合関係にある確率が低くなる。同様に、実現されたプロセッサの数が高いほど、外部DRAMでなく、局所キャッシュに関連データが記憶されることになる。
上記にかかわらず、上述のような処理リソース割り当て400の例示的な手法は補足し、かつ/又は修正し得る。実際に、例証の目的で、いくつかの例示的な実施例を次に掘り下げてみる。しかし、本願の手法は前述の例示的な実施例に制限されない。
図1に示す実施例と同様に、通信するよう、互いに関連付けられ、又は結合され、若しくは互いに接続された複数のPUを含む並列処理マシンによって実現し得るような処理マシン、システム、又はアーキテクチャを提供し、複数のPUはそれぞれ、局所メモリを有し、複数のPUは、命令に関連付けられたメモリにおけるデータ又はコードの場所に基づいて命令を実行し、又は命令の実行を別のPUに転送するよう構成される。例証するに、かつ、次に図6を参照するに、実施例による第1の例示的なコール転送パラダイム600を示す。特に、命令510に関連付けられたコード又はデータ・メモリ場所610が識別され、第2のPU580に関連付けられたコード又はデータ・メモリ場所610に基づいて第1のPU540から第2のPU580にコール570が転送される。
第1のキャッシュ・メモリ装置620及び第2のキャッシュ・メモリ装置630が第1のPU540及び第2のPU580それぞれと関連付けられる(例えば、第1のPU540及び第2のPU580それぞれに割り当てられ、又は、第1のPU540内及び第2のPU580内それぞれに含まれる)例を考えてみる。メモリ場所識別640は例えば、第1のPU540などによって行われ、データ520が、コード又はデータ・メモリ場所610(図5に示す選択されたデータ場所530)に現在されていることが判定され、コード又はデータ・メモリ場所610が、第1のキャッシュ・メモリ装置620内でなく第2のキャッシュ・メモリ装置630内に配置される。データ520へのアクセスが、その全体で命令510を首尾良く実行するための条件であるようにデータ520にマッピングされるのでこのことは重要である。よって、コール570は第1のPU540から第2のPU580に転送される。第2のPU580は既に、データ520に対する局所アクセスを有するからである。特に、第2のPU580によるコール570の実行には、外部メモリへのデータ要求の送出に関連付けられた更なる時間及びエネルギが関係せず、次いで、返された値/データの組を待たない。
更に説明するに、プロセッサが、相対的に大きいか、又は複雑なプログラムを実行する例を考えてみる。このプログラムのサイズのサイズ又は複雑度が理由で、プロセッサは場合によっては、命令キャッシュをミスする。場合によっては、プログラム実行には、共有メモリから新たな命令の組をフェッチすることが関係する。更に、オブジェクト指向言語では、特定のタイプのデータが、コードが記述されたやり方での特定のオペレーションに関連付けられ得る。よって、実施例では、特定の処理時間スパン中にこのプロセッサが、その特定のタイプのデータと相互作用するコードのみを処理するように、特定のタイプ及び特定の空間のオブジェクトが、特定のプロセッサに割り当てられる。したがって、プロセッサがL1キャッシュ内に、又は、前述のL1キャッシュの予め選択された部分内にのみ、特定のタイプのデータを有している場合、プロセッサは、比較的少数の命令を特定の処理時間スパン中に実現するに過ぎず、これにより、プロセッサが命令キャッシュをミスする可能性が非常に低くなる。
よって、実施例では、局所的にコールを実行する代わりに、第1のプロセッサは代わりに、コンテキストをパスし、具体的には、第2のプロセッサが既にそれ自身のL1キャッシュに関連データを有している場合に、上記第2のプロセッサにコールを転送する。よって、移動するのはデータ自体よりもむしろ、コンテキストである。基本的に、第1のプロセッサは、特定のコンテキストを断念し、別のプロセッサにパスする。更に、一実施例では、第2のプロセッサは、このコンテキストを断念することになった場合、それを第3のプロセッサにパスする等である。その結果、制御のパスされたスレッドは例えば、「ワンダリング・スレッド」と表し得る。よって、制御のスレッドは、命令及びデータが局所メモリに配置された別のプロセッサにパス(又は「ワンダリング」)し得る。
特定の処理アーキテクチャを選択する目的で、ワンダリング・スレッドは例えば、本明細書及び特許請求の範囲記載のDPA上などで実現し得る。例えば、多くのスレッドはDPAシステムにおいて同時に行い得、よって、互いに別のデータを利用している場合に前述のスレッドが衝突する可能性は低くなる。しかし、本願の手法はDPAの実現形態に制限されない。むしろ、ワンダリング・スレッドは更に、DPA以外のアーキテクチャ上で実現し得る。実際に、一例では、イーサネット(登録商標)通信を利用するサーバ・ファームは同様な構造を有し得る。
コール転送機構を参照するに、実施例では、メッセージ・パッシング・コードの実行には、PU間でデータを転送する機能のみならず、それが到着した際にそれを処理する機能も関係する。これは例えば、本明細書及び特許請求の範囲に更に記載するリモート・プロシージャ・コール(RPC)として実現し得る。RPCは、例えば、プログラムを実行している第1のPUのコンピューティング・コンテキストを第2のPUに転送して、プログラムの実行を継続することを可能にするよう構成された機構であって、コンパイラが、別々のコール境界を有するようユーザのコードを改修し得る機構として定義し得る。例えば、単にPU間でデータをパスするよりもむしろ、データ及びハンドラ・ルーチン・エントリ・ポイントが送出される。よって、単一スレッドのコードは、PU間で制御を転送するためにRPC機構を使用することにより、統合大域アドレス空間を有するDPA上で実行させ得る。したがって、命令及びデータを連続して読み込むことにより、単一のスレッド・コードを単一のコアに実行させるよりもむしろ、制御のスレッドは、どのデータが処理されているかに応じてPU間でワンダリングする。メソッド・コードが、PU上にデータとともに存在している可能性が高い限り、生起する「キャッシュ・ミス」は比較的少なくなる。このようにして、キャッシュ・ミスのコストは、コール・コンテキストの転送のオーバヘッドと交換し得る。特定のルーチン・コール又はオペレーションについてアクセスされているメモリが別のPUに属していること、及び前述のPUに制御を転送することが有益であり得ることを識別するためにハードウェア・サポートがコアに追加された場合、種々のプロセッサについてコンパイルされた単一スレッドのコードに前述の手法を使用し得る。
C 例示的なメモリ割り当て
次に、いくつかの例示的なメモリ割り当て手法について掘り下げてみる。しかし、本願の手法は前述の例示的なメモリ割り当て手法に制限されず、他のメモリ割り当て手法を実現し得る。
実施例では、前述の別々のPUそれぞれが特定のスレッドを効率的に処理するよう構成されるように前述のPUによって、ワンダリング・スレッドが受信される前に、別々のPUのそれぞれの局所メモリが別々のデータの組に割り当てられる。このようにして、比較的、効率的であり、かつ特化された処理アーキテクチャを実現し得る。
例証するに、かつ、次に図7を参照するに、実施例による、例示的なメモリ割り当てパラダイム700を示す。特に、第1のPU540及び第2のPU580それぞれに関連付けられた(例えば、それぞれに割り当てられ、又はそれぞれの中に含まれた)第1のキャッシュ・メモリ装置620及び第2のキャッシュ・メモリ装置630は、キャッシュ・メモリ識別701によって表されるように識別される。更に、第1のデータの組730及び第2のデータの組740それぞれに関連付けられた第1のデータ場所710及び第2のデータ場所720はそれぞれ、データ場所識別702によって表されるように識別され、第1のデータ場所710及び第2のデータ場所720は、第1のキャッシュ・メモリ装置620内及び第2のキャッシュ・メモリ装置630内それぞれに配置される。例えば、第1のデータ場所710及び第2のデータ場所720は、第1のデータ場所710及び第2のデータ場所720それぞれに記憶されている第1のデータの組730および第2のデータの組740に基づいて識別し得る。
更に、第1のデータの組730及び第2のデータの組740それぞれにキャッシュ・メモリ割り当て703によって表されるような第1のキャッシュ・メモリ装置620及び第2のキャッシュ・メモリ装置630の割り当ては第1のデータ場所710及び第2のデータ場所720に基づいて行われる。特に、第1のデータ場所710及び第2のデータ場所720が第1のキャッシュ・メモリ装置620内及び第2のキャッシュ・メモリ装置630内それぞれに配置されている限り、第1のキャッシュ・メモリ装置620及び第2のキャッシュ・メモリ装置630は第1のデータの組及び第2のデータの組740それぞれに割り当てられる。よって、前述のキャッシュ・メモリ装置は、例えば、別々のプロセス・スレッドを行うためにアクセスし得る全く別々のデータの組に割り当てられている。このようにして、特定のPUは、その局所メモリが既に割り当てられている特定のデータの組にマッピングされたスレッドを効率的に処理するよう構成し得る。
よって、かつ、なお図7を参照するに、第1のデータの組730に関する制御のスレッドが第2のPU580によって受信された場合、第2のPU580はこの制御のスレッドを第1のPU540にパスし得る。第1のPU540は既に、この特定のデータの組に割り当てられているからである。同様に、第2のデータの組740に関する別の制御のスレッドが第1のPU540によって受信された場合、第1のPU540はこの別の制御のスレッドを第2のPU580にパスし得る。第2のPU580は既に、この特定のデータの組に割り当てられているからである。
更に、第1のデータの組730及び第2のデータの組740が別々の2つのデータ・タイプそれぞれを有している場合、前述の2つのデータ・タイプのうちの1つを有する第3のデータ・タイプは、この同じデータ・タイプを有するデータを既に記憶しているキャッシュ・メモリ装置にルーティングし得る。このようにして、特定のデータ・タイプを共有する複数のデータの組は、特定のPUについて、同じ局所メモリ装置内で同じ場所に配置され、これは更に、その局所に記憶されたデータにマッピングされたスレッドを前述のPUが処理することができる相対的な効率を増加させる。
次に図8を参照すれば、実施例による例示的な第2のコール転送パラダイム800を示す。特に、命令510にマッピングされたデータの組810は、データの組の識別820によって表されるように識別される。更に、第1のキャッシュ・メモリ装置620内ではなくむしろ(例えば、第2のデータ場所720における)第2のキャッシュ・メモリ装置630内に、データ場所判定830によって表されるように、データの組810が現在記憶されていることを判定して、それにより、第1のPU540から第2のPU580にコール570を転送する旨を決定する。
例えば、データ場所判定830が行われ、これにより、データの組810が第1のキャッシュ・メモリ装置620内に配置されていないことが判定される。よって、データ場所判定830には、(第1のPU540などの)実現されたPUの1つに、通信するよう関連付けられ、又は結合し得る任意のメモリ管理装置(MMU)840との通信などにより、利用可能なその他のPUの1つ又は複数がデータの組810を現在記憶しているかを判定することがその後、関係する。この問い合わせの結果、データの組810が、第2のキャッシュ・メモリ装置630に現在、記憶されていることが判定される。更に、コール転送判定850が行われ、それにより、(1)データの組810が、第1のキャッシュ・メモリ装置620に現在記憶されておらず、(2)データの組810が、第1のキャッシュ・メモリ装置620に現在、既に記憶されている結果として、第1のPU540から第2のPU580にコール570を転送する旨が決定される。
上記に鑑みて、実施例に従って、コールを転送するか否かは、データの特定のデータ・タイプでなくむしろ、データの場所(例えば、物理アドレス)に基づいて判定される。例えば、データ・タイプに基づいてコールを転送する旨を決定するよりもむしろ、特定のPUが、その局所メモリに記憶された、ほとんど同じタイプのデータを有するように同じタイプのデータが同じ場所に配置されることを確実にするために、データ・タイプ情報に、メモリ割り当て器によって事前にアクセスし得る。更に、コードの静的解析は、割り当ての局所性を誘導する別のメモリ割り当て器の生成を助けるために実現し得る。更に、大量に使用されるデータに対する要求を更に効果的に処理することが可能であるように、複数のPUは同じデータの複製を有し得る。そういうものとして、実施例では、データ・タイプは、データの場所よりも、コール転送決定におけるよりも重要度が低いが、データの場所は、適用可能なデータ・タイプのプロキシを表し得る。実際に、種々の例示的な実現形態では、ランタイム・システムは、コード・ストリーム内の(ポインタとしての)アドレスを識別することができるが、データ・タイプ情報を識別することはできない。
D 例示的な転送決定処理
次に、いくつかの例示的な転送決定手法について掘り下げてみる。しかし、本願の手法は前述の例示的な転送決定手法に制限されず、他の転送決定手法を実現し得る。
はじめに、ワンダリング・スレッドをサポートするために、種々の機構を(場合によっては同時に)実現し得る。前述の機構はハードウェア・サポート及びソフトウェア・サポートを含み得、前者は、プログラムの実行に対してトランスペアレントであり、後者には、ロード前後のコードの修正が関係する。
i ハードウェア・サポート
次に、いくつかの例示的なハードウェア・サポート手法について掘り下げてみる。しかし、本願の手法は前述の例示的なハードウェア・サポート手法に制限されず、他のハードウェア・サポート手法を実現し得る。
例示的な実施例によれば、別々の2つのレベルのハードウェア・サポートを提供し得る。第1のレベルには、メモリのリダイレクト・セクタにコードが記憶されているか否かを判定することが関係する。肯定の場合、アクセスされたコールが、潜在的なリダイレクト・コールであると識別される。否定の場合、コールは、別のPUに転送されるよりもむしろ、第1のPUによって行われる。しかし、ハードウェア・サポートの第1のレベルの結果として、コールが、潜在的なリダイレクト・コールとして識別された場合、第2のレベルには、コールを当該PUに再誘導し得るように、関連したデータをどのPUが記憶しているかを識別することが関係する。
したがって、一実施例では、コール転送手法のためのハードウェア・サポートは、場合によっては転送することが可能なコール又はオペレーションを識別する工程、転送についてどの実際のコール又はオペレーションを考慮に入れるかを識別するためにルックアップ機構を実現する工程、及びPU識別子変換にアドレスを供給する工程を含み得る。上記に鑑みて、次にいくつかの例示的な手法を掘り下げてみる。
a シャドー・レジスタ
実施例では、「シャドー・レジスタ」は、制御の直接の転送(direct transfer)、及び、転送についてのサポート・ソフトウェアの(例えば、ユーザ・レベルの)意思決定を行うために使用される。例証するに、かつ、例示的な実現形態に応じれば、PUはデータ・パス又は「パイプライン」を有する。更に、PUは、通信するよう、PUによって要求されたメモリへのアクセスを管理するよう構成されたMMU(例えば、図8に示すMMU840を参照)と関連付けられ、又は結合される。特に、PUは、コールを受信すると、MMUに、対応するメモリ・アドレスについての情報を要求する。アドレスがパイプライン上で充填されるので、MMUは、PU内の余分なレジスタ(例えば、シャドー・レジスタ)を充填して、それにより、それがどの種類のアドレス(例えば。局所、共有、リダイレクト可能)であるかを識別する。PUが、前述のアドレスの1つにマッピングされたコードをコールすると、PUは、コールを転送すべきか否かの判定を助けるためにそのシャドー・レジスタにアクセスすることが可能である。
例えば、一実施例は、コードのプリフェッチ、及びディープ・データパスをプロセッサに提供し、どのポインタ・レジスタが、関連付けられたPUを有しているかをマーク・アップ(mark up)するために使用される。コール及び命令の扱いについての情報は、命令/データ・キャッシュにおいてタグとして保持される。例えば、命令又はデータが、メモリからキャッシュにフェッチされると、タグが、将来の使用のためにセットされる。DPAが、相対的に低いキャッシュミス・レートを有している限り、タグ評価のコストは、全体的な性能に影響を及ぼさず、メモリ・フェッチと並列に行うことが可能である。よって、タグ評価は、既にキャッシュされているサポート・コードによって行い得る。
次に図9を参照すれば、実施例による例示的なPU識別パラダイム900を示す。特に、第1のPU540に関連付けられた(例えば、第1のPU540に割り当てられているか、又は第1のPU540内に記憶された)キャッシュ・メモリ装置910が選択され、命令510に関連付けられた(例えば、命令510にマッピングされた)コード又はデータ920がキャッシュ・メモリ装置910にフェッチされる。更に、第1のPU540に関連付けられたPUデータ・パス931が識別され、PUデータ・パス931内のシャドー・レジスタ値930は、少なくとも1つのPU950が既にコード又はデータ920を局所に記憶している場合などの、コード又はデータ920に関連付けられた少なくとも1つのPU950を示すPU識別子940をシャドー・レジスタ値930が反映するように定義される。
第1のPU540が、いくつかのシャドー・レジスタ960、及びキャッシュ・メモリ装置910を含み、通信するよう、第1のPU540に関連付けられ、又は結合された、MMU840などによるシャドー・レジスタ960にPU識別子940が記憶された例を考えてみる。シャドー・レジスタ値930はPUデータ・パス931において定義され、シャドー・レジスタ値930はPU識別子940を反映する。PU識別子(及び、同様に、定義されたシャドー・レジスタ値930)が、コード又はデータ920への局所アクセスを既に有する少なくとも1つのPU950を示している限り、少なくとも1つのPU950の識別は、単に、シャドー・レジスタ値930にアクセスすることによって確かめ得る。
例示的な実現形態に従って、プロセッサの「データ・パス」は例えば、プロセッサ・コアのデータを調整するステージのパイプラインとして定義し得る。各パイプライン段は、一バージョンのレジスタを有し得る。パイプラインはキャッシュ・ミスによってストールするが、ストールしたパイプラインをスキップすることが可能であるように、複合プロセッサは複数のパイプラインを並列に実行させ得る。シャドー・レジスタは、(例えば、ポインタ・アドレス(又はランダム・データ)で)レジスタを充填すると、通常のレジスタとともにパイプラインに沿って進み、次の(又は後続する)パイプライン段は、このアドレス(又はデータ)が属するPUはどれかについてのMMUの推測をシャドー・レジスタに加え得る。多くのプロセッサの場合、メモリ内のコードと、データ自体との間で、ハードウェア・レベルに実際の区別は存在しないので、コードは、特別なタイプのデータとしてみることができる。更に、特定のプロセッサは実際に、前述の区別を行う。特に、前述のプロセッサは、「ハッキング」を阻止するためにコードの書込保護を行い、かつ/又は、データの実行をブロックするが、前述の保護は、後方互換性のための任意なものであり得る。
上記に係わらず、プロセッシング・コアは、そのデータ・パスの各段におけるシャドー・レジスタの状態を評価し、スレッドの制御を別のプロセッシング・コアに転送するか否かを決定することが可能である。転送が、ハードウェアによって自動的に実行されない場合、シャドー・レジスタ内の情報はなお、本明細書及び特許請求の範囲などに記載のソフトウェア方法論をサポートするためにコードに利用可能となる。
一実施例では、PU毎チューニングは、メモリからリードオンリ・モードにおいて動作している命令キャッシュを修正することによって実現し得る。よって、命令キャッシュ・リダイレクト・タグを評価する場合、キャッシュにロードされたコード(例えば、コール・アドレス等)を修正し得る。実行前のコードの修正を避け得るように、かつ、リダイレクトを実現しない場合にPU動作に対する重大な影響が存在しないように、PU毎にルーチンの通常バージョンをリダイレクト・バージョンと交換するために前述の機構を実現し得る。
更に、実施例では、複数のPUは、同じデータの複製を有し得、各PUは、シャドー・レジスタをPU識別子で充填するMMU840がPUをうまく選ぶことが可能であるようにネットワークに対して、どの程度のビジー状態にあるかに関するメッセージを送出するよう構成される。更に、動作についてのPUメッセージからDPA内の「ホット・スポット」を識別し、メモリの特定の領域に、更なるPUを割り当てるために、システム監視プロセスを実現し得る。
b リダイレクト・コール
コンパイルされたコードの本体を前提として、別の実現形態を指し示すように、リンク又はロード中に、ルーチン・コールをリダイレクトすることが可能である。このルーチン・コールをリダイレクトすると判定された場合、前述のコールは例えば、「リダイレクト・コール」として表し得る。
次に図10Aを参照すれば、実施例による例示的なリダイレクト・コール識別パラダイム1000を示す。特に、キャッシュ・メモリ識別701によって表されるように第1のキャッシュ・メモリ620及び第2のキャッシュ・メモリ630が識別され、第1のキャッシュ・メモリ装置620、630は、第1のPU540及び第2のPU580それぞれと関連付けられる(例えば、第1のPU540及び第2のPU580それぞれに割り当てられ、又は第1のPU540内及び第2のPU580内それぞれに含まれる)。更に、コール570は第1のPU540によってアクセスされ、コール570は、予め選択されたデータ場所530に命令510がマッピングされたことを示す引数1020を含む。更に、データ場所判定830によって表されるように、予め選択されたデータ場所530が第1のキャッシュ・メモリ装置620内に配置されていないことについての判定を行うために引数1020が、第1のPU540によって解析される。更に、コール570が、この判定に基づいて潜在的なリダイレクト・コール識別1010によって表されるものなどの潜在的なリダイレクト・コールとして識別される。
コール570が、潜在的なリダイレクト・コールとして識別された後、この潜在的なリダイレクト・コールを別のPUに転送するべきか否かが判定される。例示的な一実現形態に従って、「ターゲット」コードが局所で実行され、その場合、リダイレクト・コール機構は実行されない。例証するに、かつ、次に図10Bを参照するに、実施例による例示的なターゲット・コード実行パラダイム1001を示す。特に、コール570は、潜在的なリダイレクト・コール1030として表すように潜在的なリダイレクト・コールとして識別され、かつ、データ場所830によって表すように予め選択されたデータ場所530が第2のキャッシュ・メモリ装置630内に配置されていないことを判定して、それにより、ターゲット・コード実行判定1040によって表すような決定を行って、第1のPU540との潜在的なリダイレクト・コール1030に関連付けられた(例えば、マッピングされた)ターゲット・コード1050を実行する。更に、ターゲット・コード1050は、この決定に基づいて第1のPU540により、ターゲット・コード実行1060によって表すように実行される。
上記にかかわらず、予め選択されたデータ場所530が、第1のPU540以外のPUに割り当てられたキャッシュ・メモリ装置内に配置された場合、一実施例では、コールは前述の他のPUに転送される。例えば、かつ、次に図10Cを参照するに、実施例による第3の例示的なコール転送パラダイム1002を示す。特に、データ場所830によって表すように予め選択されたデータ場所530が第2のキャッシュ・メモリ装置630内に配置されていることを判定して、それにより、実リダイレクト・コール識別1080によって表すように、実リダイレクト・コール1070として潜在的なリダイレクト・コールを識別する。よって、実リダイレクト・コール1070が第1のPU540から第2のPU580に転送される。
c. メモリ・パーティショニング
よって、実施例では、PUは、コールを転送するか否かを、当該コールに関するデータが別のPUの局所メモリ(例えば、DRAM)に既に記憶されているか否かに基づいて判定するよう構成される。あるいは、又は上記に加えて、一実施例では、共有メモリの特定のセクタ(例えば大域アドレス範囲1000乃至2000)に命令が記憶されているか否かを判定することにより、コールを転送するかをPUが判定することができる。
特に、共有メモリの特定の予め定められた領域にコードが割り当てられるようにコード自体をロードし得る。例えば、コードの静的な解析は、コード・タイプを求めるよう実現し得、この情報はメモリ配置を駆動させるために使用し得る。更に、コードが、割り当てられたメモリにロードされた後、かつ、コードのアドレスが後に識別された後、このアドレス情報は、コードに関連付けられた性質(例えば、リダイレクト可能、又はそうでない)を示す。したがって、一実施例に従って、コールにマッピングされたコードがメモリの「リダイレクト・セクタ」に記憶されているか否かが判定される。リダイレクト・セクタの場合、リダイレクト・セクタの開始アドレス及び終了アドレスを識別して、それにより、リダイレクト・アドレス範囲を作成し得、アドレスがこの範囲内に入る場合、コールは潜在的なリダイレクト・コ―ルとして識別される。否定の場合、コールは、別のPUへの、考えられる転送のために更に精査されるよりもむしろ、局所で直ちに行われる。
例証するに、かつ、次に図11を参照するに、実施例による、例示的なコール転送判定パラダイム1100を示す。特に、命令510を記憶させた共有RAM装置1110は、RAM選択1120によって表されるように選択される。更に、共有RAM装置1110のセクタが、リダイレクト・セクタ識別1130によって表すように、リダイレクト・セクタ1111として識別され、リダイレクト・セクタ1111は、共有RAM装置1110の非リダイレクト・セクタ1112と区別可能である。更に、特に、命令場所判定1140によって表すように命令510がリダイレクト・セクタ1111に記憶されているか否かを判定して、それにより、コール転送判定1150によって表すように、第1のPU540から第2のPU580にコール570を転送するか否かを判定する。
更に例証するに、例示的な実現形態では、共有RAM装置1110のリダイレクト・セクタ111に命令510が記憶されていることが判定された場合、コール570が潜在的なリダイレクト・コールとして識別され、その場合、コール570は後に、第1のPU540から第2のPU580に転送し得る。例えば、命令510がリダイレクト・セクタ1111に記憶されていることを判定すると自動的に転送し得、又は、コール570が(単純に潜在的なリダイレクト・コールであるというよりも、単に)実リダイレクト・コールであることを(本明細書で更に記載されているように)更なる解析によって判定された場合、コール570を転送し得る。コール570が最終的に、第1のPU540から第2のPU580に転送される場合、第2のPU580は、コール570を行って、リダイレクト・セクタ1111からの命令510にアクセスする。このようにして、命令510を含む実行可能なルーチンに関連付けられた制御のスレッドは、首尾良く第2のPU580に転送されており、第2のPU580は命令510を実行する。
あるいは、共有RAM装置1110のリダイレクト・セクタ1111に命令510が記憶されておらず、むしろ、非リダイレクト・セクタ1112に記憶されていると判定された場合、(更なる解析がコール570を実際のリダイレクト・コールとして首尾良く識別しない限り)第1のPU540から第2のPU580に転送されず、この場合、第1のPU540は、コール570を実行し、非リダイレクト・セクタ1112からのアクセス命令510にアクセスする。このようにして、命令510を含む実行可能なルーチンに関連付けられた制御のスレッドが第1のPU540によって維持され、第1のPU540は命令510を実行する。
上記に加えて、実施例では、特定の場所においてメモリにコードをロードして、コール転送判定1150をサポートする。例えば、プログラムが起動すると、共有ライブラリを、特定の場所ではないが、メモリにマッピングし得る。しかし、一実施例に従えば、スタティック・コード及び共有ライブラリ、並びにそれらのサブセクションが、前述のリダイレクト・セクタ手法をサポートするためにRAMセクタにマッピングされる。
例証するに、かつ、次に図12を参照するに、実施例による、例示的なメモリ・パーティショニング・パラダイム1200を示す。特に、共有RAM装置1110が選択され、共有RAM装置1110の1つ又は複数のセクタが、それぞれ1つ又は複数のリダイレクト・セクタ1201として識別される。実際に、共有RAM装置は複数のリダイレクト・セクタを含み得、前述のリダイレクト・セクタはそれぞれ、別の挙動と関連付け得る。更に、命令510を含むプログラム1210が識別され、プログラム1210に対応するスタティック・コード1220にアクセスされる。更に、共有RAM装置1110は、スタティック・コード1220のサイズに基づいて、1つ又は複数のリダイレクト・セクタ1201の全体としてのサイズを定義することにより、RAMパーティショニング1240によって表されるようにパーティショニングされる。更に、スタティック・コード1220(又はその量)が、パーティショニングに基づいて(、かつ、任意的に(特定のPUにスタティック・コード1220全てを提供しない旨をPU仕様1203が示す場合など))、1つ又は複数のリダイレクト・セクタ1201のうちの1つ又は複数の選択されたリダイレクト・セクタにロードされる。このようにして、実施例では、コール転送決定プロセスに共有メモリを割り当てる比較的効率的な手法を提供する。
上記プロセスは、例えば、組み込みシステムにおいて生じ得るように、プログラム1210が全体的にスタティックである場合、有用であり得る。上記にかかわらず、実施例では、全部がスタティックである訳でないプログラムに上記プロセスが適合される。特に、かつ、図12を更に参照するに、共有RAM装置1110の別々の1つ又は複数のセクタ1110は、1つ又は複数の非リダイレクト・セクタ1202それぞれとして識別され、プログラム1210に対応する少なくとも1つの共有ライブラリ1230の1つ又は複数の部分にアクセスされる。更に、少なくとも1つの共有ライブラリ1230の1つ又は複数の部分及びスタティック・コード1220の全体としてのサイズに基づいて、1つ又は複数のリダイレクト・セクタ1201の全体としてのサイズを規定することにより、RAMパーティショニング1240中などに、共有RAM装置1110はプロポーショニングされる(proportioned)。更に、スタティック・コード1220の1つ又は複数の部分が、プロポーショニング(及び、任意的には、PU仕様1203)に基づいて、(1)1つ又は複数のリダイレクト・セクタ1201のうちの1つ又は複数の選択されたリダイレクト・セクタ、又は、(2)1つ又は複数の非リダイレクト・セクタ1202のうちの1つ又は複数の選択された非リダイレクト・セクタにロードされる。あるいは、又は上記に加えて、少なくとも共有ライブラリ1230の1つ又は複数の部分が、プロポーショニング(及び、任意的には、PU仕様1203)に基づいて、(1)1つ又は複数のリダイレクト・セクタ1201のうちの1つ又は複数の選択されたリダイレクト・セクタ、又は、(2)1つ又は複数の非リダイレクト・セクタ1202のうちの1つ又は複数の選択された非リダイレクト・セクタにロードされる。
例示的な実現形態に従うに、多くのプロセッサは再配置可能なコードを利用する。したがって、ロード・フェーズ中に、前述のコードを移動することは比較的簡単である。更に、例証の目的で、一実施例では、前述のオペレーションの1つ又は複数が、PU1250(例えば、第1のPU540又は、あるいは、全く別のPUであり得る)によって行われる。
次に図13を参照すれば、実施例による例示的な処理リソース割り当てシステム1300を示す。図2を参照して上述したDPAアーキテクチャと実質的に同様であり得る例示的な処理リソース割り当てシステム1300は例示的なPU210、220、230などの複数のPUを含み、前述のPUは、通信するよう、通信ファブリック1310に結合され、又は通信ファブリック1310と関連付けられ、前述のPUは、ダイ集積構成に全体として配置し得る。例えば(例えば、周辺装置相互接続エクスプレス(PCI−E)アーキテクチャを実現することによる)メモリ・サブシステム及びフロント・サイド・バスを含み得る通信ファブリック1310は、前述のPUとの間で情報をルーティングするよう構成される。
各PUは、例示的なCPU211、221及び231などの少なくとも1つのCPUと、例示的なRAM212、222及び232などの少なくとも1つのRAM装置(例えば、DRAMメモリ装置)を含み、各PU内のCPU及びRAM装置は、通信するよう、互いに関連付けられ、又は結合される。更に、RAMの外部装置に記憶された情報を他のPUが得ることが可能であるように各RAM装置が大域的にマッピングされる。これにより、データを記憶し得る実現された複数のメモリ装置のうちの何れかのメモリ装置に上記データを、前述のシステム内の複数のプロセッサのうちの何れかの特定のプロセッサが要求することが可能になる。
更に、各PUは、例示的なキャッシュ・メモリ装置213、223、及び233などのキャッシュ・メモリ装置を含み、前述のキャッシュ・メモリ装置は、通信するよう、そのそれぞれのPU内に配置されたCPU及びRAM装置に関連付けられ、又は結合される。実際に、一実施例では、特定のPU内に配置されたCPU、RAM装置、及びキャッシュ・メモリは、例えば、スルーシリコンビア(TSV)/ワイド入出力(Wide−IO)(又はオンチップ)通信アーキテクチャを介して互いに通信するよう構成される。
なお図13を参照するに、大域コード・ライブラリ1320が提供され、大域コード・ライブラリ1320はリダイレクト・セクタ1111を含む。実施例では、リダイレクト・セクタ1111は、第1のコードの組1330及び第2のコードの組1340などの1つ又は複数の別個のコードの組を含む。更に、別々のPUが、それぞれ、別々のデータ・タイプのオブジェクトに割り当てられる。例えば、例証された実施例では、PU230は第1のデータ・タイプに属するオブジェクトに割り当てられ、PU210は第2のデータ・タイプに属するオブジェクトに割り当てられる。PU230、210は既に、前述の第1のデータ・タイプ及び第2のデータ・タイプそれぞれに属するオブジェクトを局所で記憶しているからである。よって、第1のコードの組1330及び第2のコードの組1340が、前述の第1のデータ・タイプ及び第2のデータ・タイプそれぞれに属するオブジェクトを含む場合、第1のコードの組1330及び第2のコードの組1340はPU230、210それぞれにルーティングされる。このようにして、PU210は第2のデータ・タイプを有するオブジェクトに関連付けられた方法を行うことができる一方、PU230は第1のデータ・タイプを有するオブジェクトに関連付けられた方法を行い、それにより、前述の方法の動作に関連付けられた効率の度合いを増加させることができる。前述の方法の動作中、前述のPUは既に、局所に記憶されたそのそれぞれのオペレーションについて関連したコード及びデータを有しているからである。
なお図13を参照するに、第1のコードの組1330及び第2のコードの組1340が、第1のデータ・タイプ及び第2のデータ・タイプそれぞれに関連付けられた例を考えてみる。第1のデータ・ポインタ1331、1341は第1のコードの組1330及び第2のコードの組1340それぞれに関係付けられ、第1のコードの組1330及び第2のコードの組1340が、上述した第1のデータ・タイプ及び第2のデータ・タイプそれぞれに関連付けられることを示す。更に、第1のデータ・タイプに関連付けられたコード又は関数が例えば、RAM232の部分1350に記憶されている場合、第1の仮想関数ポインタ(VFP)1351が生成され、第1のVFP1351は、RAM232のこの部分1350を指し示し、又はRAM232のこの部分1350にマッピングされる。同様に、第2のデータ・タイプに関連付けられたコード又は関数が例えば、RAM212の部分1360に記憶されている場合、第2の仮想関数VFP1351が生成され、第2のVFP1361は、RAM212のこの部分1360を指し示し、又はRAM212のこの部分1360にマッピングされる。よって、リダイレクト・セクタ1111がアクセスされているので、コールが潜在的なリダイレクト・コールとして識別されると、前述のVFPは、リダイレクト・コード1111内の関連したコードの組に関連付けられたデータが、既に、利用可能なPUのうちの1つに局所に記憶されているかを判定するよう解析される。肯定の場合、潜在的なリダイレクト・コールが実際のリダイレクト・コールとして識別され、リダイレクト・コールはその特定のPUに転送(パス)される。
更に例証するに、かつ、次に図14を参照するに、実施例による、例示的なリダイレクト解析1400を示す。特に、関数f(x,...)のコールが第1のPUにより、1410でアクセスされ、「f」は関数ポインタであり、「x」はデータ・ポインタである(記号「,...」によって示すように、2つ以上のデータ・ポインタを参照し得る)。「f」は関数ポインタであり、「x」はデータ・ポインタである(記号「, ...」によって示すように、2つ以上のデータ・ポインタを参照し得る)。1420では、関数f(0)として表し得る、関数f(x,...)のリダイレクト可能なバージョン(例えば、ワンダリング・スレッド・バージョン)が大域メモリのリダイレクト・セクタに現在記憶されているか否かが判定される。肯定の場合、関数f(0)は1430で第2のPUによってコールされる。この第2のPUは既に、局所に記憶されたこの関数に関するコード及び/又はデータを有する。その後、1440では、第2のPUは関数f(0)を行う。あるいは、関数f(0)が大域メモリのリダイレクト・セクタに現在、記憶されていないことが1420で判定された場合、関数はリダイレクトされず、大域メモリの非リダイレクト・セクションに記憶し得るf(x,...)は、第1のPUにより、1450でコールされ、その後、第1のPUにより、1460で行われる。
ii ソフトウェア・サポート
上記に鑑みて、実施例では、PUが、通信するようにMMUと関連付けられ、又はMMUと結合される(MMUを含む)。MMUは、どのPUがメモリを有しているか、及びデータがどこにあるかを追跡する。データがそれ自身の局所メモリにマッピングされているか、又は別のプロセッサの局所メモリにマッピングされているか否かを判定するために、特定のデータがメモリにマッピングされた場所をそのMMUに尋ねる。よって、コールが潜在的なリダイレクト・コールとして識別されると、データが現在、リダイレクト可能な場所に現在記憶されているか否かが判定され、その時点で、潜在的なリダイレクト・コールが実際のリダイレクト・コールとして識別され、コールは転送される。これはハードウェア・レベルで行い得るが、ソフトウェアはこの手法をサポートするよう実現し得る。特に、ソフトウェア・サポートは、例えば、ランタイム・コードへの、又はランタイム・コード近くでのサポート・コードのインジェクションなどにより、より高度な決定をPUが行うことを助けるために追加し得る。実際に、PUの処理速度は比較的高速であるが、それとの間の情報の移動は比較的遅いことがあり得る。したがって、賢明な決定を行うことにより、かなりの量の時間及びエネルギを節減することが可能である。そういうものとして、種々の実施例には、PU間の制御のトランスペアレントな転送をサポートするためのロード前後のソフトウェア修正が関係する。
よって、次に、いくつかの例示的なソフトウェア・サポート手法について掘り下げてみる。しかし、本願の手法は前述の例示的なソフトウェア・サポート手法に制限されず、他のソフトウェア・サポート手法を実現し得る。
a リダイレクト・コード
ワンダリング・スレッドの場合、(本明細書において更に掘り下げるように、RPCを起動させることなどにより、)別のプロセッサ上で、又は局所で、コールを実行するかを判定するために、意図されたコールの引数を検査するコードにルーチンを再誘導し得る。例えば、例示的なC言語コールは、「fprintf」:
int fprintf(FILEstream,const charformat,...);
である。
リダイレクト・コードは、コ―ル「fprintf」がリダイレクトされていることを記し、局所メモリを指し示しているかを確認するためにポインタ・ストリームを検査する。否定の場合であり、かつ、そのメモリのPUを識別することが可能な場合、リダイレクト・コードは、そのPUへの転送を実行し、その完了を待ち、それにより、スレッドの局所サスペンションをもたらす。リダイレクト・コードが、ポインタが局所であることを判定するか、又は保持しているPUを識別することが可能でない場合、局所で実際の「fprintf」コールを行う。このことの利点は、「printf」を処理しているPUのみが、ストリーム・ポインタ及びその関連付けられたバッファを参照解除するということである。リダイレクト・コードは、処理を行っているPUが、発信側のPUのキャッシュ/メモリに戻らないように、特定のコールによって利用される関連するコンテキストをフォワードするようチューニングすることが可能である。実際に、一実施例では、ソフトウェア修正可能な命令キャッシュは、ロード後、コードのPU毎チューニングについて実現される。ターゲット関数が引数として与えられた場合(例えば、第1の引数がポインタであり、そのメモリのPUに転送されている)場合、引数プロファイルを共有する複数のターゲット・ルーチンについて、同じリダイレクト・コードを使用することが可能である。例証の目的で、「fprintf」リダイレクト・コードがCプログラミング言語で実現されていた場合、以下と同様なものであり得る。
int redirect_fn_p_var(int(fn)(),voidp1,...){
int pu;
if(local_address(p1)||!(pu=pu_for_address(pi))){
return asm_redirect_var(fn,p1);//(Comment 1 :Perform call)

return wt_transfer_wait_var(pu,fn,p1);//(Comment 2:Transfer and wait)

更に例証するに、かつ、次に、図15を参照するに、実施例による例示的な大域コード・ライブラリ・パラダイム1500を示す。特に、大域コード・ライブラリ・パラダイム1500を示す。特に、大域コード・ライブラリ1320は、リダイレクト・セクタ1111及び非リダイレクト・セクタ1112を含み、関数fprintf1510が非リダイレクト・セクタ1112に記憶され、(関数fprintfwt1520として表される)この関数のワンダリング・スレッド・バージョンが、リダイレクト・セクタ1111に記憶される。メモリ・ポインタ1530が関数fprintfwt1520に関係付けられ、メモリ・ポインタ1530は、この関数に関するデータが現在記憶されているアドレスを識別する。よって、第1のPU540が、関数fprintf1510のコール1540を受け取ると、この関数のワンダリング・スレッド・バージョンがリダイレクト・セクタ1111に現在、記憶されていることが判定される。よって、第1のPU540はこの関数をリロケータブル・コールとして識別し、第1のPU540に関連付けられたMMU840は、(PUの1つによって制御された特定の入出力(I/O)バッファに関連付けられた)メモリ・ポインタ1530を解析して、識別されたアドレスが第1のPU540の局所メモリ内に配置されているかを判定する。肯定の場合、第1のPU540は、関数fprintf1510をコールし、局所に記憶されたデータにアクセスすることにより、この関数を行う。否定の場合、MMU840は、このアドレスが配置された場所を求める(。更に、この場所に関連付けられたPUを識別する)。例示的な一実施例に従えば、前述の解析に関するコードは、以下に似る場合がある。
fprintf(filep,...){
if(my_memory(p)){
fprintf(p,...)

else{
PU2=find_PU(p);
transfer_context(PU2)

};
ここで、「p」は精査されるメモリ・ポインタである。
なお図15を参照するに、この他のPUが識別されると、第1のPUはコール1540を(第2のPU580として図15に表される)この他のPUに転送する。コール1540のアクセスに応じて、この他のPUは次いで、(関数fprintfwt1520として表す)この関数のワンダリング・スレッド・バージョンにアクセスする。
クラス毎の割り当てオペレーション及び仮想関数を行うことができる、C++などの言語の場合、リダイレクト・コードは、クラス・メソッドに追加し、ワンダリング・スレッドをサポートするマシン上でコードが実行される場合にリンク/ロードにおいてプレーン・メソッドに優先して選ぶことが可能である。一実施例では、クラス・コンストラクタは、特定のPU上にクラスのインスタンスを、当該クラスについての最善の性能を得るために入れる。ジャバ(Java(登録商標))及びシステム・ベリログ(System Verilog(登録商標))は、C++と同様であるが、「ガベージ・コレクション」をメモリ管理に使用する(例えば、メモリを割り当て直すことが可能であるように、参照されていないデータに対するバックグラウンド・スキャニングが存在している)という例外がある。本明細書記載の手法は、ガベージ・コレクションを使用することを排除するものでない。むしろ、本明細書記載の手法は、サーチの範囲を制限することにより、その性能を向上し得る。
例示的な実現形態によれば、上記手法は、ユーザ・コードを、修正されていない状態にしておくよう構成される。更に、より高い細粒度の制御が、ユーザ・ソース・コードにおいて、ワンダリング・スレッド・サポート・ルーチンを直接、使用することにより、又は、インラインされた(in−lined)リダイレクト・オペレーションにより、コンパイルされたコードを解析し、再生成することによって得ることができ、前述の後者の手法は、例えば、より下位レベルの仮想マシ・スタイル・コードによって実現し得る。上記に係わらず、一実施例では、(マシン特有コードでなく、)ランタイム・システムによって解釈される「バイトコード」が実現される。例えば、旧いx86コードがロードされた場合、余分にインジェクトされたコードはx86互換でないことがあり得る一方、しかしながら、ランタイム・システムによって理解される。
b 処理機能
種々の実施例が、プロセッサ装置の複製及び選択を駆動させるためのプロセッサ装置の動作の監視の実現形態に関係する。実際に、一実施例では、リダイレクト・コールは、特定のPUに、当該PUの現在の処理機能に基づいて転送され、適用可能な処理機能解析は、例えば、実現された(例えば、インジェクトされた)サポート・コードによって行い得る。例えば、コールが、潜在的なリダイレクト・コールとして識別されると、このコールを処理するために2つ以上のPUが利用可能な場合(2つ以上のPUが現在、関連したデータを局所に記憶している場合などに生じ得る)、対象のルーチンをどのPUが最も効率的に処理することが可能であるかに関する十分な情報に基づいた決定を行うために前述の種々のPUの現在の処理機能を解析し得る。第2の例として、ルーチンは、(ターゲット・コード自体とともに)別のPUにそれぞれを関連付け得るいくつかの別々の引数を有し得、その場合、インジェクトされたコードは、どの因子が最も重要であるかを決定する。
更に例証するに、かつ、次に図16を参照するに、実施例による第4の例示的なコール転送パラダイム1600を示す。特に、メモリ場所関連付け判定1610によって表されるように、命令510に関連付けられたコード又はデータ・メモリ場所610(例えば、図6参照)が、第2のPU580、及び複数の他のPU1620と関連付けられていることが判定される。例証の目的で、複数の他のPU1620は、図16において、第3、第4、及び第5のPU1621、1622、1623を含む。更に、第2のPU580に対応する現在利用可能な処理機能を反映する数値測定1630が定義される。例証するに、第2のPU580の現在利用可能な処理機能は、例えば、現在の状況下で特定の期間内に第2のPU580が行うことが可能な計算又は処理サイクルの数を求めることによって測定し得、数値測定1630は、この図を数値的に反映している。
更に、複数の他の数値測定1640が定義され、複数の他の数値測定1640は、複数の他の現在利用可能な処理機能それぞれを反映し、複数の他の現在利用可能な処理機能は、複数の他のPU1620それぞれに対応する。例証するに、第3のPU1621、第4のPU1622、及び第5のPU1623の現在利用可能な処理機能は例えば、現在の状況下で特定の期間内に前述のPUそれぞれが行うことができる計算又は処理サイクルの数を求めることによって測定し得、複数の他の数値測定1640は、これらの図それぞれを数値的に反映している。数値測定1630が複数の他の数値測定1640それぞれよりも大きく、それにより、第2のPU580が、その他の利用可能なPUよりも速い命令510を処理することができることを示す場合、コール570は、第1のPU540から第2のPU580に転送される。
c リソース・アクセス
上記に係わらず、実施例では、特定のリソース(例えば、イーサネット(登録商標)又はシリアル・アドバンスド・テクノロジ・アタッチメント(SAT−A))に対するアクセスを有するそのPUに基づいて特定のPUにリダイレクト・コールが転送される。特に、リダイレクトは、前述のリソースに対する隣接性及びアクセスを実現するために起動される。例えば、コールがリダイレクト・コールとして識別されると、2つ以上のPUが、このコールの処理に利用可能な場合(2つ以上のPUが現在、関連するデータを局所で記憶している場合などに生じ得る)、対象のルーチンの効率的な処理を助け得る特定のリソースが識別され、利用可能なPUのうちの1つが、この識別されたリソースに対するアクセスを有する前述のPUに基づいて選択される。このことは、例えば、同時性の問題を避けるために特定のPUがハードウェアの唯一のコントロールを有する場合に有用であり得る。
例証するに、かつ、次に図17を参照するに、実施例による第5の例示的なコール転送パラダイム1700を示す。特に、リソース選択1720によって表されるように、特定のリソース1710が選択され、(1)第2のPU580に割り当てられる特定のリソース1710の制御の度合い、(2)第1のPU540が、特定のリソース1710へのアクセスを欠いていること、及び/又は、(3)1つ若しくは複数の他のPU1730が、特定のリソース1710へのアクセスを欠いていることに基づいて、コール570が第1のPU540から第2のPU580に転送される。よって、1つ又は複数の他のPU1730のうちのPUは、対象のルーチンに関するデータを局所で記憶し得るが、このPUは、コール・リダイレクトについて選択されない。前述のPUは、リダイレクト・コールの処理中に特定のリソース1710を利用することができないからである。C++などの言語では、この手法は、例えば、適切なPUのメモリにおいて、ストリーム記述子(又はそのメタデータ)を割り当てることによって実現することが可能である。例えば、PU580は、例えば、SATAコントローラ又はハードドライブ自体に内蔵し得、直接取り付けられたディスクへのデータ転送を管理するよう構成し得る一方、対象のコールは、他のPU上のデータを参照しながら、PU540によって起動される。PU540上で実行されるRPCコードは、コールのフルフィルメントを加速化するために、データをPU580に送出する旨の要求を他のPUに送出し得る。
d 共有メモリ・コヒーレンス・マシン命令
例示的な実現形態によれば、特定のマシン命令がマルチスレッドのSMPマシンにおいて使用され、種々の実行可能なルーチンが前述の命令に基づいて構築される。特に、前述の実行可能なルーチンは、識別可能な共有メモリ・コヒーレンス・マシン命令を使用するものを含み、特定の例は、テストアンドセット(例えば、mutex)コード及びセマフォを利用するルーチンを含む。ポータブル・オペレーティング・システム・インタフェース(POSIX)スレッド(又は「Pthreads」)の場合、実施例では、Pthreadルーチン実現形態は、スレッド間通信を扱うための低位レベルのマシン機構の使用を示唆している。したがって、一実施例に従えば、共有メモリ・コヒーレンス・マシン命令は、この同じプロセッサが前述の特定のマシン命令を効率的に実行することができるようにどのルーチンを同じプロセッサに移動させるかの判定を助ける。前述の命令は、例えば、ロード中に識別し、次いで、実行可能なルーチンを含む、又は実行可能なルーチンにマッピングされたものが適切なリダイレクト・セクタに入れられるように指示し得る。別々のリダイレクト・セクタを、別々のコール・タイプを示すために使用し得る。Pthreads mutexコールは、関心のアドレスを第1の引数として有し、他のルーチンの場合、場合によっては、第2の引数又は第3の引数が、RPCの決定の最も適切なデータのアドレスである。セクタの選択は、コール・タイプを反映するためにシャドー・レジスタがどのようにして充填されるか、及び実現されたハードウェアRPC機構をどのようにして使用するかを指示し得る。
例証するに、かつ、次に図18を参照するに、実施例による第6の例示的なコール転送パラダイム1800を示す。特に、コード1810が命令510にマッピングされているか、又は命令510を含む場合であり、かつ、このコード1810が第1のPU540によってアクセスされる場合などに、命令510に関連付けられたコード1810が識別される。更に、少なくとも1つの共有メモリ・コヒーレンス・マシン命令1830を含む実行可能なルーチン1820が識別される。更に、コール570は、実行可能なルーチン1820が第2のPU580に関連付けられていることに基づき、かつ、コード1810が、少なくとも1つの共有メモリ・コヒーレンス・マシン命令1830にマッピングされていることに基づき、第1のPU540から第2のPU580に転送される。
更に例証するに、予め定義されたライブラリ・コ―ド(例えば、コヒーレンシ命令の使用を示唆しているPthreadsなどの)がない例を考えてみる。例えばテストアンドセット命令を利用するコードは、Pthreadコールと同様なやり方で識別し、マーキングすることが可能である。更に、複数のPUにまたがらない場合にテストアンドセット・オペレーションがずっと単純であり得る限り、実施例では、単一のPU上での前述のコールの処理の直列化は、ハードウェア・コヒーレンシ・サポートの実現形態を避けることを可能にする。上記に係わらず、他の方法論も実現し得る。
e コード・インジェクション
上述の通り、一実施例では、コード・インジェクション手法は、コールを転送するか否かの判定において重要な役割を果たし得る。例えば、かつ、次に図19を参照するに、実施例による例示的なコール・インジェクション・パラダイム1900を示す。特に、第1のPU540に関連付けられた(例えば、第1のPU540に割り当てられ、又は第1のPU540内に含まれた)キャッシュ・メモリ装置910が、キャッシュ・メモリ選択910によって表すように選択され、命令510がキャッシュ・メモリ装置910にロードされる。更に、余分なコードの組1920が、キャッシュ・メモリ装置910に、命令510に関連付けられた境界(例えば、メモリ位置の隣接のセット又は近傍のアドレス・シーケンス)においてインジェクトされ、命令510はターゲット命令である。この境界の識別は、例えば、キャッシュ・メモリ選択1910中に行い得る。更に、余分なコードの組1920は、第2のPU580などの特定のPUにコール570を転送するか否かを第1のPU540が判定することを可能にするよう構成される。このようにして、更なるソフトウェアは、そのリダイレクト意思決定プロセスによるハードウェアのサポートを支援し、それにより、より高度な解析を(本明細書及び特許請求の範囲記載のやり方などで)行うことを可能にするために実現し得る。動的共有ライブラリを使用するシステムにおいてコードをインジェクトするための例示的な方法は、デフォールトで使用され、適切なエントリ・ポイントを含むものの前に、別の共有ライブラリをロードすることである。これは、例えば、「LD_PRELOAD」などの環境変数の使用により、リナックス(Linux(登録商標))システム上で行うことが可能であり、ランタイム・システムは次いで、選好により、予めロードされたルーチンを使用し、今度は、元のターゲット又は他のコ―ドをコールすることが可能である。リナックス・コマンド「strace」は前述の機構を使用し、Linuxは「オープン・ソース」オペレーティング・システムである。
よって、実施例では、コード・ロード・フェーズ中に、コールを別のPUに移動させるか、又は、局所に維持するかについての決定を行うために、実行可能なルーチン境界において、余分なコードがインジェクトされる。前述の意思決定プロセスを助けるための情報を、インジェクトされたコードに供給するよう、種々のプロセッサ・アーキテクチャを補強することが可能である。更に、ソフトウェア・インジェクション手法はスタンドアロンで、既存の(例えば、予めコンパイルされた)ソフトウェアにより、既存のSMPマシン上で使用することが可能である一方、(例えば回路シミュレーション、データベース、人工知能(AI)アプリケーションなどにおいて)ランダムに比較的大量の静的データを扱うソフトウェアの場合に最もうまく機能し得る。
f ポインタ変換
例示的な実現形態によれば、特定のタイプのルーチン・コールは、効率の目的で、複製データよりもむしろ引数としてポインタを使用し、前述のポインタは、値渡しコールに変換し得る。例えば、その「man」ページに記述されたようなオペレーティング・システム・コール「stat」について考えてみる。すなわち、
int stat(const charpath,struct statbuf)である。
このコールにおいて転送されるデータは、ファイルの場所「path」、及びそれについての情報を返す場所である。このためにRPCを起動させ得る。コードを実行するPUがファイルを管理しないからである。前述のコールは、コピーイン/コピーアウト・コールにリマッピングすることが可能であり、それにより、データは、参照渡しされるよりも値渡しされる。例えば、
struct stat_i rpc_stat(const char path[MAX_PATH]);
などである)。ここで、stat_iは、statデータによる、通常のstatコール・リターンを含む。
一PUから別のPUにコールを転送すると、受信側のRPCは、「path」及び「buf」の一時局所記憶装置により、通常の「stat」をコールする。メモリ・サブシステムにわたる、元のデータのアドレス指定のオーバヘッドを起動させることなく、「buf」データを呼び手(caller)に返信する。前述などのオペレーティング・システム・コールのコードは、システム・ライブラリのソース・コードを処理し、値渡しバージョン(PU毎にランタイム・ローダに利用可能にされる)に変換することにより、事前に作成し得る。よって、RPC分岐決定を行うためにインジェクトされたコードは、値渡し(又は部分的な値渡し)サポート・コードの存在を前提とし得る。例証するに、「stat」に対するコールは、例えば、ロードされると、「stat$transfer」に対するコールに変換され(名称における記号「$」はシステム・コールのために予約し得る)、次いで、インジェクトされた分岐コードは「stat」をコールするか、又は、場合によっては「stat$rpc」をコールし、ここで、ライブラリにおいて提供される「stat$rpc」バージョンは値渡しに変換され、RPCを行う。これにより、これらが動作をどのようにしてコールするかについてインテリジェントに挙動することをローダが強いられることが避けられる。サポート・コードが提供されるルーチンを解析しないからである。以前にみられなかったコール(例えば、ユーザ・コードが関係するコール)の場合、前述の変換を行うことは可能でないことがあり得、RPCは、より高いオーバヘッドでメモリ・サブシステムによってサービスされる発信側のPUに戻るポインタを含み得る。(「const」引数を有する「無効な」コールとして例えば、C/C++に示し得る)戻り値の送出にルーチンが関係しない場合には、RPC機構は、遠隔PUがRPCコールを完了することを待つことなく、直ちに局所に戻り得、この場合、RPCは、「分離された」又は独立したスレッドになる。
よって、実施例では、実行可能なルーチン名は、RPC決定のためにインジェクトされる対象のコードを選択するために利用される。例証するに、かつ、次に図20を参照するに、実施例による例示的なコード選択パラダイム2000を示す。特に、1つ又は複数の予め選択された実行可能ルーチン2020それぞれに対応する1つ又は複数の実行可能なルーチン名2010が識別される。更に、余分なコードの組1920を、1つ又は複数の実行可能なルーチン名2010に基づいて選択して、コール変換2030によって表すように、参照渡しコールから値渡しコールにコール570を変換する。
更に、一実施例では、種々のハイブリッド(例えば、ハードウェア及びソフトウェア)方法論を実現し得る。例えば、コードを静的にプロファイリングして、PU仕様(例えば、64ビット・サポートを実現するか否か、若しくは、32ビットのサポートで十分であるか否か)、又は浮動小数点のサポートを実現するか否かを判定し得る。これは、最小のハードウェアを有するPUがコードを実行するために使用されるように、ライブラリにコードをタグ付けするために使用することが可能である。
更に、例示的な一実現形態に従えば、実現されたPUは、数値演算コプロセッサとして表し得、浮動小数に対する演算を行うよう構成された浮動小数点装置(FPU)を含む。よって、浮動小数サポートが関係する関数のコールをこのサポートなしの他のPUが試行する場合に、このPUに対するハードウェア・リダイレクトは自動的である。このことには、実際のデータ・メモリ・アクセスは関係しないことがあり得、これは、コード・タイプを前提とする。更に、コード及びデータがメモリ内に存在している限り、これは、コードの場所をキーとすることが可能であり、メモリにコードを入れるローダは、メモリの特定の領域に特定のタイプのコードが記憶されるように順序付け、それにより、PU割り当てを比較的単純にすることが可能である。更に、浮動小数点命令は、コヒーレンシ命令の認識と同様なやり方でコードにおいて認識し得る。
g 仮想関数テーブル
C++などの言語などによる、ランタイムでのコードの修正に関し、(C言語におけるように)通常のコール・サイトにおけるコードのインジェクションに対する代替的なオプションが存在している。特に、例示的な実現形態では、サブクラスのカスタマイズのためにC++が「仮想関数テーブル」(VFT)を使用する限り、仮想関数を有するクラスに属するインスタンス化されたデータ項目はそれぞれ、1つ又は複数のVFTポインタを有する。VFTポインタの設定又は初期化はC++コンストラクタのジョブの一部であるので、「ラッパ」がコンストラクタの周りに追加された場合、対象のメソッドをコールする前にRPCリダイレクション・コードを使用するVFTの他のバージョンを指し示すようVFTポインタを修正することが可能である。よって、コードがロードされると、特定のクラス・コンストラクタは、コンストラクタをコールする一方で、元のコーラにデータ・アドレスを返す前に、割り当てられたデータを修正する、他のコードに対するコールで置き換えられ、コンストラクタ・コールは、データ場所が正しいことの保証を助けるために(場合によっては、低位レベルであるが)既に修正されている。
よって、実施例では、ラッパ・コールが、RPC決定ラッパであるエントリを有する別のVFTで、元のVFTを置き換えるようにロード中にコンストラクタ(例えば、C++コンストラクタ)周りにインジェクトされる。VFTの予め定義されたバージョンが、コンパイルされたコード内に存在している例を考えてみる。このVFTが複製され、RPC決定ラッパで前述のエントリが指し示すようにいくつかのそのエントリが変更される。更に、VFTの予め定義されたバージョンに対する先行するポインタが、VFTの新たなバージョンに対する新たなポインタで置き換えられる。
例証するに、かつ、次に、図21を参照するに、実施例による例示的なVFT置き換えパラダイム2100を示す。特に、命令510を含むプログラム1210がアクセスされ、プログラム1210に対応するプログラミング言語2110が識別され、1つ又は複数の仮想関数2150を有するクラス2140に属するデータ項目2130が、VFT2120にマッピングされた1つ又は複数のVFTポインタ2160を含むようにVFT2120を実現するよう、プログラミング言語2110が構成される。更に、プログラミング言語2110に関連付けられたコンストラクタ2170が識別され、コンストラクタ2170は、1つ又は複数のVFTポインタ2160を定義するよう構成される。更に、ラッパ・コール2180を、プログラム1210のロード中にコンストラクタ2170周りでインジェクトして、それにより、1つ又は複数の仮想関数2150の1つ又は複数のリモート・プロシージャ・コール(RPC)決定ラッパ2190を含むVFT2192に対するポインタ2191で1つ又は複数のVFTポインタ2160を置き換える。
上記にかかわらず、実施例ではラッパ・コールをプログラムのロード中にコンストラクタ周りにインジェクトして、それにより、1つ又は複数のRPC決定ラッパで1つ又は複数のVFTエントリを置き換える。更に、クラス・インスタンスVFTポインタが、新たなVFTを使用するよう更新される。別のVFTは、クラス・インスタンスの破壊が自動的にそれを除外し、又は、それを別個に管理し得るようにクラス・インスタンスと同じメモリ・ブロックに割り当て得る。このことは、次に掘り下げてみることとするインスタンス毎コード修正に関する。
一実施例では、クラス・インスタンス内のVFTポインタがそのインスタンス特有でない限り、このポインタは、ランタイムにインスタンス単位で修正することが可能である。RPCコールがしばしば行われる場合(又はほとんど若しくは全く行われない場合)、RPC決定コードがコールされないようにVFTを修正することが可能であり、仮想関数は、局所でコードに直接進み、又はRPCに進む。前述の分岐決定データは、RPC決定ラッパを使用する場合、クラス・インスタンスが割り当てられるVFTとともに記憶することが可能である。(一方、通常のC++が、クラスの全部又は複数のインスタンスにわたってVFTを共有する。)よって、VFTポインタの場所をそこから導き出すことが可能なそのクラス・インスタンスに対するポインタにより、仮想関数がコールされる。
更に、実施例では、この手法には、データと同じ場所に配置されたVFTポインタを含むメモリをロードするPUが関係し、「コール・サイト」手法には、ロードすることなくアドレスを解析することが関係する。しかし、オブジェクトに関連付けられたデータは全て、ロードしてもしなくてもよく、よって、この手法は、大きなオブジェクトが、遠隔なオブジェクトに対するオペレーションを管理する複数のPUのネクサスにある場合に有益であり得る。
よって、実施例では、VFT自体が、RPC判定コードがコールされないように修正される。例証するに、かつ、次に図22を参照するに、実施例による例示的なVFT修正パラダイム2200を示す。特に、命令510を含むプログラム1210がアクセスされる。更に、プログラム1210に対応するプログラミング言語2110が識別され、1つ又は複数の仮想関数2150を有するクラス2140に属するデータ項目2130が、VFT2120にマッピングされた1つ又は複数のVFTポインタ2160を含むようにVFT2120を実現するよう構成される。
上記に加えて、実施例では、VFT2120は、RPC決定コードがコールされることなく修正される。例えば、かつ、なお図22を参照するに、RPC決定コードがコールされることなく、1つ又は複数の仮想関数2150が1つ又は複数のRPC2210に自動的に誘導されるように複数のRPCの実現の結果として修正すればよい。しかし、第2の例に従えば、RPC決定コードがコールされることなく、1つ又は複数の仮想関数2150が、プログラム1210に関連付けられた局所コード2220に自動的に誘導されるように、1つ又は複数のRPC2210の実現がない結果として(、又は、RPCを使用する必要がないことの結果として)修正される。
h. ランタイム/分岐挙動
実施例では、ランタイム・メトリックが、最適な挙動のためにVFTを更にチューニングするために使用される。例えば、ランタイムにおけるコード実行の加速化の大部分は、プロセッサ・ハードウェアにおける分岐予測が首尾良く行われることに依存し得る。実際に、これに特化したハードウェアは、単なるプロセッサ自体よりも多くのものを含み得る。データ・サブクラス特有のメソッドを使用するC++及び同様の言語は、サブクラスにおける特定のケースを呈することにより、意思決定を減らすことが可能である。よって、ランタイム分岐決定がコンパイル時間決定と交換され、オーバヘッドは、一定の仮想関数コール・リダイレクトになる。これは、予測可能でない分岐ミスと対照的である。仮想関数コールのランタイム挙動を観測することができることにより、ランタイム・システムは、1つの分岐挙動の組を別のものよりも呈する可能性が高いルーチンの実現形態間でランタイム・システムが選ぶことを可能にする。例えば、ルーチンが、2つの分岐を有する場合、コードの4つのバージョンを作成することが可能であり、前述の4つのバージョンは種々のケースを適切に扱う一方、それらのコードは、分岐についての別々の真偽の可能性を仮定して生成される。
よって、一実施例に従えば、コードの複数のバージョンが、分岐最適化のために生成される。例証するに、かつ、次に図23を参照するに、実施例による例示的な修正された命令選択パラダイム2300を示す。特に、命令510の予め定義されたバージョン2310がアクセスされ、予め定義されたバージョン2310は、複数の条件分岐2312にマッピングされたコード2311を含む。更に、命令510の複数の修正バージョン2320が生成され、修正バージョン2320は、N個の修正バージョン(Nは2以上の整数である)を含む。例証の目的で、修正バージョン2320は、第1乃至第Nの修正バージョン2321乃至2323を含むものとして図23に示す。更に、修正バージョン2320それぞれは、複数の条件分岐2312のうちの別の条件分岐をたどるよう修正されたコード2311を含む。例えば、図23では、第1乃至第Nの修正バージョン2321乃至2323は、第1乃至第Nの修正コードの組2324乃至2326それぞれを含むものとして示し、第1乃至第Nの修正コードの組2324乃至2326は、第1乃至第Nの条件分岐2327乃至2329それぞれをたどるよう修正されている。
コードのどのバージョンを使用するかを選択する例示的な方法には、(1)コード内の複数の決定/分岐のうちの決定/分岐それぞれにキー内のビットを割り当てる工程、及び(2)対応する決定/分岐が関係するイベントの特定の順序に基づいて決定/分岐毎にビットを設定する工程が関係する。このことは、例えば、ハードウェア・レベルで、コール/リターン・オペレーションにより、キーが自動的にリセットされて、(動作に対する影響が最小である)分岐オペレーションをシャドーイングする「シフトアンドオア」オペレーションによって実現し得る。対象のコード・シーケンスの末尾で、当該シーケンスがコールされる次回について、(複数の考えられるルーチン・バージョンのうちから)特定のルーチン・バージョンを選択するために「ハッシュ」ルックアップの一部としてキーを使用することが可能であり、複数の考えられるルーチン・バージョンのうちのその他のルーチン・バージョンと比較して、当該シーケンスの実行に対して比較的効果的かつ効率的なバージョンであるので、この特定のルーチン・バージョンが選択される。更に、コール・サイト更新は、アトミックであり、(例えば、ハードウェア・サポートにより、ルックアップ及びリライト・オペレーションは、制御の主スレッドが他の所に進み/ワンダリングするので別個に動作するようフォーク・オフ(fork off)することが可能である。これにより、オンザフライ(on−the−fly)チューニングを行うために、マルチコアPUアーキテクチャ内の予備のコアを使用することにより、「単一スレッド」のコードが自己最適化されることが可能になる。
例示的な修正された命令選択パラダイム2300をなお参照するに、複数の修正バージョン2320それぞれに関連付けられた複数の挙動2330が予測される。更に、命令510に関連付けられた実行可能なルーチン1820にアクセスされ、実行可能なルーチン1820に関連付けられたランタイム挙動2340が識別される。更に、ランタイム挙動2340に対応する前述の修正バージョンの予測された挙動に基づいて、実行可能なルーチン1820の動作中の実行のための修正バージョン2320のうちの選択されたバージョン2350によって表すように、修正されたバージョンが選択される。
更に、実施例では、リダイレクト/RPCバージョンと同様に、使用されている仮想関数の分岐挙動を監視することが可能であり、最適以下の場合、VFTエントリを、挙動により一致するものと交換することが可能である。一例には、電圧及び電流を算出するために使用される式のどれかを選ぶ、モデル・コードが多くの因子を有するスパイス(Spice)シミュレータにおけるモデル・コードの使用がある。しかし、前述の因子のほとんどは、シミュレータ開始後、変わらないライタイム定数である。初期バージョンとしてモデル・コードの汎用の自己監視バージョンを使用して、モデル・インスタンス上の最初のいくつかのコールを観測することが可能であり、最適分岐デフォールトを有している(、又は分岐なしの)非監視バージョンへの切り替えを行い得る。コンパイラ・システムは監視コードを付加し、ユーザはこのことを知らない。更に、分岐コードを既存のコンパイルされたコードにおいて識別することが可能であり、種々の形式で、コンパイルされたコードを再生成するための方法を実現し得る。
例示的な実現形態では、VFTテーブル使用を最適化する場合、クラス・インスタンス内のVFTポインタを、(例えば、VFTの別々のバージョンを指し示すよう)変更し得、又はVFTエントリ自体を変更し得る。その選択は、実現されたクラス・メソッド及びクラス・インスタンスの数に基づく。同じクラスの比較的多数のインスタンスが実現される場合、VFTの共通セットを実現して、(かなり少数の別個のオペレーション・モードが利用される、数千のインスタンスが実現される場合などに)利用されるメモリの量を低減させる。同様に、種々のメソッド間のそれぞれの挙動間に相関が存在している場合、クラス・インスタンスにおける状態の変更には、最適な性能を実現することができるメソッドの数を変更する工程が関係し得、VFTポインタの更新は、VFT内のメソッド・ポインタ全ての変更よりも速い。しかし、インスタンスの数が比較的少なく、実現されたメソッドのそれぞれの挙動間の相関が小さい場合、VFT内の個々のエントリを更新する処理が実現され、この処理は例えば、コール・サイト・リライティングと表し得る。
更に例証するに、かつ、次に図24を参照するに、実施例による第1の例示的な仮想関数リマッピング・パラダイム2400を示す。特に、命令510に関連付けられた(例えば、命令510を含み、又は命令510にマッピングされた)実行可能なルーチン1820がアクセスされ、仮想関数2410の第1の実現形態2411及び第2の実現形態2412が識別され、仮想関数2410は第1の実現形態2411を指し示すVFTエントリ2413を含み、仮想関数2410は更に、複数のVFT2430のうちの第1のVFT2431にマッピングされたVFTポインタ2414を含む。例証の目的で、複数のVFT2430は、第1乃至第NのVFT2431乃至2433を含むものとして図24に示す。更に、実行可能なルーチン1820の一部分の動作は、実行可能ルーチン動作2440によって表す第1の実現形態2411で開始され、この動作中に第1の実現形態2411によって表される分岐挙動2450が識別される。
分岐挙動2450が識別された後、この分岐挙動2450に基づいて、VFTポインタ1414をリマッピングし得、又は、VFTエントリ2413を更新し得る。特に、かつ、なお図24を参照するに、分岐挙動2540の動作解析2460を行って、それにより、第2の実現形態2412が分岐挙動2450に対応する度合いが、第1の実現形態2411が分岐挙動2450に対応する度合いよりも大きいことを判定する。更に、動作解析2460に基づいて(例えば、VFTポインタ2414がもう、第1のVFT2431にマッピングされないように)第2のVFT2432にマッピングし直され、第2のVFT2432は、第2の実現形態2412にマッピングされたポインタ2434を含む。あるいは、VFTエントリ2413は、動作解析2460に基づいて(例えば、第1の実現形態2411よりも)第2の実現形態2412を(例えば、直接)差し示すよう更新し得る。
明瞭性の目的のために、仮想関数2410の第1の実現形態2411及び第2の実現形態2412は、仮想関数2410の別々の2つのバージョンである(か、又は、別々の2つのバージョンのそれぞれの実現形態に対応し得る)。このようにして、単一の仮想関数の別々のバージョンの利用は、別々の仮想関数の利用と区別可能であり得る。例えば、C++クラスでは、別個の複数の仮想関数が存在し得、それらにはそれぞれ、VFTにおける別のスロット/エントリを与え得る。対照的に、実施例では、単一の仮想関数の別々のバージョンがコンパイルされ(又は予めコンパイルされ)、前述の仮想関数バージョンのうちの一バージョンが、特定のメソッドの比較的効果的かつ効率的な実現形態を前述のバージョンが実施し、又は表すことに基づいて(例えば、ランタイムで)選択される。例証するに、クラスは「メソッドA」及び「メソッドB」を「仮想関数A」及び「仮想関数B」として実現させ得る例を考えてみる。その場合、VFTの「エントリ0」及び「エントリ1」は、「A」及び「B」それぞれを指し示す。「B」の新たなバージョン(例えば、「B1」)は、別々のパラメータで「B」をコンパイルすることによって作成し得、「B1」は、「B」でなく「B1」を指し示すよう「エントリ1」を変更することによって利用し得る。この方法論の他の例示的なアプリケーションは、ルーチンの最適化バージョンとデバッグ・バージョンとの間の交換を含み得る。更に、デバッグ環境では、ユーザがルーチン内でブレークポイントを設定する場合、コード・バージョンは、完全に最適化されたバージョンを、デバッグ及びブレークポイントをサポートするものと交換し得、これは、プログラム全体のコンパイルされたバージョン間の交換に対して動作上の利点を有し得る。
実施例では、プログラムは更に、特定の挙動を表し得、それにより、特定の決定を行った後、別の挙動は、対象のコールを介して次回に生起する可能性がより高くなる。特定の関数の実現形態はしたがって、次回はキャッシュをミスする可能性が低くなるように、それ自身の「コール・サイト」(例えば、コールされた関数のVFTエントリ)をリライトし得る。この例には、状態間でモデルが切り替え、各状態が違ったふうに応答するロジック・オペレーションのシミュレーション・モデルが関係する。前述のモデルのコードは、クラス・インスタンスの一部として問い合わせられる「状態変数」を有し得る。よって、コード・エントリ・ポイントをリライトすることができることは、状態変数の実現を不要にする。行われているコール内に状態が暗黙的に存在しているからである。コンパイラ・システムが、コール・サイト・リライティングの使用を知っている場合、前述の状態変数を、生成されたコードから除外し、それにより、メモリを節減することが可能である。
次に図25を参照するに、実施例による例示的なコール・サイト修正パラダイム2500を示す。特に、命令510に関連付けられたプログラム1210(例えば、命令510を含むプログラム1210、又は命令510にマッピングされたプログラム1210)がアクセスされ、プログラム1210は、予め定義されたコール・サイト2520にマッピングされた予め定義された関数2510を含む。更に、予め定義された関数2510のコール570が、VFTポインタ・エントリを利用することなどにより、予め定義されたコール・サイト2520によって行われ、予め定義された関数2510によって表される分岐挙動2450がコール570の結果として識別される。更に、分岐挙動2450に基づいたコール・サイト修正2530によって表すように、予め定義されたコール・サイト2520が修正される。例えば、分岐挙動2450に基づいて、実現されたVFTポインタを別のVFTエントリにリマッピングし得る。
例示的な実現形態では、ハードウェアによってサポートされたバージョンが提供され、コールサイト・アドレスがシャドー・レジスタに記憶される。特に、方法論には、シャドー・レジスタ情報を利用するために、実行可能なルーチンを、生成されたコード(例えば、「set$call(<version>)」)に追加することが関係し、ハードウェア/ソフトウェアが前述のコードをサポートすることができない場合、前述のルーチンは最終的に行われる訳でない。更に、分岐が実際に進んだ所までそのコード・フェッチ・ハードウェアが追いつくまでプロセッサが待つ間に分岐ミスは、パイプライン・ストールをもたらし得る。しかし、第2の例示的な実現形態に従えば、完全に実現されたシステムが提供され、分岐予測ハードウェアが除外される。ソフトウェア自体が、それ自身の挙動を予測するために、よりうまく装備される。これは時間及び電力を節減し、キャッシュ・メモリ及び/又は他の機能に、より多くの装置表面積を利用可能にさせる。
よって、実施例では、コール・サイト・リライティングが行われる。しかし、例示的なシナリオに従えば、GNU C言語コンパイラであるGNUコンパイラ・コレクション(GCC)は、分岐の選択肢にマーキングすることを可能にするが、GCCはコードの複数のバージョンを生成しない。以下にかかわらず、一実施例では、コンパイラ・システムは、上記をサポートするために分岐挙動がランタイム一定である旨をユーザが示すことを可能にし、必要な分岐条件をなくすコードのバージョンを生成し得る。よって、リダイレクト及びRPCコードの作成に加えて、ターゲット・コードの別々のバージョンがランタイム・システムによる使用のために生成され、余分なバージョンは、プログラムの実行可能ファイル及び/又はその共有ライブラリに含まれ得る。C++ライブラリは更に、関数オーバロードをサポートするために、同じ名前のルーチンの複数のバージョンが存在し得るように、「名前修飾」を使用し得る。
上述のように、プログラムは特定の挙動を表し得、それにより、特定の決定を行った後、別の挙動が将来起こる可能性が高い。一実施例では、よって、仮想関数をリマッピングし得る。例証するに、かつ、次に図26を参照するに、実施例による第2の例示的な仮想関数リマッピング・パラダイム2600を示す。特に、命令510に関連付けられた(例えば、命令510を含み、又は命令510にマッピングされた)実行可能なルーチン1820がアクセスされ、仮想関数2410の第1の実現形態2411及び第2の実現形態2412が識別され、仮想関数2410が、第1の実現形態を指し示すVFTエントリ2413を含み、仮想関数2410は更に、複数のVFT2430のうちから第1のVFT2431にマッピングされたVFTポインタ2414を更に含む。例証の目的で、複数のVFT2430が、第1乃至第NのVFT2431乃至2433として図26に示す。更に、実行可能なルーチン1820の一部分の動作が、実行可能ルーチン動作2440によって表すように、第1の実現形態2411によって開始され、この動作中に第1の実現形態2411によって表される分岐挙動2450が識別され、仮想関数2410の考えられる将来の挙動2610が、分岐挙動2450に基づいて予測される。
考えられる将来の挙動2610が予測された後、この考えられる将来の挙動2610に基づいて、VFTポインタ2414をリマッピングし得、又は、VFTエントリ2413を更新し得る。特に、かつ、なお図26を参照するに、考えられる将来の挙動2610の動作解析2460を行って、それにより、第2の実現形態2412が、考えられる将来の挙動2610に対応する度合いが、第1の実現形態2411が、考えられる将来の挙動2610に対応する度合いよりも大きいことを判定する。更に、動作解析2460に基づいて(例えば、VFTポインタ2414がもう、第1のVFT2431にマッピングされないように)複数のVFT2430のうちの第2のVFT2432にリマッピングされ、第2のVFT2432は、第2の実現形態2412にマッピングされたポインタ2434を含む。あるいは、VFTエントリ2413は、性能解析2460に基づいて(例えば、第1の実現形態2411よりも)第2の実現形態2412を(例えば、直接)指し示すよう更新し得る。
E 例示的なコール転送
次に、いくつかの例示的なコール転送手法について掘り下げてみる。しかし、本願の手法は前述の例示的なコール転送手法に制限されず、他のコール転送手法を実現し得る。
i 自動転送
上記に鑑みて、実施例では、コールにアクセスするPU(例えば、第1のPU540)は、そのコールをRPCなどにより、別のPUにリダイレクトすべきか否かを判定する。上述の通り、この決定は、ハードウェア及び/又はソフトウェア・サポート機構によって行い得る。しかし、一実施例では、制御のスレッドはまず、(他の当該PUはシステムのメモリ全てに対するアクセスを有している訳でないので、後続のRPC決定プロセスが行われる前に、制御のスレッドが別のPUから第1のPU540に自動的に転送されるように、前述の高位レベルの決定が行われる前に自動的に転送し得る。
自動コール転送のこの概念を例証するために、かつ、次に図27を参照するために、実施例による、例示的な自動コール転送判定パラダイム2700を示す。特に、命令510に関連付けられた大域メモリ場所2710が識別される。更に、第3のPU1621に、大域メモリ場所2710へのアクセスがなく、第1のPU540が大域メモリ場所2710へのアクセスを有することの結果として第3のPU1621から第1のPU540にコール570が自動的に転送される。
更に例証するに、大域メモリ・マップは実現し得るが、一例示的な実現形態では、全てのプロセッサがメモリ全てに対するアクセスを有している訳でなく、局所でアクセスし/キャッシュすることが可能でないメモリが関係するコールは、アクセスを有するPUに自動的に転送し得る。これは、ハッキングに対し、メモリのセクションをセキュアにし得る。例えば、一PUは、暗号化鍵を扱うタスクを有し、前述のPUは、関連付けられたデータに対するアクセスを有する複数の実現されたPUのうちからの唯一のPUである。他のPUからのそのデータ空間をアドレス指定しようとすることにより、セグメンテーション障害(SEGV)がもたらされ、セキュアにされる対象の情報が、よりセキュアでないユーザ・コードによって使用される共有ライブラリ内にある既存コードをハードニングする方法である、転送することが可能な認可された(又は、「ブレスド(blessed)」)ルーチンによってのみアクセスが実現される。
同様に、実施例では、命令メモリは、セキュアなPU上で、前述のPUが他のコードを自由に実行することがないようにロックダウン(lock down)し得る。例示的な実現形態に従えば、これは、メモリ保護をカスタム化することにより、非分散アーキテクチャにおいて実現し得るが、なお、一定の度合いの保護が与えられる対象のメモリへのユーザ・コードからの物理パスになる。しかし、例示的な一実現形態によれば、保護される対象の他のパスが存在しないように、RPC機構がDPAにおいて利用可能である。
ii データ・タイプ毎のメモリ割り当て
一実施例に従えば、メモリ割り当てがデータ・タイプ毎に行われる。特に、例示的な実現形態では、前述のメモリ割り当てが、C言語で実現することが多少困難である一方、C++及び他のオブジェクト指向の言語は、余分なコードをインジェクトすることができるタイプ特有のコンストラクタを使用する。例えば、C++ライブラリをロードすると、メモリ割り当てコールが、コンストラクタ内で識別され、次いで、データが特定のPUに存在するようにメモリの特定の領域を使用するよう修正される。
例証するために、かつ、次に図28を参照するに、実施例による、例示的なメモリ・ロード・パラダイム2800を示す。特に、特定のPU(例えば、第2のPU580)に関連付けられた(例えば、特定のPUに割り当てられ、又は、特定のPU内に含まれた)キャッシュ・メモリ装置910が識別され、キャッシュ・メモリ装置910内に配置された予め選択されたデータ場所530に基づいて、キャッシュ・メモリ割り当て2820によって表すように、データ520に関連付けられた特定のデータ・タイプ2810へのキャッシュ・メモリ装置910の割り当てが行われる。更に、命令510を含むプログラム1210がアクセスされ、プログラム1210に対応するプログラミング言語2110が識別される。
コンストラクタがネストされている場合、内側コンストラクタは、関連するデータが同じ場所に配置されるように、外側コンストラクタと同じPUにメモリを割り当てるよう指示され得る。このことは、例えば、回路モデルが階層的に構築されるシミュレーションなどのタスクにおいて当てはまり得る。
更に、プログラミング言語2110に対応するライブラリ2840がアクセスされ、ライブラリ2840は、メモリ割り当てコール2850を含むコンストラクタ2170を定義し、メモリ割り当てコール2850は、特定のデータ・タイプ2810を有する情報2860にマッピングされる。更に、メモリ割り当てコール2850に対する修正2870を、(キャッシュ・メモリ割り当て2820中に行われる)割り当てに基づいて実現して、それにより、プログラム1210の修正バージョン2890、及び修正メモリ割り当てコール2880を作成し、修正2870の結果としてキャッシュ・メモリ装置910に情報2860がロードされるように、修正メモリ割り当てコール2880が行われる。
なお図28を参照するに、一実施例に従って、コール570を行って、それにより、(キャッシュ・メモリ割り当て2820中に行われる)割り当ての結果として、特定のPUにより、プログラム1210の修正バージョン2890を実行する。コール570が、第1のPU540から第2のPU580に転送され、第2のPU580が第1のPU540から、プログラム1210の修正バージョン2890を受け取る。第2のPU580は、プログラム1210の修正バージョン2890が実行されるようにコール570を行い、プログラム1210のこの特定のバージョンの実行は、上記メモリ割り当ての結果として第2のPU580によって実行される。
更に、実施例では、上記メモリ・ロード手法のコード・インジェクション方法は、(1)プログラムがメモリにロードされと、コード・インジェクションがPU単位で行われ、(2)別々のPUは、ロードされるにつれ、どのようにして修正されるかに応じてメモリ内のプログラムの別々のバージョンを有し得、(3)コードの場所がRPCモードを示唆しているという点で、RPC意思決定プロセスのコード・インジェクションとほぼ同じである。物理共有メモリが存在しない種々のプラットフォーム及び分散コンピューティング環境に関し、この手法には、「ソフトウェアのみ」の機構が関係し得る一方、ハードウェア・サポートは、当該プロセスをより高速にし、より効率的にする役目を担い得る。
iii コード・プリプロセッシング
上述のように、例示的な実現形態では、特定のタイプのルーチン・コールは、効率の目的で、複製データよりもむしろ引数としてポインタを使用し、前述のポインタは、値渡しコールに変換し得る。上記にかかわらず、一実施例では、転送ライブラリは、実現されたPU間でデータを転送するよう実現され、オペレーティング・システム・コードは、この転送ライブラリを生成するために前述の転送に先立って予め処理され、この予めの処理には、値渡しサポート・コードに、参照渡しソース・コードを変換することが関係する。
例証するために、かつ、次に図29を参照するに、実施例による、例示的なデータ・パッシング・パラダイム2900を示す。特に、1つ又は複数のコード・ライブラリ2910が識別され、1つ又は複数のコード・ライブラリ2910に関連付けられた参照渡しソース・コード2920にアクセスされる。更に、参照渡しソース・コード2920を値渡しサポート・コード2930に変換して、それにより、転送ライブラリ2940を生成する。更に、データ520の参照渡しでなく、値渡しを行うよう転送ライブラリ2940が利用される。
更に、一実施例では、元のターゲット・コード/ルーチンが、RPC機構によって転送された局所の複製にリマッピングされたポインタでコールされる。例証するに、かつ、次に図30を参照するに、実施例による例示的なポインタ・リマッピング・パラダイム3000を示す。特に、第1のPU540及び第2のPU580は第1のキャッシュ・メモリ装置620及び第2のキャッシュ・メモリ装置630それぞれを含み、データ520が第1のキャッシュ・メモリ装置620に記憶される。更に、コール570内の1つ又は複数のポインタ3010が識別され、ポインタ変換3020によって表すように1つ又は複数のポインタ3010を変換して、それにより、参照渡しでなく値渡しでデータ520を渡すようコール570を構成する。更に、第1のPU540から第2のPU580へのコール570の転送が行われ、この転送中に、データ520の値渡しを行って、それにより、データ520の局所複製3030を第2のキャッシュ・メモリ装置630に記憶する。更に、ポインタ・リマッピング3040によって表すように、1つ又は複数のポインタ3010を局所複製3030にリマッピングして、それにより、第1のキャッシュ・メモリ装置620にアクセスすることなく、コール570を実行することを可能にする。
iv RPC転送
上述したように、実施例では、RPC機構をコール転送プロセスについて使用し得る。例えば、かつ、次に図31を参照するに、実施例による例示的なRPC転送パラダイム3100を示す。特に、RPC3110を起動させて、それにより、第1のPU540から第2のPU580にコール570を転送する。この点で、例示的な実現形態に従えば、RPC3110は、コンピュータ・プログラムが、(コール570にマッピングされたものなどの)サブルーチン又はプロシージャに、種々のリソース(例えば、複数のPU)の共有ネットワーク内の(例えば、別のPU内の)別のアドレス空間において実行させることを可能にするプロセス間通信である。実際に、RPC3110は更に、このコール転送プロセス中に第1のプロセッサ540のコンテキストを第2のプロセッサ580に転送するよう構成し得る。コール先のプロシージャが、コール側のプロシージャと同じアドレス空間にあってもなくてもよいという点以外は、RPC3110は局所プロシージャ・コールと同様である。むしろ、別々の2つのプロセスが、同じコンピュータ・システム上で実行していることがあり得、又は、別々のコンピュータ・システムが互いに通信し合うことをネットワークが可能にして前述のシステム上それぞれで実行していることがあり得る。そういうものとして、RPC3110は、比較的効率的であり、かつ真に分散化されたアプリケーションを実現するよう実施し得る。
更に、一実施例では、「クライアント/サーバ」モードが利用されないようにRPC3110が実現される。例えば、発信側のPUによって実行されるクライアント・プログラムが、ターゲットPUによって実行されるサーバ・プログラムからの結果を待つRPCモードと対照的に、実施例では、スレッドは元のPUに戻っても戻らなくてもよく、したがって、前述のスレッドは、当該スレッドが完全に実行されるような時点(さもなければ、理論上は、スレッドは、最終的に実行されない場合、無期限にワンダリングし得る)などまで、(PU間で)メモリにわたって蛇行又はワンダリングし得る。これは特に、直ちにリターンが期待されることなく、高度なクエリを発信し得るデータベース・サーチの場合に適切である。
例えば、RPC3110は第1のPU540によって起動され、第1のPU540は、特定されたプロシージャがコール570にマッピングされる場合など、供給されたパラメータによって、上記プロシージャを実行する旨の要求メッセージを第2のPU580に送出する。特に、第1のPU540は、局所でプロキシ関数をコールし、遠隔コードの引数を渡し、前述の引数はアドレスとしてパスし得る。プロキシは次いで、(1)外部データ表現(XDR)と呼ばれる予め定義された転送形式に変換することなどにより、遠隔プロシージャの引数をコード化し、直列化し、又は「整列化(marshall)」し、(2)システム・コールを行って、それにより、(ユーザ・データ・プロトコル(UDP)パケット又は局所メッセージ・キューなどにより、)第2のPU580に、コード化されたパケットを局所オペレーティング・システムに送出させる。クライアント/サーバ・モードが実現されない限り、第1のPU540は、一旦、このパケットを第2のPU580に発信すると、結果を待たない。よって、第1のPU540は、別のスレッドを自由に処理する。
第2のPU580が、コード化されたパケットを受け取ると、又は第2のPU580が、コード化されたパケットを受け取った後、第2のPU580は、(1)(予め定義された外部データ表現(XDR)フィルタなどにより、)遠隔プロシージャの引数をデコードし、再作成し、又は「整列化解除(unmarshall)」し、(2)遠隔プロシージャをコールし、行うディスパッチ・ルーチンにこのパケットを渡す。クライアント/サーバ・モードが実現されない限り、第2のPU580は、新たなパケットに結果をコード化し、直列化し、又は整列化し、次いで、このパケットを第1のPU540に返信するプロセスを開始しない。むしろ、第2のPU580は、この同じスレッドの処理を自由に続け、又は、さもなければ、このスレッドが次いで、別のPUにワンダリングする場合、別のスレッドの処理を継続し始める。そういうものとして、この手法は、クライアント/サーバ・モードRPCと比較して、より高いシステム処理効率をもたらす。
実際に、システム性能全体に関し、例示的な実施例では、Pthread mutexロック・コールは、
int pthread_mutex_lock(pthread_mutex_t mutex)
の通り、定義し得る。
RPC手法の場合に転送されるデータには、(1)mutexアドレス、(2)コール・アドレス、(3)リターンのための識別子(例えば、アドレス)、及び(4)ヘッダ(例えば、最小4ワードに集約し得る)がある。Mutexを直接読み出そうとすることには、少なくとも4ワードになり、場合によっては、8ワード以上になる少なくとも1つのキャッシュ・ラインの更新/フラッシングが関係する。しかし、キャッシュ・ラインが複数のプロセッサ間で共有される一方、RPCコールは、例えば、ポイントツーポイントのマルチプロセッサ相互接続プロトコル(例えば、インテル社クイックパス(QuickPath(登録商標))又はAMD社ハイパートランスポート・テクノロジ(HyperTransport Technology(登録商標))を実現することなどにより、)関係しているPUに対して排他的であり、メモリ・システムと別個であり得る。よって、コールを比較的効率的な態様で転送することが可能であるようにRPC機構を実現し得る。
上記に鑑みて、複数のスレッドの実現には、例えば、共通データが修正されている過程にある間に共通データが読み出され、又は修正されることを阻止するために、セマフォを使用して実現し得るmutexオペレーションの利用が関係し得る。更に、特定のmutexオペレーションのmutexコールは、アクセスの重なりの可能性が存在せず(、かつ、よって、レース状態又はキャッシュ・コヒーレンシの問題が存在しない)ようにアトミックな態様で単一のプロセッサ上で直列に処理し得る。更に、より多くのPU、及びメモリのより高細粒度のセグメンテーションにより、共有データの特定の部分がそれ自身のPUを有し、RPCコールの処理が速くなる。よって、この手法は、比較的大量のPUを、既存のコードがサポートされている間に実現し得るようにうまくスケーリングする。
上記にかかわらず、一実施例では、遠隔プロシージャ・コールを実行するために使用される実際の機構は使用されているコアの種類に依存する。大半のプロセッサの場合、コール/コードのコンテキストはレジスタに保持され、よって、別のPUへの制御の転送には、レジスタ・セットの転送が関係する。局所でキャッシュに保持された他のデータ転送する機能も有益であり得るが、自動的にこれを全体的に行うことは困難であり得る。したがって、例示的な実現形態は、RPCターゲットであるPUに向けて、局所でキャッシュされたデータを「プッシュ」する旨のユーザ・レベル・コールを提供し、前述のデータは、リダイレクト・コードにおいて使用される。よって、キャッシュ間で直接、データを複製するためにユーザ・レベル制御を提供し得る。
例えば、RPCが実現されており、遠隔コードが発信側のPUのメモリからのデータにマッピングされた場合、RPC機構は、コールに先立って、又はコールとともにデータをプッシュすることが可能である。例証するに、かつ、次に図32を参照するに、実施例による例示的な標的データ記憶パラダイム3200を示す。特に、キャッシュ・メモリ識別3210によって表すように、第1のPU540及び第2のPU580それぞれに関連付けられた第1のキャッシュ・メモリ装置620及び第2のキャッシュ・メモリ装置620、630が識別される。更に、第1のキャッシュ・メモリ装置620に記憶され、命令510に関連付けられたデータ値3220が、データ値識別3230によって表すように識別される。更に、データ値3220が、(第1のPU540から第2のPU580にコール570を転送する際にRPC3110がデータ値3220を第2のキャッシュ・メモリ装置630に「プッシュ」した場合などに)RPC3110の結果として第2のキャッシュ・メモリ装置630に記憶される。
更に例証するに、かつ、fprintf関数が関係する上記例を参照するに、例示的な実現形態は、リダイレクト・コード内のコールに引数をプッシュするオプションを提供する。プッシュ関数に対するオプションは、局所キャッシュをフラッシュするか否かを制御する。よって、コールは、
void push (local address, data_size, target_pu, option_flags)
のようになり得る。データが実際に局所キャッシュ又は他の局所メモリにない場合、データを取り出し、又は移動するための動作は行われず、その場合、命令は事実上、プロセッサが単に、次のシーケンシャル命令に移動するように、比較的小量のメモリ空間を利用するがオペレーションを規定しないコンピュータ命令として規定し得る「no−op」である。更に、ターゲットのPUのキャッシング・ポリシーも、オペレーションをスキップし得るように考慮に入れることができる。ユーザは更に、局所キャッシュ内にデータを保持するか否かについて「プッシュ」により、余分な情報を供給し得る。
上記に加え、一実施例では、遠隔PUは、データが到着するまで、転送されたコールの実行を保留し、又は遅延させるための機能を有し得る。例証するに、かつ、なお図32を参照するに、実施例では、データ値3220が第2のキャッシュ・メモリ630に記憶されるまで、実行遅延3240によって示すように、コール570の実行を第2のPU580によって遅延させる。前述のデータが到着するまで、転送されたコールの実行を遅延させることは、遠隔PUの主処理パイプラインのストールを避けることを助け得る。
上記に鑑み、かつ、実施例によれば、メモリ/データを「プッシュする」という概念を実現し得る。例示的な実現形態に従えば、前述のデータを「プッシュする」手法は、(1)局所キャッシュをいつ無効にするかを知ること、及び(2)データを要求する際に、遠端上で生じるレーテンシに関する2つの課題を解決する。よって、インジェクトされたRPCコードは、局所キャッシュからの余分なデータをプルし、RPCによって送出し、よって、その過程で局所キャッシュを無効化し/リリースし、又は、コールが遠隔で実行される場合、実現されたデータが既に、遠隔PU上のキャッシュに配置されているように直接メモリ・アクセス(DMA)転送(例えば、局所キャッシュの外部)をセットする。
例示的な実現形態によれば、プッシュ、リマップ、及びワンダリングの機構を併用することは、データベース・クエリなどのタスクが、クエリ自体を取り出すために、共有メモリ機構にアクセスすることなく、複数のPUにわたって効率的に進むことが可能であり、(他のメモリ内でなく)局所メモリ及びキャッシュに存在し得る。同様に、ビデオ・フレーム/シーケンスなどのオブジェクトを、ビデオの圧縮又は伸張のためにPUのチェインを介してパスすることが可能である。しかし、プログラマのレベルでは、ランタイム・システムのアーキテクチャについて分かることは必要でない。むしろ、潜在的なRPC境界を識別することが可能であるようにコードがパーティショニングされる。例えば、ビデオ処理用の汎用グラフィカル処理装置(GP−GPU)システムでは、特定の「ワープ(warp)」(ワープは、同じコードを実行するプロセッサ・バンクである)は、(コード・セクタ・マッピングを使用して)特定のルーチンと関連付けられ、タイプに依存する割り当て及びリマッピングは、ユーザ・レベルのタスクがGPUパイプラインにわたって「ワンダリング」するようにバンク間メモリを利用することが可能である。GPUをプログラミングするための既存の手法には、特定の処理アーキテクチャを対象とし、新たなコーディング・スタイルを学習することが関係するCUDA及びオープンCL(OpenCL)を含み、「ワンダリング・スレッド」手法は、なじみのあるプラットフォーム独立(SMP)スタイルをプログラマが使用することを可能にし、コードが実際に実行され、データが記憶される場所というアーキテクチャ上の課題は、独立して扱い、よって、コードがよりポータブルになり、永続し得る。
一実施例では、特定のシステム内又はネットワーク内のメモリが別個に割り当てら得る大域メモリ・マップは、個々のPUのそれぞれのメモリ・マップと異なり得、アドレスはRPC処理中に変換し得る。例証するに、かつ、次に図33を参照するに、実施例による例示的なRPC構成パラダイム3300を示す。特に、第1のPU540及び第2のPU580それぞれに関連付けられた第1の局所メモリ・マップ3310及び第2の局所メモリ・マップ3320が(例えば、第1のPU540によって)識別される。更に、第1の局所メモリ・マップ3310と第2の局所メモリ・マップ3320との間の区別3330が識別され、メモリ・アドレス変換3340が区別3330に基づいて生成される。更に、メモリ・アドレス変換3340が、RPC3110を構成するために利用される。このようにして、RPCが、クライアントPU及びサーバPUの局所メモリ・マップに基づいて生成される。
実際に、一実施例では、大半の局所メモリがより低い数のアドレス・ビットでアクセス可能であるように、より低いアドレス空間にマッピングし得る。(システム内のプロセッサ毎にも該当し得る、)64ビットのアドレス空間でなくむしろ16又は32ビットのアドレス空間を扱うよう企図されたプロセッサを実現する例を考えてみる。これは、「仮想メモリ」と同様であるが、複数のマシンに及び、より高い細粒度を有し得るように、アプリケーション層において実現し得る。よって、複数のマシンにまたがる比較的大規模のプログラムが実現され、局所メモリ・マッピング・プロセスにわたって制御が維持されない場合、システム全体をマッピングすることは実現可能でないことがあり得る。よって、ランタイム・コードは、局所マシンを大域マップ内の別個の空間にマッピングし、大域マップの部分は、(例えば、ハードウェアというよりはソフトウェアによって)局所でキャッシュし得、非局所データに対するコ―ルは必要に応じて自動的に転送される。尚、これは、(mutexコールなどの)単一アドレス引数コールの場合には機能する一方、(ソース・コード・レベルのアウェアネスが関係し得るソフトウェア・キャッシングなしで)別々のマシン上のメモリに対するポインタである引数を有する実行可能なルーチンに対するコールの場合には機能しないことがあり得る。
上述したように、ルーチンに、(「無効」コールとしてC/C++において示すなどの)リターンが関係しない場合、実施例では、RPC機構は、遠隔PUを待つことなく、局所で直ちにリターンし得る。例証するに、かつ、次に図34を参照するに、実施例による例示的な実行可能なルーチン性能パラダイム3400を示す。特に、命令510、及び制御の第1のスレッド3420に関連付けられた実行可能なルーチン3410、及び命令510を含むプログラム1210がアクセスされる。更に、コール570における1つ又は複数のポインタ3010が識別され、ポインタ変換3020によって表すように1つ又は複数のポインタ3010を変換して、デ―タ520の参照渡しでなく値渡しを行うようコール570を構成して、それにより、制御の第2のスレッド3430を作成する。更に、第2のPU580に関連付けられ(、例えば、第2のPU580内に含まれ、第2のPU580に割り当てられた)キャッシュ・メモリ装置910が、キャッシュ・メモリ識別3210によって表すように識別され、RPC3110の結果としてデータ520の値渡しを行って、それにより、データ520の局所の複製3030をキャッシュ・メモリ装置910に記憶し、第2の制御のスレッド3430を第2のPU380に提供する。更に、実行可能なルーチン3410が第1のPU540により、制御の第1のスレッド3420に基づいて行われる一方、第2のPU580は、(実行可能なルーチン3410が当該実行中に生成されたデータ値3320に対するリターン要求を欠く)制御の第2のスレッド3430と無関係である制御の第1のスレッド3420の結果として、制御の第2のスレッド3430に基づいて命令510の実行を行う。
上記に鑑みて、実施例に従って、第1のPU540は、RPCからのリターンを待つことなく、続けることができ、この場合、第2のPU580がコールを完了するものとする。例えば、参照渡しプリント・コールが値渡しコールに変換された場合に、かつ、第1のPU540に、(当該実行が実際に首尾良く行われている場合に、)転送されたコールの実行が首尾良く行われているとの確認を提供しない場合、転送されたコールはよって、別個のスレッド(例えば、ワンダリング・スレッド)となる。
上記に係わらず、一実施例では、コール転送プロシージャは、共有メモリ・コヒーレンス・マシン命令の実現形態に基づいて実行される。例証するに、かつ、次に図35を参照するに、実施例による例示的な実行可能なルーチン転送パラダイム3400を示す。特に、第1のプロセッシング・コア3520が識別され、第1のプロセッシング・コア3520は、データ520にマッピングされた第1の実行可能なルーチン3530を行い、第1の実行可能なルーチン3520は、共有メモリ・コヒーレンス・マシン命令3540を含む。更に、第2の実行可能なルーチン3550が、第2のプロセッシング・コア3560においてアクセスされる。よって、別々の2つのプロセッシング・コアが実現される。更に、プロシージャ・コール3580(例えば、RPC)を起動させて、それにより、第2の実行可能なルーチン3550を第2のプロセッシング・コア3560から第1のプロセッシング・コア3520に、第2の実行可能なルーチン3550がデータ520にマッピングされていることに基づき、かつ、第2の実行可能なルーチン3550が、共有メモリ・コヒーレンス・マシン命令3540を含んでいることに基づいて転送する。実際に、共有メモリ・コヒーレンス・マシン命令3540を含む第1の実行可能なルーチン3530を第1のプロセッシング・コア3520が既に処理している限り、第1のプロセッシング・コア3520は、第2の実行可能なルーチン3550の実行中に前述の同じ共有メモリ・コヒーレンス・マシン命令3540を効率的に実行することができる。
なお図35を参照するに、実施例では、別々のPUは、第1のプロセッシング・コア3520及び第2のプロセッシング・コア3560それぞれを含む。第1のPU540及び第2のPU580が、第2のプロセッシング・コア3560及び第1のプロセッシング・コア3520それぞれを含む例を考えてみる。コールを転送することにした結果、コールは第1のPU540内の第2のプロセッシング・コア3560から第2のPU580内の第1のプロセッシング・コア3520に、制御のスレッドが第1のPU540から第2のPU580に転送されるように、かつ、第1のPU540がよって、別の別個のスレッドに自由にアクセスするように転送される。
しかし、一実施例に従えば、単一のPU(例えば、第1のPU540)は、マルチコア・プロセッサ内のコア間でRPCがルーティングされるように第1のプロセッシング・コア3520及び第2のプロセッシング・コア3560の両方を含む。例えば、特定のPUが複数のコアを有する場合、RPC機構は、局所で使用し得るので、1つのプロセッサのみが共有データに対するコールを扱う(例えば、同じプロセッシング・コアがmutexコール全てに割り当てられる)。この場合、コールは、コヒーレントでないメモリの独立部分をアドレス指定するコア間でルーティングされるRPCコールと対照的に、コヒーレント・メモリ・システム(例えば、L2キャッシュ)を共有するコア間で交差する。
III 例示的なコンピュータ・システム環境
本願手法の種々の構成は、本明細書及び特許請求の範囲記載の種々の動作及びオペレーションを行うために配線し、又は構成し得る。しかし、一実施例に従えば、本願の手法の種々のオペレーションを行うためにコンピュータ・システムを実現し得る。よって、次に、例示的なコンピュータ・システム及び構成を深く掘り下げてみる。しかし、本願の手法は前述の例示的なシステム及び構成に制限されない。実際に、他のシステム及び構成を実現し得る。
次に図36を参照すれば、実施例による例示的なコンピュータ・システム3600を示す。コンピュータ・システム3600は、何れかのタイプのコンピューティング装置(例えば、プログラム又はアルゴリズムに関連付けられた計算、処理、演算、及び関数を行うよう利用されるコンピューティング・デバイス)であり得る。本明細書及び特許請求の範囲の記載において、コンピュータ読み取り可能なメモリ装置内に存在し、コンピュータ・システム3600の1つ又は複数のプロセッサによって実行される、ソフトウェア・プログラムなどの一連の命令として一実施例に従って実現される特定のプロセス及び工程を説明する。実行されると、命令はコンピュータ・システム3600に、本明細書及び特許請求の範囲記載の種々の実施例において表す特定の動作を行わせ、特別の挙動を表させる。
なお図36を参照するに、コンピュータ・システム3600は、ソースとデスティネーションとの間で情報を通信するよう構成されたアドレス/データ・バス3610を含む。更に、プロセッサ3620などの1つ又は複数のデータ・プロセッサは、アドレス/データ・バス3610と結合され、プロセッサ3620は情報及び命令を処理するよう構成される。実施例では、プロセッサ3620はマイクロプロセッサ又はマイクロコントローラである一方、他のタイプのデータ・プロセッサも実現し得る。
コンピュータ・システム3600は更に、例えば揮発性メモリ装置3630などのいくつかのデータ記憶構成部分を含む。揮発性メモリ装置3630は、通信するよう、アドレス/データ・バス3610に関連付けられ、又は結合される。更に、揮発性メモリ装置3630は、プロセッサ3620用の命令及び情報を記憶するよう構成される。更に、揮発性メモリ装置3630は例えば、ランダム・アクセス・メモリ(RAM)(スタティックRAM及び/又はダイナミックRAMなど)を含み得る。コンピュータ・システム3600は更に、通信するよう、アドレス/データ・バス3610に関連付けられ、又は結合され、プロセッサ3620用に命令及び静的情報を記憶するよう構成された不揮発性メモリ装置3640を含む。実施例では、不揮発性メモリ装置3640は、リードオンリ・メモリ(ROM)(プログラマブルROM、フラッシュ・メモリ、消去可能なプログラマブルROM(EPROM)、及び/又は電気的に消去可能なプログラマブルROM(EEPROM)など)を含む。上記にかかわらず、本願の手法は本明細書及び特許請求の範囲記載の例示的な記憶装置の使用に制限されず、他のタイプのメモリを実現し得る。
なお図36を参照するに、コンピュータ・システム3600は更に、通信するよう、アドレス/データ・バス3610に関連付けられ、又は結合され、他の電子装置及びコンピュータ・システムとコンピュータ・システム3600がインタフェースすることを可能にするよう構成された信号生成/受信装置3650などの1つ又は複数の信号生成及び受信装置も含む。1つ又は複数の信号生成及び受信装置によって実現される通信インタフェースは、有線(例えば、シリアル・ケーブル、光ファイバ・ケーブル、モデム、及びネットワーク・アダプタ)並びに/又は無線(例えば、無線モデム及び無線ネットワーク・アダプタ)通信手法を利用し得る。
実施例では、コンピュータ・システム3600は任意的には、通信するよう、アドレス/データ・バス3610に関連付けられ、又は結合された英数字入力装置3660を含み、英数字入力装置3660は、プロセッサ3620に情報及びコマンド選択を通信するために英数字及びファンクション・キーを含む。更に、一実施例に従えば、カーソル制御装置3670が、通信するよう、アドレス/データ・バス3610に関連付けられ、又は結合され、任意のカーソル制御装置3670は、ユーザ入力情報及びコマンドの選択をプロセッサ3620に通信するよう構成される。例えば、カーソル制御装置3670は、マウス、トラックボール、トラックパッド、光学式トラッキング装置、又はタッチ画面を使用して実現し得る。第2の例では、特殊なキー又はキー・シーケンス・コマンドが実行された場合などの、英数字入力装置3660からの入力に応じて、カーソルが誘導され、かつ/又は起動される。しかし、カーソルは例えば音声コマンドなどの他の手段によって誘導し得る。
なお図36を参照するに、コンピュータ・システム3600は、一実施例に従えば、任意的には、通信するよう、アドレス・データ・バス610に関連付けられ、又は結合されたデータ記憶装置3680を含み、データ記憶装置3680は、情報及び/又はコンピュータ実行可能な命令を記憶するよう構成される。例証するに、一例では、データ記憶装置3680は、ハード・ディスク・ドライブ(HDD)、フロッピー(登録商標)・ディスク・ドライブ、コンパクト・ディスクROM(CD−ROM)ドライブ、ディジタル多用途ディスク(DVD)ドライブ、又はブルーレイ(登録商標)(BD)ドライブなどの磁気ディスク・ドライブ又は光学式ディスク・ドライブである。
更に、実施例では、ディスプレイ装置3690は、通信するよう、アドレス/データ・バス3610に関連付けられ、又は結合され、ビデオ及び/又はグラフィックスを表示するよう構成される。ディスプレイ装置3690は例えば、陰極線管(CRT)ディスプレイ、電界放出ディスプレイ(FED)、プラズマ・ディスプレイ、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、又は、ユーザによって認識されることができる英数字並びにグラフィック及び/又はビデオ画像の表示に適した何れかの他のディスプレイ装置であり得る。
コンピュータ・システム3600は、実施例による例示的なコンピューティング環境として提示している。しかし、コンピュータ・システム3600は、コンピュータ・システムであることに厳密に制限される訳でない。例えば、一実施例では、コンピュータ・システム3600は、本明細書及び特許請求の範囲記載の種々の実施例に応じて使用し得る一種のデータ処理解析を表す。更に、他のコンピューティング・システムを実現し得る。実際に、本願の手法は、何れかの特定のデータ処理環境に制限されない。
上記に加え、本願の手法の種々の方法は、命令の組を実行するよう構成されたコンピュータ・システムによって行い得る。前述の命令は、実行されると、命令がコンピュータ・システムに、本願手法の方法を行わせるように、コンピュータ読み取り可能な媒体上又はコンピュータ読み取り可能な媒体内に(例えば、一時的でないコンピュータ読み取り可能な媒体上若しくは一時的でないコンピュータ読み取り可能な媒体内、又は、1つ若しくは複数の一時的な伝搬信号以外のものを含む一時的なコンピュータ読み取り可能な媒体上又は1つ若しくは複数の一時的な伝搬信号以外のものを含む一時的なコンピュータ読み取り可能な媒体内に)記憶し得る。よって、次に、コンピュータ読み取り可能な媒体の例示的なシステム及び構成を深く掘り下げてみる。しかし、本願の手法は前述の例示的なシステム及び構成に制限されない。実際に、他のシステム及び構成を実現し得る。
次に図37を参照すれば、実施例による例示的な命令実行システム3700を示す。例示的な命令実行システム3700は、実行すると、例示的な方法3740などの本願手法の方法を、例示的なコンピュータ・システム3730などのコンピュータ・システムに行わせる命令3720の組を記憶するよう構成されたコンピュータ読み取り可能な媒体3710を含む。例えば、一実施例では、命令3720の組が、コンピュータ読み取り可能な媒体3710からコンピュータ・システム3730によって獲得され、次いで、コンピュータ・システム3730は、命令3720の組を実行し、よって、例示的な方法3740を行う。
上記に係わらず、本明細書及び特許請求の範囲記載の電子及びソフトウェア・ベースのシステムは、本願の手法のコンピューティング環境がどの程度適しているかの例にすぎず、前述の例が、本願の手法の使用又は機能の範囲について何れかの限定を示唆することを意図するものでない。前述の例示的なシステムは、本出願で記載された例において例証された構成部分の何れか1つ又は組み合わせに関する如何なる依存性又は要件を有しているとして解されるべきでない。
IV.例示的な実現形態
上記に鑑みて、本願の手法の種々の実施例には以下の少なくとも1つが関係する。
構成1:データ局所性を利用して、特定のデータ・タイプを特定の処理装置に割り当てることなどによって命令コード・キャッシュ・ミスを避ける構成。
構成2:データをメモリに割り当て、それにより、データ局所性を実現して構成1をサポートする構成。
構成3:「ワンダリング・スレッド」を実現して構成1及び2を利用する構成。
構成4:実行のため、及び、構成1乃至3をサポートするためのコード・インジェクション及びランタイム修正。
更に、種々の実施例には、単一スレッド・コードを加速化するためのサポートを伴う並列処理のためのメモリ内プロセッサ・アーキテクチャ及びソフトウェア方法の実現が関係する。更に、一実施例では、ワンダリング・スレッドをサポートするプラットフォームは、RPC機構を起動するためにC及び/又はアセンブラ・レベルの命令からコール可能なアプリケーション・プログラミング・インタフェースを提供するよう構成される。
例示的な実現形態によれば、本願の手法の種々の実施例の値は、ベリログ及びVHDLなどのハードウェア記述言語に基づいて回路シミュレーションの挙動を観測することによって理解し得る。前述の記述は極めて並列である一方、種々の定義されたSMPアーキテクチャに伴って、線形的(例えば、N個のプロセッサの場合、N倍速くなり、ここで、Nは1よりも大きな整数値である)に加速化するものでない。動作がないことは、ほとんど、実現された複数のプロセッサのうちの各プロセッサによって利用される共有メモリ・システムにおけるボトルネックが理由である。更に、キャッシュ・コヒーレンシ問題が理由でコードは確認することが困難であり得、バグは複製することが困難であり得る。更に、キャッシュ・コヒーレンシ問題は、ハードウェア及び電力の点でもコストとなり得る。しかし、本願の手法の種々の実施例によれば、前述の同じシミュレータ・プログラムを使用することが可能であるが、回路を表すシミュレーション・データがどのようにして割り当てられるかを管理することにより、実際の物理的な回路がモデリングされている場合のように、近傍のシミュレーション間の通信を局所化することを確実にし得る。
大規模集積回路がシリコン基板上に配置されており、各タイルが、それ自身の処理を行い、そのエッジに沿ってのみ、その近傍と通信する。タイルと同様にシミュレーションにおいてPUにメモリを割り当てることにより、境界通信が同様に局所化され、シミュレーションの非近傍部分が干渉しない。信号値変更を通信するためにPU上に作成されたスレッドは、他のPUに「ワンダリングする」ように(例えば、インジェクトされたコードによって)フォークされ、デタッチされ、完了すると消され、それにより、ソースPUが他の作業を自由に行う状態にしておく。
更に、例示的な一実現形態に従えば、コンパイル済コードのシミュレータ(例えば、VCS(登録商標)は、構成部分について各種用途を有する大規模回路が一般に、比較的大規模のプログラムを生成し、ランダムにアクセスされる大規模のプログラム・コードが、より多く、命令フェッチ時にキャッシュをミスしがちであるように回路に特有である。個々のPU上の種々のデータが、割り当てられたデータ・タイプの許容可能な範囲によって規定される限り、対応するコード自体は最小になり、ミス・レートは低くなる。
更に、ハードウェア・シミュレーション及びデータベース・サーチが関係するアプリケーションの場合の特定の問題は、例えば、システム内のデータがプログラムの寿命の間にあまり変化しない場合に「データ・スタティック」問題と表し得るが、種々のオペレーションは、予測可能でないパターンでデータに対する処理(修正など)を行い、キャッシュ性能を劣悪にし、メモリ・アクセスに対する競合をもたらし得る。本願手法の実施例によるPUアーキテクチャは、前述の「データ・スタティク」問題を避けるよう構成される。PU間通信は共有バス経由でなく、PUは、キャッシュの使用を、処理するデータ(作業データはPUに対して局所にある)を扱うために利用するコードに自動的に制限する。そういうものとして、信頼できるデータ配布システムが確立されると、比較的効率的なやり方で行うよう暗黙的に構成される。
例示的な実現形態では、DPA上のコード実行に対するワンダリング・スレッド手法は、構造化された、又は構造化されていないデータベース内をアプリケーションがサーチする場合などに大量のスタティック・データに関する作業に特に適している。スレッドがデータベース内の情報を識別し、又はルックアップするよう構成される例を考えてみる。このスレッドは、インデクス・コードを介して、更に、データ自体を介して進むにつれ、複数のPUを介してワンダリングし、データ内のターゲットに当たるにつれ、発信側のPUにコードが書き戻される。複数の要求を同時に、干渉があまりない状態で扱うことが可能であり、処理するとボトルネック(例えば、インデクス内で生じ得るものなど)がある場合、潜在的なターゲットから、任意のPU、又は充填がより少ないPUを選ぶためにRPC選択手法を使用して、同じアドレス空間を処理するようトランスペアレントに割り当てることが可能である。
本明細書及び特許請求の範囲記載の種々の実施例には、結果を実現するための一連の特定の工程、動作、又はオペレーションが関係するが、前述の構成、動作、又はオペレーションは、いくつかの例示的な実現形態に応じて行い得る種々の工程、動作、又はオペレーションの例である。実際に、本明細書及び特許請求の範囲記載の実施例は、記載された工程、動作、又はオペレーションの変形などの種々の他の工程、動作、又はオペレーションが行われるように構成し得る。更に、本明細書及び特許請求の範囲記載の工程は、提示された順序と異なる順序で行い得、工程の全てが必ずしも、特定の実施例において行われる訳でない。
例示的な概要概念
上記記載は、少なくとも以下の概念を提示している。
概念0 通信するよう、互いに関連付けられ、若しくは結合され、又は互いに接続された複数の処理装置(PU)を含む並列処理マシンであって、複数のPUはそれぞれ、局所メモリを有し、複数のPUは、命令に関連付けられたメモリ内のデータ又はコードの場所に基づいて別のPUに命令の実行を渡すか、又は、命令を実行するよう構成される並列処理マシン。
概念1 実行されると、コンピュータ・システムに、処理リソース割り当ての方法を行わせる命令の組を記憶するコンピュータ読み取り可能な媒体であって、前記方法は、
予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
前記予め選択されたデータ場所に基づいて第1の処理装置(PU)から第2のPUに前記命令のコールを転送するか否かを判定する工程と
を含むコンピュータ読み取り可能な媒体。
概念2 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第1のPUに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令を前記キャッシュ・メモリ装置にロードする工程と、
前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のPUに転送するか否かを前記第1のPUが判定することを可能にするよう構成された工程と
を含むコンピュータ読み取り可能な媒体。
概念3 概念2記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
予め選択された1つ又は複数の実行可能なルーチンそれぞれに対応する1つ又は複数の実行可能なルーチン名を識別する工程と、
前記1つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と
を含むコンピュータ読み取り可能な媒体。
概念4 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
第1のデータの組及び第2のデータの組それぞれに関連付けられた第1のデータ場所及び第2のデータ場所を識別する工程であって、前記第1のデータ場所及び前記第2のデータ場所は前記第1のキャッシュ・メモリ装置内及び前記第2のキャッシュ・メモリ装置内それぞれに配置される工程と、
前記第1のデータ場所及び前記第2のデータ場所に基づいて前記第1のデータの組及び前記第2のデータの組それぞれに対する前記第1のキャッシュ・メモリ装置及び前記第2のキャッシュ・メモリ装置の割り当てを行う工程と
を含むコンピュータ読み取り可能な媒体。
概念5 概念4記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令にマッピングされたデータの組を識別する工程と、
前記第1のキャッシュ・メモリ装置でなく前記第2のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第1のPUから前記第2のPUに前記コールを転送することを決定する工程と
を含むコンピュータ読み取り可能な媒体。
概念6 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
前記第1のPUにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む工程と、
前記第1のPUによって前記引数を解析して、前記予め選択されたデータ場所が前記第1のキャッシュ・メモリ装置内に配置されていない旨の判定を行う工程と、
前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程とを含むコンピュータ読み取り可能な媒体。
概念7 概念6記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記予め選択されたデータ場所が前記第2のキャッシュ・メモリ装置に配置されていない旨を判定し、それにより、前記第1のPUにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う工程と、
前記決定に基づいて前記第1のPUにより、前記ターゲット・コードを実行する工程と
を含むコンピュータ読み取り可能な媒体。
概念8 概念6記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記予め選択されたデータ場所が前記第2のキャッシュ・メモリ装置内に配置されていることを判定して、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する工程と、
前記第1のPUから前記第2のPUに前記実際のリダイレクト・コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念9 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
前記第2のPUに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念10 概念9記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コード又はデータ・メモリ場所が前記第2のPU及び複数の他のPUに関連付けられていることを判定する工程と、
前記第2のPUに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のPUそれぞれに対応する工程と、
前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念11 概念9記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
特定のリソースを選択する工程と、
前記第2のPUに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第1のPUが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを1つ又は複数の他のPUが欠いていることに基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念12 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を記憶させた共有ランダム・メモリ(RAM)装置を選択する工程と、
前記共有RAM装置のセクタをリダイレクト・セクタとして識別する工程と、
前記命令が前記リダイレクト・セクタに記憶されているか否かを判定して、それにより、前記第1のPUから前記第2のPUに前記コールを転送するか否かを判定する工程と
を含むコンピュータ読み取り可能な媒体。
概念13 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
共有RAM装置を選択する工程と、
前記共有RAM装置の1つ又は複数のセクタを1つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
前記命令を含むプログラムを識別する工程と、
前記プログラムに対応するスタティック・コードにアクセスする工程と、
前記スタティック・コードのサイズに基づいて前記1つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有RAM装置をパーティショニングする工程と、
前記パーティショニング及びPU仕様に基づいて前記1つ又は複数のリダイレクト・セクタのうちの1つ又は複数のリダイレクト・セクタに前記スタティック・コードの量をロードする工程と
を含むコンピュータ読み取り可能な媒体。
概念14 概念13記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記共有RAM装置の1つ又は複数の別々のセクタを1つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
前記プログラムに対応する少なくとも1つの共有ライブラリの1つ又は複数の部分にアクセスする工程と、
前記少なくとも1つの共有ライブラリの1つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記1つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有RAM装置をプロポーショニングする工程と、
前記プロポーショニング及び前記PU仕様に基づいて前記1つ又は複数の非リダイレクト・セクタのうちの1つ又は複数の選択された非リダイレクト・セクタに、又は前記1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの1つ又は複数の部分をロードする工程、及び/又は、
前記プロポーショニング及び前記PU仕様に基づいて前記1つ又は複数の非リダイレクト・セクタのうちの1つ又は複数の選択された非リダイレクト・セクタに、又は1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記少なくとも1つの共有ライブラリの前記1つ又は複数の部分をロードする工程と
を含むコンピュータ読み取り可能な媒体。
概念15 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第1のPUに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
前記第1のPUに関連付けられたPUデータ・パスを識別する工程と、
前記PUデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも1つのPUを示すPU識別子を前記シャドー・レジスタ値が反映するように規定する工程と
を含むコンピュータ読み取り可能な媒体。
概念16 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたコードを識別する工程と、
少なくとも1つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
前記実行可能なルーチンが前記第2のPUに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも1つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念17 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた大域メモリ場所を識別する工程と、
第3のPUから前記第1のPUへ前記コールを自動的に、前記第3のPUが前記大域メモリ場所へのアクセスを欠いていること、及び前記第1のPUが前記大域メモリ場所へのアクセスを有していることの結果として転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念18 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
特定のPUに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程と、
前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる工程と、
前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現して、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する工程と、前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と
を含むコンピュータ読み取り可能な媒体。
概念19 概念18記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コールを行って、それにより、前記割り当ての結果として前記特定のPUにより、前記プログラムの前記修正バージョンを実行する工程と
を含むコンピュータ読み取り可能な媒体。
概念20 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
1つ又は複数のコード・ライブラリを識別する工程と、
前記1つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、前記参照渡しソース・コードを値渡しサポート・コードに変換して、それにより、転送ライブラリを生成する工程と、前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と
を含むコンピュータ読み取り可能な媒体。
概念21 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記コール内の1つ又は複数のポインタを識別する工程と、
前記1つ又は複数のポインタを変換して、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する工程と、
前記第1のPUから前記第2のPUへの前記コールの転送を実行する工程と、
前記転送中に前記データの値渡しを行って、それにより、前記データの局所の複製を第1のキャッシュ・メモリ装置に記憶する工程であって、前記第2のPUが前記第1のキャッシュ・メモリ装置を含む工程と、
前記1つ又は複数のプリンタを前記局所の複製にリマッピングして、それにより、第2のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にする工程であって、前記第1のPUが、前記第2のキャッシュ・メモリ装置を含む工程と
を含むコンピュータ読み取り可能な媒体。
概念22 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
遠隔プロシージャ・コール(RPC)を起動させて、それにより、前記第1のPUから前記第2のPUに前記コールを転送する工程を含むコンピュータ読み取り可能な媒体。
概念23 概念22記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1の局所メモリ・マップ及び第2の局所メモリ・マップを識別する工程と、
前記第1の局所メモリ・マップと前記第2の局所メモリ・マップとの間の区別を識別する工程と、
前記区別に基づいてメモリ・アドレス変換を生成する工程と、
前記メモリ・アドレス変換を利用して前記RPCを構成する工程と
を含むコンピュータ読み取り可能な媒体。
概念24 概念22記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
前記第1のキャッシュ・メモリに記憶され、前記命令に関連付けられたデータ値を識別する工程と、
前記RPCの結果として前記第2のキャッシュ・メモリ装置に前記データ値を記憶する工程とを含むコンピュータ読み取り可能な媒体。
概念25 概念24記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記第2のキャッシュ・メモリに前記データ値が記憶されるまで前記第2のPUによる前記コールの実行を遅延させる工程とを含むコンピュータ読み取り可能な媒体。
概念26 概念22記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
制御の第1のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
前記コール内の1つ又は複数のポインタを識別する工程と、
前記1つ又は複数のポインタを変換して、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第2のスレッドを作成する工程と、
前記第2のPUに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記RPCの結果として前記データの値渡しを行って、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第2のPUに前記制御の第2のスレッドを供給する工程と、
前記制御の第1のスレッドが前記制御の第2のスレッドと無関係であることの結果として、前記第2のPUが前記命令の実行を前記制御の第2のスレッドに基づいて行う一方で、前記制御の第1のスレッドに基づいて前記第1のPUにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている工程と
を含むコンピュータ読み取り可能な媒体。
概念27 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記データにマッピングされた第1の実行可能なルーチンを行う第1のプロセッシング・コアを識別する工程であって、前記第1の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む工程と、
第2のプロセッシング・コアにおいて第2の実行可能なルーチンにアクセスする工程と、
プロシージャ・コールを起動して、それにより、前記第2の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第2の実行可能なルーチンに基づき、前記第2のプロセッシング・コアから前記第1のプロセッシング・コアに前記第2の実行可能なルーチンを転送する工程と
を含むコンピュータ読み取り可能な媒体。
概念28 概念27記載のコンピュータ読み取り可能な媒体であって、別々のPUは、前記第1のプロセッシング・コア及び前記第2のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがRPCであるコンピュータ読み取り可能な媒体。
概念29 概念27記載のコンピュータ読み取り可能な媒体であって、単一のPUは、前記第1のプロセッシング・コア及び前記第2のプロセッシング・コアを何れも含み、前記プロシージャ・コールがRPCであるコンピュータ読み取り可能な媒体。
概念30 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記VFTにマッピングされた1つ又は複数のVFTポインタを含むように仮想関数テーブル(VFT)を実現するよう前記プログラミング言語が構成される工程と、
前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記1つ又は複数のVFTポインタを規定するよう構成される工程と、
前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトして、それにより、前記1つ又は複数の仮想関数に対する1つ又は複数のRPC決定ラッパを含む、VFTへのポインタで、前記1つ又は複数のVFTポインタを置き換える工程と
を含むコンピュータ読み取り可能な媒体。
概念31 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記VFTにマッピングされた1つ又は複数のVFTポインタを含むようにVFTを実現するよう前記プログラミング言語が構成される工程と、
RPC決定コードがコールされることなく、前記1つ又は複数の仮想関数が1つ又は複数のRPCそれぞれに自動的に誘導されるように複数のRPCの実現の結果として前記VFTを修正する工程とを含むコンピュータ読み取り可能な媒体。
概念32 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記VFTにマッピングされた1つ又は複数のVFTポインタを含むようにVFTを実現するよう前記プログラミング言語が構成される工程と、
RPC決定コードがコールされることなく、前記1つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように1つ又は複数のRPCの実現がないことの結果として前記VFTを修正する工程とを含むコンピュータ読み取り可能な媒体。
概念33 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と
を含むコンピュータ読み取り可能な媒体。
概念34 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第1の実現形態及び第2の実現形態を識別する工程であって、前記仮想関数は前記第1の実現形態を指し示すVFTエントリを含み、前記仮想関数は更に、複数のVFTのうちの第1のVFTにマッピングされたVFTポインタを含む工程と、
前記第1の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第1の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動の動作解析を行って、それにより、前記第2の実現形態が前記分岐挙動に対応する度合いが、前記第1の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のVFTのうちの第2のVFTに前記VFTポインタをリマッピングする工程であって、前記第2のVFTが、前記第2の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第2の実現形態を指し示すよう前記VFTエントリを更新する工程と
を含むコンピュータ読み取り可能な媒体。
概念35 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む工程と、
前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と
を含むコンピュータ読み取り可能な媒体。
概念36 概念1記載のコンピュータ読み取り可能な媒体であって、前記方法は更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第1の実現形態及び第2の実現形態を識別する工程であって、前記仮想関数は前記第1の実現形態を指し示すVFTエントリを含み、前記仮想関数は更に、複数のVFTのうちの第1のVFTにマッピングされたVFTポインタを更に含む工程と、
前記第1の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第1の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
前記考えられる将来の挙動の動作解析を行って、それにより、前記第2の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第1の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のVFTのうちの第2のVFTに前記VFTポインタをリマッピングする工程であって、前記第2のVFTが、前記第2の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第2の実現形態を指し示すよう前記VFTエントリを更新する工程とを含むコンピュータ読み取り可能な媒体。
概念37 処理リソース割り当て方法であって、
予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
前記予め選択されたデータ場所に基づいて第1の処理装置(PU)から第2のPUに前記命令のコールを転送するか否かを判定する工程と
を含む処理リソース割り当て方法。
概念38 概念37記載の処理リソース割り当て方法であって、更に、
前記第1のPUに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令を前記キャッシュ・メモリ装置にロードする工程と、
前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のPUに転送するか否かを前記第1のPUが判定することを可能にするよう構成された工程と
を含む処理リソース割り当て方法。
概念39 概念38記載の処理リソース割り当て方法であって、更に、
予め選択された1つ又は複数の実行可能なルーチンそれぞれに対応する1つ又は複数の実行可能なルーチン名を識別する工程と、
前記1つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と
を含む処理リソース割り当て方法。
概念40 概念37記載の処理リソース割り当て方法であって、更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
第1のデータの組及び第2のデータの組それぞれに関連付けられた第1のデータ場所及び第2のデータ場所を識別する工程であって、前記第1のデータ場所及び前記第2のデータ場所は前記第1のキャッシュ・メモリ装置内及び前記第2のキャッシュ・メモリ装置内それぞれに配置される工程と、
前記第1のデータ場所及び前記第2のデータ場所に基づいて前記第1のデータの組及び前記第2のデータの組それぞれに対する前記第1のキャッシュ・メモリ装置及び前記第2のキャッシュ・メモリ装置の割り当てを行う工程と
を含む処理リソース割り当て方法。
概念41 概念40記載の処理リソース割り当て方法であって、更に、
前記命令にマッピングされたデータの組を識別する工程と、
前記第1のキャッシュ・メモリ装置でなく前記第2のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第1のPUから前記第2のPUに前記コールを転送することを決定する工程と
を含む処理リソース割り当て方法。
概念42 概念37記載の処理リソース割り当て方法であって、更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
前記第1のPUにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む工程と、
前記第1のPUによって前記引数を解析して、前記予め選択されたデータ場所が前記第1のキャッシュ・メモリ装置内に配置されていない旨の判定を行う工程と、
前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程とを含む処理リソース割り当て方法。
概念43 概念42記載の処理リソース割り当て方法であって、更に、
前記予め選択されたデータ場所が前記第2のキャッシュ・メモリ装置に配置されていない旨を判定し、それにより、前記第1のPUにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う工程と、
前記決定に基づいて前記第1のPUにより、前記ターゲット・コードを実行する工程と
を含む処理リソース割り当て方法。
概念44 概念42記載の処理リソース割り当て方法であって、更に、
前記予め選択されたデータ場所が前記第2のキャッシュ・メモリ装置内に配置されていることを判定して、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する工程と、
前記第1のPUから前記第2のPUに前記実際のリダイレクト・コールを転送する工程と
を含む処理リソース割り当て方法。
概念45 概念37記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
前記第2のPUに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含む処理リソース割り当て方法。
概念46 概念45記載の処理リソース割り当て方法であって、更に、
前記コード又はデータ・メモリ場所が前記第2のPU及び複数の他のPUに関連付けられていることを判定する工程と、
前記第2のPUに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のPUそれぞれに対応する工程と、
前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含む処理リソース割り当て方法。
概念47 概念45記載の処理リソース割り当て方法であって、更に、
特定のリソースを選択する工程と、
前記第2のPUに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第1のPUが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを1つ又は複数の他のPUが欠いていることに基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含む処理リソース割り当て方法。
概念48 概念37記載の処理リソース割り当て方法であって、更に、
前記命令を記憶させた共有ランダム・メモリ(RAM)装置を選択する工程と、
前記共有RAM装置のセクタをリダイレクト・セクタとして識別する工程と、
前記命令が前記リダイレクト・セクタに記憶されているか否かを判定して、それにより、前記第1のPUから前記第2のPUに前記コールを転送するか否かを判定する工程と
を含む処理リソース割り当て方法。
概念49 概念37記載の処理リソース割り当て方法であって、更に、
共有RAM装置を選択する工程と、
前記共有RAM装置の1つ又は複数のセクタを1つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
前記命令を含むプログラムを識別する工程と、
前記プログラムに対応するスタティック・コードにアクセスする工程と、
前記スタティック・コードのサイズに基づいて前記1つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有RAM装置をパーティショニングする工程と、
前記パーティショニング及びPU仕様に基づいて前記1つ又は複数のリダイレクト・セクタのうちの1つ又は複数のリダイレクト・セクタに前記スタティック・コードの量をロードする工程と
を含む処理リソース割り当て方法。
概念50 概念49記載の処理リソース割り当て方法であって、更に、
前記共有RAM装置の1つ又は複数の別々のセクタを1つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
前記プログラムに対応する少なくとも1つの共有ライブラリの1つ又は複数の部分にアクセスする工程と、
前記少なくとも1つの共有ライブラリの1つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記1つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有RAM装置をプロポーショニングする工程と、
前記プロポーショニング及び前記PU仕様に基づいて前記1つ又は複数の非リダイレクト・セクタのうちの1つ又は複数の選択された非リダイレクト・セクタに、又は前記1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの1つ又は複数の部分をロードする工程、及び/又は、
前記プロポーショニング及び前記PU仕様に基づいて前記1つ又は複数の非リダイレクト・セクタのうちの1つ又は複数の選択された非リダイレクト・セクタに、又は1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記少なくとも1つの共有ライブラリの前記1つ又は複数の部分をロードする工程と
を含む処理リソース割り当て方法。
概念51 概念37記載の処理リソース割り当て方法であって、更に、
前記第1のPUに関連付けられたキャッシュ・メモリ装置を選択する工程と、
前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
前記第1のPUに関連付けられたPUデータ・パスを識別する工程と、
前記PUデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも1つのPUを示すPU識別子を前記シャドー・レジスタ値が反映するように規定する工程と
を含む処理リソース割り当て方法。
概念52 概念37記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたコードを識別する工程と、
少なくとも1つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
前記実行可能なルーチンが前記第2のPUに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも1つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第1のPUから前記第2のPUに前記コールを転送する工程と
を含む処理リソース割り当て方法。
概念53 概念37記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた大域メモリ場所を識別する工程と、
第3のPUから前記第1のPUへ前記コールを自動的に、前記第3のPUが前記大域メモリ場所へのアクセスを欠いていること、及び前記第1のPUが前記大域メモリ場所へのアクセスを有していることの結果として転送する工程と
を含む処理リソース割り当て方法。
概念54 概念37記載の処理リソース割り当て方法であって、更に、
特定のPUに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程と、
前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる工程と、
前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現して、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する工程と、前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と
を含む処理リソース割り当て方法。
概念55 概念54記載の処理リソース割り当て方法であって、更に、
前記コールを行って、それにより、前記割り当ての結果として前記特定のPUにより、前記プログラムの前記修正バージョンを実行する工程と
を含む処理リソース割り当て方法。
概念56 概念37記載の処理リソース割り当て方法であって、更に、
1つ又は複数のコード・ライブラリを識別する工程と、
前記1つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、前記参照渡しソース・コードを値渡しサポート・コードに変換して、それにより、転送ライブラリを生成する工程と、前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と
を含む処理リソース割り当て方法。
概念57 概念37記載の処理リソース割り当て方法であって、更に、
前記コール内の1つ又は複数のポインタを識別する工程と、
前記1つ又は複数のポインタを変換して、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する工程と、
前記第1のPUから前記第2のPUへの前記コールの転送を実行する工程と、
前記転送中に前記データの値渡しを行って、それにより、前記データの局所の複製を第1のキャッシュ・メモリ装置に記憶する工程であって、前記第2のPUが前記第1のキャッシュ・メモリ装置を含む工程と、
前記1つ又は複数のプリンタを前記局所の複製にリマッピングして、それにより、第2のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にする工程であって、前記第1のPUが、前記第2のキャッシュ・メモリ装置を含む工程と
を含む処理リソース割り当て方法。
概念58 概念37記載の処理リソース割り当て方法であって、更に、
遠隔プロシージャ・コール(RPC)を起動させて、それにより、前記第1のPUから前記第2のPUに前記コールを転送する工程を含む処理リソース割り当て方法。
概念59 概念38記載の処理リソース割り当て方法であって、更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1の局所メモリ・マップ及び第2の局所メモリ・マップを識別する工程と、
前記第1の局所メモリ・マップと前記第2の局所メモリ・マップとの間の区別を識別する工程と、
前記区別に基づいてメモリ・アドレス変換を生成する工程と、
前記メモリ・アドレス変換を利用して前記RPCを構成する工程と
を含む処理リソース割り当て方法。
概念60 概念58記載の処理リソース割り当て方法であって、更に、
前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
前記第1のキャッシュ・メモリに記憶され、前記命令に関連付けられたデータ値を識別する工程と、
前記RPCの結果として前記第2のキャッシュ・メモリ装置に前記データ値を記憶する工程とを含む処理リソース割り当て方法。
概念61 概念60記載の処理リソース割り当て方法であって、更に、
前記第2のキャッシュ・メモリに前記データ値が記憶されるまで前記第2のPUによる前記コールの実行を遅延させる工程とを含む処理リソース割り当て方法。
概念62 概念58記載の処理リソース割り当て方法であって、更に、
制御の第1のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
前記コール内の1つ又は複数のポインタを識別する工程と、
前記1つ又は複数のポインタを変換して、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第2のスレッドを作成する工程と、
前記第2のPUに関連付けられたキャッシュ・メモリ装置を識別する工程と、
前記RPCの結果として前記データの値渡しを行って、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第2のPUに前記制御の第2のスレッドを供給する工程と、
前記制御の第1のスレッドが前記制御の第2のスレッドと無関係であることの結果として、前記第2のPUが前記命令の実行を前記制御の第2のスレッドに基づいて行う一方で、前記制御の第1のスレッドに基づいて前記第1のPUにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている工程と
を含む処理リソース割り当て方法。
概念63 概念37記載の処理リソース割り当て方法であって、更に、
前記データにマッピングされた第1の実行可能なルーチンを行う第1のプロセッシング・コアを識別する工程であって、前記第1の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む工程と、
第2のプロセッシング・コアにおいて第2の実行可能なルーチンにアクセスする工程と、
プロシージャ・コールを起動して、それにより、前記第2の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第2の実行可能なルーチンに基づき、前記第2のプロセッシング・コアから前記第1のプロセッシング・コアに前記第2の実行可能なルーチンを転送する工程と
を含む処理リソース割り当て方法。
概念64 概念63記載の処理リソース割り当て方法であって、別々のPUは、前記第1のプロセッシング・コア及び前記第2のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがRPCである処理リソース割り当て方法。
概念65 概念63記載の処理リソース割り当て方法であって、単一のPUは、前記第1のプロセッシング・コア及び前記第2のプロセッシング・コアを何れも含み、前記プロシージャ・コールがRPCである処理リソース割り当て方法。
概念66 概念37記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記VFTにマッピングされた1つ又は複数のVFTポインタを含むように仮想関数テーブル(VFT)を実現するよう前記プログラミング言語が構成される工程と、
前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記1つ又は複数のVFTポインタを規定するよう構成される工程と、
前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトして、それにより、前記1つ又は複数の仮想関数に対する1つ又は複数のRPC決定ラッパを含む、VFTへのポインタで、前記1つ又は複数のVFTポインタを置き換える工程と
を含む処理リソース割り当て方法。
概念67 概念37記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記VFTにマッピングされた1つ又は複数のVFTポインタを含むようにVFTを実現するよう前記プログラミング言語が構成される工程と、
RPC決定コードがコールされることなく、前記1つ又は複数の仮想関数が1つ又は複数のRPCそれぞれに自動的に誘導されるように複数のRPCの実現の結果として前記VFTを修正する工程とを含む処理リソース割り当て方法。
概念68 概念37記載の処理リソース割り当て方法であって、更に、
前記命令を含むプログラムにアクセスする工程と、
前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、前記VFTにマッピングされた1つ又は複数のVFTポインタを含むようにVFTを実現するよう前記プログラミング言語が構成される工程と、
RPC決定コードがコールされることなく、前記1つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように1つ又は複数のRPCの実現がないことの結果として前記VFTを修正する工程とを含む処理リソース割り当て方法。
概念69 概念37記載の処理リソース割り当て方法であって、更に、
複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と
を含む処理リソース割り当て方法。
概念70 概念37記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第1の実現形態及び第2の実現形態を識別する工程であって、前記仮想関数は前記第1の実現形態を指し示すVFTエントリを含み、前記仮想関数は更に、複数のVFTのうちの第1のVFTにマッピングされたVFTポインタを含む工程と、
前記第1の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第1の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動の動作解析を行って、それにより、前記第2の実現形態が前記分岐挙動に対応する度合いが、前記第1の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のVFTのうちの第2のVFTに前記VFTポインタをリマッピングする工程であって、前記第2のVFTが、前記第2の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第2の実現形態を指し示すよう前記VFTエントリを更新する工程と
を含む処理リソース割り当て方法。
概念71 概念37記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む工程と、
前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と
を含む処理リソース割り当て方法。
概念72 概念37記載の処理リソース割り当て方法であって、更に、
前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
仮想関数の第1の実現形態及び第2の実現形態を識別する工程であって、前記仮想関数は前記第1の実現形態を指し示すVFTエントリを含み、前記仮想関数は更に、複数のVFTのうちの第1のVFTにマッピングされたVFTポインタを更に含む工程と、
前記第1の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
前記動作中の前記第1の実現形態によって表される分岐挙動を識別する工程と、
前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
前記考えられる将来の挙動の動作解析を行って、それにより、前記第2の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第1の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する工程と、
前記動作解析に基づいて前記複数のVFTのうちの第2のVFTに前記VFTポインタをリマッピングする工程であって、前記第2のVFTが、前記第2の実現形態にマッピングされたポインタを含む工程、又は、
前記動作解析に基づいて前記第2の実現形態を指し示すよう前記VFTエントリを更新する工程とを含む処理リソース割り当て方法。
本明細書にわたる、構成、効果、又は同様な文言への言及は、構成及び効果の全てが何れかの単一の実施例にあるべきであり、又はあるということを示唆するものでない。むしろ、構成及び効果に言及する文言は、特定の構成、効果、又は実施例に関して記載された構成が本願の手法の少なくとも1つの実施例に含まれているということを意味するものと理解されたい。よって、構成及び効果の記載、並びに同様な文言は本明細書にわたり、同じ実施例を表し得るが、必ずしも同じ実施例を表すものでない。
上述した本願の開示の種々の実施例は、異なる順序の工程及び/又は動作によって実施し、かつ/又は、開示されたものと異なる構成におけるハードウェア・エレメントによって実施し得る。よって、本願手法は、上記例示的な実施例に基づいて記載しているが、本願の手法の範囲から逸脱していない限り、特定の修正、変形、及び代替的な構成を実現し得る。
本願の手法の種々の例示的な実施例は、構造上の構成及び/又は方法動作に特有の文言で本願明細書及び特許請求の範囲に記載しているが、特許請求の範囲記載の主題は必ずしも、上記特定の構成又は動作に制限されるものでない。

Claims (38)

  1. 処理リソース割り当て方法であって、
    予め選択されたデータ場所を有するデータにマッピングされた命令を識別する工程と、
    処理リソース割り当て装置により、前記予め選択されたデータ場所に基づいて第1の処理装置(PU)から第2のPUに前記命令のコールを転送するか否かを判定する工程と、
    を含む処理リソース割り当て方法。
  2. 前記第1のPUに関連付けられたキャッシュ・メモリ装置を選択する工程と、
    前記命令を前記キャッシュ・メモリ装置にロードする工程と、
    前記命令に関連付けられた境界において、前記キャッシュ・メモリ装置に、余分なコードの組をインジェクトする工程であって、前記命令がターゲット命令であり、前記余分なコードの組は、前記コールを特定のPUに転送するか否かを前記第1のPUが判定することを可能にするよう構成される、工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  3. 予め選択された1つ又は複数の実行可能なルーチンそれぞれに対応する1つ又は複数の実行可能なルーチン名を識別する工程と、
    前記1つ又は複数の実行可能なルーチン名に基づいて、前記余分なコードの組を選択して、参照渡しコールから値渡しコールに前記コールを変換する工程と、
    を更に含む請求項2記載の処理リソース割り当て方法。
  4. 前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
    第1のデータの組及び第2のデータの組それぞれに関連付けられた第1のデータ場所及び第2のデータ場所を識別する工程であって、前記第1のデータ場所及び前記第2のデータ場所は前記第1のキャッシュ・メモリ装置内及び前記第2のキャッシュ・メモリ装置内それぞれに配置される、工程と、
    前記第1のデータ場所及び前記第2のデータ場所に基づいて前記第1のデータの組及び前記第2のデータの組それぞれに対する前記第1のキャッシュ・メモリ装置及び前記第2のキャッシュ・メモリ装置の割り当てを行う工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  5. 前記命令にマッピングされたデータの組を識別する工程と、
    前記第1のキャッシュ・メモリ装置でなく前記第2のキャッシュ・メモリ装置に前記データの組が現在記憶されていることを判定して、それにより、前記第1のPUから前記第2のPUに前記コールを転送することを決定する工程と、
    を更に含む請求項4記載の処理リソース割り当て方法。
  6. 前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
    前記第1のPUにより、前記コールにアクセスする工程であって、前記コールは、前記予め選択されたデータ場所に前記命令がマッピングされている旨を示す引数を含む、工程と、
    前記第1のPUによって前記引数を解析する工程であって、前記予め選択されたデータ場所が前記第1のキャッシュ・メモリ装置内に配置されていない旨の判定を行う、工程と、
    前記判定に基づいて潜在的なリダイレクト・コールとして前記コールを識別する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  7. 前記予め選択されたデータ場所が前記第2のキャッシュ・メモリ装置に配置されていない旨を判定する工程であって、それにより、前記第1のPUにより、前記潜在的なリダイレクト・コールに関連付けられたターゲット・コードを実行することの決定を行う、工程と、
    前記決定に基づいて前記第1のPUにより、前記ターゲット・コードを実行する工程と、
    を更に含む請求項6記載の処理リソース割り当て方法。
  8. 前記予め選択されたデータ場所が前記第2のキャッシュ・メモリ装置内に配置されていることを判定する工程であって、それにより、前記潜在的なリダイレクト・コールを実際のリダイレクト・コールとして識別する、工程と、
    前記第1のPUから前記第2のPUに前記実際のリダイレクト・コールを転送する工程と、
    を更に含む請求項6記載の処理リソース割り当て方法。
  9. 前記命令に関連付けられたコード又はデータ・メモリ場所を識別する工程と、
    前記第2のPUに関連付けられた前記コード又はデータ・メモリ場所に基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  10. 前記コード又はデータ・メモリ場所が前記第2のPU及び複数の他のPUに関連付けられていることを判定する工程と、
    前記第2のPUに対応する現在利用可能な処理機能を反映する数値測定を定義する工程と、
    複数の他の現在利用可能な処理機能それぞれを反映する複数の他の数値測定を定義する工程であって、前記複数の他の現在利用可能な処理機能は前記複数の他のPUそれぞれに対応する、工程と、
    前記数値測定が前記他の数値測定それぞれよりも大きいことに基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と、
    を更に含む請求項9記載の処理リソース割り当て方法。
  11. 特定のリソースを選択する工程と、
    前記第2のPUに割り当てられている前記特定のリソースの制御の度合いに基づき、前記特定のリソースへのアクセスを前記第1のPUが欠いていることに基づき、かつ、前記特定のリソースへのアクセスを1つ又は複数の他のPUが欠いていることに基づいて前記第1のPUから前記第2のPUに前記コールを転送する工程と、
    を更に含む請求項9記載の処理リソース割り当て方法。
  12. 前記命令を記憶させた共有ランダム・アクセス・メモリ(RAM)装置を選択する工程と、
    前記共有RAM装置のセクタをリダイレクト・セクタとして識別する工程と、
    前記命令が前記リダイレクト・セクタに記憶されているか否かを判定する工程であって、それにより、前記第1のPUから前記第2のPUに前記コールを転送するか否かを判定する、工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  13. 共有RAM装置を選択する工程と、
    前記共有RAM装置の1つ又は複数のセクタを1つ又は複数のリダイレクト・セクタそれぞれとして識別する工程と、
    前記命令を含むプログラムを識別する工程と、
    前記プログラムに対応するスタティック・コードにアクセスする工程と、
    前記スタティック・コードのサイズに基づいて前記1つ又は複数のリダイレクト・セクタの全体としてのサイズを定義することにより、前記共有RAM装置をパーティショニングする工程と、
    前記パーティショニング及びPU仕様に基づいて前記1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの量をロードする工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  14. 前記共有RAM装置の1つ又は複数の別々のセクタを1つ又は複数の非リダイレクト・セクタそれぞれとして識別する工程と、
    前記プログラムに対応する少なくとも1つの共有ライブラリの1つ又は複数の部分にアクセスする工程と、
    前記少なくとも1つの共有ライブラリの1つ又は複数の部分及び前記スタティック・コードの全体としてのサイズに基づいて前記1つ又は複数のリダイレクト・セクタの前記全体としてのサイズを定義することにより、前記共有RAM装置をプロポーショニングする工程と、
    前記プロポーショニング及び前記PU仕様に基づいて前記1つ又は複数の非リダイレクト・セクタのうちの1つ又は複数の選択された非リダイレクト・セクタに、又は前記1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記スタティック・コードの1つ又は複数の部分をロードする工程、及び/又は、
    前記プロポーショニング及び前記PU仕様に基づいて前記1つ又は複数の非リダイレクト・セクタのうちの1つ又は複数の選択された非リダイレクト・セクタに、又は1つ又は複数のリダイレクト・セクタのうちの1つ又は複数の選択されたリダイレクト・セクタに前記少なくとも1つの共有ライブラリの前記1つ又は複数の部分をロードする工程と、
    を更に含む請求項13記載の処理リソース割り当て方法。
  15. 前記第1のPUに関連付けられたキャッシュ・メモリ装置を選択する工程と、
    前記命令に関連付けられたコード又はデータを前記キャッシュ・メモリ装置にフェッチする工程と、
    前記第1のPUに関連付けられたPUデータ・パスを識別する工程と、
    前記PUデータ・パス内のシャドー・レジスタ値を、前記コード又はデータに関連付けられた少なくとも1つのPUを示すPU識別子を前記シャドー・レジスタ値が反映するように規定する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  16. 前記命令に関連付けられたコードを識別する工程と、
    少なくとも1つの共有メモリ・コヒーレンス・マシン命令を含む実行可能なルーチンを識別する工程と、
    前記実行可能なルーチンが前記第2のPUに関連付けられていることに基づき、かつ、前記コードが、前記少なくとも1つの共有メモリ・コヒーレンス・マシン命令にマッピングされていることに基づき、前記第1のPUから前記第2のPUに前記コールを転送する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  17. 前記命令に関連付けられた大域メモリ場所を識別する工程と、
    第3のPUが前記大域メモリ場所へのアクセスを欠いていること、及び前記第1のPUが前記大域メモリ場所へのアクセスを有していることの結果として、前記第3のPUから前記第1のPUへ前記コールを自動的に転送する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  18. 特定のPUに関連付けられたキャッシュ・メモリ装置を識別する工程と、
    前記予め選択されたデータ場所が前記キャッシュ・メモリ装置内に配置されていることに基づいて前記データに関連付けられた特定のデータ・タイプに対する前記キャッシュ・メモリ装置の割り当てを行う工程と、
    前記命令を含むプログラムにアクセスする工程と、
    前記プログラムに対応するプログラミング言語を識別する工程と、
    前記プログラミング言語に対応するライブラリにアクセスする工程であって、前記ライブラリは、メモリ割り当てコールを含むコンストラクタを規定し、前記メモリ割り当てコールは前記特定のデータ・タイプを有する情報にマッピングされる、工程と、
    前記割り当てに基づいて、前記メモリ割り当てコールに対する修正を実現する工程であって、それにより、前記プログラムの修正バージョン及び修正メモリ割り当てコールを作成する、工程と、
    前記修正の結果として前記情報が前記キャッシュ・メモリ装置にロードされるように、前記修正されたメモリ割り当てコールを行う工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  19. 前記コールを行う工程であって、それにより、前記割り当ての結果として前記特定のPUにより、前記プログラムの前記修正バージョンを実行する、工程と、
    を更に含む請求項18記載の処理リソース割り当て方法。
  20. 1つ又は複数のコード・ライブラリを識別する工程と、
    前記1つ又は複数のコード・ライブラリに関連付けられた参照渡しソース・コードにアクセスする工程と、
    前記参照渡しソース・コードを値渡しサポート・コードに変換する工程であって、それにより、転送ライブラリを生成する、工程と、
    前記転送ライブラリを利用して、前記データの参照渡しでなく、値渡しを行う工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  21. 前記コール内の1つ又は複数のポインタを識別する工程と、
    前記1つ又は複数のポインタを変換する工程であって、それにより、前記データの参照渡しでなく値渡しを行うよう前記コールを構成する、工程と、
    前記第1のPUから前記第2のPUへの前記コールの転送を実行する工程と、
    前記転送中に前記データの値渡しを行う工程であって、それにより、前記データの局所の複製を第1のキャッシュ・メモリ装置に記憶し、前記第2のPUが前記第1のキャッシュ・メモリ装置を含む、工程と、
    前記1つ又は複数のポインタを前記局所の複製にリマッピングする工程であって、それにより、第2のキャッシュ・メモリ装置にアクセスすることなく、前記コールを実行することを可能にし、前記第1のPUが、前記第2のキャッシュ・メモリ装置を含む、工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  22. 遠隔プロシージャ・コール(RPC)を起動させる工程であって、それにより、前記第1のPUから前記第2のPUに前記コールを転送する、工程、
    を更に含む請求項1記載の処理リソース割り当て方法。
  23. 前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1の局所メモリ・マップ及び第2の局所メモリ・マップを識別する工程と、
    前記第1の局所メモリ・マップと前記第2の局所メモリ・マップとの間の区別を識別する工程と、
    前記区別に基づいてメモリ・アドレス変換を生成する工程と、
    前記メモリ・アドレス変換を利用して前記RPCを構成する工程と、
    を更に含む請求項22記載の処理リソース割り当て方法。
  24. 前記第1のPU及び前記第2のPUそれぞれに関連付けられた第1のキャッシュ・メモリ装置及び第2のキャッシュ・メモリ装置を識別する工程と、
    前記第1のキャッシュ・メモリ装置に記憶され、前記命令に関連付けられたデータ値を識別する工程と、
    前記RPCの結果として前記第2のキャッシュ・メモリ装置に前記データ値を記憶する工程と、
    を更に含む請求項22記載の処理リソース割り当て方法。
  25. 前記第2のキャッシュ・メモリ装置に前記データ値が記憶されるまで前記第2のPUによる前記コールの実行を遅延させる工程と、
    を更に含む請求項24記載の処理リソース割り当て方法。
  26. 制御の第1のスレッドに関連付けられた実行可能なルーチン及び前記命令を含むプログラムにアクセスする工程と、
    前記コール内の1つ又は複数のポインタを識別する工程と、
    前記1つ又は複数のポインタを変換する工程であって、前記データの参照渡しでなく値渡しを行うよう前記コールを構成して、それにより、制御の第2のスレッドを作成する、工程と、
    前記第2のPUに関連付けられたキャッシュ・メモリ装置を識別する工程と、
    前記RPCの結果として前記データの値渡しを行う工程であって、それにより、前記データの局所の複製を前記キャッシュ・メモリ装置に記憶し、前記第2のPUに前記制御の第2のスレッドを供給する、工程と、
    前記制御の第1のスレッドが前記制御の第2のスレッドと無関係であることの結果として、前記第2のPUが前記命令の実行を前記制御の第2のスレッドに基づいて行う一方で、前記制御の第1のスレッドに基づいて前記第1のPUにより、前記実行可能なルーチンを行う工程であって、前記実行可能なルーチンが、前記実行中に生成されたデータ値に対するリターン要求を欠いている、工程と、
    を更に含む請求項22記載の処理リソース割り当て方法。
  27. 前記データにマッピングされた第1の実行可能なルーチンを行う第1のプロセッシング・コアを識別する工程であって、前記第1の実行可能なルーチンは共有メモリ・コヒーレンス・マシン命令を含む、工程と、
    第2のプロセッシング・コアにおいて第2の実行可能なルーチンにアクセスする工程と、
    プロシージャ・コールを起動する工程であって、それにより、前記第2の実行可能なルーチンが前記データにマッピングされていることに基づき、かつ、前記共有メモリ・コヒーレンス・マシン命令を含む前記第2の実行可能なルーチンに基づき、前記第2のプロセッシング・コアから前記第1のプロセッシング・コアに前記第2の実行可能なルーチンを転送する、工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  28. 別々のPUは、前記第1のプロセッシング・コア及び前記第2のプロセッシング・コアそれぞれを含み、前記プロシージャ・コールがRPCである、
    請求項27記載の処理リソース割り当て方法。
  29. 単一のPUは、前記第1のプロセッシング・コア及び前記第2のプロセッシング・コアを何れも含み、前記プロシージャ・コールがRPCである、
    請求項27記載の処理リソース割り当て方法。
  30. 前記命令を含むプログラムにアクセスする工程と、
    前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、仮想関数テーブル(VFT)にマッピングされた1つ又は複数のVFTポインタを含むように前記VFTを実現するよう前記プログラミング言語が構成される、工程と、
    前記プログラミング言語に関連付けられたコンストラクタを識別する工程であって、前記コンストラクタは前記1つ又は複数のVFTポインタを規定するよう構成される、工程と、
    前記プログラムのロード中に前記コンストラクタ周りにラッパ・コールをインジェクトする工程であって、それにより、前記1つ又は複数の仮想関数に対する1つ又は複数のRPC決定ラッパを含む、VFTへのポインタで、前記1つ又は複数のVFTポインタを置き換える、工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  31. 前記命令を含むプログラムにアクセスする工程と、
    前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、VFTにマッピングされた1つ又は複数のVFTポインタを含むように前記VFTを実現するよう前記プログラミング言語が構成される、工程と、
    RPC決定コードがコールされることなく、前記1つ又は複数の仮想関数が1つ又は複数のRPCそれぞれに自動的に誘導されるように複数のRPCの実現の結果として前記VFTを修正する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  32. 前記命令を含むプログラムにアクセスする工程と、
    前記プログラムに対応するプログラミング言語を識別する工程であって、1つ又は複数の仮想関数を有するクラスに属するデータ項目が、VFTにマッピングされた1つ又は複数のVFTポインタを含むように前記VFTを実現するよう前記プログラミング言語が構成される、工程と、
    RPC決定コードがコールされることなく、前記1つ又は複数の仮想関数が前記プログラムに関連付けられた局所コードに自動的に誘導されるように1つ又は複数のRPCの実現がないことの結果として前記VFTを修正する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  33. 複数の条件分岐にマッピングされたコードを含む前記命令の予め定義されたバージョンにアクセスする工程と、
    前記命令の複数の修正バージョンを生成する工程であって、前記修正バージョンはそれぞれ、前記複数の条件分岐のうちの別の条件分岐をたどるよう修正されたコードを含む工程と、
    前記複数の修正バージョンそれぞれに関連付けられた複数の挙動を予測する工程と、
    前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
    前記実行可能なルーチンに関連付けられたランタイム挙動を識別する工程と、
    前記ランタイム挙動に対応する前記修正バージョンの予測された挙動に基づいて前記実行可能なルーチンの動作中の実行のために前記複数の修正バージョンのうちの修正バージョンを選択する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  34. 前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
    仮想関数の第1の実現形態及び第2の実現形態を識別する工程であって、前記仮想関数は前記第1の実現形態を指し示すVFTエントリを含み、前記仮想関数は更に、複数のVFTのうちの第1のVFTにマッピングされたVFTポインタを含む、工程と、
    前記第1の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
    前記動作中の前記第1の実現形態によって表される分岐挙動を識別する工程と、
    前記分岐挙動の動作解析を行う工程であって、それにより、前記第2の実現形態が前記分岐挙動に対応する度合いが、前記第1の実現形態が前記分岐挙動に対応する度合いよりも大きいことを判定する、工程と、
    前記動作解析に基づいて前記複数のVFTのうちの第2のVFTに前記VFTポインタをリマッピングする工程であって、前記第2のVFTが、前記第2の実現形態にマッピングされたポインタを含む、工程、又は、
    前記動作解析に基づいて前記第2の実現形態を指し示すよう前記VFTエントリを更新する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  35. 前記命令に関連付けられたプログラムにアクセスする工程であって、前記プログラムは、予め定義されたコール・サイトにマッピングされた予め定義された関数を含む、工程と、
    前記予め定義されたコール・サイトにより、前記予め定義された関数のコールを行う工程と、
    前記コールの結果として、前記予め定義された関数によって表される分岐挙動を識別する工程と、
    前記分岐挙動に基づいて、前記予め定義されたコール・サイトを修正する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  36. 前記命令に関連付けられた実行可能なルーチンにアクセスする工程と、
    仮想関数の第1の実現形態及び第2の実現形態を識別する工程であって、前記仮想関数は前記第1の実現形態を指し示すVFTエントリを含み、前記仮想関数は更に、複数のVFTのうちの第1のVFTにマッピングされたVFTポインタを更に含む、工程と、
    前記第1の実現形態により、前記実行可能なルーチンの一部分の動作を起動させる工程と、
    前記動作中の前記第1の実現形態によって表される分岐挙動を識別する工程と、
    前記分岐挙動に基づいて前記仮想関数の考えられる将来の挙動を予測する工程と、
    前記考えられる将来の挙動の動作解析を行う工程であって、それにより、前記第2の実現形態が前記考えられる将来の挙動に対応する度合いが、前記第1の実現形態が前記考えられる将来の挙動に対応する度合いよりも大きいことを判定する、工程と、
    前記動作解析に基づいて前記複数のVFTのうちの第2のVFTに前記VFTポインタをリマッピングする工程であって、前記第2のVFTが、前記第2の実現形態にマッピングされたポインタを含む、工程、又は、
    前記動作解析に基づいて前記第2の実現形態を指し示すよう前記VFTエントリを更新する工程と、
    を更に含む請求項1記載の処理リソース割り当て方法。
  37. コンピュータ・システムに、請求項1乃至36のいずれか一項に記載の方法を実行させるコンピュータ・プログラム。
  38. 請求項37に記載のコンピュータ・プログラムを記録したコンピュータ可読記憶媒体。
JP2015528554A 2012-08-20 2013-08-19 処理リソース割り当て Active JP6218833B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261684813P 2012-08-20 2012-08-20
US61/684,813 2012-08-20
PCT/US2013/055588 WO2014031540A1 (en) 2012-08-20 2013-08-19 Processing resource allocation

Publications (3)

Publication Number Publication Date
JP2015526821A JP2015526821A (ja) 2015-09-10
JP2015526821A5 JP2015526821A5 (ja) 2016-10-06
JP6218833B2 true JP6218833B2 (ja) 2017-10-25

Family

ID=50150328

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015528554A Active JP6218833B2 (ja) 2012-08-20 2013-08-19 処理リソース割り当て

Country Status (5)

Country Link
US (2) US9923840B2 (ja)
EP (1) EP2885708A4 (ja)
JP (1) JP6218833B2 (ja)
CN (1) CN104756078B (ja)
WO (1) WO2014031540A1 (ja)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9626261B2 (en) * 2013-11-27 2017-04-18 Futurewei Technologies, Inc. Failure recovery resolution in transplanting high performance data intensive algorithms from cluster to cloud
US9576039B2 (en) 2014-02-19 2017-02-21 Snowflake Computing Inc. Resource provisioning systems and methods
US9384019B2 (en) * 2014-03-25 2016-07-05 International Business Machines Corporation Dynamic code injection
US9286085B2 (en) * 2014-06-27 2016-03-15 International Business Machines Corporation Correlating class loader objects across execution environments
US9990305B2 (en) * 2014-09-19 2018-06-05 Nxp Usa, Inc. Memory management component having multiple memory management modules and method therefor
CN104375963B (zh) * 2014-11-28 2019-03-15 上海兆芯集成电路有限公司 基于缓存一致性的控制系统和方法
EP3062142B1 (en) 2015-02-26 2018-10-03 Nokia Technologies OY Apparatus for a near-eye display
US10571993B2 (en) * 2015-03-20 2020-02-25 Sanken Electric Co., Ltd. Micro controller unit
US10121220B2 (en) * 2015-04-28 2018-11-06 Nvidia Corporation System and method for creating aliased mappings to minimize impact of cache invalidation
US10021008B1 (en) 2015-06-29 2018-07-10 Amazon Technologies, Inc. Policy-based scaling of computing resource groups
US10148592B1 (en) * 2015-06-29 2018-12-04 Amazon Technologies, Inc. Prioritization-based scaling of computing resources
US10181030B2 (en) * 2015-07-24 2019-01-15 Citrix Systems, Inc. Blocking routine redirection
CN106201438A (zh) * 2016-07-05 2016-12-07 河北建筑工程学院 基于Intel平台服务器CPU对个人计算机的移植方法和系统
US10650552B2 (en) 2016-12-29 2020-05-12 Magic Leap, Inc. Systems and methods for augmented reality
EP4300160A3 (en) 2016-12-30 2024-05-29 Magic Leap, Inc. Polychromatic light out-coupling apparatus, near-eye displays comprising the same, and method of out-coupling polychromatic light
US10572286B2 (en) 2017-04-26 2020-02-25 International Business Machines Corporation Memory access optimization in a processor complex
US10592451B2 (en) * 2017-04-26 2020-03-17 International Business Machines Corporation Memory access optimization for an I/O adapter in a processor complex
US10578870B2 (en) 2017-07-26 2020-03-03 Magic Leap, Inc. Exit pupil expander
KR102596429B1 (ko) 2017-12-10 2023-10-30 매직 립, 인코포레이티드 광학 도파관들 상의 반사―방지 코팅들
EP3729172A4 (en) 2017-12-20 2021-02-24 Magic Leap, Inc. INSERT FOR AUGMENTED REALITY VIEWING DEVICE
US11436143B2 (en) * 2017-12-22 2022-09-06 Alibaba Group Holding Limited Unified memory organization for neural network processors
CN112136152A (zh) 2018-03-15 2020-12-25 奇跃公司 由观看设备的部件变形导致的图像校正
CA3099344A1 (en) * 2018-05-03 2019-11-07 Pierre L. DE ROCHEMONT High speed / low power server farms and server networks
US11204491B2 (en) 2018-05-30 2021-12-21 Magic Leap, Inc. Compact variable focus configurations
JP7319303B2 (ja) 2018-05-31 2023-08-01 マジック リープ, インコーポレイテッド レーダ頭部姿勢位置特定
US10825424B2 (en) 2018-06-05 2020-11-03 Magic Leap, Inc. Homography transformation matrices based temperature calibration of a viewing system
US11239922B2 (en) 2018-06-05 2022-02-01 L. Pierre de Rochemont Module with high peak bandwidth I/O channels
EP3803545A4 (en) 2018-06-08 2022-01-26 Magic Leap, Inc. AUGMENTED REALITY VIEWER WITH AUTOMATED SURFACE SELECTION PLACEMENT AND CONTENT ALIGNMENT PLACEMENT
US11579441B2 (en) 2018-07-02 2023-02-14 Magic Leap, Inc. Pixel intensity modulation using modifying gain values
US11856479B2 (en) 2018-07-03 2023-12-26 Magic Leap, Inc. Systems and methods for virtual and augmented reality along a route with markers
WO2020010226A1 (en) 2018-07-03 2020-01-09 Magic Leap, Inc. Systems and methods for virtual and augmented reality
EP3821340A4 (en) * 2018-07-10 2021-11-24 Magic Leap, Inc. THREAD WEAVING FOR CROSS INSTRUCTION SET ARCHITECTURE PROCEDURE APPEALS
US11624929B2 (en) 2018-07-24 2023-04-11 Magic Leap, Inc. Viewing device with dust seal integration
US11598651B2 (en) 2018-07-24 2023-03-07 Magic Leap, Inc. Temperature dependent calibration of movement detection devices
EP3831058A4 (en) 2018-08-02 2022-04-20 Magic Leap, Inc. VIEWING SYSTEM WITH PUPILE DISTANCE COMPENSATION BASED ON HEAD MOVEMENT
US10795458B2 (en) 2018-08-03 2020-10-06 Magic Leap, Inc. Unfused pose-based drift correction of a fused pose of a totem in a user interaction system
CN117111304A (zh) 2018-11-16 2023-11-24 奇跃公司 用于保持图像清晰度的图像尺寸触发的澄清
JP2022519292A (ja) 2019-02-06 2022-03-22 マジック リープ, インコーポレイテッド 複数のプロセッサによって発生される総熱を限定するための標的意図ベースのクロック速度の決定および調節
KR20200107101A (ko) * 2019-03-06 2020-09-16 에스케이하이닉스 주식회사 주소 변환 기능을 갖는 메모리 관리 유닛, 이를 포함하는 데이터 처리 구조 및 주소 변환 정보 생성 방법
JP2022523852A (ja) 2019-03-12 2022-04-26 マジック リープ, インコーポレイテッド 第1および第2の拡張現実ビューア間でのローカルコンテンツの位置合わせ
US10908924B2 (en) * 2019-05-01 2021-02-02 Intuit Inc. System and methods for loading objects from hash chains
CN114127837A (zh) 2019-05-01 2022-03-01 奇跃公司 内容提供系统和方法
CN114174895A (zh) 2019-07-26 2022-03-11 奇跃公司 用于增强现实的系统和方法
WO2021097323A1 (en) 2019-11-15 2021-05-20 Magic Leap, Inc. A viewing system for use in a surgical environment
US11256522B2 (en) 2019-11-22 2022-02-22 Advanced Micro Devices, Inc. Loader and runtime operations for heterogeneous code objects
US11467812B2 (en) * 2019-11-22 2022-10-11 Advanced Micro Devices, Inc. Compiler operations for heterogeneous code objects
CN116578397A (zh) * 2020-04-20 2023-08-11 支付宝(杭州)信息技术有限公司 数据资源处理方法、装置、设备和存储介质
CN111966607A (zh) * 2020-09-07 2020-11-20 湖南国科微电子股份有限公司 双倍速率存储器的访问方法及系统
CN114371814B (zh) * 2021-12-08 2024-05-10 浙江华忆芯科技有限公司 数据处理的方法、装置及固态硬盘

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2517859B2 (ja) * 1991-10-22 1996-07-24 工業技術院長 並列プロセス管理方法
US6108715A (en) 1994-12-13 2000-08-22 Microsoft Corporation Method and system for invoking remote procedure calls
JP3639366B2 (ja) * 1995-11-29 2005-04-20 富士通株式会社 アドレス空間共有システム
US6269390B1 (en) 1996-12-17 2001-07-31 Ncr Corporation Affinity scheduling of data within multi-processor computer systems
US7350028B2 (en) * 1999-05-21 2008-03-25 Intel Corporation Use of a translation cacheable flag for physical address translation and memory protection in a host
US6772416B1 (en) 1999-11-19 2004-08-03 General Dynamics Decision Systems, Inc. Separation kernel with memory allocation, remote procedure call and exception handling mechanisms
US7661107B1 (en) 2000-01-18 2010-02-09 Advanced Micro Devices, Inc. Method and apparatus for dynamic allocation of processing resources
US20030159070A1 (en) * 2001-05-28 2003-08-21 Yaron Mayer System and method for comprehensive general generic protection for computers against malicious programs that may steal information and/or cause damages
US20040034794A1 (en) * 2000-05-28 2004-02-19 Yaron Mayer System and method for comprehensive general generic protection for computers against malicious programs that may steal information and/or cause damages
US9213836B2 (en) * 2000-05-28 2015-12-15 Barhon Mayer, Batya System and method for comprehensive general electric protection for computers against malicious programs that may steal information and/or cause damages
JP4001727B2 (ja) * 2001-06-15 2007-10-31 富士通株式会社 ファイルアクセス制御プログラム、ファイルアクセス制御装置およびファイルアクセス制御方法
US7093004B2 (en) * 2002-02-04 2006-08-15 Datasynapse, Inc. Using execution statistics to select tasks for redundant assignment in a distributed computing platform
US7155708B2 (en) * 2002-10-31 2006-12-26 Src Computers, Inc. Debugging and performance profiling using control-dataflow graph representations with reconfigurable hardware emulation
US7509644B2 (en) * 2003-03-04 2009-03-24 Secure 64 Software Corp. Operating system capable of supporting a customized execution environment
US20050071608A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for selectively counting instructions and data accesses
GB2406663B (en) * 2003-10-01 2006-03-22 Toshiba Res Europ Ltd Flexible protocol stack
JP4652680B2 (ja) * 2003-12-22 2011-03-16 パナソニック株式会社 コンパイル方法および装置、ならびにコンパイラ
US7380039B2 (en) * 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US7594234B1 (en) * 2004-06-04 2009-09-22 Sun Microsystems, Inc. Adaptive spin-then-block mutual exclusion in multi-threaded processing
US20070106986A1 (en) * 2005-10-25 2007-05-10 Worley William S Jr Secure virtual-machine monitor
US8245236B2 (en) * 2008-02-27 2012-08-14 International Business Machines Corporation Lock based moving of threads in a shared processor partitioning environment
US7979844B2 (en) * 2008-10-14 2011-07-12 Edss, Inc. TICC-paradigm to build formally verified parallel software for multi-core chips
JP5245722B2 (ja) * 2008-10-29 2013-07-24 富士通株式会社 スケジューラ、プロセッサシステム、プログラム生成装置およびプログラム生成用プログラム
US9672019B2 (en) * 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US20110066830A1 (en) * 2009-09-11 2011-03-17 Andrew Wolfe Cache prefill on thread migration
US9569270B2 (en) * 2009-04-21 2017-02-14 Empire Technology Development Llc Mapping thread phases onto heterogeneous cores based on execution characteristics and cache line eviction counts
CA2680601C (en) * 2009-10-16 2010-11-02 Ibm Canada Limited - Ibm Canada Limitee Managing multiple speculative assist threads at differing cache levels
JP5810918B2 (ja) * 2009-12-24 2015-11-11 日本電気株式会社 スケジューリング装置、スケジューリング方法及びプログラム
US9619301B2 (en) * 2011-04-06 2017-04-11 Telefonaktiebolaget L M Ericsson (Publ) Multi-core memory model and speculative mode processor management
US9830158B2 (en) * 2011-11-04 2017-11-28 Nvidia Corporation Speculative execution and rollback
US9128786B2 (en) * 2011-11-22 2015-09-08 Futurewei Technologies, Inc. System and method for implementing shared locks between kernel and user space for synchronize access without using a system call to the kernel
US9280347B2 (en) * 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US8966494B2 (en) * 2012-03-16 2015-02-24 Arm Limited Apparatus and method for processing threads requiring resources
CN104781803B (zh) * 2012-12-26 2018-06-15 英特尔公司 用于架构不同核的线程迁移支持

Also Published As

Publication number Publication date
US9923840B2 (en) 2018-03-20
CN104756078B (zh) 2018-07-13
CN104756078A (zh) 2015-07-01
EP2885708A1 (en) 2015-06-24
EP2885708A4 (en) 2016-11-09
US20180219795A1 (en) 2018-08-02
JP2015526821A (ja) 2015-09-10
US10999214B2 (en) 2021-05-04
WO2014031540A1 (en) 2014-02-27
US20150256484A1 (en) 2015-09-10

Similar Documents

Publication Publication Date Title
JP6218833B2 (ja) 処理リソース割り当て
KR101778479B1 (ko) 동적 타입 객체들에 액세스함에 있어서의 동시 인라인 캐시 최적화
US9513904B2 (en) Computer processor employing cache memory with per-byte valid bits
US8776034B2 (en) Dynamically maintaining coherency within live ranges of direct buffers
EP2542973B1 (en) Gpu support for garbage collection
US8146064B2 (en) Dynamically controlling a prefetching range of a software controlled cache
US9513886B2 (en) Heap data management for limited local memory(LLM) multi-core processors
Orr et al. Synchronization using remote-scope promotion
CN110865968A (zh) 多核处理装置及其内核之间数据传输方法
Manivannan et al. Efficient forwarding of producer-consumer data in task-based programs
Al-Saber et al. SemCache++ Semantics-Aware Caching for Efficient Multi-GPU Offloading
Ungar et al. Hosting an object heap on manycore hardware: An exploration
Fang et al. On the design of global object space for efficient multi-threading Java computing on clusters
Mittal Memory map: a multiprocessor cache simulator
Pinto et al. A highly efficient, thread-safe software cache implementation for tightly-coupled multicore clusters
Flores et al. Memory hierarchies for future hpc architectures
Habermaier The model of computation of CUDA and its formal semantics
Lüdtke et al. Cache-Related Performance Analysis Using Rogue Wave Software’s ThreadSpotter
Choi HW-SW co-design techniques for modern programming languages
Kim et al. Static function prefetching for efficient code management on scratchpad memory
Khan Optimization study for multicores
Gindraud Distributed runtime system with global address space and software cache coherence for a data-flow task model
García Flores Memory hierarchies for future HPC architectures
Weidendorfer Cache Performance Analysis with Callgrind and KCachegrind
Song An accurate prefetching policy for object oriented systems

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160817

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160817

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170626

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170711

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170821

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170926

R150 Certificate of patent or registration of utility model

Ref document number: 6218833

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