(57)【要約】 【目的】  異種プロサッサが効率よく協調して分散処理を実行できることを課題とする。【構成】  異種のＣＰＵ間をバスで接続し、これらが協動して分散処理を行うマルチプロセッサシステムであって、マスタープロセッサ＃０は、メインプログラムの実行に伴い何れかのサブプログラムの実行が必要となったことにより、主メモリ＃０のプログラムテーブルより当該サブプログラム名に対応する分岐先アドレスを抽出してこれをスレーブプロセッサ＃１のローカルメモリ＃１のプログラム指示領域に書き込み、これを検出したスレーブプロセッサ＃１は、当該分岐先アドレスに処理を移し、実行する。【選択図】  図１
2008071093.tif 000002
【特許請求の範囲】
【請求項１】
異種のＣＰＵ間をバスで接続し、これらが協動して分散処理を行うマルチプロセッサシステムであって、自己のローカルメモリに格納されたメインプログラムを実行するマスタープロセッサと、自己のローカルメモリに格納された１又は２以上のサブプログラムを実行するスレーブプロセッサとを含み、システムの立上時に、前記スレーブプロセッサのローカルメモリにマッピングされた各サブプログラムのプログラム名と該プログラムへの分岐先アドレスとを対応付けたプログラムテーブルをマスタープロセッサのローカルメモリに格納し、マスタープロセッサは、メインプログラムの実行に伴い前記何れかのサブプログラムの実行が必要となったことにより、前記プログラムテーブルより当該サブプログラム名に対応する分岐先アドレスを抽出してこれをスレーブプロセッサのローカルメモリの所定のアドレスに書き込み、これを検出したスレーブプロセッサは、当該分岐先アドレスに処理を移すことを特徴とするマルチプロセッサシステム。
【請求項２】
マスターブプロセッサは、自己のローカルメモリにプログラムテーブルが書き込まれた後に、メインプログラムの実行を開始することを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
スレーブプロセッサは、自己のローカルメモリの所定のアドレスの内容を定期的に監視することによりマスタープロセッサからの分岐先アドレスの書き込みを検出することを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項４】
異種ＣＰＵのバス間をバスインタフェースを介してクロス方向にアクセス可能に接続し、通常は各ＣＰＵが自己のローカルバスを占有すると共に、異種ＣＰＵからのバス使用要求に従ってバスの一時的使用を許可することを特徴とする請求項１記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチプロセッサシステムに関し、更に詳しくは、異種のＣＰＵ間をバスで接続し、これらが協動して分散処理を行うマルチプロセッサシステムに関する。
【背景技術】
【０００２】
例えば、モバイルシステムの基地局装置では、多くのパケットをリアルタイムに処理する必要があるため、高速プロセッサを使用するか、又は複数プロセッサを組み合わせて負荷分散させる必要がある。この場合に、通常は、システムに共通のプログラム（バイナリファイル）を効率よく利用できるように、同一メーカの同種のプロセッサ（ＣＰＵ）を組み合わせてマルチプロセッサシステムを構築することが行われる。
【０００３】
しかるに、モバイルシステムではコスト等の理由により素子構造や命令体系の異なる異種のプロセッサ（ＦＰＧＡ等によるプロセッサ）を実装することが少なくなく、このような異種プロセッサ間では、共通のメモリ領域にマッピングされたプログラムを同じように理解することは不可能である。このような異種のプロセッサ間で処理の協調動作を得るためにはメッセージレベルでのハンドシェークが必要となり、その処理の遅さが問題となっていた。
【０００４】
この点、従来は、マルチプロセッサシステムを構成している複数のＣＰＵがそれぞれの処理するプログラムのサブルーチンについて予めＩＤ番号を付しておいて、プログラムの走行開始に際する初期設定時、ＣＰＵが主記憶の自領域内にサブルーチンと前記ＩＤ番号との対応テーブルを作成して、他のＣＰＵが主記憶の共通領域を用いてＩＤ番号を通知したとき、前記対応テーブルにより対応するサブルーチンのアドレスを求めて該サブルーチンを実行するプロセッサ間通信方式が知られている（特許文献１）。
【特許文献１】特開昭６１−２３９３５４
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、上記従来技術では、ＣＰＵがＩＤ番号（プログラム名に相当）により処理を依頼されるため、ＩＤ番号から対応する処理の実行アドレスを得るまでに時間を要し、処理を開始するまでに時間を要した。また、上記従来技術では、ＩＤ番号とプログラム名との間の関係が明瞭ではないため、処理の依頼側ＣＰＵでもＩＤ番号の抽出に時間を要したと考えられる。
【０００６】
本発明は上記従来技術の問題点に鑑みなされたもので、その目的とするところは、異種プロサッサが効率よく協調して分散処理を実行できるマルチプロセッサシステムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の第１の態様によるマルチプロセッサシステムは、異種のＣＰＵ間をバスで接続し、これらが協動して分散処理を行うマルチプロセッサシステムであって、自己のローカルメモリに格納されたメインプログラムを実行するマスタープロセッサと、自己のローカルメモリに格納された１又は２以上のサブプログラムを実行するスレーブプロセッサとを含み、システムの立上時に、前記スレーブプロセッサのローカルメモリにマッピングされた各サブプログラムのプログラム名と該プログラムへの分岐先アドレスとを対応付けたプログラムテーブルをマスタープロセッサのローカルメモリに格納し、マスタープロセッサ
は、メインプログラムの実行に伴い前記何れかのサブプログラムの実行が必要となったことにより、前記プログラムテーブルより当該サブプログラム名に対応する分岐先アドレスを抽出してこれをスレーブプロセッサのローカルメモリの所定のアドレスに書き込み、これを検出したスレーブプロセッサは、当該分岐先アドレスに処理を移すものである。
【０００８】
本発明においては、マスタープロセッサは実行を依頼したいサブプログラムのプログラム名（機能名等）により実行を依頼する構成により、メインプログラムの作成及び保守を容易に行える。また、マスタープロセッサがスレーブプロセッサのローカルメモリに実行を依頼したいサブプログラムの分岐先アドレスを書き込む構成により、スレーブプロセッサは依頼された命令を実行するレベルの極めた単純な処理で、依頼された処理の実行を速やかに開始できる。
【０００９】
また本発明の第２の態様では、マスタープロセッサは、自己のローカルメモリにプログラムテーブルが書き込まれた後に、メインプログラムの実行を開始する。従って、協動するプロセッサ間の処理の同期が安全に得られる。
【００１０】
また本発明の第３の態様では、スレーブプロセッサは、自己のローカルメモリの所定のアドレスの内容を定期的に監視することによりマスタープロセッサからの分岐先アドレスの書き込みを検出する。従って、簡単な処理により効率よい処理の同期が得られる。
【００１１】
また本発明の第４の態様では、異種ＣＰＵのバス間をバスインタフェースを介してクロス方向にアクセス可能に接続し、通常は各ＣＰＵが自己のローカルバスを占有すると共に、異種ＣＰＵからのバス使用要求に従ってバスの一時的使用を許可するものである。従って、両ＣＰＵは通常は略フルスペックで分散処理を実行できる。
【発明の効果】
【００１２】
以上述べた如く本発明によれば、異種プロセッサ間で命令レベルの同期をとることにより異種プロセッサ間協調動作の高速化が図れる。
【発明を実施するための最良の形態】
【００１３】
以下、添付図面に従って本発明に好適なる実施の形態を詳細に説明する。なお、全図を通して同一符号は同一又は相当部分を示すものとする。図１は実施の形態によるマルチプロセッサシステムのブロック図で、マスターＣＰＵ＃０とスレーブＣＰＵ＃１とが協動して分散処理を行う場合を示している。
【００１４】
図において、１１は例えば市販の汎用ＣＰＵ＃０により構成されたマスタープロセッサ（以後、マスターＣＰＵ＃０とも呼ぶ）、１２はマスターＣＰＵ＃０のローカルバス、１３はＣＰＵ＃０が使用する主メモリ（ＭＭ＃０）、１４はＣＰＵ＃０の割込制御部、１５はハードディスク等のディスク装置（ＤＳＫ）、２１はＦＰＧＡ（Field Programmable Gate Array）等により構成された異種ＣＰＵ＃１からなるスレーブプロセッサ（以後、スレーブＣＰＵ＃１とも呼ぶ）、２２はスレーブＣＰＵ＃１のローカルバス、２３はＣＰＵ＃１が使用する主メモリ（ＭＭ＃１）、２４はローカルバス１２，２２間の接続をインタフェースするバスインタフェース（ＢＩＦ）である。
【００１５】
バス１２はＣＰＵ＃０のローカルバスとして機能すると共に、ＣＰＵ＃１もバス１２を介してシステムに共通のリソースであるＤＳＫ１５等をアクセス可能であり、システムバスとしての機能も果たす。一方、ローカルバス２２は主にＣＰＵ＃１によって使用される。
【００１６】
ＢＩＦ２４は双方向性のバスインタフェースで、ＣＰＵ＃０からのバスアクセスをロー
カルバス２２の仕様に合わせ、またＣＰＵ＃１からのバスアクセスをローカルバス１２の仕様に合わせる。またＢＩＦ２４は、ＣＰＵ＃０からのバス要求ＢＲＱ０を受け付けると共に、ローカルバス２２を確保できた時は、ＣＰＵ＃０にバス許可ＢＡＫ０を返送し、これによりＣＰＵ＃０はバス２２を介してＭＭ＃１をアクセス可能となる。またＣＰＵ＃１からのバス要求ＢＲＱ１を受け付けると共に、ローカルバス１２を確保できた時は、ＣＰＵ＃１にバス許可ＢＡＫ１を返送し、これによりＣＰＵ＃１はバス１２を介してＭＭ＃０やＤＳＫ１５等をアクセス可能となる。
【００１７】
マスタープロセッサの主メモリＭＭ＃０は、マスターＣＰＵ＃０が実行する初期立上（Ｂｏｏｔ）プログラムと、マスターＣＰＵ＃０に固有の各種機能を実現するためのアプリケーションプログラム（メインルーチン）と、ＣＰＵ＃０がＣＰＵ＃１にサブ処理を依頼する際に参照するプログラムテーブル等を記憶している。
【００１８】
一方、スレーブプロセッサの主メモリＭＭ＃１は、スレーブＣＰＵ＃１が実行する初期立上（Ｂｏｏｔ）プログラムと、スレーブＣＰＵ＃１に固有の各種機能を実現するためのアプリケーションプログラム（サブルーチン）と、マスターＣＰＵ＃０が各種サブルーチンの開始アドレス（分岐アドレス）を指示するためのプログラム指示領域と、スレーブＣＰＵ＃１がプログラム指示領域の内容に従って対応するサブルーチンの実行に移るための処理を行うランデブープログラムと、前記各サブルーチンのコンパイル時に作成されたプログラムテーブルであって、各サブルーチンについてのマップ情報とを記憶している。
【００１９】
プログラムテーブルは、アセンブラレベルで認識可能な各サブルーチンや、命令や、オペランドの名前（ＦＦＴ，ＡＤＤ，ＭＵＬＴＩ，ＸＭＩＴ，ＢＵＦ１等）と、該ルーチン等に処理を移す（ジャンプ）させるための分岐先アドレス（相対アドレス）や、オペランドを指すアドレス情報とからなっている。このようなプログラムテーブルは、スレーブシステムの立上時にＤＳＫ１５のプログラムファイル等からＭＭ＃１のアドレス（０ｘξ）に吸い上げられ、更にＭＭ＃０の所定アドレス（０ｘλ）で始まる領域に転送され、記憶される。
【００２０】
一方、メインプログラムは、当初よりサブプログラムと共通概念の下で作成されており、スレーブプロセッサに実行させたい各サブルーチン名については、マスターとスレーブの双方で開発前に統一した名前を使用することが決められており、メインプログラム及びサブプログラムのコンパイル時点で同一（共通）の名前が使用されている。これにより、マスターＣＰＵ＃０は、あたかも自システム内のサブプログラムをコール（ＣＡＬＬ）する感覚で、スレーブＣＰＵ＃１に当該サブプログラムを実行させることが可能である。
【００２１】
図２は実施の形態によるマスター処理のフローチャートで、本システムに電源投入されると、この処理に入力する。ステップＳ１１ではメインサービスの提供に必要なアプリケーションプログラム（メインプログラム）をＤＳＫ１５からＭＭ＃０に吸い上げて各種の設定やレジスタを初期化するところの、所謂初期立上（booting）処理を行う。ステップＳ１２では、自己の初期立上処理が終了したことにより、スレーブＣＰＵ＃１にテーブル情報の転送指示を送り、ステップＳ１４では転送完了を待つ。
【００２２】
これを受けたスレーブＣＰＵ＃１は、この待ち区間に、システムバス１２を利用して自己がＭＭ＃１に保持しているプログラムテーブルをＭＭ＃０の所定アドレス（０ｘλ）より書き込む。一例のプログラムテーブルには、サブプログラムＰｒｏｇ（１）がＭＭ＃１の相対アドレス（０ｘβ）から展開されており、またサブプログラムＰｒｏｇ（２）がＭＭ＃１の相対アドレス（０ｘγ）から展開されていること、等が記録されている。これらの相対アドレスについては、スレーブプロセッサのアプリケーションプログラムがＭＭ＃１に展開された際の先頭アドレスが加えられ、絶対アドレスに変換される。
【００２３】
なお、上記マスター側のステップＳ１３にもハンドシェイク処理を設けることで、マスターＣＰＵ＃０が共通メモリを介して受け取ったプログラムテーブルのデータをＭＭ＃０の所定アドレス（０ｘλ）から書き込むように構成しても良い。
【００２４】
こうして、やがて転送完了になると、ステップＳ１５ではメインプログラムがこのテーブルを利用できるようシステムに登録し、ステップＳ１６ではメイン処理を起動する。メイン処理では、マスターＣＰＵ＃０が専らＭＭ＃０のアプリケーションプログラムを実行するが、途中でスレーブＣＰＵ＃１にサブ処理を実行させたい段階になると、例えばステップＳ１７では「ＣＡＬＬ依頼処理（サブ処理名）」を実行する。
【００２５】
これにより、処理はステップＳ２１以降の「依頼処理」に進み、この時、「依頼処理」からの戻り先アドレス（即ち、ステップＳ１７の次のアドレス）が不図示のメモリ又はレジスタに保持される。そして、ステップＳ２１では（当該サブ処理名）でプログラムテーブルを検索し、当該処理への分岐先アドレスを取得する。ステップＳ２２ではローカルバス２２のアクセス権を取得して前記取得した分岐先アドレスをＭＭ＃１のプログラム指示領域に書き込む。ステップＳ２３では割込制御部１４に対してスレーブＣＰＵ＃１からの処理完了割込の受付を可能にする。そして、メイン処理に戻り、続きのメイン処理を実行する。
【００２６】
図３は実施の形態によるスレーブ処理のフローチャートで、本システムに電源投入されると、上記マスター処理におけるのと同時にこの処理に入力する。ステップＳ３１ではサブ処理サービスの提供に必要なアプリケーションプログラム（サブプログラム等）をＤＳＫ１５からＭＭ＃１に吸い上げて各種の設定やレジスタを初期化するところの、所謂初期立上（booting）処理を行う。ステップＳ３２ではマスターＣＰＵ＃０からのプログラムテーブル転送指示を待ち、やがて、転送指示があると、ステップＳ３３ではローカルバス１２のアクセス権を取得してプログラムテーブルのＭＭ＃０への転送処理（この例では直接ＭＭ＃０に書き込む処理）を行う。
【００２７】
こうして、やがてプログラムテーブルの転送が終了すると、ステップＳ３４以降のランデブー処理を実行し、マスターＣＰＵ＃０からのサブ処理の実行依頼を待つ。即ち、ステップＳ３４ではプログラム指示領域の内容（分岐先アドレス）が更新されるのを待ち、やがて、更新されると、ステップＳ３５では当該分岐先アドレスを取得し、ステップＳ３６ではプログラム指示領域の内容をクリアする。ステップＳ３７では当該分岐先アドレスにジャンプする。
【００２８】
これにより、処理はステップＳ４１以降のサブ処理に移り、該ステップＳ４１では例えばサブ処理の先頭アドレスにこのサブ処理の戻り先アドレス（ステップＳ３７のジャンプ命令の次の命令のアドレス）を記録する。ステップＳ４２ではサブ処理の本体を実行し、やがて終了すると、ステップＳ４３では「ＲＥＴＵＲＮ」命令を実行し、これにより、処理は前記記録された戻り先アドレスに戻る。ステップＳ３８では、マスターＣＰＵ＃０にサブ処理完了の割込要求を行い、ステップＳ３４に戻る。なお、図示しないが、マスターＣＰＵ＃０ではこの割込を受け付けたことにより、処理完了による割込を不許可にし、続くメイン処理を実行する。こうして、マスターＣＰＵ＃０とスレーブＣＰＵ＃１とが協動して効率良い分散処理を行う。
【００２９】
なお、上記実施の形態では、スレーブＣＰＵ＃１に単にサブ処理（命令）を実行させる場合を述べたが、これに限らない。サブ処理の実行依頼と共に処理パラメータの指定や処理データのアドレス等を受け渡しすることで、スレーブＣＰＵ＃１に対してより複雑で有用な処理の実行を依頼できる。
【００３０】
また、上記実施の形態ではスレーブＣＰＵ＃１が一つの場合を述べたが、これに限らない。上記と同様のマスター−スレーブの関係で複数のスレーブＣＰＵ＃２，＃３等を並行して制御できることは言うまでもない。
【００３１】
また、上記一例のマルチプロセッサシステムのハードウェア構成（バス構造等）を示したが、これに限らない。マルチプロセッサシステムのハードウェア構成は本発明思想を逸脱しない範囲内で他にも様々に構成できる。
【００３２】
また、上記本発明に好適なる実施の形態を述べたが、本発明思想を逸脱しない範囲内で各部の構成、制御、処理及びこれらの組合せの様々な変更が行えることは言うまでも無い。
【図面の簡単な説明】
【００３３】
【図１】実施の形態によるマルチプロセッサシステムのブロック図である。
【図２】実施の形態によるマスター処理のフローチャートである。
【図３】実施の形態によるスレーブ処理のフローチャートである。
【符号の説明】
【００３４】
１１  マスターＣＰＵ＃０
１２  ローカルバス
１３  主メモリ（ＭＭ＃０）
１４  割込制御部
１５  ディスク装置（ＤＳＫ）
２１  スレーブＣＰＵ＃１
２２  ローカルバス
２３  主メモリ（ＭＭ＃１）
２４  バスインタフェース（ＢＩＦ）
【図１】
2008071093.tif 000003
【図２】
2008071093.tif 000004
【図３】
2008071093.tif 000005