JP2010277371A - マルチスレッドプロセッサ、コンパイラおよびオペレーティングシステム - Google Patents

マルチスレッドプロセッサ、コンパイラおよびオペレーティングシステム Download PDF

Info

Publication number
JP2010277371A
JP2010277371A JP2009129607A JP2009129607A JP2010277371A JP 2010277371 A JP2010277371 A JP 2010277371A JP 2009129607 A JP2009129607 A JP 2009129607A JP 2009129607 A JP2009129607 A JP 2009129607A JP 2010277371 A JP2010277371 A JP 2010277371A
Authority
JP
Japan
Prior art keywords
instruction
thread
unit
execution
instructions
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.)
Granted
Application number
JP2009129607A
Other languages
English (en)
Other versions
JP5463076B2 (ja
Inventor
Yoshihiro Koga
義宏 古賀
Takehito Heiji
岳人 瓶子
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Original Assignee
Panasonic Corp
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 Panasonic Corp filed Critical Panasonic Corp
Priority to JP2009129607A priority Critical patent/JP5463076B2/ja
Priority to CN201310647848.9A priority patent/CN103631567A/zh
Priority to PCT/JP2010/001931 priority patent/WO2010137220A1/ja
Priority to CN201080009472.3A priority patent/CN102334094B/zh
Publication of JP2010277371A publication Critical patent/JP2010277371A/ja
Priority to US13/186,818 priority patent/US20110276787A1/en
Application granted granted Critical
Publication of JP5463076B2 publication Critical patent/JP5463076B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

【課題】スレッドの実行効率が高いマルチスレッドプロセッサを提供する。
【解決手段】複数のスレッドの命令を並列実行するマルチスレッドプロセッサ1であって、各々、命令を実行する複数の演算器からなる演算器群119と、スレッド毎に、当該スレッドに含まれる命令を、複数の演算器で同時実行可能な命令からなるグループにグループ化する第1命令グループ化部108〜第3命令グループ化部110と、複数のスレッドの命令の実行頻度を制御することにより、マルチスレッドプロセッサ1の実行サイクル毎に、複数のスレッドの中から、複数の演算器に発行される命令を含むスレッドを選択するスレッド選択部114と、マルチスレッドプロセッサ1の実行サイクル毎に、スレッド選択部114で選択されたスレッドに含まれる命令のうち、グループ化されたグループの命令を、複数の演算器に発行する命令発行制御部115とを備える。
【選択図】図1

Description

本発明は、複数のスレッドを並列実行するマルチスレッドプロセッサ等に関し、特に、各スレッドに含まれる命令の実行タイミングを制御する事により、各スレッドの実行効率を向上させるマルチスレッドプロセッサ等に関する。
近年、AV(Audio/Visual)処理の分野では、新たなコーデックや新規格等が継続的に発表され、ソフトウェアによるAV処理ニーズは高まる一方である。そのため、AVシステム等で求められるプロセッサ性能も飛躍的に高まっている。また、実行されるソフトウェアがマルチタスク化するのに合わせ、複数のスレッドを同時実行するマルチスレッディング技術を用いたマルチスレッドプロセッサが数多く開発されている。
従来のマルチスレッドプロセッサにおいて、プロセッサの実行サイクル毎に実行するスレッドを切り替える細粒度マルチスレッディング(Fine-Grained Multithreading)(例えば、特許文献1)や、Intel社のハイパースレッディング・テクノロジーに代表されるような実行サイクル内で同時に複数のスレッドを実行する同時マルチスレッディング(Simultaneous Multithreading; SMT)(例えば、非特許文献1)などがよく知られている。
特開2008−123045号公報(第6図等)
Intel社ハイパースレッディング・テクノロジー[平成21年2月16日検索]、インターネット<URL:http://www.intel.com/jp/technology/hyperthread/>
しかしながら、従来のマルチスレッドプロセッサにおいては、スレッド間で演算資源が競合した場合は、ユーザ指定やプロセッサ実装上のスレッドの優先度において、劣勢となる他のスレッドの実行効率が局所的に著しく落ちることがある。
また、各スレッドの命令数と演算器資源数のバランスが悪い場合には、マルチスレッド動作で期待していたような実行効率が得られない可能性がある。例えば、同時に4命令実行可能な演算器資源を有するプロセッサに対し、2つのスレッドにそれぞれ含まれる2命令及び3命令を継続的に発行しようとすると、この2スレッドは同時実行できずどちらか一方のスレッドの命令のみが実行される。このため、1つまたは2つの演算器資源は使用されず無駄になり、スレッドの実行効率が低下するという課題がある。
本発明は、上述の課題を解決するためになされたものであり、スレッドの実行効率が高いマルチスレッドプロセッサ、並びに当該マルチプロセッサ向けのコンパイラおよびオペレーティングシステムを提供することを目的とする。
本発明のある局面に係るマルチスレッドプロセッサは、複数のスレッドの命令を並列実行するマルチスレッドプロセッサであって、各々、命令を実行する複数の演算器と、スレッド毎に、当該スレッドに含まれる命令を、前記複数の演算器で同時実行可能な命令からなるグループにグループ化するグループ化部と、前記複数のスレッドの命令の実行頻度を制御することにより、前記マルチスレッドプロセッサの実行サイクル毎に、前記複数のスレッドの中から、前記複数の演算器に発行される命令を含むスレッドを選択するスレッド選択部と、前記マルチスレッドプロセッサの実行サイクル毎に、前記スレッド選択部で選択された前記スレッドに含まれる命令のうち、前記グループ化部でグループ化されたグループの命令を、前記複数の演算器に発行する命令発行部とを備える。
かかる構成により、複数のスレッドの実行頻度を制御することにより、ユーザ指定やプロセッサ実装上のスレッド間の優先度において劣勢となるスレッドの実行効率が局所的に著しく落ちることを防ぐ事ができる。また、演算器資源が有効に利用できるように複数のスレッドの実行頻度を制御することができ、各スレッドの命令数と演算器資源数のバランスをとり、演算器資源を効率よく使用することができる。これにより、スレッドの実行効率が高いマルチスレッドプロセッサを提供することができる。
好ましくは、上述のマルチスレッドプロセッサは、さらに、スレッド毎に、前記グループ化部によりグループ化される前記グループに含まれる命令の最大個数を指定する命令数指定部を備え、前記グループ化部は、前記命令数指定部で指定された前記命令の最大個数を超えないように、命令をグループ化する。
かかる構成により、各スレッドの命令数と演算器資源数のバランスをとり、演算器資源を効率よく使用することができる。
さらに好ましくは、前記命令数指定部は、レジスタに設定された値に従い、前記最大個数を指定する。
かかる構成により、命令セット体系を維持したまま、プログラムによりレジスタの設定値を更新することで、プログラムの任意の範囲ごとで上記最大個数を制御し実行効率を最適化することができる。
また、前記命令数指定部は、前記複数のスレッドに含まれる前記最大個数を指定するための命令に従い、前記最大個数を指定してもよい。
かかる構成により、レジスタに設定された値に従い最大個数を指定する場合に比べ、アドレス設定やメモリアクセスを削減できる分、より高速に設定を変更できる。また、高速に設定を変更できる分、オーバーヘッドロスを気にせずプログラムのより詳細な任意の範囲ごとで上記最大個数を制御し実行効率を最適化することができる。
さらに好ましくは、前記スレッド選択部は、前記複数のスレッドの各々について、前記複数の演算器での命令の実行サイクル間隔を指定する実行間隔指定部を有し、前記実行間隔指定部により指定された実行サイクル間隔に従って、前記スレッドを選択する。
かかる構成により、優先度の高いスレッドが長時間資源を占有することを抑止でき、低優先度のスレッドの実行が局所的に停止してしまうことを防止できる。
好ましくは、前記実行間隔指定部は、レジスタに設定された値に従い、前記実行サイクル間隔を指定する。
かかる構成により、命令セット体系を維持したまま、プログラムによりレジスタの設定値を更新することで、プログラムの任意の範囲ごとに資源占有を抑止し、他スレッドの実行効率を向上させることができる。
また、前記実行間隔指定部は、前記複数のスレッドに含まれる前記実行サイクル間隔を指定するための命令に従い、前記実行サイクル間隔を指定してもよい。
かかる構成により、レジスタに設定された値に従い実行サイクル間隔を指定する場合に比べ、アドレス設定やメモリアクセスを削減できる分、より高速に設定を変更できる。また、高速に設定を変更できる分、オーバーヘッドロスを気にせずプログラムのより詳細な任意の範囲ごとで資源占有を抑止し、他スレッドの実行効率を向上させることができる。
さらに好ましくは、前記スレッド選択部は、複数のスレッド間で演算器の競合を起こす命令を発行したスレッドに対し、前記競合を起こす命令を一定の実行サイクル数だけ実行できないように抑制する発行間隔抑制部を有する。
かかる構成により、一意に実行サイクルを抑制する方法とは異なり、必要最小限の命令に対してのみ抑制をかけることができる。このため、実行効率を低下させること無く、他のスレッドへ資源を効率的に明け渡すことができる。
本発明の他の局面に係るコンパイラは、ソースプログラムを実行形式コードに変換する、複数のスレッドの命令を並列実行するマルチスレッドプロセッサ向けのコンパイラであって、マルチスレッド制御に関するプログラマの指示を取得する指示取得部と、前記指示に基づいてプロセッサの実行モードを制御するコードを生成する制御コード生成部とを備える。
かかる構成により、マルチスレッド制御に関するプログラマの指示にしたがって、プロセッサの実行モードを制御することが可能である。このため、スレッドの実行効率が高いマルチスレッドプロセッサ向けのコードを生成することができる。
本発明のさらに他の局面に係るオペレーティングシステムは、複数のスレッドの命令を並列実行するマルチスレッドプロセッサ向けのオペレーティングシステムであって、マルチスレッド制御に関するプログラマの指示に基づいて、プロセッサの実行モードを制御可能とするシステムコールを処理するシステムコード処理部を備える。
かかる構成により、マルチスレッド制御に関するプログラマの指示にしたがって、プロセッサの実行モードを制御することが可能である。このため、スレッドの実行効率が高いマルチスレッドプロセッサ向けのシステムコールを処理することができる。
なお、本発明は、このような特徴的な処理部を備えるマルチスレッドプロセッサとして実現することができるだけでなく、マルチスレッドプロセッサに含まれる特徴的な処理部をステップとする情報処理方法として実現することができる。また、情報処理方法に含まれる特徴的なステップをコンピュータに実行させるプログラムとして実現することもできる。そして、そのようなプログラムは、CD−ROM(Compact Disc−Read Only Memory)等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
本発明に係るマルチスレッドプロセッサ等によれば、スレッド間で演算資源が競合した場合でも、ユーザ指定やプロセッサ実装上のスレッド間の優先度において劣勢となるスレッドの実行効率が局所的に著しく落ちることを防ぐ事ができる。また、各スレッドの命令数と演算器資源数のバランスをとり、演算器資源を効率よく使用することができる。これにより、スレッドの実行効率が高いマルチスレッドプロセッサ等を提供することができる。
本発明の実施の形態1に係るマルチスレッドプロセッサのブロック図である。 本発明の実施の形態1に係るスレッド選択部のブロック図である。 本発明の実施の形態1に係るマルチスレッドプロセッサの動作を示すフローチャートである。 本発明の実施の形態1に係るスレッド選択処理のフローチャートである。 本発明の実施の形態2に係るコンパイラの構成を示すブロック図である。 本発明の実施の形態2に係るコンパイラが受理できるマルチスレッドの制御のための指示の一覧を示す図である。 「注力区間指示」を用いたソースプログラムの一例を示す図である。 「非注力区間指示」を用いたソースプログラムの一例を示す図である。 「命令並列度指示」を用いたソースプログラムの一例を示す図である。 「マルチスレッド実行モード指示」を用いたソースプログラムの一例を示す図である。 「応答性確保区間指示」を用いたソースプログラムの一例を示す図である。 「ストール挿入頻度指示」を用いたソースプログラムの一例を示す図である。 「演算器開放頻度指示」を用いたソースプログラムの一例を示す図である。 「逼迫度検出指示」を用いたソースプログラムの一例を示す図である。 「実行サイクル期待値指示」を用いたソースプログラムの一例を示す図である。 本発明の実施の形態2に係るオペレーティングシステムの構成を示すブロック図である。
以下、マルチスレッドプロセッサ等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
(実施の形態1)
本実施の形態において、命令実行制御により命令実行効率を向上させるマルチスレッドプロセッサ、命令数の制限、制限する命令数のレジスタによる指定、制限する命令数の命令による指定、実行サイクル数間隔の指定、実行サイクル数間隔のレジスタによる指定、実行サイクル数間隔の命令による指定、資源制約のある命令の発行間隔の抑制について説明する。
図1は、本実施の形態におけるマルチスレッドプロセッサの構成を示すブロック図である。なお、本実施の形態では3つのスレッドを並列実行可能なマルチスレッドプロセッサを想定する。
マルチスレッドプロセッサ1は、命令メモリ101、第1命令デコーダ102、第2命令デコーダ103、第3命令デコーダ104、第1命令数指定部105、第2命令数指定部106、第3命令数指定部107、第1命令グループ化部108、第2命令グループ化部109、第3命令グループ化部110、第1レジスタ111、第2レジスタ112、第3レジスタ113、スレッド選択部114、命令発行制御部115、スレッドセレクタ116、スレッド用レジスタセレクタ117〜118、及び演算器群119を備える。
命令メモリ101は、マルチスレッドプロセッサ1において実行される命令を保持するメモリであり、3本の独立に実行されるスレッドの命令流を保持している。
第1命令デコーダ102、第2命令デコーダ103及び第3命令デコーダ104は、命令メモリ101から、それぞれ異なるスレッドの命令を読み出し、読み出した命令をデコードする処理部である。
第1命令数指定部105、第2命令数指定部106及び第3命令数指定部107は、それぞれ第1命令デコーダ102、第2命令デコーダ103及び第3命令デコーダ104でデコードされた命令を、同時実行可能な命令グループにグループ化する際の、同時実行可能な命令数を指定する処理部である。本実施の形態では、命令数の上限を3として説明する。命令数を指定する方法は、命令数を指定するための専用命令を各スレッドの命令流に含め、当該専用命令の実行により命令数を指定するようにしても良い。または、命令数を設定する専用レジスタを設け、各スレッドの命令流で専用レジスタの値を変更し命令数を指定するようにしても良い。
専用命令の実行により命令数を指定する場合には、アドレス設定やレジスタアクセスによるオーバーヘッドロスがない。このため、高速に命令数の変更が可能となる。また、スレッドの複数の箇所に、上記専用命令を挿入しておくことにより、スレッド内の複数の命令範囲において、異なる命令数を指定することが可能である。専用レジスタに命令数を設定する場合には、命令セットの体系を維持したまま、同時実行される命令数を制御することができる。
命令数の指定を、演算器資源の数や同時実行可能なスレッド数のバランスに合わせて変更することにより、命令実行効率を高められる。たとえば、演算器が4つあり、同時実行可能なスレッド数が2つある場合、命令数の上限を2としておくと、2つのスレッドが演算器を2つずつ使用することとなる。しかし、命令数の上限を3としておくと、各スレッドについて、最大3つの命令が1つの命令グループにグループ化される。このため、例えば、2つのスレッドのうち、一方のスレッドの命令グループに含まれる命令数が3であり、他方のスレッドの命令グループに含まれる命令数が2であった場合には、どちらか一方のスレッドのみしか実行することができず、未使用の演算器が生じるため、スレッドの実行効率が低下してしまう。
第1命令グループ化部108、第2命令グループ化部109及び第3命令グループ化部110は、第1命令デコーダ102、第2命令デコーダ103及び第3命令デコーダ104でそれぞれデコードされた命令を、同時実行可能な命令グループにグループ化する処理部である。なお、グループ化の際には、第1命令数指定部105、第2命令数指定部106及び第3命令数指定部107で設定された命令数を超えないように、命令のグループ化が行なわれる。
第1レジスタ111、第2レジスタ112及び第3レジスタ113は、各スレッドの命令による演算時に使用されるレジスタファイルである。
スレッド選択部114は、スレッド優先度に関する設定情報を保持し、スレッドの実行状況によって、実行するスレッドを選択する処理部である。スレッド優先度は、予め定められているものとする。
命令発行制御部115は、スレッド選択部114により選択されたスレッドを演算器群119に発行するために、スレッドセレクタ116、スレッド用レジスタセレクタ117及び118を制御する処理部である。また、命令発行制御部115は、演算器群119に発行したスレッドに関する発行命令情報をスレッド選択部114へ通知する。なお、本実施の形態では、同時実行可能なスレッド数は2とする。
スレッドセレクタ116は、命令発行制御部115の指示通りに実行スレッド(演算器群119で命令が実行されるスレッド)を選択するセレクタである。
スレッド用レジスタセレクタ117〜118は、スレッドセレクタ116と同様に、命令発行制御部115の指示通りに実行スレッドとセットとなるレジスタを選択するセレクタである。
演算器群119は、加算器や乗算器等の複数の演算器を含む処理部である。本実施の形態では、同時実行可能な演算器数は4とする。
図2は、図1に示したスレッド選択部114の詳細な構成を示すブロック図である。
スレッド選択部114は、第1発行間隔抑制部201、第2発行間隔抑制部202、第3発行間隔抑制部203、第1実行間隔指定部204、第2実行間隔指定部205、及び第3実行間隔指定部206を備える。
第1発行間隔抑制部201、第2発行間隔抑制部202及び第3発行間隔抑制部203の各々は、演算器群119の演算器数制限等により同時実行できない命令が、割り当てられたスレッドから発行された場合に、そのスレッドに対しその後一定期間だけ、その命令を発行させないよう抑制する処理部である。
第1実行間隔指定部204、第2実行間隔指定部205及び第3実行間隔指定部206の各々は、割り当てられたスレッドを一定間隔で実行するように、スレッドの実行間隔を指定する処理部である。実行間隔を指定する方法は、実行間隔を指定するための専用命令を各スレッドの命令流に含め、当該専用命令の実行により実行間隔を指定するようにしても良い。または、実行間隔を設定する専用レジスタを設け、各スレッドの命令流で専用レジスタの値を変更し実行間隔を指定するようにしても良い。実行間隔を指定することにより、優先度の高いスレッドが長時間資源を占有することを抑止でき、低優先度のスレッドの実行が局所的に停止してしまうことを防止できる。専用命令の実行により実行間隔を指定する場合には、アドレス設定やレジスタアクセスによるオーバーヘッドロスがない。また、スレッドの複数の箇所に、上記専用命令を挿入しておくことにより、スレッド内の複数の命令範囲において、異なる実行間隔を指定することが可能である。専用レジスタに実行間隔を設定する場合には、命令セットの体系を維持したまま、実行間隔を制御することができる。
なお、本実施の形態では、第1発行間隔抑制部201、第2発行間隔抑制部202、第3発行間隔抑制部203、第1実行間隔指定部204、第2実行間隔指定部205及び第3実行間隔指定部206は、それぞれ、実行サイクルが経過するごとに、値を1つデクリメントするダウンカウンタを含むものとする。
以降では、便宜上3つのスレッドをスレッドA、スレッドB、スレッドCと呼称することとする。スレッドAは、第1命令デコーダ102、第1命令数指定部105、第1命令グループ化部108、第1レジスタ111、第1発行間隔抑制部201及び第1実行間隔指定部204を利用して実行される。スレッドBは、第2命令デコーダ103、第2命令数指定部106、第2命令グループ化部109、第2レジスタ112、第2発行間隔抑制部202及び第2実行間隔指定部205を利用して実行される。スレッドCは、第3命令デコーダ104、第3命令数指定部107、第3命令グループ化部110、第3レジスタ113、第3発行間隔抑制部203及び第3実行間隔指定部206を利用して実行される。
次に、マルチスレッドプロセッサ1の動作について説明する。
図3は、マルチスレッドプロセッサ1の動作を示すフローチャートである。
第1命令デコーダ102、第2命令デコーダ103及び第3命令デコーダ104は、命令メモリ101に記憶されているスレッドA、B及びCの命令流を、それぞれデコードする(ステップS001)。
第1命令グループ化部108は、第1命令数指定部105で指定されている命令数を上限として、第1命令デコーダ102において認識されたスレッドAの命令流を、演算器群119で同時実行可能な命令からなる命令グループにグループ化する。同様に、第2命令グループ化部109は、第2命令数指定部106で指定されている命令数を上限として、第2命令デコーダ103において認識されたスレッドBの命令流を、演算器群119で同時実行可能な命令からなる命令グループにグループ化する。また、第3命令グループ化部110は、第3命令数指定部107で指定されている命令数を上限として、第3命令デコーダ104において認識されたスレッドCの命令流を、演算器群119で同時実行可能な命令からなる命令グループにグループ化する(ステップS002)。
命令発行制御部115は、スレッド選択部114が保持するスレッド優先度に関する設定情報と、ステップS002の処理によりグループ化された命令の情報とに基づいて、実行可能なスレッドを2つ決定する(ステップS003)。ここでは、スレッドA及びCが、実行可能なスレッドとして決定されたものとして以降説明する。
スレッドセレクタ116は、スレッドA及びCを、実行スレッドとして選択する。また、スレッド用レジスタセレクタ117は、スレッドA及びCに対応する第1レジスタ111及び第3レジスタ113を選択する。演算器群119は、スレッドセレクタ116で選択されたスレッド(スレッドA及びC)の演算を、スレッド用レジスタセレクタ117で選択されたレジスタ(第1レジスタ111及び第3レジスタ113)に記憶されているデータを用いて実行する(ステップS004)。
スレッド用レジスタセレクタ118は、スレッド用レジスタセレクタ117が選択したのと同じレジスタ(第1レジスタ111及び第3レジスタ113)を選択する。演算器群119は、スレッド(スレッドA及びC)の演算結果を、スレッド用レジスタセレクタ118が選択したレジスタ(第1レジスタ111及び第3レジスタ113)に書込む(ステップS005)。
次に、スレッド選択部114及び命令発行制御部115によるスレッド選択処理について、図4のフローチャートを用いて説明する。
なお本説明では、第1発行間隔抑制部201は、スレッドAより後述する発行間隔抑制命令が発行された場合には、その後、その発行間隔抑制命令を2マシンサイクルの間、発行するのを抑制する(禁止する)。ここで、発行間隔抑制命令とは、複数のスレッド間で演算器の競合を起こす命令のことである。同様に、第2発行間隔抑制部202は、スレッドBより発行間隔抑制命令が発行された場合には、その後、その発行間隔抑制命令を2マシンサイクルの間、発行するのを抑制する(禁止する)。また、第3発行間隔抑制部203は、スレッドCより発行間隔抑制命令が発行された場合には、その後、その発行間隔抑制命令を2マシンサイクルの間、発行するのを抑制する(禁止する)。このように、必要最小限の命令に対してのみ抑制をかけることができる。このため、実行効率を低下させること無く、他のスレッドへ資源を効率的に明け渡すことができる。
また、第1実行間隔指定部204は、演算器群119でスレッドAの命令が2マシンサイクルに1回実行できるように実行サイクル間隔を指定しているものとする。同様に、第2実行間隔指定部205は、演算器群119でスレッドBの命令が2マシンサイクルに1回実行できるように実行サイクル間隔を指定しているものとする。また、第3実行間隔指定部206は、演算器群119でスレッドCの命令が2マシンサイクルに1回実行できるように実行サイクル間隔を指定しているものとする。
また、スレッドの優先度は、スレッドAが一番高く、次にスレッドBが高く、スレッドCが一番優先度が低いものとする。
以下では、着目しているマシンサイクルの1つ前のマシンサイクルにおいて、スレッドA及びCが実行され、スレッドAにより発行間隔抑制命令が発行されたものとして、着目するマシンサイクルの動作について説明する。なお、説明する動作が1順目の動作であり、後述する2順目の動作と区別するために、各ステップのステップ番号に1順目であることを示すため“−1”を付与する。1順目の開始時には、第1発行間隔抑制部201、第2発行間隔抑制部202及び第3発行間隔抑制部203のダウンカウンタには0が設定されているものとする。また、第1実行間隔指定部204、第2実行間隔指定部205及び第3実行間隔指定部206のダウンカウンタには0が設定されているものとする。
スレッド選択部114は、命令発行制御部115から、前マシンサイクルにおいて実行されたスレッドA及びCの実行状況を取得する(ステップS101−1)。つまり、スレッドA及びCの実行された(発行された)命令が、発行間隔抑制命令であるか否かを示す情報を取得する。ここで、スレッド選択部114は、スレッドAの実行された命令が、発行間隔抑制命令であることを示す情報を取得したものとする。
スレッドAの発行間隔抑制命令が実行されたので、第1発行間隔抑制部201は、その発行間隔抑制命令を発行するのを抑制するサイクル数として、第1発行間隔抑制部201のダウンカウンタに2を設定する(ステップS102−1)。また、スレッドA及びCが実行されたので、第1実行間隔指定部204及び第3実行間隔指定部206は、それらのダウンカウンタの値に1を設定する。
スレッド選択部114は、第1実行間隔指定部204及び第3実行間隔指定部206のダウンカウンタの値が1であり0ではないため、スレッドA及びCを実行することができないと判断する。また、スレッド選択部114は、第2実行間隔指定部205のダウンカウンタの値が0であるため、スレッドBを実行することができると判断する。このため、スレッド選択部114は、スレッドBのみを実行対象スレッドとして選択し、命令発行制御部115へ通知する。また、スレッド選択部114は、選択したスレッドBが最も優先度が高いことを合わせて通知する(ステップS103−1)。
命令発行制御部115は、スレッド選択部114から受けたスレッドBの優先度情報と、第2命令グループ化部109によるスレッドBの命令のグループ化の結果を示す情報とからスレッドBを実行スレッドに決定する(ステップS104−1)。
命令発行制御部115は、スレッドセレクタ116、並びにスレッド用レジスタセレクタ117及び118を操作することにより、スレッドBの命令を第2命令グループ化部109から演算器群119に送り、演算器群119がスレッドBの命令を実行する(ステップS105−1)。
第1発行間隔抑制部201、第2発行間隔抑制部202、第3発行間隔抑制部203、第1実行間隔指定部204、第2実行間隔指定部205及び第3実行間隔指定部206の各々は、ダウンカウンタの値をそれぞれ1つデクリメントする(ステップS106−1)。このとき、ダウンカウンタの値が0の場合には、デクリメントは行なわずに、0が設定されたままとする。
以上のステップS101〜S106の処理を毎マシンサイクル実施する。上記説明の次のマシンサイクルについて引き続きステップを追って説明する。なお各ステップのステップ番号に2順目であることを示すため“−2”を付与する。なお、スレッドAは再度、発行間隔抑制命令を実行しようとしているものとして説明する。
スレッド選択部114は、命令発行制御部115から、前マシンサイクルにおいて実行されたスレッドBの実行状況を取得する(ステップS101−2)。つまり、スレッドBの実行された命令には、発行間隔抑制命令は含まれていないことを示す情報を取得したものとする。
スレッドBが実行されたので、第2実行間隔指定部205は、ダウンカウンタに1を設定する(ステップS102−2)。
スレッド選択部114は、第2実行間隔指定部205のダウンカウンタの値が1であり0ではないため、スレッドBを実行することができないと判断する。また、スレッド選択部114は、第1実行間隔指定部204及び第3実行間隔指定部206のダウンカウンタの値が0であるため、スレッドA及びCを実行することができると判断する。このため、スレッド選択部114は、スレッドA及びCを実行対象スレッドとして選択し、命令発行制御部115に通知する。また、スレッド選択部114は、命令発行制御部115に、スレッドAの優先度の方がスレッドBの優先度よりも高いことをあわせて通知する。また、第1発行間隔抑制部201のダウンカウンタの値が1である。このため、スレッドAの発行間隔抑制命令が発行されないようにするため、スレッド選択部114は、優先度情報に加えて、スレッドAが発行間隔抑制命令の実行権がない事を命令発行制御部115へ通知する(ステップS103−2)。
命令発行制御部115は、スレッド選択部114から受けたスレッドA及びCの優先度情報および発行間隔抑制命令の情報と、第1命令グループ化部108及び第3命令グループ化部110によるスレッドA及びCの命令のグループ化の結果を示す情報とから、スレッドAは発行間隔抑制命令の制限によって実行できないスレッドと判断し、スレッドCを実行スレッドに決定する(ステップS104−2)。
命令発行制御部115は、スレッドセレクタ116、並びにスレッド用レジスタセレクタ117及び118を操作することにより、スレッドCの命令を第3命令グループ化部110から演算器群119に送り、演算器群119がスレッドCの命令を実行する(ステップS105−2)。
第1発行間隔抑制部201、第2発行間隔抑制部202、第3発行間隔抑制部203、第1実行間隔指定部204、第2実行間隔指定部205及び第3実行間隔指定部206の各々は、ダウンカウンタの値をそれぞれ1つデクリメントする(ステップS106−2)。このとき、ダウンカウンタの値が0の場合には、デクリメントは行なわずに、0が設定されたままとする。
なお、図4のフローチャートにおいて、マルチスレッドプロセッサ1の電源オフやリセットにより処理が終了する。
以上説明したように、実施の形態1に係るマルチスレッドプロセッサ1によると、スレッド間で演算資源が競合した場合でも、ユーザ指定やプロセッサ実装上のスレッド間の優先度において劣勢となるスレッドの実行効率が局所的に著しく落ちることを防ぐ事ができる。また、各スレッドの命令数と演算器資源数のバランスをとり、演算器資源を効率よく使用することができる。
なお、本実施の形態によれば、スレッド数を3としたがこの値に限定されることはなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
また、本実施の形態によれば、同時命令発行数上限を3としたがこの値に限定されることはなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
また、本実施の形態によれば、同時実行可能なスレッド数の上限を2としたがこの値に限定されることはなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
また、本実施の形態によれば、同時実行可能な演算器数の上限を4としたがこの値に限定されることはなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
(実施の形態2)
以下、図面を参照しながら本発明の実施の形態2に係るコンパイラおよびオペレーティングシステムについて説明する。
図5は、本発明の実施の形態2に係るコンパイラ3の構成を示すブロック図である。
コンパイラ3は、プログラマがC言語で記述したソースプログラム301を入力として受け、内部的な中間表現(中間コード)に変換して最適化や資源の割付を実施した後、ターゲットプロセッサ向けの実行形式コード302を生成する。コンパイラ3がターゲットとするプロセッサは実施の形態1にて説明したマルチスレッドプロセッサ1である。
以下で本発明に係るコンパイラ3の各構成要素の詳細な構成とその動作について説明していく。なお、コンパイラ3は、プログラムであり、プロセッサとメモリとを備えるコンピュータ上で、コンパイラ3の各構成要素を実現するためのプログラムを実行することにより、その機能を果たす。
コンパイラ3は、パーサ部31と、最適化部32と、コード生成部33とを備える。
パーサ部31は、コンパイラ3に入力されたソースプログラム301に対して、予約語(キーワード)等を抽出して字句解析および構文解析を行い、各ステートメントを一定規則に基づいて中間コードに変換する処理部である。
最適化部32は、入力された中間コードに対して、冗長性の除去や命令スケジューリングやレジスタ割り付けといった最適化処理を実施する。
コード生成部33は、最適化部32から出力された中間コードに対して、内部に保持する変換テーブル等を参照することにより、全てのコードを機械語コードに置き換える。これにより、実行形式コード302を生成する。
最適化部32は、マルチスレッド実行制御指示解釈部321と、命令スケジューリング部322と、実行状態検出コード生成部323と、実行制御コード生成部324とを備える。命令スケジューリング部322は、応答性確保スケジューリング部3221を備える。
マルチスレッド実行制御指示解釈部321は、プログラマによるマルチスレッド実行を制御するための指示を、コンパイルオプション、プラグマ指令(#pragma)、又は組み込み関数として受理する。マルチスレッド実行制御指示解釈部321は、受理した指示を、中間コードに格納して後段の命令スケジューリング部322等に引き渡す。
図6は、マルチスレッド実行制御指示解釈部321が受理するマルチスレッド実行制御のための指示の一覧を示す図である。以下、図6に示す各指示について、当該指示を用いたソースプログラム301の例を参照しながら説明する。
図7を参照して、「注力区間指示」とは、他のスレッドと比べて注力すべきソースプログラム301中の区間を“#pragma _focus begin”と“#pragma _focus end”とで囲むことにより指定する指示である。この指示に基づいて、コンパイラ3は、この区間にプロセッササイクルや演算資源を重点的に割くよう制御する。
図8を参照して、「非注力区間指示」とは、他のスレッドと比べてそれほど注力する必要のないソースプログラム301中の区間を、“#pragma _unfocus begin”と“#pragma _unfocus end”とで囲むことにより指定する指示である。この指示に基づいて、コンパイラ3は、この区間にはプロセッササイクルや演算資源をそれほど割かないように制御する。
図9を参照して、「命令並列度指示」とは、ソースプログラム301中の“#pragma ILP=‘num’ begin”と“#pragma ILP end”とで囲んだ区間の命令並列度を指定するための指示である。‘num’の部分には1〜3のいずれかの数字が指定され、コンパイラ3は、指定された動作モードを設定するコードを生成するとともに、指定された命令並列度を想定した命令スケジューリングを実施する。図9には、‘num’として「3」を指定した命令並列度指示が示されている。つまり、“#pragma ILP=3 begin”と“#pragma ILP end”とで囲んだ区間の命令並列度として「3」が指定されている。
図10を参照して、「マルチスレッド実行モード指示」とは、ソースプログラム301中の“#pragma _single_thread begin”と“#pragma _single_thread end”とで囲んだ区間を自スレッドのみのシングルスレッドモードで動作させるための指示である。この指示に基づき、コンパイラ3は、動作モードを設定するコード、つまり上記区間においてスレッドの実行数を1つとするコードを生成する。
図11を参照して、「応答性確保区間指示」とは、ソースプログラム301中の“#pragma _response=‘num’ begin”と“#pragma _response end”とで囲んだ区間について、他方のスレッドが最低限応答可能とする頻度を指定するための指示である。‘num’の部分には、最低限何サイクルに1回は他方のスレッドが実行できるようにすべきかの数値が指定され、コンパイラ3は指定条件を満たすよう自スレッドの生成コードを調整する。図11には、‘num’として「10」を指定した応答性確保区間指示が示されている。つまり、“#pragma _response=10 begin”と“#pragma _response end”とで囲んだ区間においては、10サイクルに1サイクルは、他方のスレッドが実行されるようにするための指示であり、この指示を満たすようにコードが生成される。例えば、一定頻度でストールサイクルが挿入されるコードや、一定頻度で演算器資源を解放するコードが生成される。
図12を参照して、「ストール挿入頻度指示」とは、ソースプログラム301中の“#pragma _stall_freq=‘num’ begin”と“#pragma _stall_freq end”とで囲んだ区間について、最低限1つのストールサイクルが発生する頻度を指定するための指示である。‘num’の部分には最低限何サイクルに1回はストールが発生するようにすべきかの数値が指定され、コンパイラ3は、指定条件を満たすように適宜ストールサイクルを挿入する。図12には、‘num’として「10」を指定したストール挿入頻度指示が示されている。つまり、“#pragma _stall_freq=10 begin”と“#pragma _stall_freq end”とで囲んだ区間においては、10サイクルに1サイクルはストールサイクルが発生するようにコード生成される。
図13を参照して、「演算器開放頻度指示」とは、ソースプログラム301中の“#pragma _release_freq=‘res’:‘num’ begin”と“#pragma _release_freq end”とで囲んだ区間について、指定された演算器について最低限1回は未使用のサイクルが発生する頻度を指定するための指示である。‘res’の部分には演算器の種類として‘mul’もしくは‘mem’が指定でき、‘mul’は乗算器を、“mem”はメモリアクセス装置をそれぞれ示している。‘num’の部分には最低限、何サイクルに1回は指定された演算器の未使用サイクルが発生するようにすべきかの数値が指定され、コンパイラ3は指定条件を満たすように生成コードを調整する。図13には、‘res’として「mul」を指定し、‘num’として「10」を指定した演算器開放頻度指示が示されている。つまり、“#pragma _release_freq=mul:10 begin”と“#pragma _release_freq end”とで囲んだ区間においては、10サイクルに1サイクルは指定された演算器である乗算器が使用されないサイクルが発生するようにコード生成される。
図14を参照して、「逼迫度検出指示」とは、期待される実行サイクル数に対してどの程度逼迫しているかを検出するための組み込み関数のセットである。関数_get_tightness_start()にてソースプログラム301中のサイクル数計測区間の起点を指定する。関数_get_tightness(num)にて逼迫度を得ることができる。引数の“num”には起点からの実行サイクル数の期待値もしくは保証すべき値が指定され、本関数は指定された数値に対する実際の実行サイクル数の比を返す。図14には、‘num’として「1000」を指定した逼迫度検出指示が示されている。これにより、実際の実行サイクル数がnであれば、関数_get_tightness(1000)は、n/1000を返すことになる。
また、この関数によりプログラマは処理の逼迫度を得ることができ、逼迫度に応じた制御をプログラムすることが可能である。例えば、逼迫度が1よりも大きい場合には、演算器資源を減少させたり、命令並列度を減少させたりするコードを生成してもよい。また、逼迫度が1よりも小さい場合には、演算器資源を増加させたり、命令並列度を増加させたりするコードを生成してもよい。
図15を参照して、「実行サイクル期待値指示」とは、期待される実行サイクル数を指示するための組み込み関数のセットである。関数_expected_cycle_start()にてソースプログラム301中のサイクル計測区間の起点を指定する。関数_expected_cycle(num)にて実行サイクル数の期待値を指定する。引数の“num”には起点からの実行サイクル数の期待値もしくは保証すべき値が指定さる。この関数によりプログラマが指定した期待値から、コンパイラ3もしくはオペレーティングシステム4が実際の処理の逼迫度を導出し、自動的に適切な実行サイクル数の制御を実施することが可能である。
「自動制御指示」とは、自動的なマルチスレッド実行制御を実施することを指示するコンパイルオプションである。−auto−MT−control=OSオプションにてオペレーティングシステム4による自動制御を指示し、−auto−MT−control=COMPILERオプションにてコンパイラ3による自動制御を指示する。
再度、図5を参照して、命令スケジューリング部322は、入力された命令群の間の依存関係を保ちつつ適宜命令の並び替えを行うことにより、実行効率を向上させる最適化を実施する。なお、命令の並べ替えにあたっては、命令レベルの並列度を想定して並べ替えを実施する。前述の指示の中で、「注力区間指示」のされている区間については並列度3を想定し、「非注力区間指示」のされている区間については並列度1を想定し、「命令並列度指示」のされている区間については指示に従った並列度を想定する。デフォルトでは並列度3を想定する。
また「マルチスレッド実行モード指示」のされている区間については、他方のスレッドが存在せず自スレッドのみがプロセッサ上で動作していることを想定して命令スケジューリングを実施する。
命令スケジューリング部322は、応答性確保スケジューリング部3221を備える。
応答性確保スケジューリング部3221は、前述の「応答性確保区間指示」もしくは「ストール挿入頻度指示」のされている区間について、先頭から順にサイクルを探索していき、指定された数値のサイクル数分ストールが発生しないサイクルが連続した場合には、ストールを発生させる“nop”命令を挿入し、また次の命令から探索を継続する。これによって、他方のスレッドが指定されたサイクルにつき1サイクルは確実に命令実行できることになる。
また、前述の「演算器開放頻度指示」のされている区間については、命令スケジューリングの際に、指定された演算器を使用するサイクルをカウントしていき、指定された数値にカウンタが達した場合には、次のサイクルでは当該演算器は使用できないものとしてスケジューリングを行う。当該演算器が使用されないサイクルが発生すればカウントをリセットする。これによって、他方のスレッドは指定されたサイクルにつき1サイクルは当該演算器を使用することができることになる。
実行状態検出コード生成部323は、前述の指示に対応して実行状態を検出するためのコードを挿入する。
具体的には、前述の「逼迫度検出指示」に対応して、関数_get_tightness_start()が記述された部分に、プロセッサのサイクルカウントを開始するためのシステムコールを挿入する。そして、関数_get_tightness(num)が記述された部分でプロセッサのサイクルカウントを読み出すシステムコールと、読み出したカウント値をnumとして与えられた期待値で除算した値を逼迫度として返すコードとを挿入する。この返り値によってプログラマが処理の逼迫度を知ることができる。
また、前述の「実行サイクル期待値指示」に対応して、関数_expected_cycle_start()が記述された部分に、プロセッサのサイクルカウントを開始するためのシステムコールを挿入する。それぞれの指示に対応して独立にサイクルカウントすることができる。
そして、自動制御指示のコンパイルオプション−auto−MT−controlとしてOSが指定されている場合には、関数_expexted_cycle(num)が記述された部分に、numで指示された実行サイクル数の期待値をオペレーティングシステム4に伝達して実行制御を促すためのシステムコールを挿入する。これに応じてオペレーティングシステム4にて実行制御を実施することができる。
また自動制御指示のコンパイルオプション−auto−MT−controlとしてCOMPILERが指定されている場合には、関数_expexted_cycle(num)が記述された部分に、プロセッサのサイクルカウントを読み出すシステムコールを挿入し、読み出したカウント値をnumとして与えられた期待値で除算して逼迫度を算出し、逼迫度が0.8以上の場合には後述の「注力区間」に対応した制御を、逼迫度が0.8未満の場合には後述の「非注力区間」に対応した制御を行うコードを挿入する。これによって、逼迫度に応じたマルチスレッド実行制御を実施するコードをコンパイラにて自動生成することができる。
実行制御コード生成部324は、前述の指示に対応して実行を制御するためのコードを挿入する。
具体的には、「注力区間指示」に対応して、区間のbeginの部分に命令並列度を3に設定するシステムコールを挿入し、区間のendの部分に元の設定に戻すシステムコールを挿入する。
また「非注力区間指示」に対応して、区間のbeginの部分に命令並列度を1に設定するシステムコールと他方のスレッドのサイクルが割り込まない実行モードに設定するコードを挿入し、区間のendの部分に元の設定に戻すシステムコールを挿入する。
さらに「命令並列度指示」に対応して、区間のbeginの部分に命令並列度を指定された値に設定するシステムコールを挿入し、区間のendの部分に元の設定に戻すシステムコールを挿入する。
また「マルチスレッド実行モード指示命令並列度指示」に対応して、区間のbeginの部分に単一スレッドモードに移行するためのシステムコールを挿入し、区間のendの部分に元の設定に戻すシステムコールを挿入する。
そして「実行サイクル期待値指示」および「自動制御指示」に対応して、前述のように検出した逼迫度に応じて「非注力区間」もしくは「注力区間」と同様の制御を行うコードを挿入する。
以上のようなコンパイラ3の構成をとることにより、マルチスレッドプロセッサ1において、自スレッドの実行モードおよびプロセッサ資源の使用状況を制御できるようになり、必要に応じて自スレッドの処理に注力したり、他方のスレッドにプロセッサ資源を分け与えることができるようになる。また、自スレッドの処理に注力している場合でも、他方のスレッドにて所定の応答性を保証することが可能となる。また、実行時の実行サイクル数の情報を獲得して、それに基づいて逼迫度に応じて上記制御を行うことができ、きめ細かい性能チューニングおよびプロセッサ利用効率向上を図ることが可能となる。
図16は、本発明の実施の形態2に係るオペレーティングシステム4の構成を示すブロック図である。
オペレーティングシステム4は、システムコール処理部41と、プロセス管理部42と、メモリ管理部43と、ハードウェア制御部44とを備える。なお、オペレーティングシステム4は、プログラムであり、プロセッサとメモリとを備えるコンピュータ上で、オペレーティングシステム4の各構成要素を実現するためのプログラムを実行することにより、その機能を果たす。なお、オペレーティングシステム4が動作するプロセッサは、実施の形態1に示したマルチスレッドプロセッサ1である。
プロセス管理部42は、オペレーティングシステム4上で動作する複数のプロセスについて優先度を与え、それに基づいて各プロセスに配分する時間を決定し、プロセスの切り替え等を制御する。
メモリ管理部43は、メモリの利用可能な部分の管理、メモリの割り当ておよび開放、主記憶と二次記憶との間でのスワップ等の制御を実施する。
システムコール処理部41は、アプリケーションプログラムへのカーネルのサービスであるシステムコールに対応した処理を提供する。
システムコール処理部41は、マルチスレッド実行制御システムコール処理部411と逼迫度検出システムコール処理部412を備える。
マルチスレッド実行制御システムコール処理部411は、プロセッサのマルチスレッド動作を制御するためのシステムコールを処理する。
具体的には、前述のコンパイラ3の実行制御コード生成部324の命令並列度を設定するシステムコールを受理して、プロセッサの動作命令並列度を設定するとともに元の命令並列度を保存しておく。そして、元の命令並列度に戻すシステムコールを受理して、保存しておいた元の命令並列度にプロセッサを設定する。さらに、単一スレッドモードに移行するシステムコールを受理して、プロセッサの動作モードを単一スレッドモードに設定するとともに元のスレッドモードを保存しておく。そして、元のスレッドモードに戻すシステムコールを受理して、保存しておいた元のスレッドモードにプロセッサを設定する。
逼迫度検出システムコール処理部412は、処理の逼迫度を検出して対応するためのシステムコールを処理する。
具体的には、前述のコンパイラ3の実行状態検出コード生成部323のプロセッサのサイクルカウントを開始するためのシステムコールを受理して、プロセッサのカウンタを獲得してカウントを開始する設定をする。また、現在のサイクルカウントを読み出すシステムコールを受理して、プロセッサの該当するカウンタの現在のカウント値を読み出し、その値を返す。さらに、実行サイクル数の期待値を伝達して実行制御を促すシステムコールを受理して、プロセッサの該当するカウンタの現在のカウント値を読み出し、その値と伝達された実行サイクル数の期待値から逼迫度を導出し、逼迫度に応じた実行制御を実施する。逼迫度が高い場合には当該プロセスの優先度を上げ、前述の「注力区間」に対応する制御を実施する。一方、逼迫度が低い場合には当該プロセスの優先度を下げ、前述の「非注力区間」に対応する制御を実施する。
ハードウェア制御部44は、システムコール処理部41等で必要とされるハードウェアの制御のためのレジスタ設定および読み出しを実施する。
具体的には、前述の命令並列度の設定および復帰、マルチスレッド動作モードの設定および復帰、サイクルカウンタの初期化、サイクルカウンタの読み出しに対応したハードウェアのレジスタ設定および読み出しを実施する。
以上のようなオペレーティングシステム4の構成をとることにより、プログラムからのマルチスレッドプロセッサの動作制御が可能となり、各プログラムにプロセッサ資源を適切に配分することが可能となる。また、入力されたプログラマの想定する実行サイクル数の期待値とハードウェアから読み出した実際の実行サイクルの情報から逼迫度を検出して適切な制御を自動的に実施することも可能であり、プログラマのチューニング負担を軽減することができる。
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。例えば、以下のような変形が考えられる。
(1)上記実施の形態2のコンパイラでは、C言語向けのコンパイラシステムを想定していたが、本発明はC言語のみに限定されるものではない。他のプログラミング言語を採用した場合でも本発明の有意性は保たれる。
(2)上記実施の形態2のコンパイラでは、高級言語向けのコンパイラシステムを想定していたが、本発明はこれに限定されるものではない。例えば、アセンブラプログラムを入力とするアセンブラにも本発明を同様に適用することができる。
(3)上記実施の形態2では、ターゲットプロセッサとして1サイクルに3命令発行可能で、同時に3スレッドを並行動作可能なプロセッサを想定していたが、本発明はこの同時発行命令数、スレッド数に限定されるものではない。
(4)上記実施の形態2では、ターゲットプロセッサとしてスーパースカラプロセッサを想定していたが、本発明はこれに限定されるものではない。VLIW(Very Long Instruction Word)プロセッサに対しても本発明を適用することができる。
(5)上記実施の形態2では、マルチスレッド実行制御指示解釈部への指示の方法としてプラグマ指令、組み込み関数、コンパイルオプションをそれぞれ規定していたが、本発明はこの規定に限定されるものではない。プラグマ指令としているものを組み込み関数で実現してもよいし、その逆も可能である。またアセンブラプログラムの場合には疑似命令として指示することも可能である。
(6)上記実施の形態2では、マルチスレッド実行制御指示解釈部へ与える命令並列度指示として、プロセッサとして最小の1や最大の3を想定していたが、本発明はこの指定に限定されるものではない。プロセッサの能力の中間にあたる2などの並列度を指定してもよい。
(7)上記実施の形態2では、マルチスレッド実行制御指示解釈部へ与える応答確保区間指示、ストール挿入頻度指示および演算器開放指示として、サイクル数としての頻度を与えていたが、本発明はこの指定に限定されるものではない。ミリ秒等の時間で指定してもよいし、高・中・低のように程度で指定するようにしてもよい。
(8)上記実施の形態2では、マルチスレッド実行制御指示解釈部へ与える演算器開放頻度指示の演算器として乗算器およびメモリアクセスを想定していたが、本発明はこの指定に限定されるものではない。他の演算器を指定してもよいし、ロードとストアを分けるなどのようにより細かい単位で指定するようにしてもよい。
(9)上記実施の形態2では、マルチスレッド実行制御指示解釈部へ与える逼迫度検出指示および実行サイクル期待値指示では、期待値をサイクル数で与えていたが、本発明はこの指定に限定されるものではない。ミリ秒等の時間で指定してもよいし、大・中・小のように程度で指定するようにしてもよい。
(10)上記実施の形態2のオペレーティングシステムでは、プロセス管理およびメモリ管理を伴う汎用オペレーティングシステムを想定していたが、機能を絞り込んだデバイスドライバのようなものでもよい。このような形態であってもAPIを通してハードウェアの適切な制御を行うことが可能である。
さらに、上記実施の形態及び上記変形例をそれぞれ組み合わせるとしても良い。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
以上のように、本発明にかかるマルチスレッドプロセッサは、スレッド間で演算資源が競合した場合でも、ユーザ指定やプロセッサ実装上のスレッド間の優先度において劣勢となるスレッドの実行効率が局所的に著しく落ちることを防ぎ、また各スレッドの命令数と演算器資源数のバランスを取り効率的な複数スレッド実行ができるという効果を有し、マルチスレッドプロセッサ及び当該マルチプロセッサを用いたアプリケーションソフトウェア等として有用である。
1 マルチスレッドプロセッサ
3 コンパイラ
4 オペレーティングシステム
31 パーサ部
32 最適化部
41 システムコール処理部
42 プロセス管理部
43 メモリ管理部
44 ハードウェア制御部
101 命令メモリ
102 第1命令デコーダ
103 第2命令デコーダ
104 第3命令デコーダ
105 第1命令数指定部
106 第2命令数指定部
107 第3命令数指定部
108 第1命令グループ化部
109 第2命令グループ化部
110 第3命令グループ化部
111 第1レジスタ
112 第2レジスタ
113 第3レジスタ
114 スレッド選択部
115 命令発行制御部
116 スレッドセレクタ
117、118 スレッド用レジスタセレクタ
119 演算器群
201 第1発行間隔抑制部
202 第2発行間隔抑制部
203 第3発行間隔抑制部
204 第1実行間隔指定部
205 第2実行間隔指定部
206 第3実行間隔指定部
301 ソースプログラム
302 実行形式コード
321 マルチスレッド実行制御指示解釈部
322 命令スケジューリング部
323 実行状態検出コード生成部
324 実行制御コード生成部
411 マルチスレッド実行制御システムコール処理部
412 逼迫度検出システムコール処理部
3221 応答性確保スケジューリング部

Claims (35)

  1. 複数のスレッドの命令を並列実行するマルチスレッドプロセッサであって、
    各々、命令を実行する複数の演算器と、
    スレッド毎に、当該スレッドに含まれる命令を、前記複数の演算器で同時実行可能な命令からなるグループにグループ化するグループ化部と、
    前記複数のスレッドの命令の実行頻度を制御することにより、前記マルチスレッドプロセッサの実行サイクル毎に、前記複数のスレッドの中から、前記複数の演算器に発行される命令を含むスレッドを選択するスレッド選択部と、
    前記マルチスレッドプロセッサの実行サイクル毎に、前記スレッド選択部で選択された前記スレッドに含まれる命令のうち、前記グループ化部でグループ化されたグループの命令を、前記複数の演算器に発行する命令発行部と
    を備えるマルチスレッドプロセッサ。
  2. さらに、スレッド毎に、前記グループ化部によりグループ化される前記グループに含まれる命令の最大個数を指定する命令数指定部を備え、
    前記グループ化部は、前記命令数指定部で指定された前記命令の最大個数を超えないように、命令をグループ化する
    請求項1記載のマルチスレッドプロセッサ。
  3. 前記命令数指定部は、レジスタに設定された値に従い、前記最大個数を指定する
    請求項2記載のマルチスレッドプロセッサ。
  4. 前記命令数指定部は、前記複数のスレッドに含まれる前記最大個数を指定するための命令に従い、前記最大個数を指定する
    請求項2記載のマルチスレッドプロセッサ。
  5. 前記スレッド選択部は、前記複数のスレッドの各々について、前記複数の演算器での命令の実行サイクル間隔を指定する実行間隔指定部を有し、前記実行間隔指定部により指定された実行サイクル間隔に従って、前記スレッドを選択する
    請求項1〜4のいずれか1項に記載のマルチスレッドプロセッサ。
  6. 前記実行間隔指定部は、レジスタに設定された値に従い、前記実行サイクル間隔を指定する
    請求項5記載のマルチスレッドプロセッサ。
  7. 前記実行間隔指定部は、前記複数のスレッドに含まれる前記実行サイクル間隔を指定するための命令に従い、前記実行サイクル間隔を指定する
    請求項5記載のマルチスレッドプロセッサ。
  8. 前記スレッド選択部は、複数のスレッド間で演算器の競合を起こす命令を発行したスレッドに対し、前記競合を起こす命令を一定の実行サイクル数だけ実行できないように抑制する発行間隔抑制部を有する
    請求項1〜7のいずれか1項に記載のマルチスレッドプロセッサ。
  9. ソースプログラムを実行形式コードに変換する、複数のスレッドの命令を並列実行するマルチスレッドプロセッサ向けのコンパイラであって、
    マルチスレッド制御に関するプログラマの指示を取得する指示取得部と、
    前記指示に基づいてプロセッサの実行モードを制御するコードを生成する制御コード生成部と
    を備えるコンパイラ。
  10. 前記指示取得部は、並列実行を注力する指示を取得する
    請求項9記載のコンパイラ。
  11. 前記指示取得部は、並列実行を注力しない指示を取得する
    請求項9記載のコンパイラ。
  12. 前記制御コード生成部は、前記指示に基づいて演算器数を増減させるコードを生成する
    請求項10または11に記載のコンパイラ。
  13. 前記指示取得部は、命令並列度についての指示を取得し、
    前記制御コード生成部は、前記命令並列度でスレッドを実行させるコードを生成する
    請求項9記載のコンパイラ。
  14. 前記指示取得部は、スレッドの実行数についての指示を取得する
    請求項9記載のコンパイラ。
  15. 前記指示取得部は、シングルスレッド実行についての指示を取得する
    請求項14記載のコンパイラ。
  16. 前記制御コード生成部は、前記指示に基づいてスレッドの実行数を制御するコードを生成する
    請求項14または15に記載のコンパイラ。
  17. 前記指示取得部は、スレッドの応答性の確保に関する指示を取得する
    請求項9記載のコンパイラ。
  18. 前記指示取得部は、ストールサイクルが発生する頻度に関する指示を取得する
    請求項9記載のコンパイラ。
  19. 前記指示取得部は、演算器資源の解放に関する指示を取得する
    請求項9記載のコンパイラ。
  20. 前記制御コード生成部は、前記指示に基づいて、一定頻度でストールサイクルが挿入されるコードを生成する
    請求項17〜19のいずれか1項に記載のコンパイラ。
  21. 前記制御コード生成部は、前記指示に基づいて、一定頻度で演算器資源を解放するコードを生成する
    請求項17〜19のいずれか1項に記載のコンパイラ。
  22. 前記指示は、前記ソースプログラム中の一定区間に対する指示である
    請求項9〜21のいずれか1項に記載のコンパイラ。
  23. ソースプログラムを実行形式コードに変換する、複数のスレッドの命令を並列実行するマルチスレッドプロセッサ向けのコンパイラであって、
    処理の逼迫度を検出するためのインタフェース
    を備えるコンパイラ。
  24. 前記インタフェースは、サイクルカウントを開始する地点を指示するインタフェースである
    請求項23記載のコンパイラ。
  25. 前記インタフェースは、前記逼迫度の測定地点におけるサイクル数の期待値を入力するするインタフェースである
    請求項23記載のコンパイラ。
  26. 前記インタフェースは、前記期待値と実サイクル数とから導いた逼迫度を返すインタフェースである
    請求項25記載のコンパイラ。
  27. 前記コンパイラは、さらに、
    前記逼迫度に応じた処理を生成するコード生成部を備える
    請求項23〜26のいずれか1項に記載のコンパイラ。
  28. 前記コード生成部は、前記逼迫度に応じて演算器資源を増減させるコードを生成する
    請求項27記載のコンパイラ。
  29. 前記コード生成部は、前記逼迫度に応じて命令並列度を増減させるコードを生成する
    請求項27記載のコンパイラ。
  30. 前記インタフェースは、コンパイラの組込み関数で実現される
    請求項23〜27のいずれか1項に記載のコンパイラ。
  31. 複数のスレッドの命令を並列実行するマルチスレッドプロセッサ向けのオペレーティングシステムであって、
    マルチスレッド制御に関するプログラマの指示に基づいて、プロセッサの実行モードを制御可能とするシステムコールを処理するシステムコード処理部
    を備えるオペレーティングシステム。
  32. 前記システムコールは、命令並列度に関するものである
    請求項31記載のオペレーティングシステム。
  33. 前記システムコールは、スレッドの実行数に関するものである
    請求項31記載のオペレーティングシステム。
  34. 前記システムコールは、サイクルカウントに関するものである
    請求項31記載のオペレーティングシステム。
  35. 前記システムコールは、逼迫度に応じた処理を実施するものである
    請求項31記載のオペレーティングシステム。
JP2009129607A 2009-05-28 2009-05-28 マルチスレッドプロセッサ Expired - Fee Related JP5463076B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2009129607A JP5463076B2 (ja) 2009-05-28 2009-05-28 マルチスレッドプロセッサ
CN201310647848.9A CN103631567A (zh) 2009-05-28 2010-03-18 多线程处理器、编译器装置及操作系统装置
PCT/JP2010/001931 WO2010137220A1 (ja) 2009-05-28 2010-03-18 マルチスレッドプロセッサ、コンパイラ装置およびオペレーティングシステム装置
CN201080009472.3A CN102334094B (zh) 2009-05-28 2010-03-18 多线程处理器、编译器装置及操作系统装置
US13/186,818 US20110276787A1 (en) 2009-05-28 2011-07-20 Multithread processor, compiler apparatus, and operating system apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009129607A JP5463076B2 (ja) 2009-05-28 2009-05-28 マルチスレッドプロセッサ

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2013151777A Division JP2013214331A (ja) 2013-07-22 2013-07-22 コンパイラ
JP2013151778A Division JP5654643B2 (ja) 2013-07-22 2013-07-22 マルチスレッドプロセッサ

Publications (2)

Publication Number Publication Date
JP2010277371A true JP2010277371A (ja) 2010-12-09
JP5463076B2 JP5463076B2 (ja) 2014-04-09

Family

ID=43222353

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009129607A Expired - Fee Related JP5463076B2 (ja) 2009-05-28 2009-05-28 マルチスレッドプロセッサ

Country Status (4)

Country Link
US (1) US20110276787A1 (ja)
JP (1) JP5463076B2 (ja)
CN (2) CN102334094B (ja)
WO (1) WO2010137220A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016157339A (ja) * 2015-02-25 2016-09-01 富士通株式会社 コンパイラプログラム、コンピュータプログラム及びコンパイラ装置

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US8972958B1 (en) 2012-10-23 2015-03-03 Convey Computer Multistage development workflow for generating a custom instruction set reconfigurable processor
US8713518B2 (en) * 2010-11-10 2014-04-29 SRC Computers, LLC System and method for computational unification of heterogeneous implicit and explicit processing elements
US10430190B2 (en) * 2012-06-07 2019-10-01 Micron Technology, Inc. Systems and methods for selectively controlling multithreaded execution of executable code segments
US8863068B2 (en) 2012-06-18 2014-10-14 International Business Machines Corporation Current-aware floorplanning to overcome current delivery limitations in integrated circuits
US8914764B2 (en) 2012-06-18 2014-12-16 International Business Machines Corporation Adaptive workload based optimizations coupled with a heterogeneous current-aware baseline design to mitigate current delivery limitations in integrated circuits
US8826216B2 (en) * 2012-06-18 2014-09-02 International Business Machines Corporation Token-based current control to mitigate current delivery limitations in integrated circuits
US8826203B2 (en) 2012-06-18 2014-09-02 International Business Machines Corporation Automating current-aware integrated circuit and package design and optimization
US20140233582A1 (en) * 2012-08-29 2014-08-21 Marvell World Trade Ltd. Semaphore soft and hard hybrid architecture
CN104750533B (zh) * 2013-12-31 2018-10-19 上海东软载波微电子有限公司 C程序编译方法及编译器
US9575802B2 (en) * 2014-10-28 2017-02-21 International Business Machines Corporation Controlling execution of threads in a multi-threaded processor
US11080064B2 (en) 2014-10-28 2021-08-03 International Business Machines Corporation Instructions controlling access to shared registers of a multi-threaded processor
US9753776B2 (en) * 2015-12-01 2017-09-05 International Business Machines Corporation Simultaneous multithreading resource sharing
DE102016211286A1 (de) * 2016-06-23 2017-12-28 Siemens Aktiengesellschaft Verfahren zum synchronisierten Betrieb von Mehrkernprozessoren
US10169248B2 (en) 2016-09-13 2019-01-01 International Business Machines Corporation Determining cores to assign to cache hostile tasks
US10204060B2 (en) 2016-09-13 2019-02-12 International Business Machines Corporation Determining memory access categories to use to assign tasks to processor cores to execute
CN107885675B (zh) * 2017-11-23 2019-12-27 中国电子科技集团公司第四十一研究所 一种多功能测量仪器程控命令处理方法
WO2021056277A1 (zh) * 2019-09-25 2021-04-01 西门子股份公司 一种执行程序的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08147165A (ja) * 1994-11-25 1996-06-07 Fujitsu Ltd マルチコンテキストをサポートするプロセッサおよび処理方法
JPH09319597A (ja) * 1996-03-28 1997-12-12 Hitachi Ltd 周期的プロセスのスケジューリング方法
JP2001306324A (ja) * 2000-03-30 2001-11-02 Agere Systems Guardian Corp マルチスレッドvliwプロセッサにおける分割可能なパケットを識別するための方法および装置
JP2006127302A (ja) * 2004-10-29 2006-05-18 Internatl Business Mach Corp <Ibm> 情報処理装置、コンパイラ、及びコンパイラプログラム

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4472773A (en) * 1981-09-16 1984-09-18 Honeywell Information Systems Inc. Instruction decoding logic system
US6567839B1 (en) * 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
US7096343B1 (en) * 2000-03-30 2006-08-22 Agere Systems Inc. Method and apparatus for splitting packets in multithreaded VLIW processor
US7657893B2 (en) * 2003-04-23 2010-02-02 International Business Machines Corporation Accounting method and logic for determining per-thread processor resource utilization in a simultaneous multi-threaded (SMT) processor
US20050108695A1 (en) * 2003-11-14 2005-05-19 Long Li Apparatus and method for an automatic thread-partition compiler
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US7237094B2 (en) * 2004-10-14 2007-06-26 International Business Machines Corporation Instruction group formation and mechanism for SMT dispatch
US7254697B2 (en) * 2005-02-11 2007-08-07 International Business Machines Corporation Method and apparatus for dynamic modification of microprocessor instruction group at dispatch
US7917907B2 (en) * 2005-03-23 2011-03-29 Qualcomm Incorporated Method and system for variable thread allocation and switching in a multithreaded processor
JP2007109057A (ja) * 2005-10-14 2007-04-26 Hitachi Ltd プロセッサ
US7721127B2 (en) * 2006-03-28 2010-05-18 Mips Technologies, Inc. Multithreaded dynamic voltage-frequency scaling microprocessor
US8032737B2 (en) * 2006-08-14 2011-10-04 Marvell World Trade Ltd. Methods and apparatus for handling switching among threads within a multithread processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08147165A (ja) * 1994-11-25 1996-06-07 Fujitsu Ltd マルチコンテキストをサポートするプロセッサおよび処理方法
JPH09319597A (ja) * 1996-03-28 1997-12-12 Hitachi Ltd 周期的プロセスのスケジューリング方法
JP2001306324A (ja) * 2000-03-30 2001-11-02 Agere Systems Guardian Corp マルチスレッドvliwプロセッサにおける分割可能なパケットを識別するための方法および装置
JP2006127302A (ja) * 2004-10-29 2006-05-18 Internatl Business Mach Corp <Ibm> 情報処理装置、コンパイラ、及びコンパイラプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016157339A (ja) * 2015-02-25 2016-09-01 富士通株式会社 コンパイラプログラム、コンピュータプログラム及びコンパイラ装置

Also Published As

Publication number Publication date
US20110276787A1 (en) 2011-11-10
CN103631567A (zh) 2014-03-12
JP5463076B2 (ja) 2014-04-09
CN102334094A (zh) 2012-01-25
WO2010137220A1 (ja) 2010-12-02
CN102334094B (zh) 2014-03-05

Similar Documents

Publication Publication Date Title
JP5463076B2 (ja) マルチスレッドプロセッサ
JP5678135B2 (ja) オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構
JP5631976B2 (ja) マルチスレッドマイクロプロセッサにおける命令の発行をスケジュールするための方法及び装置
JP4476636B2 (ja) 命令語数に実行周期回数を加重値として用いてスレッドをフェッチする同時多重スレッドプロセッサ及びその方法
TW539997B (en) Method and apparatus for identifying splittable packets in a multithreaded VLIW processor
JP5411587B2 (ja) マルチスレッド実行装置、マルチスレッド実行方法
US20070074217A1 (en) Scheduling optimizations for user-level threads
JP5607545B2 (ja) マイクロプロセッサシステムにおける命令フェッチングの優先順位付け
JP5173714B2 (ja) マルチスレッドプロセッサ及びその割り込み処理方法
JP5666473B2 (ja) マルチスレッド式データ処理システム
US8560813B2 (en) Multithreaded processor with fast and slow paths pipeline issuing instructions of differing complexity of different instruction set and avoiding collision
US11366669B2 (en) Apparatus for preventing rescheduling of a paused thread based on instruction classification
JP2008529119A (ja) マルチスレッドプロセッサ
KR20150072734A (ko) 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법
JP2008522277A (ja) 優先度の付けられたタスク間の効率的な切り換え
US8612958B2 (en) Program converting apparatus and program conversion method
JP2004206692A (ja) マルチスレッド化プロセッサ・システム上での実行のために、スレッドについての優先順位値を決定する方法および装置
JP2005129001A (ja) プログラム実行装置、マイクロプロセッサ及びプログラム実行方法
JP5654643B2 (ja) マルチスレッドプロセッサ
JP2013214331A (ja) コンパイラ
JP2003167748A (ja) マルチスレッド計算機
Shin et al. Dynamic scheduling issues in SMT architectures
JP2011008617A (ja) マルチスレッド実行装置、オブジェクトプログラムの生成方法、プログラム
JP2006065682A (ja) コンパイラプログラム、コンパイル方法およびコンパイラ装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120312

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130604

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130722

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131112

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140120

R150 Certificate of patent or registration of utility model

Ref document number: 5463076

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees