(57)【要約】【課題】  インターコネクト内のスイッチのリンクの使用状況を確認するための情報を取得する。【解決手段】  プロセッサは、処理部と、処理部に接続され、メインメモリへのアクセスを制御するメモリコントローラと、処理部に接続され、他のプロセッサに接続される複数の第１のリンクへの通信を制御するインターコネクトを有する。インターコネクトは、複数の第１のリンクと自身のプロセッサへの第２のリンクとの間のスイッチングを行うネットワーク・スイッチと、複数の第１のリンク及び第２のリンクそれぞれの入力リンクと出力リンクにそれぞれ設けられ、少なくとも入力リンク及び出力リンクを通過するパケットのパケット数をカウントするリンクカウンタと、リンクカウンタのカウント値を、処理部を介さずに、メモリコントローラを介してメインメモリにストアする記録部を有する。【選択図】図２
2019191920.tif 000002
【特許請求の範囲】
【請求項１】
処理部と、
前記処理部に接続され、メインメモリへのアクセスを制御するメモリコントローラと、
前記処理部に接続され、他のプロセッサに接続される複数の第１のリンクへの通信を制御するインターコネクトを有し、
前記インターコネクトは、
前記複数の第１のリンクと自身のプロセッサへの第２のリンクとの間のスイッチングを行うネットワーク・スイッチと、
前記複数の第１のリンク及び第２のリンクそれぞれの入力リンクと出力リンクにそれぞれ設けられ、少なくとも前記入力リンク及び前記出力リンクを通過するパケットのパケット数をカウントするリンクカウンタと、
前記リンクカウンタのカウント値を、前記処理部を介さずに、前記メモリコントローラを介して前記メインメモリにストアする記録部を有する、プロセッサ。
【請求項２】
前記リンクカウンタは、
前記パケット数をカウントするパケット数カウンタに加えて、
前記パケットのデータ量をカウントするデータ量カウンタを有する、請求項１に記載のプロセッサ。
【請求項３】
前記インターコネクトは、更に、
前記メインメモリにストアするカウント値の前記リンクカウンタの種別を設定するカウンタ種別レジスタと、
前記メインメモリにストアするカウント値を前記リンクカウンタから取得する取得間隔を設定する取得間隔レジスタを有する、請求項２に記載のプロセッサ。
【請求項４】
前記インターコネクトは、更に、タイマーを有し、
前記記録部は、前記タイマーの時間に基づく前記取得間隔毎に、前記カウンタ種別レジスタに設定されているカウンタ種別に対応する前記リンクカウンタのカウント値と、前記タイマーのタイムスタンプとを取得し、取得した前記カウント値とタイムスタンプと前記メインメモリにストアする、請求項３に記載のプロセッサ。
【請求項５】
前記インターコネクトは、更に、
前記カウント値の取得開始を設定する取得開始フラグレジスタと、前記カウント値の取得終了を設定する取得終了フラグレジスタとを有し、
前記記録部は、前記処理部が前記取得開始フラグレジスタに取得開始フラグを設定したときから、前記取得終了フラグレジスタに取得終了フラグを設定したときまで、前記取得間隔で前記カウント値とタイムスタンプの取得と前記メインメモリへのストアを行う、請求項４に記載のプロセッサ。
【請求項６】
前記インターコネクトは、更に、
前記メインメモリ内の前記カウント値とタイムスタンプをストアするストア領域のアドレス範囲を設定するアドレス範囲レジスタを有し、
前記処理部は、前記アドレス範囲レジスタに前記メインメモリ内のアドレス範囲を設定する、請求項５に記載のプロセッサ。
【請求項７】
前記ネットワーク・スイッチは、
前記複数の第１のリンクと前記第２のリンクそれぞれの前記入力リンクに設けられた入力ポートと、前記出力リンクに設けられた出力ポートとを有し、
前記入力ポートは、前記入力ポートに入力されたパケットの送信先アドレスに基づく送信先リンクへ前記パケットを出力することを要求するパケット転送要求を発行し、
前記ネットワーク・スイッチは、更に、
前記複数の前記入力ポートから発行され、送信先リンクで互いに競合する複数の前記パケット転送要求のうち、いずれかのパケット転送要求を許可する調停部と、
前記許可したパケット転送要求に対応するパケットを前記入力リンクから前記送信先リンクの出力リンクに転送するようスイッチを制御するスイッチ制御部を有し、
前記入力ポートは、前記パケット転送要求が許可された場合、前記パケットを前記ネットワーク・スイッチに発行し、前記パケット転送要求が許可されなかった場合、前記パケットをバッファリングする、請求項１に記載のプロセッサ。
【請求項８】
前記処理部と前記インターコネクトが、同じチップ内に形成されている、請求項１に記載のプロセッサ。
【請求項９】
複数のプロセッサと、
前記複数のプロセッサ間の複数の軸方向にそれぞれ設けられ、前記複数のプロセッサ間の通信経路となる複数のリンクとを有し、
前記複数のプロセッサそれぞれは、
処理部と、
前記処理部に接続され、メインメモリへのアクセスを制御するメモリコントローラと、
前記処理部に接続され、他のプロセッサに接続される複数の第１のリンクへの通信を制御するインターコネクトを有し、
前記インターコネクトは、
前記複数の第１のリンクと自身のプロセッサへの第２のリンクとの間のスイッチングを行うネットワーク・スイッチと、
前記複数の第１のリンク及び第２のリンクそれぞれの入力リンクと出力リンクにそれぞれ設けられ、少なくとも前記入力リンク及び前記出力リンクを通過するパケットのパケット数をカウントするリンクカウンタと、
前記リンクカウンタのカウント値を、前記処理部を介さずに、前記メモリコントローラを介して前記メインメモリにストアする記録部を有する、情報処理装置。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，プロセッサ及び情報処理装置に関する。
【背景技術】
【０００２】
スーパーコンピュータなどの並列計算機は、複数のプロセッサをインターコネクトで相互に接続した構成を有し、複数のプロセッサがアプリケーションを並列に実行する。このアプリケーションの並列実行では、複数のプロセッサが、それぞれのインターコネクトにより、プロセッサ間を接続するノード間リンク（以下単にリンクと称する。）を経由して、相互に通信する。
【０００３】
具体的には、あるノードのプロセッサが、並列実行中の別のプロセッサの演算結果を通信により受信し、または、自身の演算結果を別のプロセッサに送信する。複数のプロセッサのノードをネットワークで接続した情報処理装置について、以下の特許文献１，２に記載がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１２／１２８２８２号
【特許文献２】特開２０００−２９３４９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
インターコネクトは、例えば、プロセッサによるデータの送信要求に応答して、送信パケットを生成し送信先のプロセッサに送信し、逆に他のプロセッサから受信した受信パケットを受信し受信パケットのデータをプロセッサに提供するネットワーク・インターフェース・デバイスを有する。更に、インターコネクトは、他のプロセッサにパケットを送信する複数のリンクと自身のプロセッサへのリンクを含む複数リンクの間でスイッチングを行うネットワーク・スイッチ・デバイスを有する。
【０００６】
並列計算機では、各ノードのプロセッサの処理のスループットに加えて、プロセッサ間通信のスループットが、全体のスループットに大きな影響を与える。例えば、並列処理されるアプリケーションの特定の処理において、特定のリンクに通信が集中して通信遅延が増大すると、並列計算機のアプリケーション実行性能の低下を招く。このような性能低下を改善するためには、アプリケーションのプログラムを修正する必要がある。
【０００７】
しかしながら、プログラムの修正を行うためには、どのリンクに通信の集中が発生したかを特定する必要がある。
【０００８】
そこで，本実施の形態の第1の側面の目的は，インターコネクト内のスイッチのリンクの使用状況を確認するための情報を取得するプロセッサ及び情報処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
本実施の形態の第１の側面は，
処理部と、前記処理部に接続され、メインメモリへのアクセスを制御するメモリコントローラと、前記処理部に接続され、他のプロセッサに接続される複数の第１のリンクへの通信を制御するインターコネクトを有し、前記インターコネクトは、前記複数の第１のリンクと自身のプロセッサへの第２のリンクとの間のスイッチングを行うネットワーク・スイッチと、前記複数の第１のリンク及び第２のリンクそれぞれの入力リンクと出力リンクにそれぞれ設けられ、少なくとも前記入力リンク及び前記出力リンクを通過するパケットのパケット数をカウントするリンクカウンタと、前記リンクカウンタのカウント値を、前記処理部を介さずに、前記メモリコントローラを介して前記メインメモリにストアする記録部を有する、プロセッサである。
【発明の効果】
【００１０】
第１の側面によれば，インターコネクト内のスイッチのリンクの使用状況を確認するための情報を取得することができる。
【図面の簡単な説明】
【００１１】
【図１】スーパーコンピュータなどの並列計算機の複数の構成例を示す図である。
【図２】本実施の形態におけるプロセッサの構成例を示す図である。
【図３】プロセッサSoCの構成要素を示す図である。
【図４】ネットワーク・スイッチNSW_D内のスイッチSWの構成を示す図である。
【図５】プロセッサノード間を転送される通信パケットのフォーマット例を示す図である。
【図６】スイッチSWのより詳細な構成例を示す図である。
【図７】スイッチSWの制御部の処理例を示すフローチャート図である。
【図８】スイッチSWの各リンクの入力ポートの処理例を示すフローチャート図である。
【図９】あるアプリケーションプログラムによるネットワーク・スイッチ内のデバイスレジスタの設定動作を示す図である。
【図１０】ネットワーク・スイッチ内の第２のDMA(DMA_2)によるプロファイリング動作を示すフローチャート図である。
【図１１】可視化情報の一つである各リンクのパケット数の例を示す図である。
【発明を実施するための形態】
【００１２】
図１は、スーパーコンピュータなどの並列計算機の複数の構成例を示す図である。図１に示されるとおり、複数のノードNODE000- NODE 111がノード間の多次元ネットワーク網により接続される。具体的には、並列計算機は、X軸方向、Y軸方向、Z軸方向に論理的に配置された複数のノードNODE000- NODE 111と、複数のノード間をX軸方向に接続するリンクと、Y軸方向に接続するリンクと、Z軸方向に接続するリンクとを有する。X軸方向は図中水平方向であり、Y軸方向は図中垂直方向であり、そして、Z軸方向は図中紙面奥に向かう方向である。各ノードNODEは、内部にプロセッサを有するプロセッサノード（または計算機ノード）である。
【００１３】
図１には、複数のノードのうちノードNODE000に接続されるリンクLNK0-LNK5が示され、他のノードのリンクは一部示され一部省略されている。
【００１４】
ノードNODE000には、X軸方向のリンクLNK0,LNK1と、Y軸方向のリンクLNK2,LNK3と、Z軸方向のリンクLNK4,LNK5が接続される。X軸方向の複数のリンクは、X軸上に配置された複数のノードNODE000,NODE100の間を接続する。X軸方向の複数のリンクは、例えば左右端のノード間を接続するリンク（図示せず）によりX軸方向の複数のノードをトーラス状に接続する。Y軸方向、Z軸方向も同様である。従って、図１の例は、３次元メッシュ／トーラスによるネットワーク網である。
【００１５】
例えば、リンクLNK0を伝搬してきたノードNODE100宛のパケットは、ノードNODE000内のネットワークルータ（図示せず）を経由してリンクLNK1に転送され、次のノードNODE100で内部のプロセッサに受信される。または、リンクLNK0を伝搬してきたノードNODE001宛のパケットは、ノードNODE000内のネットワークルータを経由してZ軸方向のリンクLNK5に転送され、次のノードNODE001で内部のプロセッサに受信される。
【００１６】
上記の通り、各ノード内に設けられたネットワークルータは、あるリンクを伝搬してきたパケットについて、その宛先ノードアドレスに基づき、同じ軸の隣接するリンクに転送するか異なる軸のリンクに転送するかを決定し、決定したリンク（送信先リンク）にパケットを転送する。また、各ノード内に設けられたネットワークルータは、あるリンクを伝搬してきたパケットの宛先ノードアドレスが自身のノードアドレスの場合、パケットを他のリンクに転送せず、自身のプロセッサにパケット内のデータを取得させる。
【００１７】
並列計算機は、あるアプリケーションを複数のプロセッサで並列に実行する。複数のプロセッサは、それぞれ、図１の各ノード内に内蔵される。複数のプロセッサが並列にアプリケーションを実行する場合、あるプロセッサは、他のプロセッサの演算結果をパケット通信で取得し、自身が実行する演算処理で取得した演算結果を参照する。また、あるプロセッサは、自身の演算結果を他の特定のプロセッサにパケット通信で送信する。
【００１８】
複数軸のリンクで接続された複数のノードは、所定のパケット転送ルールに基づいて、伝搬してきたパケットの転送先リンク（送信先リンク）を決定し、パケットを転送先リンクに転送する。複数のノードがそれぞれパケットを転送先リンクに転送することで、ノード間通信されるパケットが送信元ノードから送信先ノードに途中の転送ノードを経由して届けられる。
【００１９】
図１に示した各リンクは、後述するとおり、あるノードに対して入力リンクと出力リンクを有する双方向リンクである。従って、各ノードは、接続される複数のリンクそれぞれの入力リンクでパケットを受信し、出力リンクでパケットを送信する。そのため、図１に示した複数ノードの例では、各ノードに（例えばノードNODE001に）X軸方向の２つのリンクLNK0,LNK1、Y軸方向の２つのリンクLNK2,LNK3、Z軸方向の２つのリンクLNK4,LNK5が接続される。
【００２０】
但し、X,Y,Z軸方向のリンクは一例であり、さらに別の軸方向のリンクを有してもよい。また、上記のX,Y,Z軸は論理的な軸であっても良い。
【００２１】
図２は、本実施の形態におけるプロセッサの構成例を示す図である。プロセッサSoC(System on Chip)またはプロセッサチップPR_SoCは、演算処理回路を内蔵する処理部であるプロセッサPRCと、メモリコントローラMCとを内蔵し、更に、プロセッサPRCに一対一に設けられるインターコネクトINT_CNCTを内蔵する。プロセッサPRCと、メモリコントローラMCとインターコネクトINT_CNCTはホストバスHBを介して接続される。メモリコントローラMCは、プロセッサSoCの外部に設けられるメインメモリM_MEMへのアクセスを制御する。
【００２２】
インターコネクトINT_CNCTは、ネットワーク・インタフェース・デバイスNI_Dと、ネットワーク・スイッチ・デバイスNSW_Dとを有する。ネットワーク・インタフェース・デバイス（以下簡略化してネットワーク・インタフェースと称する）NI_Dは、メインメモリ内のデータをネットワーク・スイッチNSW_Dに対して送受信する。ネットワーク・インタフェースは、処理部であるプロセッサPRCが発行するコマンドに応答して、他のプロセッサに送信するパケットを生成し、他のプロセッサから受信したパケットのデータをメインメモリに格納してプロセッサPRCに提供する。
【００２３】
ネットワーク・スイッチ・デバイス（以下簡略化してネットワーク・スイッチと称する）NSW_Dは、他のプロセッサノードに接続される複数の第１のリンクLNK0-LNK5と、自身のプロセッサへの第２のリンクLNK6との間のスイッチングを行う。
【００２４】
ネットワーク・スイッチNSW_Dは、他の複数のプロセッサSoCとリンクを介して相互に接続し、他のプロセッサからリンクを伝搬してきたパケットを他のリンクまたは自身のリンクに転送する。ネットワーク・スイッチは、他のプロセッサノードに接続された複数の第１のリンクLNK0-LNK5と、自身のネットワーク・インタフェースとの間の第２のリンクLNK6との間のスイッチングを行うスイッチ（図示せず）を有する。このスイッチは、あるリンクから入力されたパケットの送信先アドレスに基づいて、パケットを出力する送信先リンクを決定し、入力されたパケットが送信先リンクに転送されるようにスイッチング制御をする。具体的な動作は後で述べる。
【００２５】
図３は、プロセッサSoCの構成要素を示す図である。図３には、プロセッサSoCが内蔵するインターコネクトINT_CNCTのネットワーク・インタフェースNI_Dとネットワーク・スイッチNSW_Dの構成例が示される。図３には、図２のプロセッサSoCの構成要素である、演算処理部であるプロセッサPRCと、メモリコントローラMCも示される。
【００２６】
ネットワーク・インタフェースNI_Dは、ネットワーク・スイッチNSW_Dが受信したパケットを受信する受信部RXと、プロセッサPRCのコマンドに応答して送信パケットを生成し、第２のリンクLNK6を介してネットワーク・スイッチNSW_Dに出力する送信部TXと、メインメモリM_MEMにプロセッサPRCを介さずにアクセスする第１のDMA調停部または制御部(Direct Memory Access arbiter or controller)DMA_1を有する。ネットワーク・インタフェースNI_D内の第１のDMA制御部 DMA_1は、受信部RXからの要求に応答して、受信パケット内のデータをメインメモリM_MEMに書き込み、逆に、プロセッサの送信コマンドに応答して、メインメモリ内のデータを読み出して送信部TXに提供する。
【００２７】
一方、ネットワーク・スイッチNSW_Dは、他のプロセッサのインターコネクトに接続された複数の第１のリンクLNK0-LNK5と、自身のネットワーク・インタフェースに接続された第２のリンクLNK6との間を接続するスイッチSWを有する。スイッチSWと複数の第１のリンクLNK0-LNK5の間には、それぞれ、リンクコントローラLNK_CON_0〜LNK_CON_5が設けられる。リンクコントローラは、第１のリンクLNK0-LNK5から転送されてきた受信パケットを一旦受信バッファに蓄積しスイッチSWに受信パケットを入力し、スイッチSWから出力される送信パケットを送信先リンクに出力する。リンクコントローラは、出力した送信パケットが送信先ノードに転送されない場合、送信パケットの再出力を行う。
【００２８】
さらに、ネットワーク・スイッチNSW_Dは、複数の第１のリンクLNK0-LNK5それぞれに設けられたリンクカウンタCTR0-CTR5を有する。また、ネットワーク・インタフェースNI_Dは、第２のリンクLNK6に設けられたリンクカウンタCTR6を有する。このリンクカウンタCTR6は、ネットワーク・スイッチNSW_D内に設けられても良い。
【００２９】
前述したとおり、複数の第１のリンクLNK0-LNK5と第２のリンクLNK6は、それぞれ入力リンクと出力リンクを有する。従って、上記の各リンクカウンタCTR0-CTR5、CTR6は、各リンクLNK0-LNK5、LNK6の入力リンク側のリンクカウンタと出力リンク側のリンクカウンタを有する。
【００３０】
リンクカウンタは、様々な可視化情報をカウントする。例えば、可視化情報は、各リンクの入力リンクと出力リンクそれぞれを通過するパケット数や、各リンクの入力リンクと出力リンクそれぞれを通過するパケットのデータ量などである。
【００３１】
例えば、複数の第１のリンクLNK0-LNK5のリンクカウンタCTR0-CTR5は、受信パケットと送信パケットを分析するリンクコントローラLNK_CONにより、パケット数のカウント及びパケットのデータ量の加算を制御される。同様に、第２のリンクLNK6のリンクカウンタCTR6は、受信パケットを受信する受信部RXと送信パケットを生成してスイッチSWに出力する送信部TXにより、パケット数のカウント及びパケットのデータ量の加算を制御される。
【００３２】
また、ネットワーク・スイッチNSW_Dは、リンクカウンタCTR0〜CTR6のうち所望のカウント値を所定の取得間隔で取得し、メインメモリM_MEM内の可視化情報記録領域内にストアする第２のDMA調停部または制御部 DMA_2を有する。第２のDMA制御部DMA_2は、メインメモリへのダイレクトメモリアクセス制御を行う回路（図示せず）と、所望のリンクカウンタから取得したカウント値を一時的に蓄積するカウント値バッファCNT_BUFを有する。
【００３３】
そして、ネットワーク・スイッチNSW_Dは、リンクカウンタのカウント値の取得方法を設定する種々のデバイスレジスタ１１−１５と、タイマーカウンタ１０とを有する。タイマーカウンタ１０は、ネットワーク・スイッチ内に設けられたタイマーであり、プロセッサSoCの初期化とともにカウントアップを開始するフリーランのタイマーカウンタである。但し、タイマーカウンタ１０は、必ずしもネットワーク・スイッチ内に設けられる必要はなく、ネットワーク・インタフェース内に設けられてもよく、または、インターコネクトINT_CNCTの外部のプロセッサSoC内に設けられても良い。更に、プロセッサSoCの外部に設けられ、プロセッサPRCが参照するタイマーでも良い。
【００３４】
デバイスレジスタは、リンクカウンタのカウント値をストアするメインメモリ内のストア領域の開始アドレス及び終了アドレスを設定する開始アドレス・終了アドレスレジスタ１１を有する。開始アドレス・終了アドレスレジスタ１１は、リンクカウンタのカウント値をストアするメインメモリ内のストア領域を特定できれば良いので、例えば開始アドレスと領域サイズが設定されても良い。
【００３５】
また、デバイスレジスタは、リンクカウンタのカウント値を取得する時間間隔が設定される取得間隔レジスタ１２と、カウント値を取得するリンクカウンタの種別が設定されるカウンタ種別レジスタ１３とを有する。カウンタ種別レジスタには、可視化情報であるカウント値を取得するリンクカウンタを特定するデータなどが設定される。
【００３６】
上記では、リンクカウンタの種別として、パケット数カウンタとデータ数カウンタを一例として説明したが、それ以外の可視化情報、例えば他のプロセッサのデータを読み出すリードパケット数や、他のプロセッサのメインメモリにデータを書き込むライトパケット数など、をカウントするカウンタを設けても良い。
【００３７】
さらに、デバイスレジスタは、リンクカウンタのカウント値の取得の開始を指示する取得開始フラグレジスタ１４と、取得の終了を指示する取得終了フラグレジスタ１５とを有する。
【００３８】
上記のデバイスレジスタには、処理部であるプロセッサPRCが、実行するアプリケーション内の設定命令に基づいて、所望の設定値を設定する。デバイスレジスタの具体的な設定等については後で詳述する。
【００３９】
上記の通り、本実施の形態のプロセッサSoC PR_SoCは、プロセッサPRCと同じチップ内に、インターコネクトINT_CNCTを内蔵する。そして、プロセッサSoCは、インターコネクト内のネットワーク・スイッチのリンク使用率を可視化するための情報（可視化情報またはリンク通信状態可視化情報）である、各リンクを通過するパケット数やデータ量をカウントするリンクカウンタを有する。そして、第２のDMA制御部DMA_2が、プロファイルしたいリンクカウンタのカウント値を、所望のタイミングで且つ所望の取得間隔で採取し、カウント値バッファCNT_BUFに一時的に蓄積する。さらに、第２のDMA制御部が、プロセッサPRCを介することなく、カウント値バッファに採取したカウント値を採取時のタイマーカウンタのタイムスタンプと共に、ダイレクトメモリアクセスによりメインメモリM_MEMにストアする。
【００４０】
第２のDMA制御部DMA_2は、採取したカウント値をプロセッサPRCを介することなくダイレクトメモリアクセスによりメインメモリにストアする。従って、可視化情報のプロファイリングが、プロセッサPRCによるアプリケーションの実行スループットに影響を与えることがなく、インターコネクトによる送受信パケットの送受信タイミングへの影響の問題もない。
【００４１】
並列計算機は、大量のデータの計算を実行するので、メインメモリ内の可視化情報をストアする領域の容量を所定容量以下に抑える必要がある。そこで、プロセッサは、実行するアプリケーションの初期化命令で、メインメモリ内の可視化情報のストア領域を特定するメインメモリ内の開始アドレスと終了アドレスを、開始アドレス／終了アドレスレジスタ１１に設定する。この設定値によりメインメモリ内の可視化情報のストア領域を所定容量以下に抑える。
【００４２】
その場合、可視化情報ストア領域をリングメモリとして使用することが好ましい。可視化情報であるリンクカウンタのカウント値は、採取した時間を示すタイムスタンプと共にメインメモリ内にストアされるので、リングメモリ内の可視化情報の時間軸の前後関係をタイムスタンプにより判別することができる。
【００４３】
さらに、プロセッサPRCは、実行するアプリケーションの取得開始フラグ設定命令や取得終了フラグ設定命令に応答して、取得開始フラグレジスタ１４，取得終了フラグレジスタ１５に取得開始フラグ、取得終了フラグを設定する。プロセッサPRCは、この取得開始フラグまたは取得終了フラグを設定するときに、タイマーカウンタ１０のタイムスタンプを取得する。これにより、プロセッサは、プロファイルされたリンクカウンタのカウント値のタイムスタンプとの差分に基づいて、採取したカウント値が並列計算のどの処理に対応するかを識別する。
【００４４】
また、プロセッサPRCは、実行するアプリケーションの初期化命令に応答して、採取する可視化情報のリンクカウンタの種別をカウンタ種別レジスタ１３に設定する。これにより、第２のDMA制御部 DMA_2は、所望の可視化情報に対応するリンクカウンタのカウント値をプロファイルする。
【００４５】
第２のDMA制御部は、リンクカウンタのカウント値とタイマーデバイスのカウント値採取時のタイムスタンプに加えて、カウンタ種別IDをメインメモリに書き込んでも良い。但し、初期化処理でカウント値を取得するカウンタ種別を特定するデータが設定される。従って、第２のDMA制御部が、採取したカウント値を、この設定されたカウンタ種別の順にカウント値バッファCNT_BUF内に格納し、タイムスタンプを付加してメインメモリにストアすれば、メインメモリに取得するカウント値のカウンタ種別IDをストアする必要はない。
【００４６】
図４は、ネットワーク・スイッチNSW_D内のスイッチSWの構成を示す図である。スイッチSWは、６つの第１のリンクLNK0-LNK5と１つの第２のリンクLNK6間をスイッチングするクロスバースイッチ２０と、クロスバースイッチ２０のスイッチングを制御する制御部２１とを有する。各リンクは、前述したとおり、入力リンクと出力リンクを有する双方向リンクである。
【００４７】
制御部２１は、後述するとおり、各リンクの入力リンクから入力された入力パケットの出力先リンク（送信先リンク）を決定し、同じ出力リンクで競合する入力パケット間の調停を行って、いずれかのリンクの入力パケットに出力許可を与える。更に、制御部２１は、その入力パケットが送信先リンクにスイッチングされるようにクロスバースイッチのスイッチングを制御する。
【００４８】
図５は、プロセッサノード間を転送される通信パケットのフォーマット例を示す図である。通信パケットPCKは、ヘッダ情報として、送信先ノードアドレス３０、送信元ノードアドレス３１、データ長３２、ライトかリードかのパケット種類３３を格納し、更に、ペイロードとしてライトまたはリードなどのデータ３４を格納する。
【００４９】
図６は、スイッチSWのより詳細な構成例を示す図である。スイッチSWは、クロスバースイッチ２０に、第１の双方向リンクLNK0-LNK5及び第２の双方向リンクLNK6が接続される。図示されるとおり、例えば、双方向のリンクLNK0は、クロスバースイッチ２０に入力パケットが転送される入力リンクIN_LNK0と、出力パケットが出力される出力リンクOUT_LNK0とを有する。また、入力リンクIN_LNK0は入力ポートIN_PORTに接続され、出力リンクOUT_LNK0は出力ポートOUT_PORTに接続される。他の双方向リンクLNK1-LNK5も同様に入力リンクと出力リンクを有し、それらに入力ポートと出力ポートとがそれぞれ接続される。第２の双方向リンクLNK6も同様の構成を有する。
【００５０】
スイッチSW内の制御部２１は、各リンクLNK0-LNK5及びLNK6の入力ポートから発行される特定の送信先リンクへの転送要求を調停する調停部２１１と、調停部が決定した転送要求に対応する入力ポートと送信先リンクの出力ポートの間にクロスバースイッチ２０がスイッチングされるよう制御するスイッチング制御部２１２とを有する。各リンクの入力ポートIN_PORTと制御部２１の処理の一例について以下説明する。
【００５１】
図７は、スイッチSWの制御部の処理例を示すフローチャート図である。図８は、スイッチSWの各リンクの入力ポートの処理例を示すフローチャート図である。制御部と入力ポートの処理の理解を容易にするために、図７，図８を参照してスイッチSWでのパケットのスイッチングについて説明する。
【００５２】
まず、図８において、ある入力ポートIN_PORTは、入力リンクを伝搬してきた入力パケットを受信すると（S21）、パケット転送が停止中でなければ（S22のNO）、入力パケットの送信先アドレスを抽出する（S23）。そして、入力ポートは、送信先アドレスを含む転送要求を調停部２１１に送信する（S24）。
【００５３】
次に、図７において、スイッチの制御部２１内の調停部２１１は、上記の送信先リンクへの転送要求を受信し（S10）、転送要求に含められた送信先ノードアドレスに基づいて、パケットの送信先リンクを決定する（S11）。送信先リンクの決定では、制御部は、多次元ネットワーク網のパケット転送ルールに基づいて、入力パケットの送信先ノードアドレスに転送するために出力すべき送信先リンクを決定する。
【００５４】
次に、制御部は、複数の入力ポートからそれぞれ受信した複数の送信先リンクへの転送要求が競合する場合、競合する送信先リンクへの複数の転送要求を調停し、許可する転送要求を決定する（S12）。そして、調停部２１１は、複数の入力ポートに調停結果（許可または不許可）を通知する（S13）。それと共に、スイッチング制御部２１２は、クロスバースイッチ２０をスイッチング制御し、許可する転送要求のパケットを要求された送信先リンクの出力リンクから出力させる（S14）。
【００５５】
一方、図８に戻り、各入力ポートは、送信先リンクへの転送要求が許可された場合（S25のYES）、入力されたパケットをクロスバースイッチ２０に入力する（S26）。この結果、入力されたパケットは、入力ポートから送信先リンクの出力リンクに出力または転送される。
【００５６】
一方、各入力ポートは、送信先リンクへの転送要求が許可されなかった場合（S25のNO）、入力されたパケットを入力ポート内のバッファに一時的に蓄積する（S27）。そのため、調停により許可されなかったパケットは、送信先リンクへ転送されずに入力ポート内で滞留する。
【００５７】
入力ポート内のバッファは容量に限りがあるので、このバッファの残量が基準値TH1未満になると（S28のYES）、入力ポートは入力されたパケットの転送を停止する（S30）。
【００５８】
一方、各入力ポートは、パケットを受信し（S21）、パケット転送が停止中の場合（S22のYES）、例えば、受信した入力パケットの受付を拒否する（S31）。そして、入力ポートは、バッファ内のパケットの送信先ノードアドレスを抽出し（S23）、送信先ノードアドレスを含む転送要求を調停部に送信する（S24）。この転送要求が許可されれば（S25）、バッファ内のパケットをクロスバースイッチ２０に入力する（S26）。この結果、バッファ内のパケットが送信先リンクの出力リンクに転送される。そして、入力ポート内のバッファの残量が基準値TH1以上に回復すると（S28のNO）、パケット転送を再開し、入力パケットの受付を再開する。
【００５９】
以下、プロセッサSoCによるネットワーク・スイッチのプロファイリング動作について説明する。
【００６０】
図９は、あるアプリケーションプログラムによるネットワーク・スイッチ内のデバイスレジスタの設定動作を示す図である。アプリケーションプログラムには、ネットワーク・スイッチ内のレジスタの初期化命令S1と、命令列_1（S2）と、リンクカウンタのカウント値の取得開始命令S3と、命令列_2（S4）と、リンクカウンタのカウント値の取得終了命令（S5）と、命令列_3（S6）を有する。プログラマが希望するプロファイリングに基づいて、初期化命令S1と、取得開始命令S3と取得終了命令S5が、アプリケーションプログラムの命令列内の所定の位置に記述される。
【００６１】
アプリケーションプログラムを実行するプロセッサPRCは、レジスタの初期化命令S1を実行して、メインメモリ内の可視化情報をストアする領域の開始アドレスと終了アドレスを、開始アドレス・終了アドレスレジスタ１１に設定する。更に、プロセッサPRCは、レジスタの初期化命令S1を実行して、可視化情報の取得間隔を取得間隔レジスタ１２に設定し、更に、取得対象のカウンタ種別をカウンタ種別レジスタ１３に設定する。ここで、取得対象のカウンタ種別のデータは、例えば、リンクカウンタの総数に対応するビット長を有し、カウント値取得対象のリンクカウンタに対応するビットを「１」に取得対象でないリンクカウンタに対応するビットを「０」にしたデータである。
【００６２】
アプリケーションプログラムを実行するプロセッサPRCは、命令列_1（S2）を実行した後、リンクカウンタのカウント値の取得開始命令S3を実行し、取得開始フラグレジスタ１４を開始フラグを意味する「１」に設定する。プロセッサPRCは、取得開始フラグレジスタ１４に開始フラグを設定した際に、ネットワーク・スイッチ内のタイマーカウンタ１０のタイムスタンプを読み出してメインメモリ内にストアする。
【００６３】
この取得開始フラグレジスタ１４に開始フラグが設定されると、ネットワーク・スイッチ内の第２のDMA制御部（DMA_2）が、取得間隔毎に、カウンタ種別で取得対象に設定されたリンクカウンタのカウント値を採取し、カウント値バッファCNT_BUF内に、カウンタ種別レジスタに設定した取得対象カウンタの順番で、採取したカウント値を格納する。同時に、第２のDMA制御部が、取得時のタイマーカウンタ１０のタイムスタンプも合わせてカウント値バッファに格納する。そして、第２のDMA制御部(DMA_2)は、図３に示した例のように、カウント値バッファCNT_BUF内のカウント値CNT0,CNT2,CNT4とタイムスタンプT_stpを、メモリコントローラMCを介してメインメモリM_MEMにストア（書き込む）する。このメインメモリへのストアは、プロセッサPRCの制御を介さず、ダイレクトメモリアクセスにより実行される。
【００６４】
第２のDMA制御部(DMA_2)は、上記のリンクカウンタのカウント値の取得とメインメモリ内へのストアを、プロセッサPRCが命令列_2（S4）を実行中、繰り返す。ネットワーク・スイッチの第２のDMAが、可視化情報であるカウント値の取得とメインメモリへのストアを、プロセッサPRCを介さずに行うので、プロセッサPRCによる命令列_2(S4)の実行のスループットの低下や、転送パケットの遅延などを回避できる。
【００６５】
やがて、アプリケーションプログラムを実行するプロセッサPRCは、命令列_2（S4）を実行した後、リンクカウンタのカウント値の取得終了命令S5を実行し、取得終了フラグレジスタ１５を終了フラグを意味する「１」に設定する。この設定に応答して、第２のDMA制御部(DMA_2)は、カウント値の取得とメインメモリへのストア動作を終了する。その後、プロセッサPRCは命令列_3（S6）を実行する。
【００６６】
図１０は、ネットワーク・スイッチ内の第２のDMA(DMA_2)によるプロファイリング動作を示すフローチャート図である。上記と部分的に繰り返しになるが、図１０を参照して、ネットワーク・スイッチ内の第２のDMAによるプロファイリング動作を説明する。
【００６７】
まず、プロセッサPRCが、初期化処理で、メインメモリ内の可視化情報をストアする領域の開始アドレスと終了アドレスを、開始アドレス・終了アドレスレジスタ１１に、取得間隔を取得間隔レジスタ１２に、そして、カウント値を取得するカウンタ種別データをカウンタ種別レジスタ１３に、それぞれ設定する（S41）。
【００６８】
そして、取得開始フラグレジスタ１４に取得開始フラグが設定されると（S42のYES）、第２のDMA制御部は、取得間隔レジスタに設定された取得間隔の時間が経過するたびに（S44のYES）、カウンタ種別レジスタに設定された取得対象カウンタのカウント値をカウント値バッファCNT_BUFに格納する。更に、第２のDMAは、複数のカウント値の取得時刻を示すタイマーカウンタ１０のタイムスタンプをカウント値バッファCNT_BUFに格納する（S45）。さらに、第２のDMA制御部は、カウントバッファ内の取得したカウント値とタイムスタンプを、メモリコントローラ経由でメインメモリにDMAでストアする（S46）。プロセッサPRCは、取得開始フラグを設定するときに、ネットワーク・スイッチ内のタイマーカウンタ１０のタイムスタンプを読み出し、メインメモリ内にストアする（S43）。
【００６９】
第２のDMA制御部は、上記のS44-S46を、取得終了フラグレジスタ１５に取得終了フラグが設定されるまで（S46のNOの間）、繰り返す。やがて、プロセッサPRCが、取得終了フラグレジスタ１５に取得終了フラグを設定すると（S46のYES）、上記のS44-S46を終了する。プロセッサPRCは、取得終了フラグを設定したときのタイマーカウンタのタイムスタンプを読み出してメモリにストアしても良い。
【００７０】
図１１は、可視化情報の一つである各リンクのパケット数の例を示す図である。図１１には、複数の第１のリンクLNK0-LNK5と、第２のリンクLNK6との間のスイッチングを行うネットワーク・スイッチ内のスイッチSWが示される。破線は、パケットが、スイッチングされたスイッチを経由して、あるリンクから他のリンクに転送される経路を示す。ここの示された例では、第１のリンクLNK1-LNK5から入力されたパケットが全て第１のリンクLNK0に転送され、第２のリンクLNK6から入力されたパケットが全て同じリンクLNK6に転送されている。
【００７１】
前述したとおり、各リンクは、入力リンクと出力リンクを有し、入力リンクと出力リンクにそれぞれパケット数をカウントするリンクカウンタが設けられている。図１１には、各リンクLNK0-LNK6の入力リンクのリンクカウンタのカウント値（パケット数）CNT_INと、出力リンクのリンクカウンタのカウント値（パケット数）CNT_OUTの例を示す表が示される。
【００７２】
この表によれば、リンクLNK1-LNK5の入力リンクのリンクカウンタのカウント数CNT_INは、それぞれ２５パケット／取得間隔、リンクLNK0の出力リンクのカウント数CNT_OUTは１２５パケット／取得間隔である。また、リンクLNK6の入力リンクのカウント数CNT_INは１００パケット／取得間隔であり、出力リンクのカウント数CNT_OUTも１００パケット／取得間隔である。
【００７３】
本実施の形態のプロセッサSoCでは、アプリケーションプログラムを実行中に、予め設定したタイミングから予め設定した取得間隔で、ネットワーク・スイッチ内の第２DMAが、スイッチに接続された各リンクの入力リンク及び出力リンクに設けたリンクカンタによりカウントされたパケット数やデータ量を、リンクカウンタから採取する。そして、第２のDMAが、採取したカウント値と採取したときのタイムスタンプとを、ダイレクトメモリアクセスによりメインメモリにストアする。
【００７４】
図１１の表には、ある所定間隔でのリンクカウンタのカウント値の例が示される。この所定間隔は、例えば数msecという人間により変化を可視化できる粒度の粗い時間である。
【００７５】
そこで、スイッチのリンク使用率を可視化するための一例として、複数のノードとノード間のリンクの画像において、各リンクの色を、各時間間隔でのパケット数またはデータ量の数の大小に対応した色、例えば数が多い場合は赤、中程度の場合は黄色、少ない場合は緑、で表示する。そして、時間の経過に伴い各時間間隔でリンクの色を変化させて前述の画像を表示することで、人間に対して、スイッチのリンクの使用率の変化を可視化することができる。
【００７６】
したがって、本実施の形態では、ある開発中のアプリケーションプログラムを実行させて、リンクカウンタのカウント値をタイムスタンプと共に取得し、上記した各リンクのパケット数やデータ量を可視化表示する。それにより、開発者は、アプリケーションプログラムの実行時のスイッチのリンク使用率の傾向を得ることができ、その後のアプリケーションの改良に利用できる。
【符号の説明】
【００７７】
NODE000-NODE111：ノード、プロセッサノード、計算機ノード
PR_SoC：プロセッサ、プロセッサチップ
PRC：処理部、プロセッサ回路
MC：メモリコントローラ
HB：ホストバス
INT_CNCT：インターコネクト
NI_D：ネットワーク・インタフェース・デバイス
NSW_D：ネットワーク・スイッチ・デバイス
LNK0-LNK5：第１のリンク
LINK6：第２のリンク
M_MEM：メインメモリ
SW：スイッチ
LNK_CON：リンクコントローラ
CTR0-CTR6：リンクカウンタ
DMA_2：第２のDMA制御部
CNT_BUF：カウント値バッファ
CNT#：カウント値
T_stp：タイムスタンプ
１０：タイマーカウンタ
１１：開始アドレス／終了アドレスレジスタ
１２：取得間隔レジスタ
１３：カウンタ種別レジスタ
１４：取得開始フラグレジスタ
１５：取得終了フラグレジスタ
【図１】
2019191920.tif 000003
【図２】
2019191920.tif 000004
【図３】
2019191920.tif 000005
【図４】
2019191920.tif 000006
【図５】
2019191920.tif 000007
【図６】
2019191920.tif 000008
【図７】
2019191920.tif 000009
【図８】
2019191920.tif 000010
【図９】
2019191920.tif 000011
【図１０】
2019191920.tif 000012
【図１１】
2019191920.tif 000013