説明

ベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラム

【課題】キャッシュメモリと主記憶装置との間の負荷を軽減し、ロードバッファの解放タイミングを早める。
【解決手段】投機的に実行されるベクトルロード命令が発行された場合に、ベクトルデータのバッファ領域M2を確保するロードバッファ管理部31と、メモリアクセスリクエストに基づいて要素データをキャッシュメモリM1又は主記憶装置9から読み出し、読み出した要素データをバッファ領域M2に格納させるキャッシュ処理部4と、投機的実行に成功した場合にバッファ領域の要素データをベクトルレジスタM3に転送してからバッファ領域M2を解放し、一方、投機的実行に失敗した場合にバッファ領域M2の要素データをベクトルレジスタM3に転送せずにバッファ領域M2を解放するベクトル処理部6とを備え、キャッシュ処理部4は投機的実行に失敗した場合に要素データの主記憶装置9からの読み出しを抑止する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラムに関する。
【背景技術】
【0002】
下記特許文献1および特許文献2には、ベクトル演算を実行するベクトル演算処理装置に関する技術が開示されている。特許文献1に記載のベクトル演算処理装置は、非投機的にプリフェッチしたデータがアクセスされる前にキャッシュメモリから破棄されてしまうことを防止するために、アクセスの有無を確認するためのフラグを設け、フラグの内容に応じてキャッシュメモリからの破棄の可否を判断している。特許文献2に記載のベクトル演算処理装置は、主記憶装置から読み出してロードバッファに格納したベクトルデータを、ロードバッファからベクトル処理部に転送するタイミングを、ベクトルデータを構成する要素群ごとに決定している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2009−98934号公報
【特許文献2】特開2009−252133号公報
【0004】
上記特許文献1に記載のベクトル演算処理装置は、ベクトルデータがキャッシュメモリに存在しない場合には、主記憶装置からベクトルデータを読み出す。したがって、例えば投機的実行が失敗した場合であっても、その投機的実行にかかわるベクトルデータがキャッシュメモリに存在しなければ主記憶装置から読み出すことになる。この場合には、キャッシュメモリと主記憶装置との間に、本来必要としない負荷が発生してしまう。
【0005】
上記特許文献2に記載のベクトル演算処理装置は、キャッシュメモリを備えていないため、全データを主記憶装置から読み出す。したがって、例えば投機的実行が失敗した場合であっても、その投機的実行にかかわるベクトルデータを主記憶装置から全て読み出した後に、ロードバッファのデータを破棄してロードバッファを解放することになる。この場合には、主記憶装置にアクセスするレイテンシ分、ロードバッファの解放が遅れてしまう。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明は、上述した課題を解決するためになされたものであり、キャッシュメモリと主記憶装置との間の負荷を軽減し、ロードバッファの解放タイミングを早めることができるベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明のベクトル演算処理装置は、投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保部と、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御部と、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納部と、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル処理部と、を備え、前記メモリ制御部は、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する。
【0008】
本発明のベクトル演算処理方法は、投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保ステップと、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御ステップと、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納ステップと、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル演算処理ステップと、を含み、前記メモリ制御ステップは、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する。
【0009】
本発明のベクトル演算処理プログラムは、上記ベクトル演算処理方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【0010】
本発明によれば、キャッシュメモリと主記憶装置との間の負荷を軽減し、ロードバッファの解放タイミングを早めることができる。
【図面の簡単な説明】
【0011】
【図1】実施形態におけるプロセッサの構成を例示するブロック図である。
【図2】実施形態におけるプロセッサの動作を説明するためのフローチャート(その1)である。
【図3】実施形態におけるプロセッサの動作を説明するためのフローチャート(その2)である。
【図4】実施形態におけるプロセッサの動作タイミングの一例を示すタイミングチャートである。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して、本発明に係るベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラムの好適な実施形態について説明する。
【0013】
まず、図1を参照して、実施形態におけるベクトル演算処理装置の構成について説明する。本実施形態では、ベクトル演算処理装置の具体例として、ベクトル演算を処理可能なプロセッサを用いて説明する。
【0014】
プロセッサ1は、機能的には、例えば、命令制御部2と、メモリ制御部3と、キャッシュ処理部4と、ベクトル制御部5と、ベクトル処理部6とを有する。命令制御部2は、命令解読部21とスカラ処理部22とを含む。
【0015】
命令解読部21は、キャッシュメモリM1または主記憶装置9から読み出した命令を解読する。命令解読部21は、解読した命令がベクトルロード命令である場合に、そのベクトルロード命令をメモリ制御部3およびベクトル制御部5に送出する。ベクトルロード命令には、例えば、ロードするベクトルデータの主記憶装置9のアドレスを特定する情報(例えば開始アドレスとベクトルデータの間隔)、ベクトルデータを構成する要素の数、ベクトルデータをロードするベクトルレジスタの番号等が含まれる。
【0016】
スカラ処理部22は、命令解読部21により解読された命令がスカラ命令である場合に、そのスカラ命令で指定された処理を実行する。
【0017】
メモリ制御部3は、命令制御部2からメモリアクセスに関する命令を受信した場合に、キャッシュメモリM1へのアクセス処理を制御する。例えば、ベクトルロード命令を受信した場合、メモリ制御部3は、ベクトルデータの要素ごとに、メモリアクセスリクエスト(要求信号)を生成する。そして、メモリ制御部3は、各メモリアクセスリクエストを個別にキャッシュ処理部4に送出し、キャッシュ処理部4とベクトル処理部6との間のデータのやり取りを制御する。
【0018】
メモリ制御部3は、投機的に実行されるベクトルロード命令に対応するメモリアクセスリクエストに付加する抑止フラグの値を設定する。抑止フラグは、初期値として“0”が設定され、投機的実行が失敗したときに“1”が設定される。
【0019】
ここで、投機的実行とは、コンピュータが実際にはその結果を捨ててしまうかもしれないコードを投機的に実行することをいう。具体的には、例えば条件分岐命令が現れた場合に、予測した分岐先のコードを予め実行することである。
【0020】
投機的実行が失敗したとは、実際の分岐先が予測した分岐先と異なったことをいう。この場合には、予測した分岐先以降の実行結果を使用せずに、実際の分岐先のコードを改めて実行することになる。
【0021】
投機的実行が成功したとは、実際の分岐先が予測した分岐先と一致したことをいう。この場合には、予測した分岐先以降の実行結果を使用して処理が進行することになる。
【0022】
投機的実行の正否は、命令制御部2により判定(決定)され、その結果がメモリ制御部3に通知される。
【0023】
メモリ制御部3は、ロードバッファM2の空き領域を管理するロードバッファ管理部31を有する。ロードバッファ管理部31は、ベクトルロード命令を受信した場合に、空き状態のロードバッファ領域の中から、受信したベクトルロード命令用に、一つのロードバッファ領域を割り当てる。ロードバッファ管理部31は、割り当てたロードバッファ領域を使用中の状態にする。
【0024】
メモリ制御部3は、ベクトルロード命令用に割り当てたロードバッファ領域を一意に特定するバッファ番号を、メモリアクセスリクエストに付与し、このメモリアクセスリクエストをキャッシュ処理部4に送出する。これと並行して、メモリ制御部3は、ベクトルロード命令とバッファ番号との対応関係を示す情報をベクトル制御部5に通知する。
【0025】
キャッシュ処理部4は、メモリ制御部3から受信したメモリアクセスリクエストに従って主記憶装置9とベクトル処理部6との間のデータのやり取りを制御する。例えば、キャッシュ処理部4は、受信したメモリアクセスリクエストがベクトルロード命令によるものである場合、キャッシュメモリM1または主記憶装置9から読み出したベクトルデータを構成する要素ごとのデータ(以下、「要素データ」という。)に対して、メモリアクセスリクエストに含まれるバッファ番号を付与し、ベクトル処理部6に送出する。
【0026】
キャッシュ処理部4は、要素データがキャッシュヒットした場合には、キャッシュメモリM1から要素データを読み出す。
【0027】
ここで、要素データがキャッシュヒットしたとは、要素データがキャッシュメモリM1に存在し、要素データをキャッシュメモリM1から読み出すことができることをいう。要素データがキャッシュミスしたとは、要素データがキャッシュメモリM1に存在せず、要素データをキャッシュメモリM1から読み出すことができないことをいう。
【0028】
キャッシュ処理部4は、要素データがキャッシュミスし、かつ、メモリアクセスリクエストの抑止フラグが“0”である場合には、要素データの読み出し命令を主記憶装置9に送出し、主記憶装置9から読み出された要素データを取得する。
【0029】
キャッシュ処理部4は、要素データがキャッシュミスし、かつ、メモリアクセスリクエストの抑止フラグが“1”である場合には、要素データの代替となる代替データをキャッシュメモリM1から読み出す。つまり、メモリアクセスリクエストの抑止フラグを“1”に設定することで、要素データの主記憶装置9からの読み出しを抑止することが可能となる。なお、代替データは、予め設定したデータであってもよいし、任意に読み出したデータであってもよい。
【0030】
キャッシュ処理部4は、メモリアクセスリクエストに基づいて得られた要素データをリプライデータとして、ベクトル処理部6に送出する。これにより、要素データがロードバッファM2のバッファ領域に格納される。
【0031】
なお、キャッシュ処理部4とベクトル処理部6との間の信号線を多重化することで、複数のメモリアクセスリクエストに対応するベクトルデータを並行してベクトル処理部6に送出することが可能となる。
【0032】
ベクトル処理部6は、投機的実行が成功した場合には、ロードバッファM2のバッファ領域に格納されたベクトルデータをベクトルレジスタM3に転送してから当該バッファ領域を解放する。
【0033】
ベクトル処理部6は、投機的実行が失敗した場合には、ロードバッファM2のバッファ領域に格納されたベクトルデータをベクトルレジスタM3に転送せずに当該バッファ領域を解放する。
【0034】
ベクトル処理部6は、ベクトルレジスタM3に格納されたベクトルデータに対してベクトル演算を実行する。
【0035】
なお、ベクトル処理部6には、ベクトル演算されたベクトルデータを主記憶装置9にストアするストアバッファ等、ベクトルロード以外に利用する構成要素も含まれるが、これらの構成要素については本発明と直接関係しないため図示や説明を省略する。
【0036】
次に、図2〜図4を参照して、実施形態におけるプロセッサの動作について説明する。図2および図3は、プロセッサの動作を説明するフローチャートである。図4は、プロセッサの動作タイミングの一例を示すタイミングチャートである。
【0037】
最初に、命令制御部2は、キャッシュメモリM1または主記憶装置9から読み出した命令を命令解読部21に解読させ、解読した命令がベクトルロード命令である場合に、ベクトルロード命令をメモリ制御部3に発行する(ステップS101)。
【0038】
続いて、メモリ制御部3は、ベクトルロード命令を受信すると、ロードバッファ管理部31にロードバッファ領域を確保させ(ステップS102)、メモリアクセスリクエストに付与する抑止フラグを“0”に設定する(ステップS103)。
【0039】
続いて、メモリ制御部3は、抑止フラグを付与したメモリアクセスリクエストを、ベクトルデータの要素ごとに、キャッシュ処理部4に発行する(ステップS104)。
【0040】
続いて、メモリ制御部3は、ベクトルデータの全要素分のメモリアクセスリクエストの発行が終了したか否かを判定する(ステップS105)。この判定がYESである場合(ステップS105;YES)には、メモリアクセスリクエストの発行処理を終了する。
【0041】
一方、上記ステップS105の判定で全要素分のメモリアクセスリクエストの発行が終了していないと判定された場合(ステップS105;NO)に、メモリ制御部3は、ベクトルロード命令が投機的に実行される投機的実行命令であり、かつ、命令制御部2から投機的実行が失敗した旨の通知を受信したか否かを判定する(ステップS106)。この判定がNOである場合(ステップS106;NO)には、処理を上記ステップS104に移行する。
【0042】
一方、上記ステップS106の判定において、ベクトルロード命令が投機的実行命令であり、かつ、投機的実行が失敗した旨の通知を受信したと判定された場合(ステップS106;NO)に、メモリ制御部3は、これ以降にメモリアクセスリクエストに付与する抑止フラグを“1”に設定し(ステップS107)、投機的実行が失敗した旨の通知をロードバッファ管理部31に送出する。そして、処理を上記ステップS104に移行する。
【0043】
一方、上記ステップS104で発行されたメモリアクセスリクエストを受信したキャッシュ処理部4は、要素データがキャッシュヒットしたか、または、抑止フラグが“1”であるか否かを判定する(ステップS108)。この判定がNOである場合(ステップS108;NO)に、キャッシュ処理部4は、キャッシュメモリM1から要素データを読み出す(ステップS109)。一方、この判定がYESである場合(ステップS108;YES)に、キャッシュ処理部4は、要素データの読み出し命令を主記憶装置9に送出し、主記憶装置9から読み出された要素データを取得する(ステップS110)。
【0044】
続いて、キャッシュ処理部4は、メモリアクセスリクエストに基づいて得られた要素データをリプライデータとして、ベクトル処理部6に送出する(ステップS111)。
【0045】
続いて、ベクトル処理部6は、キャッシュ処理部4から受信したリプライデータをロードバッファM2に格納する(ステップS112)。
【0046】
続いて、ベクトル処理部6は、ベクトルデータの全要素分のリプライデータを受信するまで待機する(ステップS113)とともに、ベクトルロード命令が投機的実行命令である場合には、投機的実行が確定するまで待機する(ステップS114)。
【0047】
続いて、ベクトルデータの全要素分のリプライデータを受信し(ステップS113;YES)、かつ、投機的実行が確定した(ステップS114;YES)場合に、ベクトル処理部6は、投機的実行が成功したか否かを判定する(ステップS115)。この判定がYESである場合(ステップS115;YES)に、ベクトル処理部6は、ロードバッファM2に格納したリプライデータをベクトルレジスタM3に転送し(ステップS116)、その後、そのロードバッファM2を解放する(ステップS117)。そして、本動作を終了する。
【0048】
一方、上記ステップS115の判定で投機的実行が失敗したと判定された場合(ステップS115;NO)に、ベクトル処理部6は、ロードバッファM2に格納したリプライデータを転送せずに、そのロードバッファM2を解放する(ステップS117)。そして、本動作を終了する。
【0049】
上述したように、本実施形態におけるプロセッサ1によれば、投機的実行が失敗したベクトルロード命令については、キャッシュ処理部4から主記憶装置9へのメモリアクセスを抑止することができる(例えば、図4のステップS110’参照)。これにより、プロセッサ1と主記憶装置9との間の負荷を軽減することができる。
【0050】
また、本実施形態におけるプロセッサ1によれば、投機的実行が失敗したベクトルロード命令については、キャッシュヒットの正否に関わらず、キャッシュメモリM1からデータを返信することができるため、ロードバッファM2のバッファ領域を解放するタイミングを早めることができる(例えば、図4の符号D部分を参照)。これにより、ロードバッファの利用効率を向上させることができる。
【0051】
[変形例]
なお、上述した実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【0052】
例えば、上述した実施形態では、キャッシュ処理部4をメモリ制御部3から独立させて設けているが、キャッシュ処理部4をメモリ制御部3の一部に含めてもよい。また、上述した実施形態では、ロードバッファ管理部31をメモリ制御部3の一部に含めているが、ロードバッファ管理部31をメモリ制御部3から独立させて設けてもよい。
【0053】
上記の実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明を以下に限定するものではない。
【0054】
(付記1) 投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保部と、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御部と、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納部と、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル処理部と、を備え、前記メモリ制御部は、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する、ことを特徴とするベクトル演算処理装置。
【0055】
(付記2) 各前記要求信号には、投機的な実行の正否を示すフラグ情報がそれぞれ含まれ、前記メモリ制御部は、前記要求信号に含まれる前記フラグ情報が投機的な実行が失敗したことを示す場合に、前記要素データの前記主記憶装置からの読み出しを抑止する、ことを特徴とする付記1記載のベクトル演算処理装置。
【0056】
(付記3) 投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保ステップと、前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御ステップと、前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納ステップと、投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル演算処理ステップと、を含み、前記メモリ制御ステップは、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する、ことを特徴とするベクトル演算処理方法。
【0057】
(付記4) 付記3に記載の各ステップをコンピュータに実行させるためのベクトル演算処理プログラム。
【符号の説明】
【0058】
1…プロセッサ、2…命令制御部、3…メモリ制御部、4…キャッシュ処理部、5…ベクトル制御部、6…ベクトル処理部、9…主記憶装置、21…命令解読部、22…スカラ処理部、31…ロードバッファ管理部、M1…キャッシュメモリ、M2…ロードバッファ、M3…ベクトルレジスタ。

