(57)【要約】【課題】  演算処理に複数の入力側のＦＩＦＯバッファを使用する場合でも、演算処理の効率低下を抑制する。【解決手段】  演算装置は、演算部と、複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、メモリからメモリアクセス部を介して転送された第１データを順次記憶し、記憶した第１データを演算部に順次転送する複数の第１のバッファと、演算部から転送された第２データを順次記憶する第２のバッファとを有し、メモリアクセス部は、各バッファのアクセスの優先順位を、第１のバッファに残っている第１データの数と予め設定された閾値との比較結果に基づいて決定する判定部と、複数のバッファのアクセス先が同じバンクのとき、優先順位に基づいて、バンクにアクセスするバッファを選択する調停部と有している。【選択図】  図１
2015219876.tif 000002
【特許請求の範囲】
【請求項１】
演算を実行する演算部と、
複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、
前記メモリから前記メモリアクセス部を介して転送された第１データを順次記憶し、記憶した前記第１データを前記演算部に順次転送する複数の第１のバッファと、
前記演算部から転送された第２データを順次記憶し、記憶した前記第２データを前記メモリアクセス部を介して前記メモリに順次転送する第２のバッファとを備え、
前記メモリアクセス部は、
複数の前記バッファのアクセス先が同じ前記バンクである場合の前記各バッファのアクセスの優先順位を、前記第１のバッファに残っている前記第１データの数と予め設定された閾値との比較結果に基づいて決定する判定部と、
複数の前記バッファのアクセス先が同じ前記バンクのとき、前記優先順位に基づいて、前記バンクにアクセスする前記バッファを選択する調停部と
を備えていることを特徴とする演算装置。
【請求項２】
請求項１に記載の演算装置において、
前記判定部は、前記第１のバッファに残っている前記第１データの数が前記閾値以下で、かつ、前記第２のバッファに前記第２データを記憶する分の空きがあるとき、前記第１のバッファの前記優先順位を前記第２のバッファの前記優先順位より高く設定し、前記第１のバッファに残っている前記第１データの数が前記閾値を超えているとき、あるいは、前記第２のバッファに前記第２データを記憶する分の空きがないとき、前記第２のバッファの前記優先順位を前記第１のバッファの前記優先順位より高く設定する
ことを特徴とする演算装置。
【請求項３】
演算を実行する演算部と、
複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、
前記メモリから前記メモリアクセス部を介して転送された第１データを順次記憶し、記憶した前記第１データを前記演算部に順次転送する複数の第１のバッファと、
前記演算部から転送された第２データを順次記憶し、記憶した前記第２データを前記メモリアクセス部を介して前記メモリに順次転送する第２のバッファとを備え、
前記メモリアクセス部は、
複数の前記バッファのアクセス先が同じ前記バンクである場合の前記各バッファのアクセスの優先順位を、前記第２のバッファに残っている前記第２データの数と予め設定された閾値との比較結果に基づいて決定する判定部と、
複数の前記バッファのアクセス先が同じ前記バンクのとき、前記優先順位に基づいて、前記バンクにアクセスする前記バッファを選択する調停部と
を備えていることを特徴とする演算装置。
【請求項４】
請求項３に記載の演算装置において、
前記判定部は、前記第２のバッファに残っている前記第２データの数が前記閾値以上で、かつ、前記第１のバッファに前記第１データが残っているとき、前記第２のバッファの前記優先順位を前記第１のバッファの前記優先順位より高く設定し、前記第２のバッファに残っている前記第２データの数が前記閾値未満のとき、あるいは、前記第１のバッファに前記第１データが残っていないとき、前記第１のバッファの前記優先順位を前記第２のバッファの前記優先順位より高く設定する
ことを特徴とする演算装置。
【請求項５】
請求項１ないし請求項４のいずれか１項に記載の演算装置において、
前記判定部は、複数の前記第１のバッファのそれぞれの前記優先順位を、前記第１のバッファに残っている前記第１データの数が少ない方を優先するように設定する
ことを特徴とする演算装置。
【請求項６】
演算を実行する演算部と、
複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、
前記メモリから前記メモリアクセス部を介して転送された第１データを順次記憶し、記憶した前記第１データを前記演算部に順次転送する複数の第１のバッファと、
前記演算部から転送された第２データを順次記憶し、記憶した前記第２データを前記メモリアクセス部を介して前記メモリに順次転送する第２のバッファとを備え、
前記メモリアクセス部は、
複数の前記第１のバッファのアクセス先が同じ前記バンクである場合の前記第１のバッファのそれぞれの優先順位を、前記第１のバッファに残っている前記第１データの数が少ない方を優先するように設定する判定部と、
複数の前記第１のバッファのアクセス先が同じ前記バンクのとき、前記優先順位に基づいて、前記バンクにアクセスする前記第１のバッファを選択する調停部と
を備えていることを特徴とする演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置に関する。
【背景技術】
【０００２】
演算装置は、例えば、無線通信ベースバンド等の処理で、大量の行列演算処理を実行する。大量の配列データを扱う場合は、１つの命令で複数のデータを並列に処理するＳＩＭＤ（Single Instruction Multiple Data）方式が適している。例えば、演算装置は、行列演算処理用の１つの命令を実行する場合、複数のサイクルに渡って、複数のデータをメモリからロードし、ロードしたデータを用いて演算を実行し、演算結果をメモリにストアする。
【０００３】
例えば、配列データの乗算命令では、２つのソースオペランドと１つのデスティネーションオペランドとが指定される。この場合、ソースオペランドやデスティネーションオペランドで指定された複数の配列データの転送を同時に実行可能なメモリインターリーブ方式を用いることにより、演算処理の効率は向上する。メモリインターリーブ方式では、メモリは、互いに独立に動作可能な複数のバンクを有している。
【０００４】
また、メモリアクセス等の処理の乱れを低減するために、演算を実行する演算部とメモリとの間のデータ転送は、例えば、ＦＩＦＯ（First-In First-Out）バッファを介して実行される（例えば、特許文献１参照）。例えば、演算装置は、メモリから転送されたデータ（演算部に転送するデータ）を記憶する入力側のＦＩＦＯバッファと、メモリに転送するデータ（演算部から転送されたデータ）を記憶する出力側のＦＩＦＯバッファとを有する。
【０００５】
これにより、例えば、複数の配列データを転送する際の複数のメモリアクセスが同じバンクに対して同時に発生した場合にも、メモリアクセス等の処理の乱れは低減される。以下、バンクに対するアクセスが競合することをバンク衝突とも称する。
【０００６】
なお、メモリインターリーブ方式において、各バンクへのアクセスを分散させて、各バンクに対する書き込み処理における遅延時間の影響を抑制する装置が提案されている（例えば、特許文献２参照）。この種の装置は、例えば、画像処理等でストライドアクセスを実行する複数のＤＭＡＣ（Direct Memory Access Controller）を有し、複数のＤＭＡＣから１つのＤＭＡＣを選択する。この際、ストライド長に応じた回数を上限として、１つのＤＭＡＣが複数のＤＭＡＣから連続的に選択される。
【０００７】
また、入力側のＦＩＦＯバッファと出力側のＦＩＦＯバッファとをそれぞれ１つ有する装置において、２つのＦＩＦＯバッファからのアクセスが競合したときの優先順位を決定する方法が提案されている（例えば、特許文献３参照）。例えば、２つのＦＩＦＯバッファ（入力側のＦＩＦＯバッファおよび出力側のＦＩＦＯバッファ）の状態の比較結果に基づいて、２つのＦＩＦＯバッファからのアクセスが競合したときの優先順位が決定される。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１３−２０５９７３号公報
【特許文献２】特開２００６−３１８１７８号公報
【特許文献３】特開２００３−１８６８２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
メモリのバンクに対するアクセスが複数のＦＩＦＯバッファで競合した場合、競合したＦＩＦＯバッファのどのＦＩＦＯバッファにメモリアクセスの優先権を与えるかを決定する調停アルゴリズムにより、演算装置の性能が変化する。例えば、メモリアクセスの優先順位が固定されている演算装置では、一連の行列演算処理中に、バンク衝突が周期的に発生する場合がある。この場合、演算処理の効率は低下する。なお、複数の入力側のＦＩＦＯバッファを有する演算装置において、バンク衝突の発生を低減する手法は提案されていない。
【００１０】
１つの側面では、本件開示の演算装置は、演算処理に複数の入力側のＦＩＦＯバッファを使用する場合でも、演算処理の効率低下を抑制することを目的とする。
【課題を解決するための手段】
【００１１】
一観点によれば、演算装置は、演算を実行する演算部と、複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、メモリからメモリアクセス部を介して転送された第１データを順次記憶し、記憶した第１データを演算部に順次転送する複数の第１のバッファと、演算部から転送された第２データを順次記憶し、記憶した第２データをメモリアクセス部を介してメモリに順次転送する第２のバッファとを有し、メモリアクセス部は、複数のバッファのアクセス先が同じバンクである場合の各バッファのアクセスの優先順位を、第１のバッファに残っている第１データの数と予め設定された閾値との比較結果に基づいて決定する判定部と、複数のバッファのアクセス先が同じバンクのとき、優先順位に基づいて、バンクにアクセスするバッファを選択する調停部と有している。
【００１２】
別の観点によれば、演算装置は、演算を実行する演算部と、複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、メモリからメモリアクセス部を介して転送された第１データを順次記憶し、記憶した第１データを演算部に順次転送する複数の第１のバッファと、演算部から転送された第２データを順次記憶し、記憶した第２データをメモリアクセス部を介してメモリに順次転送する第２のバッファとを有し、メモリアクセス部は、複数のバッファのアクセス先が同じバンクである場合の各バッファのアクセスの優先順位を、第２のバッファに残っている第２データの数と予め設定された閾値との比較結果に基づいて決定する判定部と、複数のバッファのアクセス先が同じバンクのとき、優先順位に基づいて、バンクにアクセスするバッファを選択する調停部とを有している。
【００１３】
別の観点によれば、演算装置は、演算を実行する演算部と、複数のバンクを含むメモリに対するアクセスを制御するメモリアクセス部と、メモリからメモリアクセス部を介して転送された第１データを順次記憶し、記憶した第１データを演算部に順次転送する複数の第１のバッファと、演算部から転送された第２データを順次記憶し、記憶した第２データをメモリアクセス部を介してメモリに順次転送する第２のバッファとを有し、メモリアクセス部は、複数の第１のバッファのアクセス先が同じバンクである場合の第１のバッファのそれぞれの優先順位を、第１のバッファに残っている第１データの数が少ない方を優先するように設定する判定部と、複数の第１のバッファのアクセス先が同じバンクのとき、優先順位に基づいて、バンクにアクセスする第１のバッファを選択する調停部とを有している。
【発明の効果】
【００１４】
本件開示の演算装置は、演算処理に複数の入力側のＦＩＦＯバッファを使用する場合でも、演算処理の効率低下を抑制できる。
【図面の簡単な説明】
【００１５】
【図１】演算装置の一実施形態を示す図である。
【図２】図１に示した演算装置の動作の一例を示す図である。
【図３】図１に示した演算装置の調停動作の一例を示す図である。
【図４】図３に示した調停動作の比較例を示す図である。
【図５】演算装置の調停動作の別の例を示す図である。
【図６】図５に示した調停動作の比較例を示す図である。
【図７】演算装置の別の実施形態を示す図である。
【図８】図７に示した演算装置の動作の一例を示す図である。
【図９】図７に示した演算装置の調停動作の一例を示す図である。
【図１０】図９に示した調停動作の比較例を示す図である。
【図１１】演算装置の別の実施形態を示す図である。
【図１２】図１１に示した演算装置の動作の一例を示す図である。
【図１３】図１１に示した演算装置の動作の別の例を示す図である。
【図１４】演算装置の別の実施形態を示す図である。
【図１５】図１４に示した演算装置の調停動作の一例を示す図である。
【図１６】図１５に示した調停動作の比較例を示す図である。
【図１７】図１、図７、図１１および図１４に示した演算装置が搭載される装置の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、実施形態を図面を用いて説明する。
【００１７】
図１は、演算装置の一実施形態を示している。図の破線の矢印は、ＦＩＦＯ（First-In First-Out）バッファ４０ａ、４０ｂ、４０ｆに残っているデータの数を示す情報ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆ等の制御信号、演算部３０とメモリ１００との間で転送されるデータ等の流れの一例を示している。以下、ＦＩＦＯバッファをＦＩＦＯとも称する。また、メモリ１００は、メモリインターリーブ方式に対応している。例えば、メモリ１００は、互いに独立に動作可能な複数のバンクＢＮＫ（ＢＮＫ０、ＢＮＫ１、ＢＮＫ２、ＢＮＫ３）を有している。
【００１８】
この実施形態の演算装置１０は、例えば、行列演算を実行可能なプロセッサである。例えば、演算装置１０は、デコーダ２０、演算部３０、バッファ部４０およびアクセス制御部５０を有している。デコーダ２０は、命令メモリ２００から読み出した命令をデコードする。そして、デコーダ２０は、デコード結果を演算部３０およびアクセス制御部５０に転送する。なお、演算部３０を動作させる命令とアクセス制御部５０を動作させる命令は、別の命令であってもよいし、１命令であってもよい。
【００１９】
演算部３０は、演算を実行する演算部の一例である。例えば、演算部３０は、２×２行列の乗算を実行する演算モジュール、２×２行列の加算を実行する演算モジュール等の複数の演算モジュールを有する。そして、演算部３０は、使用する演算モジュールの組み合わせを変更することにより、２×２行列の乗算、４×４行列の乗算等の行列演算を実行する。
【００２０】
例えば、演算部３０は、デコーダ２０から受けた命令（デコードされた命令）に基づいて、使用する演算モジュール、演算回数等をセットする。そして、演算部３０は、演算に使用するデータがＦＩＦＯ４０ａ、４０ｂに記憶されており、かつ、演算結果を記憶するＦＩＦＯ４０ｆに空きエントリがある場合に、デコードされた命令に基づく演算を実行する。
【００２１】
例えば、配列データの乗算命令では、２つのソースオペランドと１つのデスティネーションオペランドとが指定される。この場合、演算部３０は、ソースオペランドで指定された配列データがＦＩＦＯ４０ａ、４０ｂに記憶されており、かつ、ＦＩＦＯ４０ｆに空きエントリがある場合に、配列データの乗算を実行する。そして、演算部３０は、乗算結果をＦＩＦＯ４０ｆに記憶する。ＦＩＦＯ４０ｆに記憶された演算結果は、デスティネーションオペランドで指定されたアクセス先に転送される。
【００２２】
なお、演算部３０は、パイプライン処理方式を採用している。このため、演算部３０がデータを受けてから演算結果を出力するまでに、レイテンシが存在する。例えば、パイプライン処理の段数（ステージの数）が８の場合、演算部３０がデータを受けてから演算結果を出力するまでに、８サイクル程度かかる。
【００２３】
バッファ部４０は、例えば、ＦＩＦＯ４０ａ、４０ｂ、４０ｆを有している。ＦＩＦＯ４０ａ、４０ｂは、メモリ１００からアクセス制御部５０を介して転送されたデータを順次記憶する第１のバッファの一例である。例えば、ＦＩＦＯ４０ａ、４０ｂは、ＦＩＦＯ４０ａ、４０ｂの段数に応じた数のエントリを有する。例えば、ＦＩＦＯ４０ａ、４０ｂの段数が４個の場合、受け付け可能なエントリの最大数は４個である。この場合、ＦＩＦＯ４０ａ、４０ｂは、例えば、１段分の容量と同じデータ量の配列データを４個記憶できる。このように、ＦＩＦＯ４０ａ、４０ｂは、複数のデータを記憶可能である。
【００２４】
例えば、ＦＩＦＯ４０ａ、４０ｂは、アクセス制御部５０から受けたデータを順次記憶し、記憶したデータを演算部３０に順次転送する。なお、メモリ１００から転送されたデータ（演算部３０に転送するデータ）を記憶する入力側のＦＩＦＯ４０の数は、２つに限定されない。例えば、バッファ部４０は、入力側のＦＩＦＯ４０を３つ以上有してもよい。また、入力側のＦＩＦＯ４０の段数は、４個に限定されない。以下、入力側のＦＩＦＯ４０を入力ＦＩＦＯ４０とも称する。
【００２５】
ＦＩＦＯ４０ｆは、演算部３０から転送されたデータを順次記憶する第２のバッファの一例である。例えば、ＦＩＦＯ４０ｆは、ＦＩＦＯ４０ｆの段数に応じた数のエントリを有する。例えば、ＦＩＦＯ４０ｆの段数が２個の場合、受け付け可能なエントリの最大数は２個である。この場合、ＦＩＦＯ４０ｆは、例えば、１段分の容量と同じデータ量の配列データを２個記憶できる。このように、ＦＩＦＯ４０ｆは、複数のデータを記憶可能である。例えば、ＦＩＦＯ４０ｆは、演算部３０から転送されたデータを順次記憶し、記憶したデータをアクセス制御部５０を介してメモリ１００に順次転送する。
【００２６】
なお、メモリ１００に転送するデータ（演算部３０から転送されたデータ）を記憶する出力側のＦＩＦＯ４０の数は、１つに限定されない。例えば、バッファ部４０は、出力側のＦＩＦＯ４０を２つ以上有してもよい。また、出力側のＦＩＦＯ４０の段数は、２個に限定されない。以下、出力側のＦＩＦＯ４０を出力ＦＩＦＯ４０とも称する。
【００２７】
アクセス制御部５０は、複数のバンクＢＮＫ（ＢＮＫ０、ＢＮＫ１、ＢＮＫ２、ＢＮＫ３）を含むメモリ１００に対するアクセスを制御するメモリアクセス部の一例である。例えば、アクセス制御部５０は、複数のＤＭＡＣ（Direct Memory Access Controller）６０（６０ａ、６０ｂ、６０ｆ）と、調停回路７０と、判定回路８０とを有している。
【００２８】
各ＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）は、例えば、各ＦＩＦＯ４０（４０ａ、４０ｂ、４０ｆ）に対応して設けられる。例えば、ＤＭＡＣ６０ａは、ＦＩＦＯ４０ａとメモリ１００との間のデータ転送を制御する。ＤＭＡＣ６０ｂは、ＦＩＦＯ４０ｂとメモリ１００との間のデータ転送を制御する。ＤＭＡＣ６０ｆは、ＦＩＦＯ４０ｆとメモリ１００との間のデータ転送を制御する。
【００２９】
例えば、各ＤＭＡＣ６０は、アクセス先の開始アドレスとデータ（ストリーム）の長さとを示すデコード結果を、デコーダ２０から受ける。そして、各ＤＭＡＣ６０は、メモリ１００に対するアクセス要求を示すアクセス要求信号を、調停回路７０に出力する。例えば、ＤＭＡＣ６０ａは、ＦＩＦＯ４０ａに空きがある場合、調停回路７０にアクセス要求信号を出力する。また、例えば、ＤＭＡＣ６０ｂは、ＦＩＦＯ４０ｂに空きがある場合、調停回路７０にアクセス要求信号を出力する。そして、例えば、ＤＭＡＣ６０ｆは、メモリ１００に転送するデータがＦＩＦＯ４０ｆに記憶されている場合、調停回路７０にアクセス要求信号を出力する。
【００３０】
調停回路７０は、複数のＦＩＦＯ４０のアクセス先が同じバンクＢＮＫのとき、優先順位に基づいて、バンクＢＮＫにアクセスするＦＩＦＯ４０を選択する調停部の一例である。例えば、調停回路７０は、メモリ１００の各バンクＢＮＫ（ＢＮＫ０、ＢＮＫ１、ＢＮＫ２、ＢＮＫ３）に対応して設けられた選択回路ＳＥＬ（ＳＥＬ０、ＳＥＬ１、ＳＥＬ２、ＳＥＬ３）を有している。
【００３１】
各選択回路ＳＥＬは、対応するバンクＢＮＫに対するアクセス要求信号を受けた場合、アクセス要求信号を出力したＤＭＡＣ６０を、バンクＢＮＫにアクセスするＤＭＡＣ６０として選択する。これにより、選択回路ＳＥＬで選択されたＤＭＡＣ６０に対応するＦＩＦＯ４０と選択部ＳＥＬに対応するバンクＢＮＫとの間でデータが転送される。
【００３２】
なお、各選択回路ＳＥＬは、複数のＤＭＡＣ６０からアクセス要求信号を受けた場合、優先順位に基づいて、バンクＢＮＫにアクセスするＤＭＡＣ６０を選択する。例えば、各選択回路ＳＥＬは、優先順位を示す優先順位情報ＰＩＮＦを判定回路８０から受ける。そして、各選択回路ＳＥＬは、複数のＤＭＡＣ６０からアクセス要求信号を受けた場合、アクセス要求信号を出力した複数のＤＭＡＣ６０のうち、優先順位情報ＰＩＮＦが示す優先順位が最も高いＤＭＡＣ６０を選択する。
【００３３】
このように、各選択回路ＳＥＬは、複数のＦＩＦＯ４０のメモリアクセスが同じバンクＢＮＫに対して同サイクルで発生したとき、優先順位に基づいて、バンクＢＮＫにアクセスするＦＩＦＯ４０を選択する。以下、バンクＢＮＫに対するアクセスが競合することをバンク衝突とも称する。
【００３４】
判定回路８０は、複数のＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合の各ＦＩＦＯ４０のアクセスの優先順位を、入力側のＦＩＦＯ４０に残っているデータの数と予め設定された閾値との比較結果に基づいて決定する判定部の一例である。以下では、出力側のＦＩＦＯ４０（例えば、ＦＩＦＯ４０ｆ）の優先順位が入力側のＦＩＦＯ４０（例えば、ＦＩＦＯ４０ａ、４０ｂ）の優先順位より高い状態を、出力優先とも称する。また、入力側のＦＩＦＯ４０（例えば、ＦＩＦＯ４０ａ、４０ｂ）の優先順位が出力側のＦＩＦＯ４０（例えば、ＦＩＦＯ４０ｆ）の優先順位より高い状態を、入力優先とも称する。
【００３５】
例えば、判定回路８０は、ＦＩＦＯ４０ａ、４０ｂ、４０ｆに残っているデータの数をそれぞれ示す情報ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆを、ＦＩＦＯ４０ａ、４０ｂ、４０ｆから受ける。そして、判定回路８０は、入力側のＦＩＦＯ４０ａ、４０ｂに残っているデータの数（情報ＮＵＭａ、ＮＵＭｂが示す数）と予め設定された閾値とを比較し、比較結果に基づいて優先順位を決定する。以下、情報ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆが示す数をデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆあるいはエントリ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆとも称する。
【００３６】
なお、閾値は、ユーザにより書き換え可能に設定されてもよいし、ＦＩＦＯ４０の段数等に基づいて決定された固定値でもよい。例えば、閾値は、書き換え可能なレジスタに記憶されてもよい。また、閾値は、ＦＩＦＯ４０ａ、４０ｂとで異なる値でもよいし、同じ値でもよい。
【００３７】
判定回路８０は、例えば、ベースが出力優先の場合、入力側のＦＩＦＯ４０ａ、４０ｂのエントリ数ＮＵＭａ、ＮＵＭｂが閾値以下で、かつ、出力側のＦＩＦＯ４０ｆに空きがあるとき、優先順位をベースの出力優先から入力優先に変更する。また、例えば、判定回路８０は、ベースが出力優先の場合、入力側のＦＩＦＯ４０ａ、４０ｂのエントリ数ＮＵＭａ、ＮＵＭｂが閾値を超えているとき、あるいは、出力側のＦＩＦＯ４０ｆに空きがないとき、優先順位をベースの出力優先に維持する。
【００３８】
すなわち、判定回路８０は、入力ＦＩＦＯ４０ａ、４０ｂに残っているデータの数が閾値以下で、かつ、出力ＦＩＦＯ４０ｆに空きがあるとき、入力ＦＩＦＯ４０ａ、４０ｂの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。また、例えば、判定回路８０は、入力ＦＩＦＯ４０ａ、４０ｂに残っているデータの数が閾値を超えているとき、あるいは、出力ＦＩＦＯ４０ｆに空きがないとき、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定する。そして、判定回路８０は、例えば、更新した優先順位を示す優先順位情報ＰＩＮＦを、各選択回路ＳＥＬにブロードキャストで送信する。
【００３９】
このように、アクセス制御部５０は、ＦＩＦＯ４０とバンクＢＮＫとの間のデータ転送を制御し、複数のＦＩＦＯ４０が同じバンクＢＮＫにアクセスするとき、調停回路７０により選択されたＦＩＦＯ４０とバンクＢＮＫとの間のデータ転送を実行する。また、判定回路８０は、バンク衝突時（複数のＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合）のＦＩＦＯ４０の優先順位を、入力側のＦＩＦＯ４０のエントリ数ＮＵＭ（残っているデータの数）と閾値との比較結果に基づいて決定する。これにより、演算装置１０は、ＦＩＦＯ４０の状態に応じて優先順位を補正できるため、周期的なバンク衝突の発生を低減できる。この結果、演算装置１０は、演算処理の効率低下を抑制できる。
【００４０】
なお、演算装置１０の構成は、この例に限定されない。例えば、判定回路８０は、ベースが入力優先の場合、入力側のＦＩＦＯ４０ａ、４０ｂに残っているデータの数が閾値以上のとき、出力側のＦＩＦＯ４０ｆの状態に拘わらず、優先順位をベースの入力優先から出力優先に変更してもよい。また、例えば、判定回路８０は、ベースが入力優先の場合、入力側のＦＩＦＯ４０ａ、４０ｂに残っているデータの数が閾値未満のとき、出力側のＦＩＦＯ４０ｆの状態に拘わらず、優先順位をベースの入力優先に維持してもよい。
【００４１】
図２は、図１に示した演算装置１０の動作の一例を示している。なお、図２は、バンク衝突時のＦＩＦＯ４０の優先順位を決定する処理の一例を示している。図２の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。以下では、演算装置１０の動作の理解を容易にするために、アクセス制御部５０のメモリアクセスは、１サイクルで完了するものとして説明する。例えば、図２の動作は、演算装置１０の動作クロックのサイクル毎に実行される。
【００４２】
ステップＳ１００では、判定回路８０は、入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂのいずれかが閾値ＴＨ以下で、かつ、出力ＦＩＦＯ４０ｆに空きがあるか否かを判定する。入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂのいずれかが閾値ＴＨ以下で、かつ、出力ＦＩＦＯ４０ｆに空きがあるとき（ステップＳ１００のＹｅｓ）、演算装置１０の動作は、ステップＳ１１０に移る。一方、入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂの両方が閾値ＴＨを超えているとき、あるいは、出力ＦＩＦＯ４０ｆに空きがないとき（ステップＳ１００のＮｏ）、演算装置１０の動作は、ステップＳ１２０に移る。
【００４３】
ステップＳ１１０では、判定回路８０は、入力ＦＩＦＯ４０ａ、４０ｂの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。例えば、判定回路８０は、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定し、入力ＦＩＦＯ４０ａの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。これにより、例えば、ベースが出力優先の場合、ＦＩＦＯ４０の優先順位は、ベースの出力優先から入力優先に変更される。
【００４４】
ステップＳ１２０では、判定回路８０は、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定する。例えば、判定回路８０は、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定し、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定する。なお、例えば、ベースが出力優先（ＦＩＦＯ４０ｆの優先順位＞ＦＩＦＯ４０ｂの優先順位＞ＦＩＦＯ４０ａの優先順位）の場合、ＦＩＦＯ４０の優先順位は、ベースの出力優先に維持される。
【００４５】
このように、バンク衝突時のＦＩＦＯ４０の優先順位は、入力側のＦＩＦＯ４０のエントリ数ＮＵＭ（残っているデータの数）と閾値との比較結果に基づいて調整される。図２の動作では、出力ＦＩＦＯ４０に空きがあるか否かの判定がステップＳ１００の判定条件に含まれているため、出力ＦＩＦＯ４０に空きがないときに、優先順位が入力優先に変更されることを抑止できる。
【００４６】
なお、演算装置１０の動作は、この例に限定されない。例えば、判定回路８０は、出力ＦＩＦＯ４０のアクセスと衝突した入力ＦＩＦＯ４０のデータ数ＮＵＭと閾値ＴＨとの比較結果に基づいて、優先順位を決定してもよい。すなわち、出力ＦＩＦＯ４０のアクセスと衝突していない入力ＦＩＦＯ４０のデータ数ＮＵＭは、閾値ＴＨの比較対象から除外される。
【００４７】
例えば、ベースが出力優先の場合、判定回路８０は、出力ＦＩＦＯ４０ｆのアクセスと衝突した入力ＦＩＦＯ４０のデータ数ＮＵＭが閾値ＴＨ以下で、かつ、出力ＦＩＦＯ４０ｆに空きがあるとき、ＦＩＦＯ４０の優先順位を入力優先に変更する。なお、例えば、出力ＦＩＦＯ４０ｆのアクセスと入力ＦＩＦＯのアクセスとが衝突していないサイクルでは、優先順位は、ベースの出力優先に維持される。
【００４８】
また、例えば、ベースが入力優先（ＦＩＦＯ４０ｂの優先順位＞ＦＩＦＯ４０ａの優先順位＞ＦＩＦＯ４０ｆの優先順位）の場合、判定回路８０は、出力ＦＩＦＯ４０に空きがあるか否かの判定をステップＳ１００の判定条件から省いてもよい。この場合、入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂと比較される閾値ＴＨは、ベースが出力優先の場合の閾値ＴＨと同じ値でもよいし、異なる値でもよい。
【００４９】
また、判定回路８０は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａと閾値ＴＨとの比較結果と、入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂと閾値ＴＨとの比較結果との組み合わせに基づいて、ＦＩＦＯ４０の優先順位を決定してもよい。例えば、ベースが出力優先で、出力ＦＩＦＯ４０ｆに空きがある場合（出力ＦＩＦＯ４０が複数の場合では、例えば、全ての出力ＦＩＦＯ４０に空きがある場合）、下記に示すように、ＦＩＦＯ４０の優先順位が決定されてもよい。
【００５０】
データ数ＮＵＭａ、ＮＵＭｂが両方とも閾値ＴＨ以下の場合、入力ＦＩＦＯ４０ｂの優先順位が入力ＦＩＦＯ４０ａの優先順位より高く設定され、入力ＦＩＦＯ４０ａの優先順位が出力ＦＩＦＯ４０ｆの優先順位より高く設定される。なお、出力ＦＩＦＯ４０が２個の場合、２個の出力ＦＩＦＯ４０の一方（例えば、出力ＦＩＦＯ４０ｆ）の優先順位が２個の出力ＦＩＦＯ４０の他方の優先順位より高く設定される。
【００５１】
データ数ＮＵＭａが閾値ＴＨ以下で、データ数ＮＵＭｂが閾値ＴＨを超えている場合、入力ＦＩＦＯ４０ａの優先順位が出力ＦＩＦＯ４０ｆの優先順位より高く設定され、出力ＦＩＦＯ４０ｆの優先順位が入力ＦＩＦＯ４０ｂの優先順位より高く設定される。なお、出力ＦＩＦＯ４０が２個の場合、２個の出力ＦＩＦＯ４０の一方（例えば、出力ＦＩＦＯ４０ｆ）の優先順位が２個の出力ＦＩＦＯ４０の他方の優先順位より高く設定される。また、２個の出力ＦＩＦＯ４０の他方の優先順位は、入力ＦＩＦＯ４０ｂの優先順位より高く設定される。
【００５２】
データ数ＮＵＭａが閾値ＴＨを超え、データ数ＮＵＭｂが閾値ＴＨ以下の場合、入力ＦＩＦＯ４０ｂの優先順位が出力ＦＩＦＯ４０ｆの優先順位より高く設定され、出力ＦＩＦＯ４０ｆの優先順位が入力ＦＩＦＯ４０ａの優先順位より高く設定される。なお、出力ＦＩＦＯ４０が２個の場合、２個の出力ＦＩＦＯ４０の一方（例えば、出力ＦＩＦＯ４０ｆ）の優先順位が２個の出力ＦＩＦＯ４０の他方の優先順位より高く設定される。また、２個の出力ＦＩＦＯ４０の他方の優先順位は、入力ＦＩＦＯ４０ａの優先順位より高く設定される。
【００５３】
データ数ＮＵＭａ、ＮＵＭｂが両方とも閾値ＴＨを超えている場合、出力ＦＩＦＯ４０ｆの優先順位が入力ＦＩＦＯ４０ｂの優先順位より高く設定され、入力ＦＩＦＯ４０ｂの優先順位が入力ＦＩＦＯ４０ａの優先順位より高く設定される。なお、出力ＦＩＦＯ４０が２個の場合、２個の出力ＦＩＦＯ４０の一方（例えば、出力ＦＩＦＯ４０ｆ）の優先順位が２個の出力ＦＩＦＯ４０の他方の優先順位より高く設定される。また、２個の出力ＦＩＦＯ４０の他方の優先順位は、入力ＦＩＦＯ４０ｂの優先順位より高く設定される。
【００５４】
出力ＦＩＦＯ４０ｆに空きがない場合は、データ数ＮＵＭａ、ＮＵＭｂが両方とも閾値ＴＨを超えている場合と同様の優先順位に設定される。なお、上述の例においても、ベースが入力優先の場合、出力ＦＩＦＯ４０に空きがあるか否かの条件は省かれてもよい。
【００５５】
図３は、図１に示した演算装置１０の調停動作の一例を示している。図の符号Ａ、Ｂ、Ｆは、メモリ１００の各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセスを要求しているＤＭＡＣ６０ａ、６０ｂ、６０ｆを示している。すなわち、符号Ａ、Ｂ、Ｆは、各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）にアクセスするＦＩＦＯ４０ａ、４０ｂ、４０ｆを示している。また、符号Ａ、Ｂ、Ｆの添え字ｏは、バンクＢＮＫへのアクセスが可能であることを示し、符号Ａ、Ｂ、Ｆの添え字ｘは、バンクＢＮＫへのアクセスが不可であることを示している。
【００５６】
データ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆは、バンクＢＮＫにアクセスした後のＦＩＦＯ４０のエントリ数（ＦＩＦＯ４０に残っているデータの数）を示している。なお、演算が実行されたサイクルでは、データ数ＮＵＭａ、ＮＵＭｂは、バンクＢＮＫにアクセスした後で、演算実行前のＦＩＦＯ４０のエントリ数を示し、データ数ＮＵＭｆは、演算実行後のＦＩＦＯ４０のエントリ数を示している。演算実行の欄の０は、演算の未実行を示し、演算実行の欄の１は、演算実行を示している。図３の演算では、例えば、２つのソースオペランドと１つのデスティネーションオペランドとが指定される。
【００５７】
図３の例では、入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂと比較される閾値ＴＨは、２である。また、演算部３０のレイテンシＬは１０である。入力ＦＩＦＯ４０ａ、４０ｂの段数は４であり、出力ＦＩＦＯ４０ｆの段数は２である。ＦＩＦＯ４０ａ、４０ｂ、４０ｆは、バンクＢＮＫ２、ＢＮＫ３、ＢＮＫ０、ＢＮＫ１の順に、各バンクＢＮＫにアクセスする。なお、ベースは出力優先である。出力優先では、ＦＩＦＯ４０ｆの優先順位がＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い。
【００５８】
例えば、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂの両方が閾値ＴＨ（＝２）を超えている場合、あるいは、ＦＩＦＯ４０ｆに空きがない（データ数ＮＵＭｆが２である）場合、バンク衝突時のＦＩＦＯ４０の優先順位は、出力優先である。また、バンク衝突時のＦＩＦＯ４０の優先順位は、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂのいずれかが閾値ＴＨ（＝２）以下で、かつ、ＦＩＦＯ４０ｆに空きがある（データ数ＮＵＭｆが１以下である）場合、入力優先である。入力優先では、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高く、ＦＩＦＯ４０ａの優先順位がＦＩＦＯ４０ｆの優先順位より高い。
【００５９】
サイクル０では、各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセス要求は、発生していない。
【００６０】
サイクル１では、ＦＩＦＯ４０ａのＤＭＡＣ６０ａは、バンクＢＮＫ２へのアクセスを調停回路７０に要求する。また、ＦＩＦＯ４０ｂのＤＭＡＣ６０ｂは、バンクＢＮＫ２へのアクセスを調停回路７０に要求する。
【００６１】
このため、サイクル１では、ＤＭＡＣ６０ａのアクセス要求とＤＭＡＣ６０ｂのアクセス要求とが衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル０の終了時のデータ数ＮＵＭａ（＝０）およびデータ数ＮＵＭｂ（＝０）が閾値ＴＨ（＝２）以下で、かつ、データ数ＮＵＭｆが１以下であるため、入力優先である。入力優先では、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い。
【００６２】
したがって、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１になる。
【００６３】
サイクル２では、ＦＩＦＯ４０ａのＤＭＡＣ６０ａは、バンクＢＮＫ２へのアクセス要求がサイクル１で許可されなかったため、バンクＢＮＫ２へのアクセスを調停回路７０に再度要求する。また、ＦＩＦＯ４０ｂのＤＭＡＣ６０ｂは、バンクＢＮＫ３へのアクセスを調停回路７０に要求する。バンク衝突が発生しないため、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送され、バンクＢＮＫ３からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ１および２になる。
【００６４】
また、演算部３０は、演算に使用するデータがＦＩＦＯ４０ａ、４０ｂに記憶されており、かつ、演算結果を記憶するＦＩＦＯ４０ｆに空きエントリがあるため、演算を実行する。すなわち、サイクル２では、演算が開始される。なお、演算実行後（サイクル２の終了時）のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ０および１である。また、演算部３０のレイテンシＬが１０であるため、演算が開始されても、演算結果はＦＩＦＯ４０ｆに到着していない。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、０である。
【００６５】
サイクル３からサイクル１２までは、バンク衝突が発生しないため、バンクＢＮＫからＦＩＦＯ４０ａ、４０ｂへのデータ転送および演算が各サイクルで実行される。なお、演算部３０のレイテンシＬが１０であるため、サイクル１２では、サイクル２で実行された演算の結果がＦＩＦＯ４０ｆに到着する。このため、サイクル１２では、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１になる。
【００６６】
サイクル１３では、ＦＩＦＯ４０ａのＤＭＡＣ６０ａは、バンクＢＮＫ１へのアクセスを調停回路７０に要求する。また、ＦＩＦＯ４０ｂのＤＭＡＣ６０ｂは、バンクＢＮＫ２へのアクセスを調停回路７０に要求する。さらに、ＦＩＦＯ４０ｆのＤＭＡＣ６０ｆは、ＦＩＦＯ４０ｆにデータ（演算結果）が記憶されているため、バンクＢＮＫ２へのアクセスを調停回路７０に要求する。
【００６７】
このため、サイクル１３では、ＤＭＡＣ６０ｂのアクセス要求とＤＭＡＣ６０ｆのアクセス要求とが衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル１２の終了時のデータ数ＮＵＭａ（＝０）およびデータ数ＮＵＭｂ（＝１）が閾値ＴＨ（＝２）以下で、かつ、データ数ＮＵＭｆが１以下であるため、入力優先である。入力優先では、ＦＩＦＯ４０ｂの優先順位は、ＦＩＦＯ４０ｆの優先順位より高い。
【００６８】
したがって、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、２になる。また、バンクＢＮＫ１からＦＩＦＯ４０ａにデータが転送されるため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、１になる。
【００６９】
ＦＩＦＯ４０ｆは、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送されないため、サイクル２およびサイクル３で実行された演算の結果（２個のデータ）を記憶する。このため、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、２になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ０および１である。
【００７０】
サイクル１４では、ＦＩＦＯ４０ａのＤＭＡＣ６０ａは、バンクＢＮＫ２へのアクセスを調停回路７０に要求する。また、ＦＩＦＯ４０ｂのＤＭＡＣ６０ｂは、バンクＢＮＫ３へのアクセスを調停回路７０に要求する。さらに、ＦＩＦＯ４０ｆのＤＭＡＣ６０ｆは、バンクＢＮＫ２へのアクセス要求がサイクル１３で許可されなかったため、バンクＢＮＫ２へのアクセスを調停回路７０に再度要求する。
【００７１】
このため、サイクル１４では、ＤＭＡＣ６０ａのアクセス要求とＤＭＡＣ６０ｆのアクセス要求とが衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル１３の終了時のデータ数ＮＵＭｆが２である（ＦＩＦＯ４０ｆに空きがない）ため、出力優先である。
【００７２】
したがって、調停回路７０は、ＤＭＡＣ６０ａ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送される。一方、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、０である。このため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１になる。なお、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ３からＦＩＦＯ４０ｂにデータが転送されるため、２になる。
【００７３】
サイクル１５では、ＦＩＦＯ４０ａのＤＭＡＣ６０ａは、バンクＢＮＫ２へのアクセス要求がサイクル１４で許可されなかったため、バンクＢＮＫ２へのアクセスを調停回路７０に再度要求する。また、ＦＩＦＯ４０ｂのＤＭＡＣ６０ｂは、バンクＢＮＫ０へのアクセスを調停回路７０に要求する。そして、ＦＩＦＯ４０ｆのＤＭＡＣ６０ｆは、バンクＢＮＫ３へのアクセスを調停回路７０に要求する。
【００７４】
各ＤＭＡＣ６０が互いに異なるバンクＢＮＫに対してアクセスを要求しているため、バンク衝突は発生しない。このため、サイクル１５以降は、演算部３０の処理は、ストールすることなく、実行される。例えば、命令のデコード結果に基づいて設定された回数だけ演算が実行され、最後の演算の結果がＦＩＦＯ４０ｆに到着したとき、演算部３０の処理は、終了する。
【００７５】
図４は、図３に示した調停動作の比較例を示している。図４の符号Ａ、Ｂ、Ｆ等の意味は、図３と同一または同様である。また、図４の動作条件等は、優先順位を除いて、図３と同一または同様である。なお、図４では、バンク衝突時のＦＩＦＯ４０の優先順位は、出力優先（ＦＩＦＯ４０ｆの優先順位がＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い状態）で固定である。図３で説明した動作と同一または同様な動作については、詳細な説明を省略する。サイクル０からサイクル１２までは、図３と同一または同様である。
【００７６】
サイクル１３では、ＤＭＡＣ６０ａ、６０ｂは、バンクＢＮＫ１、ＢＮＫ２へのアクセスを調停回路７０にそれぞれ要求する。また、ＤＭＡＣ６０ｆは、バンクＢＮＫ２へのアクセスを調停回路７０に要求する。このため、ＤＭＡＣ６０ｂのアクセス要求とＤＭＡＣ６０ｆのアクセス要求とが衝突する。
【００７７】
バンク衝突時のＦＩＦＯ４０の優先順位が出力優先であるため、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送される。また、サイクル１３では、サイクル３で実行された演算の結果がＦＩＦＯ４０ｆに到着する。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１である。
【００７８】
なお、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されないため、１である。また、バンクＢＮＫ１からＦＩＦＯ４０ａにデータが転送されるため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、１になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも０である。
【００７９】
サイクル１４では、ＤＭＡＣ６０ａ、６０ｆは、バンクＢＮＫ２、ＢＮＫ３へのアクセスを調停回路７０にそれぞれ要求する。また、ＤＭＡＣ６０ｂは、バンクＢＮＫ２へのアクセス要求がサイクル１３で許可されなかったため、バンクＢＮＫ２へのアクセスを調停回路７０に再度要求する。このため、ＤＭＡＣ６０ａのアクセス要求とＤＭＡＣ６０ｂのアクセス要求とが衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。
【００８０】
これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されるため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１になる。一方、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、０である。このため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。したがって、ＦＩＦＯ４０ｆからバンクＢＮＫ３にデータが転送された後では、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、０になる。
【００８１】
サイクル１５では、ＤＭＡＣ６０ａ、６０ｂは、バンクＢＮＫ２、ＢＮＫ３へのアクセスを調停回路７０にそれぞれ要求する。なお、ＤＭＡＣ６０ｆは、ＦＩＦＯ４０ｆが空であるため、バンクＢＮＫ１へのアクセス要求を実行しない。バンクＢＮＫ２、ＢＮＫ３からＦＩＦＯ４０ａ、４０ｂにデータがそれぞれ転送されるため、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ１および２になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ０および１になる。また、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、サイクル４で実行された演算の結果がＦＩＦＯ４０ｆに到着するため、１になる。
【００８２】
サイクル１６では、サイクル１３の状態と同様の状態に戻る。したがって、サイクル１６では、サイクル１３と同様の動作が実行される。例えば、サイクル１６では、ＤＭＡＣ６０ａ、６０ｂは、バンクＢＮＫ３、ＢＮＫ０へのアクセスを調停回路７０にそれぞれ要求する。また、ＤＭＡＣ６０ｆは、バンクＢＮＫ１へのアクセスを調停回路７０に要求する。このため、ＤＭＡＣ６０ｂのアクセス要求とＤＭＡＣ６０ｆのアクセス要求とが衝突する。
【００８３】
バンク衝突時のＦＩＦＯ４０の優先順位が出力優先であるため、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送される。また、サイクル１３では、サイクル５で実行された演算の結果がＦＩＦＯ４０ｆに到着する。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１である。
【００８４】
一方、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ１からＦＩＦＯ４０ｂにデータが転送されないため、１である。また、バンクＢＮＫ３からＦＩＦＯ４０ａにデータが転送されるため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、１になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも０である。
【００８５】
サイクル１７およびサイクル１８の状態は、サイクル１４およびサイクル１５の状態に対応する。したがって、図４の動作（バンク衝突時のＦＩＦＯ４０の優先順位が固定された演算装置の動作）では、例えば、サイクル１３以降の演算部３０の処理は、３サイクル中に１回ストールする。このように、図４の動作では、演算部３０の処理のストールが周期的に発生する。
【００８６】
これに対し、ＦＩＦＯ４０の状態に応じて優先順位を補正する演算装置１０では、図３に示したように、演算部３０の処理のストールが周期的に発生することを抑制できる。これにより、図３の動作では、図４の動作に対して、演算装置１０の性能を約１．５（＝３／２）倍にできる。
【００８７】
図５は、演算装置１０の調停動作の別の例を示している。図５の動作を実行する演算装置１０は、図１に示した演算装置１０に、入力ＦＩＦＯ４０とＤＭＡＣ６０の組が１組追加されている。このため、各選択回路ＳＥＬは、４つのＤＭＡＣ６０から１つのＤＭＡＣ６０を選択する。
【００８８】
なお、追加された入力ＦＩＦＯ４０およびＤＭＡＣ６０を、ＦＩＦＯ４０ｃおよびＤＭＡＣ６０ｃとも称する。例えば、図５の符号Ｃは、メモリ１００の各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセスを要求しているＤＭＡＣ６０ｃを示している。すなわち、符号Ａ、Ｂ、Ｃ、Ｆは、各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）にアクセスするＦＩＦＯ４０ａ、４０ｂ、４０ｃ、４０ｆを示している。
【００８９】
図５の符号Ａ、Ｂ、Ｆ等の意味は、図３と同一または同様である。また、図５の動作条件等は、優先順位およびレイテンシを除いて、図３と同一または同様である。例えば、演算部３０のレイテンシＬは９である。また、入力ＦＩＦＯ４０ａ、４０ｂ、ＦＩＦＯ４０ｃの段数は４であり、出力ＦＩＦＯ４０ｆの段数は２である。
【００９０】
図５では、出力優先の場合、ＦＩＦＯ４０ｆの優先順位はＦＩＦＯ４０ｃの優先順位より高く、ＦＩＦＯ４０ｃの優先順位はＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位はＦＩＦＯ４０ａの優先順位より高い。また、入力優先の場合、ＦＩＦＯ４０ｃの優先順位はＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位はＦＩＦＯ４０ａの優先順位より高く、ＦＩＦＯ４０ａの優先順位はＦＩＦＯ４０ｆの優先順位より高い。なお、図３で説明した動作と同一または同様な動作については、詳細な説明を省略する。
【００９１】
サイクル０では、各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセス要求は、発生していない。
【００９２】
サイクル１では、ＤＭＡＣ６０ａ、６０ｂ、６０ｃのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル０の終了時のデータ数ＮＵＭａ（＝０）、データ数ＮＵＭｂ（＝０）およびデータ数ＮＵＭｃ（＝０）が閾値ＴＨ（＝２）以下で、かつ、データ数ＮＵＭｆが１以下であるため、入力優先である。入力優先では、ＦＩＦＯ４０ｃの優先順位がＦＩＦＯ４０ａ、４０ｂの優先順位より高い。
【００９３】
したがって、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂ、６０ｃからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｃからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｃにデータが転送される。したがって、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、１になる。
【００９４】
サイクル２では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル１の終了時のデータ数ＮＵＭａ（＝０）、データ数ＮＵＭｂ（＝０）およびデータ数ＮＵＭｃ（＝１）が閾値ＴＨ（＝２）以下で、かつ、データ数ＮＵＭｆが１以下であるため、入力優先である。入力優先では、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い。
【００９５】
したがって、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１になる。また、バンクＢＮＫ３からＦＩＦＯ４０ｃにデータが転送されるため、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、２になる。なお、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、０である。
【００９６】
サイクル３では、バンク衝突は発生しない。したがって、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送される。このため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、１になる。また、バンクＢＮＫ３からＦＩＦＯ４０ｂにデータが転送されるため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、２になる。バンクＢＮＫ０からＦＩＦＯ４０ｃにデータが転送されるため、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、３になる。
【００９７】
ＦＩＦＯ４０ａ、４０ｂ、４０ｃにデータが記憶されており、かつ、ＦＩＦＯ４０ｆに空きエントリがあるため、演算部３０は、演算を実行する。すなわち、サイクル３では、演算が開始される。なお、演算実行後（サイクル３の終了時）のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、１および２である。また、演算部３０のレイテンシＬが９であるため、演算が開始されても、演算結果はＦＩＦＯ４０ｆに到着していない。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、０である。
【００９８】
サイクル４からサイクル１２までは、バンク衝突が発生しないため、バンクＢＮＫからＦＩＦＯ４０ａ、４０ｂ、４０ｃへのデータ転送および演算が各サイクルで実行される。なお、演算部３０のレイテンシＬが９であるため、サイクル１２では、サイクル３で実行された演算の結果がＦＩＦＯ４０ｆに到着する。このため、サイクル１２では、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１になる。
【００９９】
サイクル１３では、ＤＭＡＣ６０ｃ、６０ｆのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル１２の終了時のデータ数ＮＵＭａ（＝０）、データ数ＮＵＭｂ（＝１）およびデータ数ＮＵＭｃ（＝２）が閾値ＴＨ（＝２）以下で、かつ、データ数ＮＵＭｆが１以下であるため、入力優先である。
【０１００】
したがって、調停回路７０は、ＤＭＡＣ６０ｃ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｃからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｃにデータが転送される。したがって、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、３になる。また、バンクＢＮＫ０、ＢＮＫ１からＦＩＦＯ４０ａ、４０ｂにデータがそれぞれ転送されるため、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ１および２になる。
【０１０１】
ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送されないため、２になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、１および２である。
【０１０２】
サイクル１４では、ＤＭＡＣ６０ｂ、６０ｆのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル１３の終了時のデータ数ＮＵＭｆが２である（ＦＩＦＯ４０ｆに空きがない）ため、出力優先である。
【０１０３】
したがって、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送される。したがって、演算実行後のＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、２である。
【０１０４】
ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されないため、１である。また、ＦＩＦＯ４０ａ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｃは、バンクＢＮＫ１、ＢＮＫ３からＦＩＦＯ４０ａ、４０ｃにデータがそれぞれ転送されるため、それぞれ１および３になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、０および２である。
【０１０５】
サイクル１５では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。
【０１０６】
これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１になる。一方、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、０である。このため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１になる。なお、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、バンクＢＮＫ３からＦＩＦＯ４０ｃにデータが転送されるため、３になる。
【０１０７】
サイクル１６では、各ＤＭＡＣ６０が互いに異なるバンクＢＮＫに対してアクセスを要求しているため、バンク衝突は発生しない。このため、サイクル１６以降は、演算部３０の処理は、ストールすることなく、実行される。例えば、命令のデコード結果に基づいて設定された回数だけ演算が実行され、最後の演算の結果がＦＩＦＯ４０ｆに到着したとき、演算部３０の処理は、終了する。
【０１０８】
図６は、図５に示した調停動作の比較例を示している。図６の符号Ａ、Ｂ、Ｃ、Ｆ等の意味は、図５と同一または同様である。また、図６の動作条件等は、優先順位を除いて、図５と同一または同様である。なお、図５では、バンク衝突時のＦＩＦＯ４０の優先順位は、出力優先で固定である。出力優先では、ＦＩＦＯ４０ｆの優先順位はＦＩＦＯ４０ｃの優先順位より高く、ＦＩＦＯ４０ｃの優先順位はＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位はＦＩＦＯ４０ａの優先順位より高い。図５で説明した動作と同一または同様な動作については、詳細な説明を省略する。サイクル０からサイクル１２までは、図５と同一または同様である。
【０１０９】
サイクル１３では、ＤＭＡＣ６０ｃ、６０ｆのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０の優先順位が出力優先であるため、調停回路７０は、ＤＭＡＣ６０ｃ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送される。また、サイクル１３では、サイクル４で実行された演算の結果がＦＩＦＯ４０ｆに到着する。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１である。
【０１１０】
なお、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、バンクＢＮＫ２からＦＩＦＯ４０ｃにデータが転送されないため、２である。また、バンクＢＮＫ０、ＢＮＫ１からＦＩＦＯ４０ａ、４０ｂにデータがそれぞれ転送されるため、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ１および２になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、１および１である。
【０１１１】
サイクル１４では、ＤＭＡＣ６０ｂ、６０ｃのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０ｃの優先順位がＦＩＦＯ４０ｂの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｃからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｃからのアクセス要求を許可する。
【０１１２】
これにより、バンクＢＮＫ２からＦＩＦＯ４０ｃにデータが転送されるため、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、２になる。一方、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されないため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１である。また、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ１からＦＩＦＯ４０ａにデータが転送されるため、１になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、０および１である。
【０１１３】
サイクル１５では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されるため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１になる。一方、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、０である。
【０１１４】
このため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。したがって、ＦＩＦＯ４０ｆからバンクＢＮＫ３にデータが転送された後では、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、０になる。
【０１１５】
サイクル１６では、ＤＭＡＣ６０ａ、６０ｂ、６０ｃは、バンクＢＮＫ２、ＢＮＫ３、ＢＮＫ０へのアクセスを調停回路７０にそれぞれ要求する。なお、ＤＭＡＣ６０ｆは、ＦＩＦＯ４０ｆが空であるため、バンクＢＮＫ２へのアクセス要求を実行しない。バンクＢＮＫ２、ＢＮＫ３、ＢＮＫ０からＦＩＦＯ４０ａ、４０ｂ、４０ｃにデータがそれぞれ転送されるため、ＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ１、２および３になる。
【０１１６】
なお、演算実行後のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、１および２になる。また、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、サイクル６で実行された演算の結果がＦＩＦＯ４０ｆに到着するため、１になる。
【０１１７】
サイクル１７では、サイクル１３の状態と同様の状態に戻る。したがって、サイクル１７では、サイクル１３と同様の動作が実行される。例えば、サイクル１７では、ＤＭＡＣ６０ｃ、６０ｆのアクセス要求（バンクＢＮＫ１へのアクセス要求）が衝突する。ＦＩＦＯ４０の優先順位が出力優先であるため、調停回路７０は、ＤＭＡＣ６０ｃ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、ＦＩＦＯ４０ｆからバンクＢＮＫ１にデータが転送される。また、サイクル１３では、サイクル７で実行された演算の結果がＦＩＦＯ４０ｆに到着する。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１である。
【０１１８】
なお、ＦＩＦＯ４０ｃのデータ数ＮＵＭｃは、バンクＢＮＫ１からＦＩＦＯ４０ｃにデータが転送されないため、２である。また、バンクＢＮＫ３、ＢＮＫ０からＦＩＦＯ４０ａ、４０ｂにデータがそれぞれ転送されるため、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ１および２になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂ、４０ｃのデータ数ＮＵＭａ、ＮＵＭｂ、ＮＵＭｃは、それぞれ０、１および１である。
【０１１９】
サイクル１８の状態は、サイクル１４の状態に対応する。したがって、図６の動作（バンク衝突時のＦＩＦＯ４０の優先順位が固定された演算装置の動作）では、例えば、サイクル１３以降の演算部３０の処理は、４サイクル中に１回ストールする。このように、図６の動作では、演算部３０の処理のストールが周期的に発生する。
【０１２０】
これに対し、ＦＩＦＯ４０の状態に応じて優先順位を補正する演算装置１０では、図５に示したように、演算部３０の処理のストールが周期的に発生することを抑制できる。これにより、図５の動作では、図６の動作に対して、演算装置１０の性能を約１．３（＝４／３）倍にできる。
【０１２１】
以上、図１から図５に示した実施形態の演算装置では、判定回路８０は、バンク衝突時のＦＩＦＯ４０のアクセスの優先順位を、入力ＦＩＦＯ４０に残っているデータの数ＮＵＭと予め設定された閾値ＴＨとの比較結果に基づいて決定する。例えば、判定回路８０は、入力ＦＩＦＯ４０に残っているデータの数ＮＵＭが閾値ＴＨ以下で、かつ、出力ＦＩＦＯ４０にデータを記憶する分の空きがあるとき、入力ＦＩＦＯ４０の優先順位を出力ＦＩＦＯ４０の優先順位より高く設定する。また、例えば、判定回路８０は、入力ＦＩＦＯ４０に残っているデータの数ＮＵＭが閾値ＴＨを超えているとき、あるいは、出力ＦＩＦＯ４０にデータを記憶する分の空きがないとき、出力ＦＩＦＯ４０の優先順位を入力ＦＩＦＯ４０の優先順位より高く設定する。
【０１２２】
このように、この実施形態では、演算装置１０は、ＦＩＦＯ４０の状態に応じて優先順位を補正する。このため、この実施形態では、複数のＦＩＦＯ４０が同じバンクＢＮＫにアクセスするときに、バンクＢＮＫにアクセスするＦＩＦＯ４０を効率よく選択できる。これにより、この実施形態では、演算部３０の処理のストールが周期的に発生することを抑制できる。この結果、この実施形態では、演算処理に複数の入力ＦＩＦＯ４０を使用する場合でも、演算処理の効率低下を抑制できる。
【０１２３】
図７は、演算装置の別の実施形態を示している。この実施形態の演算装置１０は、図１に示した判定回路８０の代わりに、判定回路８２を有している。図７に示した演算装置１０のその他の構成は、図１に示した演算装置１０と同一または同様である。図１から図６で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図７の破線の矢印の意味は、図１と同一または同様である。
【０１２４】
この実施形態の演算装置１０は、例えば、行列演算を実行可能なプロセッサである。例えば、演算装置１０は、デコーダ２０、演算部３０、バッファ部４０およびアクセス制御部５０を有している。デコーダ２０、演算部３０およびバッファ部４０は、図１に示したデコーダ２０、演算部３０およびバッファ部４０と同一または同様である。
【０１２５】
アクセス制御部５０は、図１に示した判定回路８０の代わりに判定回路８２を有していることを除いて、図１に示したアクセス制御部５０と同一または同様である。例えば、アクセス制御部５０は、複数のＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）と、調停回路７０と、判定回路８２とを有している。ＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）および調停回路７０は、図１に示したＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）および調停回路７０と同一または同様である。
【０１２６】
判定回路８２は、複数のＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合の各ＦＩＦＯ４０のアクセスの優先順位を、出力側のＦＩＦＯ４０に残っているデータの数と予め設定された閾値との比較結果に基づいて決定する判定部の一例である。例えば、判定回路８２は、ＦＩＦＯ４０ａ、４０ｂ、４０ｆに残っているデータの数をそれぞれ示す情報ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆを、ＦＩＦＯ４０ａ、４０ｂ、４０ｆから受ける。そして、判定回路８２は、出力ＦＩＦＯ４０ｆのデータ数ＮＵＭｆと閾値とを比較し、比較結果に基づいて優先順位を決定する。
【０１２７】
例えば、判定回路８２は、ベースが入力優先の場合、出力ＦＩＦＯ４０ｆのエントリ数ＮＵＭｆ（データ数ＮＵＭｆ）が閾値以上で、かつ、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っているとき、優先順位をベースの入力優先から出力優先に変更する。また、例えば、判定回路８２は、ベースが入力優先の場合、出力ＦＩＦＯ４０ｆのエントリ数ＮＵＭｆが閾値未満のとき、あるいは、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っていないとき、優先順位をベースの入力優先に維持する。
【０１２８】
すなわち、判定回路８２は、出力ＦＩＦＯ４０ｆに残っているデータの数が閾値以上で、かつ、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っているとき、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定する。また、例えば、判定回路８２は、出力ＦＩＦＯ４０ｆに残っているデータの数が閾値未満のとき、あるいは、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っていないとき、入力ＦＩＦＯ４０ａ、４０ｂの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。
【０１２９】
このように、演算装置１０は、ＦＩＦＯ４０の状態に応じて優先順位を補正できるため、周期的なバンク衝突の発生を低減できる。この結果、演算装置１０は、演算処理の効率低下を抑制できる。
【０１３０】
なお、演算装置１０の構成は、この例に限定されない。例えば、バッファ部４０は、入力ＦＩＦＯ４０を３つ以上有してもよいし、出力ＦＩＦＯ４０を２つ以上有してもよい。また、例えば、判定回路８２は、ベースが出力優先の場合、出力ＦＩＦＯ４０ｆに残っているデータの数が閾値以下のとき、入力ＦＩＦＯ４０ａ、４０ｂの状態に拘わらず、優先順位をベースの出力優先から入力優先に変更してもよい。換言すれば、判定回路８２は、ベースが出力優先の場合、出力ＦＩＦＯ４０ｆに残っているデータの数が閾値を超えているとき、入力ＦＩＦＯ４０ａ、４０ｂの状態に拘わらず、優先順位をベースの出力優先に維持してもよい。
【０１３１】
図８は、図７に示した演算装置１０の動作の一例を示している。なお、図８は、バンク衝突時のＦＩＦＯ４０の優先順位を決定する処理の一例を示している。図８の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図８の動作は、例えば、演算装置１０の動作クロックのサイクル毎に実行される。
【０１３２】
ステップＳ２００では、判定回路８２は、出力ＦＩＦＯ４０ｆのデータ数ＮＵＭｆが閾値ＴＨ以上で、かつ、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っているか否かを判定する。出力ＦＩＦＯ４０ｆのデータ数ＮＵＭｆが閾値ＴＨ以上で、かつ、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っているとき（ステップＳ２００のＹｅｓ）、演算装置１０の動作は、ステップＳ２１０に移る。一方、出力ＦＩＦＯ４０ｆのデータ数ＮＵＭｆが閾値ＴＨ未満のとき、あるいは、入力ＦＩＦＯ４０ａ、４０ｂにデータが残っていないとき（ステップＳ２００のＮｏ）、演算装置１０の動作は、ステップＳ２２０に移る。
【０１３３】
ステップＳ２１０では、判定回路８２は、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定する。例えば、判定回路８２は、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定し、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定する。これにより、例えば、ベースが入力優先の場合、ＦＩＦＯ４０の優先順位は、ベースの入力優先から出力優先に変更される。
【０１３４】
ステップＳ２２０では、判定回路８２は、入力ＦＩＦＯ４０ａ、４０ｂの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。例えば、判定回路８２は、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定し、入力ＦＩＦＯ４０ａの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。なお、例えば、ベースが入力優先（ＦＩＦＯ４０ｂの優先順位＞ＦＩＦＯ４０ａの優先順位＞ＦＩＦＯ４０ｆの優先順位）の場合、ＦＩＦＯ４０の優先順位は、ベースの入力優先に維持される。
【０１３５】
このように、バンク衝突時のＦＩＦＯ４０の優先順位は、出力側のＦＩＦＯ４０のエントリ数ＮＵＭ（残っているデータの数）と閾値との比較結果に基づいて調整される。図８の動作では、入力ＦＩＦＯ４０にデータが残っているか否かの判定がステップＳ２００の判定条件に含まれているため、入力ＦＩＦＯ４０にデータが残っていないときに、優先順位が出力優先に変更されることを抑止できる。
【０１３６】
なお、演算装置１０の動作は、この例に限定されない。例えば、ベースが入力優先の場合、判定回路８２は、出力ＦＩＦＯ４０ｆのアクセスと入力ＦＩＦＯのアクセスとが衝突していないサイクルでは、優先順位を、ベースの入力優先に維持してもよい。
【０１３７】
また、例えば、ベースが出力優先（ＦＩＦＯ４０ｆの優先順位＞ＦＩＦＯ４０ｂの優先順位＞ＦＩＦＯ４０ａの優先順位）の場合、判定回路８２は、入力ＦＩＦＯ４０にデータが残っているか否かの判定をステップＳ２００の判定条件から省いてもよい。この場合、出力ＦＩＦＯ４０ｆのデータ数ＮＵＭｆと比較される閾値ＴＨは、ベースが入力優先の場合の閾値ＴＨと同じ値でもよいし、異なる値でもよい。
【０１３８】
また、出力ＦＩＦＯ４０が２個の場合、判定回路８２は、２個の出力ＦＩＦＯのデータ数ＮＵＭと閾値ＴＨとのそれぞれの比較結果の組み合わせに基づいて、ＦＩＦＯ４０の優先順位を決定してもよい。例えば、図１に示したバッファ部４０に追加される出力ＦＩＦＯ４０を出力ＦＩＦＯ４０ｅとし、出力ＦＩＦＯ４０ｅのデータ数をデータ数ＮＵＭｅとした場合、下記に示すように、ＦＩＦＯ４０の優先順位が決定されてもよい。
【０１３９】
データ数ＮＵＭｆ、ＮＵＭｅが両方とも閾値ＴＨ以上の場合、出力ＦＩＦＯ４０ｆの優先順位が出力ＦＩＦＯ４０ｅの優先順位より高く設定され、出力ＦＩＦＯ４０ｅの優先順位が入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定される。なお、入力ＦＩＦＯ４０ｂの優先順位は、入力ＦＩＦＯ４０ａの優先順位より高く設定される。
【０１４０】
データ数ＮＵＭｆが閾値ＴＨ以上でデータ数ＮＵＭｅが閾値ＴＨ未満の場合、出力ＦＩＦＯ４０ｆの優先順位が入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定され、入力ＦＩＦＯ４０ａ、４０ｂの優先順位が出力ＦＩＦＯ４０ｅの優先順位より高く設定される。なお、入力ＦＩＦＯ４０ｂの優先順位は、入力ＦＩＦＯ４０ａの優先順位より高く設定される。
【０１４１】
データ数ＮＵＭｆが閾値ＴＨ未満でデータ数ＮＵＭｅが閾値ＴＨ以上の場合、出力ＦＩＦＯ４０ｅの優先順位が入力ＦＩＦＯ４０ａ、４０ｂの優先順位より高く設定され、入力ＦＩＦＯ４０ａ、４０ｂの優先順位が出力ＦＩＦＯ４０ｆの優先順位がより高く設定される。なお、入力ＦＩＦＯ４０ｂの優先順位は、入力ＦＩＦＯ４０ａの優先順位より高く設定される。
【０１４２】
データ数ＮＵＭｆ、ＮＵＭｅが両方とも閾値ＴＨ未満の場合、入力ＦＩＦＯ４０ａ、４０ｂの優先順位が出力ＦＩＦＯ４０ｆの優先順位より高く設定され、出力ＦＩＦＯ４０ｆの優先順位が出力ＦＩＦＯ４０ｅの優先順位より高く設定される。なお、入力ＦＩＦＯ４０ｂの優先順位は、入力ＦＩＦＯ４０ａの優先順位より高く設定される。
【０１４３】
上述の例において、ベースが入力優先の場合、入力ＦＩＦＯ４０にデータが残っているか否かの条件が追加されてもよい。例えば、入力ＦＩＦＯ４０にデータが残っていない場合は、データ数ＮＵＭｆ、ＮＵＭｅが両方とも閾値ＴＨ未満の場合と同様の優先順位に設定される。
【０１４４】
図９は、図７に示した演算装置１０の調停動作の一例を示している。図９の符号Ａ、Ｂ、Ｆ等の意味は、図３と同一または同様である。図３から図６で説明した動作と同一または同様な動作については、詳細な説明を省略する。図９の動作では、演算部３０は、入力ＦＩＦＯ４０ａ、４０ｂに所定数（例えば、４個）のデータが記憶されてから演算を開始する。
【０１４５】
図９の例では、出力ＦＩＦＯ４０ｆのデータ数ＮＵＭｆと比較される閾値ＴＨは、１である。また、演算部３０のレイテンシＬは８である。入力ＦＩＦＯ４０ａ、４０ｂの段数は４であり、出力ＦＩＦＯ４０ｆの段数は２である。ＦＩＦＯ４０ａ、４０ｂ、４０ｆは、バンクＢＮＫ２、ＢＮＫ３、ＢＮＫ０、ＢＮＫ１の順に、各バンクＢＮＫにアクセスする。
【０１４６】
例えば、ベースは入力優先である。入力優先では、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高く、ＦＩＦＯ４０ａの優先順位がＦＩＦＯ４０ｆの優先順位より高い。なお、出力優先では、ＦＩＦＯ４０ｆの優先順位がＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い。
【０１４７】
例えば、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆが閾値ＴＨ（＝１）以上で、かつ、ＦＩＦＯ４０ａ、４０ｂにデータが残っている（データ数ＮＵＭａ、ＮＵＭｂが１以上である）場合、バンク衝突時のＦＩＦＯ４０の優先順位は、出力優先である。また、バンク衝突時のＦＩＦＯ４０の優先順位は、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆが閾値ＴＨ（＝１）未満の場合、あるいは、ＦＩＦＯ４０ａ、４０ｂにデータが残っていない（データ数ＮＵＭａ、ＮＵＭｂが０である）場合、入力優先である。
【０１４８】
サイクル０では、各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセス要求は、発生していない。
【０１４９】
サイクル１では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、１になる。
【０１５０】
サイクル２からサイクル５までは、バンク衝突が発生しないため、バンクＢＮＫからＦＩＦＯ４０ａ、４０ｂへのデータ転送が各サイクルで実行される。なお、サイクル５では、サイクル４の終了時のデータ数ＮＵＭｂが４である（ＦＩＦＯ４０ｂに空きがない）ため、ＤＭＡＣ６０ｂは、バンクＢＮＫ２へのアクセス要求を実行しない。このため、サイクル５では、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも４である。
【０１５１】
入力ＦＩＦＯ４０ａ、４０ｂに４個のデータが記憶されたため、演算部３０は、演算を実行する。すなわち、サイクル５では、演算が開始される。なお、演算実行後（サイクル５の終了時）のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも３である。また、演算部３０のレイテンシＬが８であるため、演算が開始されても、演算結果はＦＩＦＯ４０ｆに到着していない。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、０である。
【０１５２】
サイクル６では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、４になる。ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、３である。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ２および３である。
【０１５３】
サイクル７からサイクル１３までは、バンク衝突が発生しないため、バンクＢＮＫからＦＩＦＯ４０ａ、４０ｂへのデータ転送および演算が各サイクルで実行される。なお、演算部３０のレイテンシＬが８であるため、サイクル１３では、サイクル５で実行された演算の結果がＦＩＦＯ４０ｆに到着する。このため、サイクル１３では、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１になる。
【０１５４】
サイクル１４では、ＤＭＡＣ６０ｂ、６０ｆのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。なお、バンク衝突時のＦＩＦＯ４０の優先順位は、サイクル１３の終了時のデータ数ＮＵＭｆ（＝１）が閾値ＴＨ（＝１）以上で、かつ、データ数ＮＵＭａ（＝２）およびデータ数ＮＵＭｂ（＝３）が１以上であるため、出力優先である。
【０１５５】
したがって、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｆからのアクセス要求を許可する。これにより、からＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送される。したがって、演算実行後のＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１である。
【０１５６】
ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されないため、３である。また、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ１からＦＩＦＯ４０ａにデータが転送されるため、３になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも２である。
【０１５７】
サイクル１５では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。
【０１５８】
これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、３になる。一方、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、２である。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ１および２である。
【０１５９】
サイクル１６では、各ＤＭＡＣ６０が互いに異なるバンクＢＮＫに対してアクセスを要求しているため、バンク衝突は発生しない。このため、サイクル１６以降は、演算部３０の処理は、ストールすることなく、実行される。
【０１６０】
図１０は、図９に示した調停動作の比較例を示している。図１０の符号Ａ、Ｂ、Ｆ等の意味は、図９と同一または同様である。また、図１０の動作条件等は、優先順位を除いて、図９と同一または同様である。なお、図１０では、バンク衝突時のＦＩＦＯ４０の優先順位は、入力優先（ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高く、ＦＩＦＯ４０ａの優先順位がＦＩＦＯ４０ｆの優先順位より高い状態）で固定である。図９で説明した動作と同一または同様な動作については、詳細な説明を省略する。サイクル０からサイクル１３までは、図９と同一または同様である。
【０１６１】
サイクル１４では、ＤＭＡＣ６０ｂ、６０ｆのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。バンク衝突時のＦＩＦＯ４０の優先順位が入力優先であるため、調停回路７０は、ＤＭＡＣ６０ｂ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されるため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、４になる。また、バンクＢＮＫ１からＦＩＦＯ４０ａにデータが転送されるため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、３になる。
【０１６２】
また、ＦＩＦＯ４０ｆは、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送されないため、サイクル５およびサイクル６で実行された演算の結果（２個のデータ）を記憶する。このため、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、２になる。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ２および３である。
【０１６３】
サイクル１５では、ＤＭＡＣ６０ａ、６０ｆのアクセス要求（バンクＢＮＫ２へのアクセス要求）が衝突する。バンク衝突時のＦＩＦＯ４０の優先順位が入力優先であるため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ａからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されるため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、３になる。また、バンクＢＮＫ３からＦＩＦＯ４０ｂにデータが転送されるため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、４になる。
【０１６４】
ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送されないため、２である。ＦＩＦＯ４０ｆに空きがないため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。
【０１６５】
サイクル１６では、サイクル１５の終了時のデータ数ＮＵＭｂが４である（ＦＩＦＯ４０ｂに空きがない）ため、ＤＭＡＣ６０ｂは、バンクＢＮＫ０へのアクセス要求を実行しない。このため、サイクル１６では、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも４である。なお、ＦＩＦＯ４０ｆからバンクＢＮＫ２にデータが転送されるため、演算は実行される。したがって、演算実行後のＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、２である。また、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、両方とも３である。
【０１６６】
サイクル１７では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ０へのアクセス要求）が衝突する。ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。これにより、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、４になる。ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ２からＦＩＦＯ４０ａにデータが転送されないため、３である。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ２および３である。
【０１６７】
サイクル１８では、サイクル１５の状態と同様の状態に戻る。したがって、サイクル１８では、サイクル１５と同様の動作が実行される。サイクル１８では、ＤＭＡＣ６０ａ、６０ｆのアクセス要求（バンクＢＮＫ０へのアクセス要求）が衝突する。バンク衝突時のＦＩＦＯ４０の優先順位が入力優先であるため、調停回路７０は、ＤＭＡＣ６０ａ、６０ｆからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ａからのアクセス要求を許可する。これにより、バンクＢＮＫ０からＦＩＦＯ４０ａにデータが転送されるため、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、３になる。また、バンクＢＮＫ１からＦＩＦＯ４０ｂにデータが転送されるため、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、４になる。
【０１６８】
ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、ＦＩＦＯ４０ｆからバンクＢＮＫ０にデータが転送されないため、２である。ＦＩＦＯ４０ｆに空きがないため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。
【０１６９】
したがって、図１０の動作（バンク衝突時のＦＩＦＯ４０の優先順位が固定された演算装置の動作）では、例えば、サイクル１５以降の演算部３０の処理は、３サイクル中に１回ストールする。このように、図１０の動作では、演算部３０の処理のストールが周期的に発生する。
【０１７０】
これに対し、ＦＩＦＯ４０の状態に応じて優先順位を補正する演算装置１０では、図９に示したように、演算部３０の処理のストールが周期的に発生することを抑制できる。これにより、図９の動作では、図１０の動作に対して、演算装置１０の性能を約１．５（＝３／２）倍にできる。
【０１７１】
以上、図７から図９に示した実施形態の演算装置においても、図１から図５に示した実施形態の演算装置と同様の効果を得ることができる。例えば、判定回路８２は、出力ＦＩＦＯ４０に残っているデータの数が閾値ＴＨ以上で、かつ、入力ＦＩＦＯ４０にデータが残っているとき、出力ＦＩＦＯ４０の優先順位を入力ＦＩＦＯ４０の優先順位より高く設定する。また、例えば、判定回路８２は、出力ＦＩＦＯ４０に残っているデータの数が閾値ＴＨ未満のとき、あるいは、入力ＦＩＦＯ４０にデータが残っていないとき、入力ＦＩＦＯ４０の優先順位を出力ＦＩＦＯ４０の優先順位より高く設定する。
【０１７２】
このように、判定回路８２は、バンク衝突時のＦＩＦＯ４０のアクセスの優先順位を、出力ＦＩＦＯ４０に残っているデータの数と予め設定された閾値ＴＨとの比較結果に基づいて決定する。すなわち、この実施形態では、演算装置１０は、ＦＩＦＯ４０の状態に応じて優先順位を補正する。このため、この実施形態では、複数のＦＩＦＯ４０が同じバンクＢＮＫにアクセスするときに、バンクＢＮＫにアクセスするＦＩＦＯ４０を効率よく選択できる。これにより、この実施形態では、演算部３０の処理のストールが周期的に発生することを抑制できる。この結果、この実施形態では、演算処理に複数の入力ＦＩＦＯ４０を使用する場合でも、演算処理の効率低下を抑制できる。
【０１７３】
図１１は、演算装置の別の実施形態を示している。この実施形態の演算装置１０は、図１に示した判定回路８０の代わりに、判定回路８４を有している。図１１に示した演算装置１０のその他の構成は、図１に示した演算装置１０と同一または同様である。図１から図１０で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図１１の破線の矢印の意味は、図１と同一または同様である。
【０１７４】
この実施形態の演算装置１０は、例えば、行列演算を実行可能なプロセッサである。例えば、演算装置１０は、デコーダ２０、演算部３０、バッファ部４０およびアクセス制御部５０を有している。デコーダ２０、演算部３０およびバッファ部４０は、図１に示したデコーダ２０、演算部３０およびバッファ部４０と同一または同様である。
【０１７５】
アクセス制御部５０は、図１に示した判定回路８０の代わりに判定回路８４を有していることを除いて、図１に示したアクセス制御部５０と同一または同様である。例えば、アクセス制御部５０は、複数のＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）と、調停回路７０と、判定回路８４とを有している。ＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）および調停回路７０は、図１に示したＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ）および調停回路７０と同一または同様である。
【０１７６】
判定回路８４は、複数の入力ＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合の入力ＦＩＦＯ４０のそれぞれの優先順位を、入力ＦＩＦＯ４０に残っているデータの数が少ない方を優先するように設定する判定部の一例である。例えば、判定回路８４は、ＦＩＦＯ４０ａ、４０ｂ、４０ｆに残っているデータの数をそれぞれ示す情報ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆを、ＦＩＦＯ４０ａ、４０ｂ、４０ｆから受ける。そして、判定回路８４は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａと入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂとを比較し、データ数ＮＵＭが少ない方の入力ＦＩＦＯ４０の優先順位を高く設定する。
【０１７７】
このように、演算装置１０は、入力ＦＩＦＯ４０の状態に応じて入力ＦＩＦＯ４０の優先順位を補正できるため、バンク衝突の発生を低減できる。この結果、演算装置１０は、演算処理の効率低下を抑制できる。
【０１７８】
なお、演算装置１０の構成は、この例に限定されない。例えば、判定回路８４は、図１に示した判定回路８０と組み合わされてもよいし、図７に示した判定回路８２と組み合わされてもよい。また、例えば、バッファ部４０は、入力ＦＩＦＯ４０を３つ以上有してもよいし、出力ＦＩＦＯ４０を２つ以上有してもよい。
【０１７９】
図１２は、図１１に示した演算装置１０の動作の一例を示している。なお、図１２は、バンク衝突時の入力ＦＩＦＯ４０の優先順位を決定する処理の一例を示している。図１２の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図１２の動作は、例えば、演算装置１０の動作クロックのサイクル毎に実行される。
【０１８０】
ステップＳ３００では、判定回路８４は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満か否かを判定する。入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満のとき（ステップＳ３００のＹｅｓ）、演算装置１０の動作は、ステップＳ３１０に移る。一方、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ以上のとき（ステップＳ３００のＮｏ）、演算装置１０の動作は、ステップＳ３２０に移る。
【０１８１】
ステップＳ３１０では、判定回路８４は、入力ＦＩＦＯ４０ａの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定する。
【０１８２】
ステップＳ３２０では、判定回路８４は、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定する。
【０１８３】
なお、演算装置１０の動作は、この例に限定されない。例えば、図１３に示すように、判定回路８４は、図２の動作と図１２の動作とを組み合わせて実行してもよい。あるいは、判定回路８４は、図８の動作と図１２の動作とを組み合わせて実行してもよい。
【０１８４】
図１３は、図１１に示した演算装置１０の動作の別の例を示している。なお、図１３は、バンク衝突時のＦＩＦＯ４０の優先順位を決定する処理を図２の動作と図１２の動作とを組み合わせ実行する場合の一例を示している。図１３の動作は、ハードウエアのみで実現されてもよく、ハードウエアをソフトウエアにより制御することにより実現されてもよい。図１３の動作は、例えば、演算装置１０の動作クロックのサイクル毎に実行される。図２および図１２で説明した動作と同一または同様な動作については、詳細な説明を省略する。
【０１８５】
ステップＳ１００では、判定回路８４は、入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂのいずれかが閾値ＴＨ以下で、かつ、出力ＦＩＦＯ４０ｆに空きがあるか否かを判定する。入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂのいずれかが閾値ＴＨ以下で、かつ、出力ＦＩＦＯ４０ｆに空きがあるとき（ステップＳ１００のＹｅｓ）、演算装置１０の動作は、ステップＳ１０２に移る。一方、入力ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂの両方が閾値ＴＨを超えているとき、あるいは、出力ＦＩＦＯ４０ｆに空きがないとき（ステップＳ１００のＮｏ）、演算装置１０の動作は、ステップＳ１０４に移る。
【０１８６】
ステップＳ１０２では、判定回路８４は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満か否かを判定する。入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満のとき（ステップＳ１０２のＹｅｓ）、演算装置１０の動作は、ステップＳ１１０Ａに移る。一方、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ以上のとき（ステップＳ１０２のＮｏ）、演算装置１０の動作は、ステップＳ１１０Ｂに移る。
【０１８７】
ステップＳ１１０Ａでは、判定回路８４は、ＦＩＦＯ４０の優先順位を入力優先に設定し、さらに、入力ＦＩＦＯ４０ａの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定する。すなわち、判定回路８４は、入力ＦＩＦＯ４０ａの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定し、入力ＦＩＦＯ４０ｂの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。
【０１８８】
ステップＳ１１０Ｂでは、判定回路８４は、ＦＩＦＯ４０の優先順位を入力優先に設定し、さらに、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定する。すなわち、判定回路８４は、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定し、入力ＦＩＦＯ４０ａの優先順位を出力ＦＩＦＯ４０ｆの優先順位より高く設定する。
【０１８９】
ステップＳ１０４では、判定回路８４は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満か否かを判定する。入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満のとき（ステップＳ１０４のＹｅｓ）、演算装置１０の動作は、ステップＳ１２０Ａに移る。一方、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ以上のとき（ステップＳ１０４のＮｏ）、演算装置１０の動作は、ステップＳ１２０Ｂに移る。
【０１９０】
ステップＳ１２０Ａでは、判定回路８４は、ＦＩＦＯ４０の優先順位を出力優先に設定し、さらに、入力ＦＩＦＯ４０ａの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定する。すなわち、判定回路８４は、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定し、入力ＦＩＦＯ４０ａの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定する。
【０１９１】
ステップＳ１２０Ｂでは、判定回路８４は、ＦＩＦＯ４０の優先順位を出力優先に設定し、さらに、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定する。すなわち、判定回路８４は、出力ＦＩＦＯ４０ｆの優先順位を入力ＦＩＦＯ４０ｂの優先順位より高く設定し、入力ＦＩＦＯ４０ｂの優先順位を入力ＦＩＦＯ４０ａの優先順位より高く設定する。
【０１９２】
なお、演算装置１０の動作は、この例に限定されない。例えば、ベースが入力優先の場合、判定回路８４は、出力ＦＩＦＯ４０に空きがあるか否かの判定をステップＳ１００の判定条件から省いてもよい。
【０１９３】
以上、図１１から図１３に示した実施形態の演算装置においても、図１から図５に示した実施形態の演算装置および図７から図９に示した実施形態の演算装置と同様の効果を得ることができる。例えば、判定回路８４は、複数の入力ＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合の入力ＦＩＦＯ４０のそれぞれの優先順位を、入力ＦＩＦＯ４０に残っているデータの数が少ない方を優先するように設定する。
【０１９４】
このように、この実施形態では、演算装置１０は、入力ＦＩＦＯ４０の状態に応じて入力ＦＩＦＯ４０の優先順位を補正する。このため、この実施形態では、複数の入力ＦＩＦＯ４０が同じバンクＢＮＫにアクセスするときに、バンクＢＮＫにアクセスする入力ＦＩＦＯ４０を効率よく選択できる。これにより、この実施形態では、演算部３０の処理のストールが発生することを低減できる。この結果、この実施形態では、演算処理に複数の入力ＦＩＦＯ４０を使用する場合でも、演算処理の効率低下を抑制できる。
【０１９５】
図１４は、演算装置の別の実施形態を示している。この実施形態の演算装置１０は、図１に示した調停回路７０および判定回路８０の代わりに、調停回路７２および判定回路８６を有している。また、図１４に示した演算装置１０では、ＤＭＡＣ６０ｚが図１に示した演算装置１０に追加されている。図１４に示した演算装置１０のその他の構成は、図１に示した演算装置１０と同一または同様である。図１から図１３で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図１４の破線の矢印の意味は、図１と同一または同様である。
【０１９６】
この実施形態の演算装置１０は、例えば、行列演算を実行可能なプロセッサである。例えば、演算装置１０は、デコーダ２０、演算部３０、バッファ部４０およびアクセス制御部５０を有している。デコーダ２０、演算部３０およびバッファ部４０は、図１に示したデコーダ２０、演算部３０およびバッファ部４０と同一または同様である。
【０１９７】
アクセス制御部５０は、図１に示した調停回路７０および判定回路８０の代わりに、調停回路７２および判定回路８６を有している。また、ＤＭＡＣ６０ｚが図１に示したアクセス制御部５０に追加されている。アクセス制御部５０のその他の構成は、図１に示したアクセス制御部５０と同一または同様である。例えば、アクセス制御部５０は、複数のＤＭＡＣ６０（６０ａ、６０ｂ、６０ｆ、６０ｚ）と、調停回路７２と、判定回路８６とを有している。
【０１９８】
ＤＭＡＣ６０ａ、６０ｂ、６０ｆは、図１に示したＤＭＡＣ６０ａ、６０ｂ、６０ｆと同一または同様である。なお、ＤＭＡＣ６０ｚは、外部ＣＰＵ３００（演算装置１０の外部のＣＰＵ）とメモリ１００との間のデータ転送を制御する。例えば、各ＤＭＡＣ６０は、メモリ１００に対するアクセス要求を示すアクセス要求信号を、調停回路７２に出力する。
【０１９９】
調停回路７２は、複数の入力ＦＩＦＯ４０のアクセス先が同じバンクＢＮＫのとき、優先順位に基づいて、バンクＢＮＫにアクセスする入力ＦＩＦＯ４０を選択する調停部の一例である。例えば、調停回路７２は、図１に示した選択回路ＳＥＬ（ＳＥＬ０、ＳＥＬ１、ＳＥＬ２、ＳＥＬ３）の代わりに、選択回路ＳＥＬＡ（ＳＥＬＡ０、ＳＥＬＡ１、ＳＥＬＡ２、ＳＥＬＡ３）を有している。調停回路７２のその他の構成は、図１に示した調停回路７０と同一または同様である。例えば、調停回路７２は、メモリ１００の各バンクＢＮＫ（ＢＮＫ０、ＢＮＫ１、ＢＮＫ２、ＢＮＫ３）に対応して設けられた選択回路ＳＥＬＡ（ＳＥＬＡ０、ＳＥＬＡ１、ＳＥＬＡ２、ＳＥＬＡ３）を有している。
【０２００】
各選択回路ＳＥＬＡは、対応するバンクＢＮＫに対するアクセス要求信号を受けた場合、アクセス要求信号を出力したＤＭＡＣ６０を、バンクＢＮＫにアクセスするＤＭＡＣ６０として選択する。これにより、選択回路ＳＥＬＡで選択されたＤＭＡＣ６０に対応するＦＩＦＯ４０あるいは外部ＣＰＵ３００と選択部ＳＥＬＡに対応するバンクＢＮＫとの間でデータが転送される。
【０２０１】
なお、各選択回路ＳＥＬＡは、複数のＤＭＡＣ６０からアクセス要求信号を受けた場合、優先順位に基づいて、バンクＢＮＫにアクセスするＤＭＡＣ６０を選択する。例えば、各選択回路ＳＥＬＡは、優先順位を示す優先順位情報ＰＩＮＦを判定回路８６から受ける。そして、各選択回路ＳＥＬＡは、複数のＤＭＡＣ６０からアクセス要求信号を受けた場合、アクセス要求信号を出力した複数のＤＭＡＣ６０のうち、優先順位情報ＰＩＮＦが示す優先順位が最も高いＤＭＡＣ６０を選択する。
【０２０２】
このように、各選択回路ＳＥＬＡは、複数のＦＩＦＯ４０が同じバンクＢＮＫにアクセスするとき、優先順位に基づいて、バンクＢＮＫにアクセスするＦＩＦＯ４０を選択する。
【０２０３】
判定回路８６は、複数の入力ＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合の入力ＦＩＦＯ４０のそれぞれの優先順位を、入力ＦＩＦＯ４０に残っているデータの数が少ない方を優先するように設定する判定部の一例である。判定回路８６の動作は、例えば、図１１に示した判定回路８４と同一または同様である。
【０２０４】
例えば、判定回路８６は、ＦＩＦＯ４０ａ、４０ｂ、４０ｆに残っているデータの数をそれぞれ示す情報ＮＵＭａ、ＮＵＭｂ、ＮＵＭｆを、ＦＩＦＯ４０ａ、４０ｂ、４０ｆから受ける。そして、判定回路８６は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａと入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂとを比較し、データ数ＮＵＭが少ない方の入力ＦＩＦＯ４０の優先順位を高く設定する。
【０２０５】
このように、演算装置１０は、入力ＦＩＦＯ４０の状態に応じて入力ＦＩＦＯ４０の優先順位を補正できるため、バンク衝突の発生を低減できる。この結果、演算装置１０は、演算処理の効率低下を抑制できる。
【０２０６】
なお、演算装置１０の構成は、この例に限定されない。例えば、判定回路８６は、図１に示した判定回路８０と組み合わされてもよいし、図７に示した判定回路８２と組み合わされてもよい。また、例えば、バッファ部４０は、入力ＦＩＦＯ４０を３つ以上有してもよいし、出力ＦＩＦＯ４０を２つ以上有してもよい。
【０２０７】
図１５は、図１４に示した演算装置１０の調停動作の一例を示している。図１５の符号Ａ、Ｂ、Ｆ等の意味は、図３と同一または同様である。例えば、符号Ｚは、メモリ１００の各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセスを要求しているＤＭＡＣ６０ｚを示している。図３から図６および図９から図１０で説明した動作と同一または同様な動作については、詳細な説明を省略する。図１５の動作では、演算は、入力ＦＩＦＯ４０ａ、４０ｂに最初のデータが記憶されたサイクルの次のサイクルで開始される。
【０２０８】
図１５の例では、演算部３０のレイテンシＬは８である。また、入力ＦＩＦＯ４０ａ、４０ｂの段数は４であり、出力ＦＩＦＯ４０ｆの段数は２である。ＦＩＦＯ４０ａは、バンクＢＮＫ３、ＢＮＫ０、ＢＮＫ１、ＢＮＫ２の順に、各バンクＢＮＫにアクセスする。ＦＩＦＯ４０ｂ、４０ｆは、バンクＢＮＫ１、ＢＮＫ２、ＢＮＫ３、ＢＮＫ０の順に、各バンクＢＮＫにアクセスする。外部ＣＰＵ３００は、シーケンシャルアクセスとは限らない。例えば、外部ＣＰＵ３００は、サイクル２とサイクル３で連続して、バンクＢＮＫ１にアクセスする。
【０２０９】
ベースは、例えば、出力優先である。なお、入力ＦＩＦＯ４０の優先順位は、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａと入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂとの比較結果に基づいて調整され、外部ＣＰＵ３００の優先順位は、最も高い優先順位で固定されている。例えば、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ未満の場合、入力ＦＩＦＯ４０ａの優先順位は、入力ＦＩＦＯ４０ｂの優先順位より高い。また、例えば、入力ＦＩＦＯ４０ａのデータ数ＮＵＭａが入力ＦＩＦＯ４０ｂのデータ数ＮＵＭｂ以上の場合、入力ＦＩＦＯ４０ｂの優先順位は、入力ＦＩＦＯ４０ａの優先順位より高い。
【０２１０】
サイクル０では、各バンクＢＮＫ（ＢＮＫ０−ＢＮＫ３）へのアクセス要求は、発生していない。
【０２１１】
サイクル１では、ＤＭＡＣ６０ａ、６０ｂは、バンクＢＮＫ３、ＢＮＫ１へのアクセスを調停回路７２にそれぞれ要求する。これにより、バンクＢＮＫ３からＦＩＦＯ４０ａにデータが転送され、バンクＢＮＫ１からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、１になる。
【０２１２】
サイクル２では、ＤＭＡＣ６０ａ、６０ｚのアクセス要求（バンクＢＮＫ０へのアクセス要求）が衝突する。外部ＣＰＵ３００の優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７２は、ＤＭＡＣ６０ａ、６０ｚからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｚからのアクセス要求を許可する。これにより、バンクＢＮＫ０と外部ＣＰＵ３００との間のデータ転送が実行される。なお、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ０からＦＩＦＯ４０ａにデータが転送されないため、１である。また、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ２からＦＩＦＯ４０ｂにデータが転送されるため、２になる。
【０２１３】
また、サイクル２では、演算部３０は、演算を実行する。すなわち、サイクル２では、演算が開始される。演算部３０のレイテンシＬが８であるため、演算が開始されても、演算結果はＦＩＦＯ４０ｆに到着していない。したがって、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、０である。なお、演算実行後のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ０および１である。
【０２１４】
サイクル３では、ＤＭＡＣ６０ａ、６０ｚのアクセス要求（バンクＢＮＫ０へのアクセス要求）が衝突する。外部ＣＰＵ３００の優先順位がＦＩＦＯ４０ａの優先順位より高いため、調停回路７２は、ＤＭＡＣ６０ａ、６０ｚからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｚからのアクセス要求を許可する。これにより、バンクＢＮＫ０と外部ＣＰＵ３００との間のデータ転送が実行される。
【０２１５】
なお、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ０からＦＩＦＯ４０ａにデータが転送されないため、０である。このため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。なお、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ３からＦＩＦＯ４０ｂにデータが転送されるため、２になる。
【０２１６】
サイクル４では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ０へのアクセス要求）が衝突する。なお、バンク衝突時の入力ＦＩＦＯ４０の優先順位は、サイクル３の終了時のデータ数ＮＵＭａ（＝０）がデータ数ＮＵＭｂ（＝２）未満であるため、入力ＦＩＦＯ４０ａの優先順位が入力ＦＩＦＯ４０ｂの優先順位より高い。このため、調停回路７２は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ａからのアクセス要求を許可する。これにより、バンクＢＮＫ０からＦＩＦＯ４０ａにデータが転送される。したがって、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、１になる。
【０２１７】
一方、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、バンクＢＮＫ０からＦＩＦＯ４０ｂにデータが転送されないため、２である。入力ＦＩＦＯ４０ａ、４０ｂにデータが記憶されたため、演算部３０は、演算を実行する。なお、演算実行後（サイクル４の終了時）のＦＩＦＯ４０ａ、４０ｂのデータ数ＮＵＭａ、ＮＵＭｂは、それぞれ０および１である。
【０２１８】
サイクル５以降では、バンク衝突が発生しないため、バンクＢＮＫからＦＩＦＯ４０ａ、４０ｂへのデータ転送および演算が各サイクルで実行される。例えば、命令のデコード結果に基づいて設定された回数だけ演算が実行され、最後の演算の結果がＦＩＦＯ４０ｆに到着したとき、演算部３０の処理は、終了する。例えば、サイクル１１では、サイクル２で実行された演算の結果がＦＩＦＯ４０ｆに到着するため、ＦＩＦＯ４０ｆのデータ数ＮＵＭｆは、１になる。そして、サイクル１２では、ＦＩＦＯ４０ｆからバンクＢＮＫ１にデータ（先頭の演算結果）が転送される。
【０２１９】
図１６は、図１５に示した調停動作の比較例を示している。図１６の符号Ａ、Ｂ、Ｆ、Ｚ等の意味は、図１５と同一または同様である。また、図１６の動作条件等は、優先順位を除いて、図１５と同一または同様である。例えば、バンク衝突時の外部ＣＰＵ３００の優先順位は、最も高い優先順位で固定されている。また、図１６では、バンク衝突時のＦＩＦＯ４０の優先順位は、ＦＩＦＯ４０ｆの優先順位がＦＩＦＯ４０ｂの優先順位より高く、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い状態で固定である。図１５で説明した動作と同一または同様な動作については、詳細な説明を省略する。サイクル０からサイクル３までは、図１５と同一または同様である。
【０２２０】
サイクル４では、ＤＭＡＣ６０ａ、６０ｂのアクセス要求（バンクＢＮＫ０へのアクセス要求）が衝突する。なお、バンク衝突時の入力ＦＩＦＯ４０の優先順位は、ＦＩＦＯ４０ｂの優先順位がＦＩＦＯ４０ａの優先順位より高い状態で固定されている。このため、調停回路７２は、ＤＭＡＣ６０ａ、６０ｂからのアクセス要求のうち、優先順位の高いＤＭＡＣ６０ｂからのアクセス要求を許可する。
【０２２１】
これにより、バンクＢＮＫ０からＦＩＦＯ４０ｂにデータが転送される。したがって、ＦＩＦＯ４０ｂのデータ数ＮＵＭｂは、３になる。一方、ＦＩＦＯ４０ａのデータ数ＮＵＭａは、バンクＢＮＫ０からＦＩＦＯ４０ａにデータが転送されないため、０である。このため、演算は実行されない。すなわち、演算部３０の処理は、ストールする。
【０２２２】
サイクル５以降では、バンク衝突が発生しないため、バンクＢＮＫからＦＩＦＯ４０ａ、４０ｂへのデータ転送および演算が各サイクルで実行される。このように、図１６の動作（バンク衝突時の入力ＦＩＦＯ４０の優先順位が固定された演算装置の動作）では、サイクル３とサイクル４との２サイクルで、演算部３０の処理がストールする。
【０２２３】
これに対し、入力ＦＩＦＯ４０の状態に応じて入力ＦＩＦＯ４０の優先順位を補正する演算装置１０では、図１５に示したように、演算部３０の処理がサイクル４でストールすることを回避できる。したがって、図１５の動作では、演算部３０の処理のストールの発生を、図１６の動作に比べて低減できる。これにより、図１５の動作では、図１６の動作に比べて、演算処理の効率低下を抑制できる。
【０２２４】
以上、図１４および図１５に示した実施形態の演算装置においても、図１１から図１３に示した実施形態の演算装置等と同様の効果を得ることができる。例えば、判定回路８６は、複数の入力ＦＩＦＯ４０のアクセス先が同じバンクＢＮＫである場合の入力ＦＩＦＯ４０のそれぞれの優先順位を、入力ＦＩＦＯ４０に残っているデータの数が少ない方を優先するように設定する。
【０２２５】
このように、この実施形態では、演算装置１０は、入力ＦＩＦＯ４０の状態に応じて入力ＦＩＦＯ４０の優先順位を補正する。このため、この実施形態では、複数の入力ＦＩＦＯ４０が同じバンクＢＮＫにアクセスするときに、バンクＢＮＫにアクセスする入力ＦＩＦＯ４０を効率よく選択できる。これにより、この実施形態では、演算部３０の処理のストールが発生することを低減できる。この結果、この実施形態では、演算処理に複数の入力ＦＩＦＯ４０を使用する場合でも、演算処理の効率低下を抑制できる。
【０２２６】
図１７は、図１、図７、図１１および図１４に示した演算装置１０が搭載される装置の一例を示している。図１、図７、図１１および図１４に示した演算装置１０のいずれかは、例えば、携帯電話ＭＯＢのベースバンド処理回路ＢＢＣに搭載される。ベースバンド処理回路ＢＢＣは、例えば、ＤＳＰ（Digital Signal Processor）４００（４００Ａ、４００Ｂ、４００Ｃ）、ＲＦ（Radio Frequency）部５００、専用ハードウエア６００を有する。ＤＳＰ４００、ＲＦ部５００および専用ハードウエア６００は、バス７００に接続されている。
【０２２７】
各ＤＳＰ４００は、例えば、プロセッサ４１０、プログラムメモリ４２０、データメモリ４３０および周辺回路４４０を有する。プロセッサ４１０は、例えば、ＣＰＵ４１２および行列処理プロセッサ１０を有する。行列処理プロセッサ１０は、図１、図７、図１１および図１４に示した演算装置１０のいずれかに対応する。なお、プロセッサ４１０は、図１等に示したデコーダ２０をＣＰＵ４１２用のデコーダとして兼用してもよいし、デコーダ２０とは別にＣＰＵ４１２用のデコーダを有してもよい。
【０２２８】
プログラムメモリ４２０は、図１等に示した命令メモリ２００に対応する。データメモリ４３０は、図１等に示したメモリ１００に対応する。各ＤＳＰ４００は、無線信号の信号処理を実行する。例えば、各ＤＳＰ４００には、無線通信の信号処理の各要素処理（同期、復調、復号、符号化、変調等の処理）が割り当てられる。
【０２２９】
ＲＦ部５００は、例えば、アンテナ８００を介して受信した無線信号の周波数をダウンコンバートして、デジタル信号に変換する。そして、ＲＦ部５００は、デジタル信号をバス７００に出力する。また、ＲＦ部５００は、例えば、バス７００を介して受信したデジタル信号をアナログ信号に変換して、アナログ信号の周波数をアップコンバートする。そして、ＲＦ部５００は、周波数をアップコンバートしたアナログ信号を、アンテナ８００に出力する。
【０２３０】
専用ハードウエア６００は、例えば、ターボ符号等の誤り訂正符号を処理する機能、ビタビアルゴリズムを実行する機能、データの送受信を複数のアンテナで実行するためのＭＩＭＯ（Multi Input Multi Output）等を有する。なお、演算装置１０が搭載されるベースバンド処理回路ＢＢＣの構成は、この例に限定されない。また、演算装置１０が搭載される装置は、ベースバンド処理回路ＢＢＣに限定されない。
【０２３１】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０２３２】
１０‥演算装置；２０‥デコーダ演算装置；３０‥演算部；４０‥バッファ部；４０ａ、４０ｂ、４０ｆ‥ＦＩＦＯバッファ；５０‥アクセス制御部；６０、６０ａ、６０ｂ、６０ｆ、６０ｚ‥ＤＭＡＣ；７０、７２‥調停回路；８０、８２、８４、８６‥判定回路；１００‥メモリ；２００‥命令メモリ；４００Ａ、４００Ｂ、４００Ｃ‥ＤＳＰ；５００‥ＲＦ部；６００‥専用ハードウエア；７００‥バス；８００‥アンテナ；４１０‥プロセッサ；４２０‥プログラムメモリ；４３０‥データメモリ；４４０‥周辺回路；ＢＢＣ‥ベースバンド処理回路；ＢＮＫ０、ＢＮＫ１、ＢＮＫ２、ＢＮＫ３‥バンク；ＭＯＢ‥携帯電話；ＳＥＬ０、ＳＥＬ１、ＳＥＬ２、ＳＥＬ３、ＳＥＬＡ０、ＳＥＬＡ１、ＳＥＬＡ２、ＳＥＬＡ３‥選択回路
【図１】
2015219876.tif 000003
【図２】
2015219876.tif 000004
【図３】
2015219876.tif 000005
【図４】
2015219876.tif 000006
【図５】
2015219876.tif 000007
【図６】
2015219876.tif 000008
【図７】
2015219876.tif 000009
【図８】
2015219876.tif 000010
【図９】
2015219876.tif 000011
【図１０】
2015219876.tif 000012
【図１１】
2015219876.tif 000013
【図１２】
2015219876.tif 000014
【図１３】
2015219876.tif 000015
【図１４】
2015219876.tif 000016
【図１５】
2015219876.tif 000017
【図１６】
2015219876.tif 000018
【図１７】
2015219876.tif 000019