(57)【要約】本発明は、（ｉ）第１、第２、第３機能を有するアプリケーションを記憶し、第１機能は、アプリケーションの起動用に第２、第３機能を呼び出す主要機能であり、（ｉｉ）アプリケーションを第１、第２異種プロセッサにコンパイルし、それぞれ第１、第２ＣＰＵ  ＩＳＡオブジェクトを作成し、（ｉｉｉ）第１ＣＰＵ  ＩＳＡオブジェクトから第３機能の除去と、第２ＣＰＵ  ＩＳＡオブジェクトからの第１、第２機能の除去とにより、第１、第２ＣＰＵ  ＩＳＡオブジェクトをプルーニングし、（ｉｖ）それぞれ第１、第２ＣＰＵ  ＩＳＡオブジェクト内に第１、第２ＲＰＣをプロキシ挿入し、それぞれ第２ＣＰＵ  ＩＳＡオブジェクト内の第３機能と第１のＣＰＵ  ＩＳＡオブジェクト内の第２機能とをポイントし、（ｖ）第２ＣＰＵ  ＩＳＡオブジェクトを共通アプリケーションライブラリにセクションリネーミングすることを含む、コードを開始する方法を提供する。
2021532456.tif 000002
【特許請求の範囲】
【請求項１】
コードを開始する方法であって、
（ｉ）メモリ内にアプリケーションを記憶することであって、前記アプリケーションは、第１の機能、第２の機能、および第３の機能を有し、前記第１の機能は、前記アプリケーションを起動するために前記第２の機能および前記第３の機能を呼び出す主要機能である、ことと、
（ｉｉ）前記アプリケーションを第１の異種プロセッサおよび第２の異種プロセッサにコンパイルし、それぞれ、第１の中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトを作成することと、
（ｉｉｉ）前記第１のＣＰＵ  ＩＳＡオブジェクトから前記第３の機能を除去し、前記第２のＣＰＵ  ＩＳＡオブジェクトから第１の機能および第２の機能を除去することによって、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクトをプルーニングすることと、
（ｉｖ）それぞれ、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクト内に第１のリモートプロシージャ呼出（ＲＰＣ）および第２のＲＰＣをプロキシ挿入し、それぞれ、前記第２のＣＰＵ  ＩＳＡオブジェクト内の前記第３の機能および前記第１のＣＰＵ  ＩＳＡオブジェクト内の前記第２の機能をポイントすることと、
（ｖ）前記第２のＣＰＵ  ＩＳＡオブジェクトをセクションリネーミングし、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクトの共通アプリケーションライブラリを作成することと
を含む、方法。
【請求項２】
前記第１の機能は、前記第２の機能をポイントする、請求項１に記載の方法。
【請求項３】
前記第１の機能は、前記第１のＲＰＣをポイントする、請求項１に記載の方法。
【請求項４】
それぞれ、前記第１のＣＰＵ  ＩＳＡオブジェクト内の前記第３の機能および前記第２のＣＰＵ  ＩＳＡオブジェクト内の前記第２の機能を前記第１のＲＰＣおよび前記第２のＲＰＣと置換することをさらに含む、請求項１に記載の方法。
【請求項５】
前記アプリケーションは、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクトの機能によって使用されるデータ構造を有する、請求項１に記載の方法。
【請求項６】
前記コンパイルすること（ｉｉ）の間、前記データ構造は、前記第２のプロセッサにコンパイルされる、請求項５に記載の方法。
【請求項７】
前記プルーニングすること（ｉｉｉ）の間、前記データ構造は、前記第２のＣＰＵ  ＩＳＡオブジェクトから除去される、請求項６に記載の方法。
【請求項８】
前記第１の機能は、前記データ構造を使用する、請求項５に記載の方法。
【請求項９】
前記第３の機能は、前記データ構造を使用する、請求項５に記載の方法。
【請求項１０】
前記第２のＣＰＵ  ＩＳＡオブジェクト内の前記第３の機能は、前記第１のＣＰＵ  ＩＳＡオブジェクト内の前記データ構造をポイントする、請求項９に記載の方法。
【請求項１１】
（１）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上で前記主要機能を実行することであって、前記主要機能は、
（２）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上の前記第１のＲＰＣ、
（３）前記第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第２のプロセッサ上の前記第３の機能、
（４）前記第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第２のプロセッサ上の前記第２のＲＰＣ、および、
（５）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上の前記第２の機能
の連続的実行を引き起こす、こと
をさらに含む、請求項４に記載の方法。
【請求項１２】
コンピュータ可読媒体であって、前記コンピュータ可読媒体は、方法を実行するためにプロセッサによって実行可能である命令のセットをその上に記憶しており、前記方法は、
（ｉ）メモリ内にアプリケーションを記憶することであって、前記アプリケーションは、第１の機能、第２の機能、および第３の機能を有し、前記第１の機能は、第１のアプリケーションを起動するために前記第２の機能および前記第３の機能を呼び出す主要機能である、ことと、
（ｉｉ）前記アプリケーションを第１の異種プロセッサおよび第２の異種プロセッサにコンパイルし、それぞれ、第１の中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトを作成することと、
（ｉｉｉ）前記第１のＣＰＵ  ＩＳＡオブジェクトから前記第３の機能を除去し、前記第２のＣＰＵ  ＩＳＡオブジェクトから第１の機能および第２の機能を除去することによって、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクトをプルーニングすることと、
（ｉｖ）それぞれ、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクト内に第１のリモートプロシージャ呼出（ＲＰＣ）および第２のＲＰＣをプロキシ挿入し、それぞれ、前記第２のＣＰＵ  ＩＳＡオブジェクト内の前記第３の機能および前記第１のＣＰＵ  ＩＳＡオブジェクト内の前記第２の機能をポイントすることと、
（ｖ）前記第２のＣＰＵ  ＩＳＡオブジェクトをセクションリネーミングし、前記第１のＣＰＵ  ＩＳＡオブジェクトおよび前記第２のＣＰＵ  ＩＳＡオブジェクトの共通アプリケーションライブラリを作成することと
を含む、コンピュータ可読媒体。
【請求項１３】
アプリケーションを実行する方法であって、
（１）第１の機能、第２の機能、および第３の機能を有するアプリケーションの第１の機能を実行することであって、前記第１の機能は、主要機能であり、第１のプロセッサにコンパイルされる第１の中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上で、前記主要機能は、
（２）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上の第１のリモートプロシージャ呼出（ＲＰＣ）、
（３）第２のプロセッサにコンパイルされる第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第２のプロセッサ上の前記第３の機能、
（４）前記第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第２のプロセッサ上の前記第２のＲＰＣ、および、
（５）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上の前記第２の機能
の連続的実行を引き起こす、こと
を含む、方法。
【請求項１４】
異種マルチプロセッサであって、
第１の異種プロセッサおよび第２の異種プロセッサと、
メモリと、
前記メモリ上のアプリケーションと
を備え、
前記アプリケーションは、
第１の機能、第２の機能、および第３の機能、ならびに第１のリモートプロシージャ呼出および第２のリモートプロシージャ呼出（ＲＰＣ）を含み、
（１）前記第１の機能は、前記第１のプロセッサにコンパイルされる第１の中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上で実行される主要機能であり、前記主要機能は、
（２）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上の前記第１のＲＰＣ、
（３）第２のプロセッサにコンパイルされる第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第２のプロセッサ上の前記第３の機能、
（４）前記第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第２のプロセッサ上の前記第２のＲＰＣ、および、
（５）前記第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う前記第１のプロセッサ上の前記第２の機能
の連続的実行を引き起こす、異種マルチプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１８年７月１０日に出願された米国仮特許出願第６２／６９６，１３２号からの優先権を主張し、その全てが、参照によりその全体として本明細書に援用される。
【０００２】
１．発明の背景
本発明は、コードを開始する方法、アプリケーションを実行する方法、および異種マルチプロセッサに関する。
【背景技術】
【０００３】
２．関連技術の説明
複雑なコンピュータシステムは、それぞれ、一意の命令セットアーキテクチャを伴う異なるベンダからの複数のプロセッサコアを伴う異種アプローチを頻繁に利用する。異種マルチプロセッサのためのコードを発生させることは、プログラマにとって困難なタスクであり得る。プログラマは、本質的に、２つの別個のバイナリ非互換のコアと別個に互換性のあるプロシージャ呼出に対処し、他のプロセッサがより効率的であり得る境界線において１つのスレッドから別のものに遷移し得るプロシージャ呼出に対処しなければならない。この種類の複雑性は、ソフトウェア作者が、高レベルのＣ＋＋スレッドプリミティブおよびライブラリ等の従来の高レベルのコンピュータ言語を使用して、機能的な正しさに焦点を当てることを困難にする。
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明は、コードを開始する方法を提供し、方法は、（ｉ）メモリ内にアプリケーションを記憶することであって、アプリケーションは、第１の機能、第２の機能、および第３の機能を有し、第１の機能は、アプリケーションを起動するために第２の機能および第３の機能を呼び出す主要機能である、ことと、（ｉｉ）アプリケーションを第１の異種プロセッサおよび第２の異種プロセッサにコンパイルし、それぞれ、第１中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトを作成することと、（ｉｉｉ）第１のＣＰＵ  ＩＳＡオブジェクトから第３の機能を除去し、第２のＣＰＵ  ＩＳＡオブジェクトから第１の機能および第２の機能を除去することによって、第１のＣＰＵ  ＩＳＡオブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトをプルーニングすることと、（ｉｖ）それぞれ、第１のＣＰＵ  ＩＳＡオブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクト内に第１リモートプロシージャ呼出（ＲＰＣ）および第２のＲＰＣをプロキシ挿入し、それぞれ、第２のＣＰＵ  ＩＳＡオブジェクト内の第３の機能および第１のＣＰＵ  ＩＳＡオブジェクト内の第２の機能をポイントすることと、（ｖ）第２のＣＰＵ  ＩＳＡオブジェクトをセクションリネーミングし、第１のＣＰＵ  ＩＳＡオブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトの共通アプリケーションライブラリを作成することとを含む。
【０００５】
本発明はまた、方法を実行するためにプロセッサによって実行可能である命令のセットをその上に記憶しているコンピュータ可読媒体を提供する。本方法は、（ｉ）メモリ内にアプリケーションを記憶することであって、アプリケーションは、第１の機能、第２の機能、および第３の機能を有し、第１の機能は、第１のアプリケーションを起動するために第２の機能および第３の機能を呼び出す主要機能である、ことと、（ｉｉ）アプリケーションを第１の異種プロセッサおよび第２の異種プロセッサにコンパイルし、それぞれ、第１中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトを作成することと、（ｉｉｉ）第１のＣＰＵ  ＩＳＡオブジェクトから第３の機能を除去し、第２のＣＰＵ  ＩＳＡオブジェクトから第１の機能および第２の機能を除去することによって、第１のＣＰＵ  ＩＳＡオブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトをプルーニングすることと、（ｉｖ）それぞれ、第１のＣＰＵ  ＩＳＡオブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクト内に第１のリモートプロシージャ呼出（ＲＰＣ）および第２のＲＰＣをプロキシ挿入し、それぞれ、第２のＣＰＵ  ＩＳＡオブジェクト内の第３の機能および第１のＣＰＵ  ＩＳＡオブジェクト内の第２の機能をポイントすることと、（ｖ）第２のＣＰＵ  ＩＳＡオブジェクトをセクションリネーミングし、第１のＣＰＵ  ＩＳＡオブジェクトおよび第２のＣＰＵ  ＩＳＡオブジェクトの共通アプリケーションライブラリを作成することとを含んでもよい。
【０００６】
本発明は、アプリケーションを実行する方法をさらに提供し、方法は、（１）第１の機能、第２の機能、および第３の機能を有するアプリケーションの第１の機能を実行することを含み、第１の機能は、主要機能であり、第１のプロセッサにコンパイルされる第１の中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトのうちの少なくとも１つを伴う第１のプロセッサ上で、主要機能は、（２）第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第１のプロセッサ上の第１のリモートプロシージャ呼出（ＲＰＣ）、（３）第２のプロセッサにコンパイルされる第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第２のプロセッサ上の第３の機能、（４）第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第２のプロセッサ上の第２のＲＰＣ、および（５）第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第１のプロセッサ上の第２の機能の連続的実行を引き起こす。
【０００７】
本発明はまた、異種マルチプロセッサを提供し、異種マルチプロセッサは、第１の異種プロセッサおよび第２の異種プロセッサと、メモリと、メモリ上のアプリケーションとを含み、アプリケーションは、第１の機能、第２の機能、および第３の機能、ならびに第１のリモートプロシージャ呼出（ＲＰＣ）および第２のＲＰＣを含み、（１）第１の機能は、第１のプロセッサにコンパイルされる第１の中央処理ユニット（ＣＰＵ）命令セットアーキテクチャ（ＩＳＡ）オブジェクトのうちの少なくとも１つを伴う第１のプロセッサ上で実行される主要機能である。主要機能は、（２）第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第１のプロセッサ上の第１のＲＰＣ、（３）第２のプロセッサにコンパイルされる第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第２のプロセッサ上の第３の機能、（４）第２のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第２のプロセッサ上の第２のＲＰＣ、および（５）第１のＣＰＵ  ＩＳＡオブジェクトのうちの少なくとも１つを伴う第１のプロセッサ上の第２の機能の連続的実行を引き起こす。
【図面の簡単な説明】
【０００８】
本発明は、付随の図面を参照して、実施例を用いてさらに説明される。
【０００９】
【図１】図１は、概念的な異種マルチプロセッサアプリケーションを図示するブロック図である。
【００１０】
【図２】図２〜図６は、異種マルチプロセッサアプリケーションの開発を図示するブロック図である。
【図３】図２〜図６は、異種マルチプロセッサアプリケーションの開発を図示するブロック図である。
【図４】図２〜図６は、異種マルチプロセッサアプリケーションの開発を図示するブロック図である。
【図５】図２〜図６は、異種マルチプロセッサアプリケーションの開発を図示するブロック図である。
【図６】図２〜図６は、異種マルチプロセッサアプリケーションの開発を図示するブロック図である。
【００１１】
【図７】図７〜図１１は、異種マルチプロセッサのランタイム実行を図示する。
【図８】図７〜図１１は、異種マルチプロセッサのランタイム実行を図示する。
【図９】図７〜図１１は、異種マルチプロセッサのランタイム実行を図示する。
【図１０】図７〜図１１は、異種マルチプロセッサのランタイム実行を図示する。
【図１１】図７〜図１１は、異種マルチプロセッサのランタイム実行を図示する。
【００１２】
【図１２】図１２は、異種マルチプロセッサアプリケーションを展開するためのビルドシステムをホストすることができるコンピュータの形態における機械のブロック図である。
【発明を実施するための形態】
【００１３】
（本発明の詳細な説明）
図１は、一次命令セットアーキテクチャ（ＩＳＡ）上で起動するためのコード１２と、二次ＩＳＡ上で起動するためのコード１４と、共通データ１６とを含む概念的な異種マルチプロセッサアプリケーション１０を図示する。
【００１４】
コード１４は、第１の機能１８および第２の機能２０を含む。第１の機能１８は、主要機能であり、これは、異種マルチプロセッサアプリケーション１０を起動するために実行される第１の機能である。コード１４は、第３の機能２２を含む。共通データ１６は、データ構造２４を含む。第１の機能１８は、２６において、第２の機能２０をポイントし、２８において、第３の機能２２をポイントする。第３の機能２２は、３０において、第２の機能２０をポイントする。第１の機能１８および第３の機能２２は、それぞれ、３２および３４において、データ構造２４に依拠する。
【００１５】
アプリケーションは、３つを上回る機能を有し得ることを理解されたい。議論の目的のために、異種マルチプロセッサの構造は、３つの機能のみを有するように説明され、これは、本発明を説明するために十分であり、本発明を不明瞭にし得る不必要な乱雑さを含まない。しかしながら、付加的機能が、この説明に使用される３つの機能の前に、その間に、および／またはその後に含まれてもよく、同一の方法を介して、任意のＩＳＡに所属する本システムにおける任意の他の機能を呼び出してもよい。
【００１６】
図２は、本発明のある実施形態による、異種マルチプロセッサアプリケーション４０を作成するための第１の動作を図示する。アプリケーションが、ソースコードにおいて書き込まれ、メモリ内に記憶される。アプリケーションは、次いで、第１の異種マルチプロセッサおよび第２の異種マルチプロセッサにコンパイルされ、それぞれ、第１の中央処理ユニット（ＣＰＵ）ＩＳＡオブジェクト４２Ａおよび第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂを作成する。プロセッサは、異なるＩＳＡを有し、したがって、それらの機能に関して異なるオブジェクトに依拠する。ＣＰＵ  ＩＳＡオブジェクト４２Ａおよび４２Ｂは、したがって、異なるプロセッサのＩＳＡの異なる要件に従って、相互に異なる。ＣＰＵ  ＩＳＡオブジェクト４２Ａおよび４２Ｂは、同一のソースコードからコンパイルされ、したがって、同一の機能ブロックを有する。例えば、ＣＰＵ  ＩＳＡオブジェクト４２Ａは、第１の機能１８Ａを含み、ＣＰＵ  ＩＳＡオブジェクト４２Ｂもまた、第１の機能１８Ｂを含む。ＣＰＵ  ＩＳＡオブジェクト４２Ａおよび４２Ｂの機能的コンポーネントは、図１を参照して説明される概念的な異種マルチプロセッサアプリケーション１０の機能的コンポーネントと同一である。第１のＣＰＵ  ＩＳＡオブジェクト４２Ａのコンポーネントおよびそれらの間のリンクは、第１のＣＰＵ  ＩＳＡオブジェクト４２Ａおよびそれらのリンクが「Ａ」を添付されている（例えば、「２０」から「２０Ａ」）ことを除いて、図１における概念的な異種マルチプロセッサアプリケーション１０のコンポーネントと同一の参照番号を有する。同様に、第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂのコンポーネントは、それらが「Ｂ」を添付されている（例えば、「２０」から「２０Ｂ」）ことを除いて、図１における異種マルチプロセッサアプリケーション１０のコンポーネントと同一である。
【００１７】
図３は、異種マルチプロセッサアプリケーション４０を構築するために実行されるプルーニング動作を図示する。第１のＣＰＵ  ＩＳＡオブジェクト４２Ａでは、コード１４Ａおよび第３の機能２２Ａは、除去される。第３の機能２２Ａの除去はまた、データ構造２４Ａへのリンク３４Ａを除去する。第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂでは、二次ＩＳＡ上で起動するためのコード１２Ｂは、第１の機能１８Ｂおよび第２の機能２０Ｂとともに除去される。共通データ１６Ｂおよびデータ構造２４Ｂもまた、第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂから除去される。第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂからのコンポーネントの除去はまた、２６Ｂ、２８Ｂ、および３２Ｂにおけるリンクを切断する。一次ＩＳＡ上で起動するためのコード１２Ａは、「リンカ入力セクション」、「．ｔｅｘｔセクション」、または「オブジェクトファイルセクション」と称される、「．ｔｅｘｔ」ネーミング構造を有する。二次ＩＳＡ上で起動するためのコード１４Ｂは、「．ｔｅｘｔ．ｉｓａｂ」ネーミング構造を有する。
【００１８】
図４は、異種マルチプロセッサアプリケーション４０の構造において実行されるプロキシ挿入動作を図示する。第１のプロキシセクション４６および第２のプロキシセクション４８が、それぞれ、第１のＣＰＵ  ＩＳＡオブジェクト４２Ａおよび第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂの中に挿入される。第１のプロキシセクション４６は、第１のリモートプロシージャ呼出（ＲＰＣ）５０を含む。第１の機能１８Ａは、第１のＲＰＣ５０をポイントする。第１のＲＰＣ５０は、５２において、第２のＣＰＵ  ＩＳＡオブジェクト４２Ｂの第３の機能２２Ｂをポイントする。実践では、図２における第３の機能２２Ａは、図４における第１のＲＰＣ５０と置換されることができる。
【００１９】
第２のプロキシセクション４８は、第２のリモートプロシージャ呼出（ＲＰＣ）５４を含む。第３の機能２２Ｂは、３０Ｂにおいて、第２のＲＰＣ５４をポイントする。第２のＲＰＣ５４は、５６において、図４における第２の機能２０Ａをポイントする。第２のプロキシセクション４８は、この時点で、リネーミングされておらず、リンク５６は、したがって、アクティブではない。しかしながら、リンク５６は、第２のプロキシセクション４８がリネーミングされた後の異種マルチプロセッサアプリケーション４０の最終的な機能を図示するために、図４に含まれる。同様に、リンク３４Ｂは、二次ＩＳＡ上で起動するためのコード１４Ｂがリネーミングされた後の異種マルチプロセッサアプリケーション４０の最終的な機能を図示するために、データ構造２４Ａをポイントするように示される。
【００２０】
図５は、異種マルチプロセッサアプリケーション４０を構築するために実行されるセクションリネーミング動作を図示する。二次ＩＳＡ上で起動するためのコード１４Ｂおよび第２のプロキシセクション４８は、第１のＣＰＵ  ＩＳＡオブジェクト４２Ａのネーミングと一致するように、「．ｔｅｘｔ．ｉｓａｂ」から「．ｔｅｘｔ」にリネーミングされる。図６は、図５におけるセクションリネーミング後のアプリケーションライブラリ内の最終リンクを図示する。セクションリネーミングは、第１の機能１８Ａ、第２の機能２０Ａ、および第３の機能２２Ｂと、第１のＲＰＣ５０および第２のＲＰＣ５４とを含有する包括的な「．ｔｅｘｔ」セクション６０を作成する。
【００２１】
ソースコードは、例えば、Ｃ＋＋コードにおいて記述されてもよく、その後、図２における第１の機能１８Ａ、第２の機能２０Ａ、および第３の機能２４Ａによって表されるような処理スレッドは、「ウィービング」イベントと称されることができるものにおいて、プロシージャが呼び出した境界において１つのバイナリ非互換のコアから別のものに不可視に遷移する。ソフトウェア作者は、最初に、従来の高レベルのＣ＋＋スレッドプリミティブおよびライブラリを使用して、機能的な正しさに焦点を当ててもよく、次いで、モジュール式の方法で、コードを書き換える必要なくまたは異なるライブラリのセットに依拠する必要なく、コードの個々のブロックをより効率的なプロセッサに移行させてもよい。システムが、例えば、デジタル信号プロセッサ（ＤＳＰ）と、汎用中央処理ユニット（ＣＰＵ）とを有し得る。ソフトウェア作者の視点から、ＤＳＰ上である機能を起動するために、行われる必要があることは、以下の通り、これが具体的な非「．ｔｅｘｔ」プログラムセクション内に設置されることを規定する属性タグをある機能に追加することだけであり得る。
【化１】
2021532456.tif 000003
【００２２】
上記の実施例では、ソースファイルをコンパイルした後、結果として生じるオブジェクトファイルは、「．ｔｅｘｔ＿ｄｓｐ」セクション内に機能「ｆｏｏ」を含有し得る。ビルドシステムは、オブジェクトファイルから「．ｔｅｘｔ＿ｄｓｐ」セクションを認識および削除し、次いで、ＤＳＰのＩＳＡのためのソースファイルを再コンパイルする。「ｆｏｏ」機能への任意の参照は、ＤＳＰ上でリモートプロシージャ呼出を開始するためにシム機能と置換されるであろう。類似する様式で、逆のことが、ＤＳＰオブジェクトファイルに関して起こり、．ｔｅｘｔ内の任意の機能が、削除され、．ｔｅｘｔ＿ｄｓｐセクション内の機能におけるそれらへの任意の参照が、ＣＰＵ上に戻るようにリモートプロシージャ呼出を開始するためにシム機能と置換される。２つのプロセッサが、同じコンパイルされた構造レイアウトを有し、同一の仮想メモリに対する同じビューを有し、ウィービングイベントの時点でコヒーレントなキャッシュを有する限り、アプリケーションは、実行のフローの単純かつコヒーレントなプログラマビューを維持しながら、１つのプロセッサアーキテクチャから他のものにシームレスに遷移することが可能であるはずである。
【００２３】
図７は、ランタイム実行の間に実行される第１の動作を図示する。異種マルチプロセッサ７０が、図６の異種マルチプロセッサアプリケーション４０のコンポーネントを記憶する主要メモリ７２を有する。第１の機能１８Ａは、アプリケーションを起動するために実行される主要機能である。ブロック７４は、第１の機能１８Ａが、第１のＣＰＵ  ＩＳＡオブジェクトを使用して、第１のプロセッサ上で実行されることを示す。ブロック７６は、第２のＣＰＵ  ＩＳＡオブジェクトを使用する第２のプロセッサが、アイドル状態であることを示す。第１の機能１８Ａは、３２Ａにおいて、例えば、データをルックアップする目的のために、データ構造２４Ａに依拠する。第１の機能１８Ａは、２６Ａおよび２６Ｂにおいて、第２の機能２０Ａおよび第１のＲＰＣ５０を実行する。
【００２４】
図８は、第１の機能１８Ａが第１のＲＰＣ５０を開始するとき、異種マルチプロセッサ７０上で実行される第２のプロセスを図示する。ブロック７８は、第１のＲＰＣ５０が、第１のＩＳＡオブジェクトを使用して、第１のＣＰＵ上で実行されることを示す。ブロック７８は、第２のＣＰＵが、依然としてアイドル状態であることを示す。第１のＲＰＣ５０は、５２において、第３の機能２２Ｂを実行する。
【００２５】
図９は、第１のＲＰＣ５０が第３の機能２２Ｂを開始するとき、異種マルチプロセッサ７０上で実行される第３の動作を図示する。ブロック８０は、第１のＩＳＡオブジェクトを使用する第１のＣＰＵが、一時停止されていることを示す。ブロック８２は、第３の機能２２Ｂが、第２のＩＳＡオブジェクトを使用して、第２のＣＰＵを用いて実行されることを示す。第３の機能２２Ｂは、３４Ｂにおいて、例えば、ルックアップを実行する目的のために、データ構造２４Ａを利用する。第３の機能２２Ｂは、３０Ｂにおいて、第２のＲＰＣ５４を実行する。
【００２６】
図１０は、第２のＲＰＣ５４が実行されるとき、異種マルチプロセッサ７０上で実行される第４の動作を図示する。ブロック８０は、第１のＣＰＵが依然として一時停止されていることを示す。ブロック８４は、第２のＲＰＣ５４が、第２のＩＳＡオブジェクトを使用して、第２のＣＰＵを用いて実行されることを示す。第２のＲＰＣ５４は、５６において、第２の機能２０Ａを実行する。
【００２７】
図１１は、第２の機能２０Ａが実行されるとき、異種マルチプロセッサ７０上で実行される第５の動作を図示する。ブロック８６は、第１の機能２０Ａが、第１のＩＳＡオブジェクトを使用して、第１のＣＰＵを用いて実行されることを示す。ブロック８８は、第２のＣＰＵが一時停止されていることを示す。
【００２８】
図１２は、コンピュータシステム９００の例示的形態における機械の図表現を示し、コンピュータシステム９００内で本明細書に議論される方法論のうちのいずれか１つ以上のものを、機械に実施させるための命令のセットが実行され得る。代替実施形態では、機械は、スタンドアロンデバイスとして動作する、または、他の機械に接続（例えば、ネットワーク化）されてもよい。さらに、単一の機械のみが、図示されるが、用語「機械」はまた、本明細書に議論される方法論のうちのいずれか１つ以上のものを実施するための命令のセット（または複数のセット）を個々にまたは共同で実行する機械の任意の集合を含むように解釈されるものとする。
【００２９】
例示的コンピュータシステム９００は、バス９０８を介して相互に通信するプロセッサ９０２（例えば、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、または両方）と、主要メモリ９０４（例えば、読取専用メモリ（ＲＯＭ）、フラッシュメモリ、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）（例えば、同期ＤＲＡＭ（ＳＤＲＡＭ）またはラムバスＤＲＡＭ（ＲＤＲＡＭ））等）と、スタティックメモリ９０６（例えば、フラッシュメモリ、スタティックランダムアクセスメモリ（ＳＲＡＭ）等）とを含む。
【００３０】
コンピュータシステム９００は、ディスクドライブユニット９１６と、ネットワークインターフェースデバイス９２０とをさらに含んでもよい。
【００３１】
ディスクドライブユニット９１６は、機械可読媒体９２２を含み、その上に、本明細書に説明される方法論または機能のうちのいずれか１つ以上のものを具現化する命令９２４（例えば、ソフトウェア）の１つ以上のセットが記憶される。ソフトウェアはまた、完全にまたは少なくとも部分的に、コンピュータシステム９００によるその実行の間、主要メモリ９０４内および／またはプロセッサ９０２内に常駐してもよく、主要メモリ９０４およびプロセッサ９０２もまた、機械可読媒体を構成する。
【００３２】
ソフトウェアはさらに、ネットワークインターフェースデバイス９２０を介して、ネットワーク９２８を経由して伝送または受信されてもよい。
【００３３】
機械可読媒体９２２は、例示的実施形態において、単一の媒体であるように示されるが、用語「機械可読媒体」は、命令の１つ以上のセットを記憶する単一の媒体または複数の媒体（例えば、一元化または分散データベース、ならびに／もしくは関連付けられるキャッシュおよびサーバ）を含むように解釈されるべきである。用語「機械可読媒体」はまた、機械による実行のために命令のセットを記憶する、エンコードする、または搬送することが可能であり、本発明の方法論のうちのいずれか１つ以上のものを機械に実施させる、任意の媒体を含むように解釈されるものとする。用語「機械可読媒体」は、故に、限定ではないが、ソリッドステートメモリ、光学および磁気媒体、ならびに搬送波信号を含むように解釈されるものとする。
【００３４】
ある例示的実施形態が、説明され、付随の図面に示されたが、そのような実施形態は、単に、本発明の例証であり、本発明の制限ではなく、本発明は、修正が当業者に想起され得るため、示されて説明される具体的構造および配列に制限されないことを理解されたい。
【図１】
2021532456.tif 000004
【図２】
2021532456.tif 000005
【図３】
2021532456.tif 000006
【図４】
2021532456.tif 000007
【図５】
2021532456.tif 000008
【図６】
2021532456.tif 000009
【図７】
2021532456.tif 000010
【図８】
2021532456.tif 000011
【図９】
2021532456.tif 000012
【図１０】
2021532456.tif 000013
【図１１】
2021532456.tif 000014
【図１２】
2021532456.tif 000015
【国際調査報告】
2021532456.tif 000016