【特許請求の範囲】
【請求項1】
投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保部と、
前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御部と、
前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納部と、
投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル処理部と、を備え、
前記メモリ制御部は、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する、
ことを特徴とするベクトル演算処理装置。
【請求項2】
各前記要求信号には、投機的な実行の正否を示すフラグ情報がそれぞれ含まれ、
前記メモリ制御部は、前記要求信号に含まれる前記フラグ情報が投機的な実行が失敗したことを示す場合に、前記要素データの前記主記憶装置からの読み出しを抑止する、
ことを特徴とする請求項1記載のベクトル演算処理装置。
【請求項3】
投機的に実行されるベクトルロード命令が発行された場合に、当該ベクトルロード命令に対応するベクトルデータを格納するためのバッファ領域を確保するバッファ領域確保ステップと、
前記ベクトルデータを構成する複数の要素データをそれぞれ読み出すように要求する要求信号に基づいて、前記要素データをキャッシュメモリからそれぞれ読み出し、当該要素データが前記キャッシュメモリに格納されていない場合には、当該要素データを主記憶装置から読み出すメモリ制御ステップと、
前記メモリ制御部により読み出された前記要素データを前記バッファ領域に格納するバッファ格納ステップと、
投機的な実行による実行結果を使用することが決定した場合には、前記バッファ領域に格納された前記要素データをベクトルレジスタに転送してから当該バッファ領域を解放する、一方、投機的な実行による実行結果を使用しないことが決定した場合には、前記バッファ領域に格納された前記要素データを前記ベクトルレジスタに転送せずに当該バッファ領域を解放する、ベクトル演算処理ステップと、を含み、
前記メモリ制御ステップは、投機的な実行による実行結果を使用しないことが決定した場合には、前記要素データの前記主記憶装置からの読み出しを抑止する、
ことを特徴とするベクトル演算処理方法。
【請求項4】
請求項3に記載の各ステップをコンピュータに実行させるためのベクトル演算処理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2012−128656(P2012−128656A)
【公開日】平成24年7月5日(2012.7.5)
【国際特許分類】
【出願番号】特願2010−279493(P2010−279493)
【出願日】平成22年12月15日(2010.12.15)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】