(57)【特許請求の範囲】
【請求項１】
Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に異なるOutput matrix dataを生成するPE (Processing Element) Gridと、前記PE Gridは、前記Output matrix dataを構成する要素を算出する複数のPEを含み、
前記Input matrix dataもしくは前記Output matrix dataの要素数と、前記Kernelの数に基づいて、複数のOutput matrix dataが有する要素を並列に算出するか、もしくは、一つのOutput matrix dataが有する複数の前記要素を並列に算出するかを決定するParallelism コントローラと、を備える、情報処理装置。
【請求項２】
前記Parallelism コントローラは、
複数の前記Output matrix dataが有する要素を並列に算出する場合に演算を実行するPEの数が、一つのOutput matrix dataに含められる複数の前記要素を並列に算出する場合に演算を実行するPEの数よりも多い場合に、複数の前記Output matrix dataが有する要素を並列に算出し、
一つのOutput matrix dataに含められる複数の前記要素を並列に算出する場合に演算を実行するPEの数が、複数の前記Output matrix dataが有する要素を並列に算出する場合に演算を実行するPEの数よりも多い場合に、一つのOutput matrix dataに含められる複数の前記要素を並列に算出する、、請求項１に記載の情報処理装置。
【請求項３】
前記複数のPEに適用されるKernelを決定するSparse Weight Broadcasterをさらに備え、
前記Parallelism コントローラは、
前記PE Gridにおいて、同時に用いられるKernelの数を決定し、決定した前記Kernelの数に関する情報を前記Sparse Weight Broadcasterへ出力し、
前記Sparse Weight Broadcasterは、
決定された数のKernelを用いて並列に演算を実行するように、前記複数のPEに対してKernelを割り当てる、請求項１又は２に記載の情報処理装置。
【請求項４】
前記Sparse Weight Broadcasterは、
前記複数のPEへ、前記Kernelを識別するKernel ID及び前記Kernelに含められる複数のelementを識別するelement IDを含むindex情報と、前記Kernel ID及び前記element IDに関連付けられたWeight valueとを出力する、請求項３に記載の情報処理装置。
【請求項５】
前記Parallelism コントローラは、
前記複数のPEへ、前記Input matrix dataから抽出するdataを識別するaddress情報を出力し、
前記複数のPEは、
前記address情報に対応するdataを前記Input matrix dataから抽出する、請求項４に記載の情報処理装置。
【請求項６】
同じKernelが割り当てられたそれぞれのPEは、
前記Input matrix dataから異なるdataを抽出し、
異なるKernelが割り当てられたそれぞれのPEは、
前記Input matrix dataから同じdataを抽出する、請求項５に記載の情報処理装置。
【請求項７】
前記Sparse Weight Broadcasterは、
前記PE Gridに含まれるすべてのPEに対して同じKernelを割り当てるか、前記PE Gridに含まれるすべてのPEに対して異なるKernelを割り当てるか、もしくは、前記PE Gridに含まれる複数のPEを少なくとも２以上のグループに分割し、前記グループ毎に異なるKernelを割り当てる、請求項３乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記PEは、
前記Kernelに含められるNon-zero valueを用いて要素の値を算出し、
前記Sparse Weight Broadcasterは、
それぞれの前記PEが要素を算出する際に用いるNon-zero valueの数の差が、予め定められた閾値を下回るように、それぞれのPEへ前記Kernelを割り当てる、請求項３乃至７のいずれか１項に記載の情報処理装置。 
【請求項９】
コンピュータ装置が、
Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に生成されるOutput matrix dataの要素数もしくは前記Input matrix dataの要素数と、前記Kernelの数とを取得し、
前記Output matrix dataの要素数もしくは前記Input matrix dataの要素数と、前記Kernelの数とに基づいて、複数の前記Output matrix dataが有する要素を並列に算出するか、もしくは、一つのOutput matrix dataに含められる複数の前記要素を並列に算出するかの前記要素の算出方法を決定し、
前記算出方法に基づいて、前記Output matrix dataを生成する、情報処理方法。
【請求項１０】
Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に生成されるOutput matrix dataの要素数もしくは前記Input matrix dataの要素数と、前記Kernelの数とを取得し、
前記Output matrix dataの要素数もしくは前記Input matrix dataの要素数と、前記Kernelの数とに基づいて、複数の前記Output matrix dataが有する要素を並列に算出するか、もしくは、一つのOutput matrix dataに含められる複数の前記要素を並列に算出するかの前記要素の算出方法を決定し、
前記算出方法に基づいて、前記Output matrix dataを生成する、ことをコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
近年、画像認識等の分野において、CNN(Convolutional Neural Networks)を適用することが検討されている。CNNは、Convolutional Layer、 Subsampling Layer （Pooling Layer）及びFully connected Layerを含む。Convolutional Layerにおいて、複数のKernelもしくはFilterを用いて畳み込み演算（convolution）を実行し、複数のFeature Mapsが生成される。さらに、Subsampling Layerにおいて、Feature MapsのData sizeが圧縮される。Convolutional Layer及びSubsampling Layerにおける処理が繰り返された後に、全てのデータが接続され、画像認識等に用いられるデータが生成される。
【０００３】
Convolutional Layerにおける演算量（amount of computation）は膨大である。そのため、情報処理装置において、Convolutional Layerにおける演算（computation）が並列（Parallelly）に実行される構成が検討されている。例えば、非特許文献１においては、並列処理を実行するそれぞれのPE（Processing Element）において用いられるKernelもしくはWeight valueが予め定められており、それぞれのPEに同一のデータが入力される構成が開示されている。それぞれのPEに定められるKernelは、他のPEに定められるKernelとは異なる。このようにして、複数のPEにおいてConvolutional Layerの演算が並列に実行される。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】EIE: Efficient Inference Engine on Compressed Deep Neural Network, May 3, 2016
【発明の概要】
【発明が解決しようとする課題】
【０００５】
CNNにおいては、Convolutional Layer及びSubsampling Layerにおける処理が繰り返されるにつれ、Feature MapsのData sizeが小さくなり、さらにFeature Mapsの数が増加する。言い換えると、CNNにおいては、当初は、Data sizeの大きいInput matrix dataに対して、少数のKernelが適用され、Feature Mapsが生成される。その後、Subsampling Layerにおいて圧縮が行われることによってData sizeが縮小されたFeature Mapsに対して、多数のKernelが適用される。Feature Mapsは、適用されるKernel毎に生成される。ここで、それぞれのPEにおいて用いられるKernelが予め定められている場合、用いられるKernelが少ないConvolutional Layerの処理においては、使用されるPEの数が減少し、PEの利用（utilization）率が低下するという問題がある。
【０００６】
本開示の目的は、CNNの一連の処理において、PEの利用率の低下を防止することができる情報処理装置、情報処理方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本開示の第１の態様にかかる情報処理装置は、Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に異なるOutput matrix dataを生成するPE (Processing Element) Gridと、前記PE Gridは、前記Output matrix dataを構成する要素（pixel）を算出する複数のPEを含み、前記Input matrix dataもしくは前記Output matrix dataの次元と、前記Kernelの数に基づいて、複数のOutput matrix dataが有するpixelを並列に（parallelly）算出するか、もしくは、一つのOutput matrix dataが有する複数の前記pixelを並列に算出するかを決定するParallelism コントローラと、を備える。
【０００８】
本開示の第２の態様にかかる情報処理方法は、Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に生成されるOutput matrix dataの次元もしくは前記Input matrix dataの次元と、前記Kernelの数とを取得し、前記Output matrix dataの次元もしくは前記Input matrix dataの次元と、前記Kernelの数とに基づいて、複数の前記Output matrix dataが有するpixelを並列に（parallelly）算出するか、もしくは、一つのOutput matrix dataに含められる複数の前記pixelを並列に算出するかを決定し、前記算出方法に基づいて、前記Output matrix dataを生成する。
【０００９】
本開示の第３の態様にかかるプログラムは、Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に生成されるOutput matrix dataの次元もしくは前記Input matrix dataの次元と、前記Kernelの数とを取得し、前記Output matrix dataの次元もしくは前記Input matrix dataの次元と、前記Kernelの数とに基づいて、複数の前記Output matrix dataが有するpixelを並列に（parallelly）算出するか、もしくは、一つのOutput matrix dataに含められる複数の前記pixelを並列に算出するかを決定し、前記算出方法に基づいて、前記Output matrix dataを生成する、ことをコンピュータに実行させる。
【発明の効果】
【００１０】
本開示により、CNNの一連の処理において、PEの利用率の低下を防止することができる情報処理装置、情報処理方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１にかかる情報処理装置の構成図である。
【図２】実施の形態２にかかる情報処理装置において実現される処理の概要を説明する図である。
【図３】実施の形態２にかかる情報処理装置の構成図である。
【図４】実施の形態２にかかるKernelにおけるIndexを説明する図である。
【図５】実施の形態２にかかるSparse Index及びCompressed Sparse Weightsを説明する図である。
【図６】実施の形態２にかかるSparse Index及びCompressed Sparse Weightsを説明する図である。
【図７】実施の形態２にかかる畳み込み演算処理の流れを示す図である。
【図８】実施の形態４にかかるUnbalance workloadを解消する動作を示す図である。
【図９】実施の形態４にかかるUnbalance workloadを解消する動作を示す図である。
【図１０】実施の形態４にかかるUnbalance workloadを解消する動作を示す図である。
【図１１】Convolutional Layerにおける演算の概要を説明する図である。
【図１２】本開示が解決する課題を詳細に説明する図である。
【図１３】本開示が解決する課題を詳細に説明する図である。
【図１４】それぞれの実施の形態にかかる情報処理装置の構成図である。
【発明を実施するための形態】
【００１２】
（Convolutional Layer processingの概要）
本開示の実施の形態を説明する前に、図１１を用いてConvolutional Layerにおける演算の概要を説明する。図１１は、３×３の次元（dimension）を有するKernelを用いた畳み込み演算（convolution）の概要を示している。ここでは、Input matrix dataとして、Input feature mapsを用いて説明する。Input feature mapsは、input feature mapsのHeight （H）と、input feature mapsのWidth （W）によって特定される次元が定められる。また、図１１のInput feature mapsに用いられるＣは、input feature mapsのchannelの数を示している。
【００１３】
Kernelは、Kernel size （K）によって特定される次元が定められる。また、図１１のKernelに用いられるＣは、Kernelsのchannelの数を示している。Nは、Kernelの数を示している。
【００１４】
Sは、Stride sizeを示しており、畳み込み演算において、KernelがInput feature mapsをスライド（Slide）する間隔を示している。
【００１５】
Input matrix data及びOutput matrix dataを構成するelement（要素）を、pixelと称してもよい。また、Kernelを構成するelementは、Weight valueもしくはWeightと称してもよい。
【００１６】
KernelのWeightと、Kernelが適用されるInput feature mapsのpixelとを用いて積和演算（multiply-accumulate operation）を実行した結果、Output matrix dataの１つのpixelの値が算出される。図１１は、７×７のInput feature mapsに、３×３のKernelを、Stride=2でスライドして積和演算をした結果、３×３のOutput matrix dataが算出されることを示している。これらの数値は、一例である。また、Output matrix dataは、使用されたKernel毎に生成される。図１１においては、Kernelの数がNであるため、生成されるOutput matrix dataの数もNとなる。
【００１７】
続いて、図１２及び図１３を用いて、本開示が解決する課題を詳細に説明する。図１２は、大きいoutputを演算し、少ない数のkernelを用いるConvolutional Layerにおいて実行される演算を示しており、例えば、浅いレイヤ（shallow layer）において実行される演算を示している。図１２は、Kernel#1及びKernel#2を用いて、二つのOutput matrix data（output of Kernel 1及びOutput of Kernel 2）を生成することを示している。Kernel#1を用いて生成されたOutput matrix data（output of Kernel 1）は、pixel D1〜pixel D16を有し、Kernel#2を用いて生成されたOutput matrix data（output of Kernel 2）は、pixel D17〜pixel D32を有している。さらに、図１２は、PE（Processing Element）#1〜PE#4を用いて並列に演算を実行することを示している。
【００１８】
Arch1は、Inter-output parallelism schemeを示している。Inter-output parallelism schemeは、複数のOutput matrix dataが有するpixelを並列に算出するschemeである。図１２においては、PE#1がKernel#1と、Input feature mapsにおけるA#1 とを積和演算することによってpixel D1を算出する。Kernel #1は、複数のelementを含んでもよく、一つのelementを含んでもよい。A #1は、複数のelementを含んでもよく、一つのelementを含んでもよい。A #1は、D1を演算するために用いられるInput feature mapsのN×M（N及びMは、１以上の整数）サイズのwindowを含む。PE#2がKernel#2とA#1とを積和演算することによって、pixel D17を算出することを示している。つまり、Arch1は、PE#1がKernel#1を用いてpixel D1〜pixel D16を算出し、PE#2がKernel#2を用いてpixel D17〜pixel D32を算出することを示している。
【００１９】
Arch1においては、使用するKernelが２つであるため、PE#3及びPE#4は、使用されない。つまり、使用するKernelの数が、PEの数を下回っているため、使用されないPEが存在する。この例においては、利用率は50%にすぎない。
【００２０】
Arch2は、Intra-output parallelism schemeを示している。Intra-output parallelism schemeは、一つのOutput matrix dataが有する複数のpixelを並列に算出するschemeである。図１２においては、PE#1がKernel#1と、Input feature maps内のA#1とを積和演算することによってpixel D1を算出し、PE#2がKernel#1と、A1から予め定められたStrideをスライドしたA#2とを積和演算することによってpixel D2を算出している。さらに、PE#3がKernel#1と、A#2から予め定められたStrideをスライドしたA#3とを積和演算することによってpixel D3を算出し、PE#4がKernel#1と、A#3から予め定められたStrideをスライドしたA#4とを積和演算することによってpixel D4を算出している。
【００２１】
Arch2においては、一つのOutput matrix dataに含まれるpixelの数が、PEの数を超えている。そのため、全てのPEを使用して、Output matrix dataに含まれる複数のpixelを演算することができる。この例においては、利用率は100%である。
【００２２】
一方、図１３は、少ないoutputを演算し、多数のKernelを用いるConvolutional Layerにおいて実行される演算を示しており、例えば、深いレイヤ（deep layer）において実行される演算を示している。図１３は、Kernel#11〜Kernel#14を用いて、四つのOutput matrix data（Output of Kerne11, Output of Kernel 12, Output of Kernel 13, 及び Output of Kernel 14）を生成することを示している。Kernel#11を用いて生成されたOutput matrix data（Output of Kernel 11）は、pixel D1及びpixel D2を有し、Kernel#12を用いて生成されたOutput matrix data（Output of Kernel 12）は、pixel D3及びpixel D4を有し、Kernel#13を用いて生成されたOutput matrix data（Output of Kernel 13）は、pixel D5及びpixel D6を有し、Kernel#14を用いて生成されたOutput matrix data（Output of Kernel 14）は、pixel D7及びpixel D8を有している。さらに、図１３は、図１２と同様に、PE（Processing Element）#1〜PE#4を用いて並列に演算を実行することを示している。
【００２３】
Arch1は、Inter-output parallelism schemeを示している。図１３においては、PE#1がKernel#11と、Input feature maps内のA#11とを積和演算することによってpixel D1を算出し、PE#2がKernel#12とA#11とを積和演算することによって、pixel D3を算出し、PE#3がKernel#13と、Input feature maps内のA#11とを積和演算することによってpixel D5を算出し、PE#4がKernel#14とA#11とを積和演算することによって、pixel D7を算出することを示している。
【００２４】
Arch1においては、使用するKernelが４つであるため、PE#1〜PE#4を使用して、四つのOutput matrix dataに含まれるpixelを演算することができる。つまり、使用するKernelの数がPEの数を上回っている場合もしくは同数である場合に、全てのPEが使用される。この例においては利用率は100%である。
【００２５】
Arch2は、Intra-output parallelism schemeを示している。図１３においては、PE#1がKernel#11と、Input feature maps内のA#11とを積和演算することによってpixel D1を算出し、PE#2がKernel#11と、A#11から予め定められたStrideをスライドしたA#12とを積和演算することによってpixel D2を算出している。
【００２６】
Arch2においては、Kernel#11を用いて生成するOutput matrix dataのpixelが２つであるため、PE#3及びPE#4は、使用されない。つまり、一つのOutput matrix dataに含まれるpixelの数が、PEの数を下回っている。そのため、使用されないPEが存在する。この例においては、利用率は50%である。
【００２７】
非特許文献１においては、図１２及び図１３のArch1の構成が開示されている。そのため、非特許文献１を用いた場合、Output matrix dataのpixel数が多く、使用するKernelの数が少ない場合を示す図１２の場合、PEの利用率が低下するという問題が発生する。
【００２８】
また、図１２及び図１３のArch2の構成が用いられる場合には、Output matrix dataのpixel数が少なく、使用するKernelの数が多い場合を示す図１３の場合、PEの利用率が低下するという問題が発生する。
【００２９】
以下に記載する各実施の形態は、上述した問題を解決するために行われる。
【００３０】
（実施の形態１）
はじめに、図１を用いて、実施の形態１にかかる情報処理装置1の構成について説明する。情報処理装置1は、プロセッサがメモリに格納されたプログラムを実行することによって処理が実行されるコンピュータ装置であってもよい。情報処理装置1は、Parallelism コントローラ10及びPE Grid20を有する。Parallelism コントローラ10及びPE Grid20は、プロセッサがメモリに格納されたプログラムを実行することによって処理が実行されるソフトウェアもしくはモジュールであってもよい。もしくは、Parallelism コントローラ10及びPE Grid20は、回路もしくはチップ等のハードウェアであってもよい。
【００３１】
PE Grid20は、Input matrix dataに対して、複数のKernelを用いて畳み込み演算（convolution）を実行することによって、使用したKernel毎に異なるOutput matrix dataを生成する。また、PE Grid20は、Output matrix dataを構成するpixelを算出する複数のPEを含む。ここで、PE Grid20に含まれるそれぞれのPEが用いるKernelは、PE毎に変更されてもよい。
【００３２】
Parallelism コントローラ10は、Input matrix dataもしくはOutput matrix dataの次元と、Kernelの数と、PEの数とに基づいて、複数のOutput matrix dataが有するpixelを並列に（parallelly）算出するか、もしくは、一つのOutput matrix dataが有する複数のpixelを並列に算出するかを決定する。Input matrix dataもしくはOutput matrix dataの次元とは、Input matrix dataもしくはOutput matrix dataのpixel数を示すために、N×M（N、Mは１以上の整数）の形式にて示されてもよい。言い換えると、Parallelism コントローラ10は、Inter-output parallelism scheme及びIntra-output parallelism schemeのいずれを実行するかを決定する。
【００３３】
ここで、図２を用いて、情報処理装置1において実現される処理の概要について説明する。情報処理装置1は、Inter-output parallelism scheme又はIntra-output parallelism schemeを、フレキシブル（Flexibly）に選択する。これより、例えば、図２に示すように、一つのOutput matrix dataに含まれるpixelの数がPEの数よりも多く、使用するKernelの数がPEの数よりも少ない場合、Parallelism コントローラ10は、Intra-output parallelism schemeを選択してもよい。さらに、一つのOutput matrix dataに含まれるpixelの数がPEの数よりも少なく、使用するKernelの数がPE数以上である場合、Parallelism コントローラ10は、Inter-output parallelism schemeを選択してもよい。その結果、PEの利用率を向上させることができる。この例においては、利用率は100%である。
【００３４】
また、上記の説明においては、Parallelism コントローラ10が、Output matrix dataの次元を用いて、Inter-output parallelism schemeもしくはIntra-output parallelism schemeを、フレキシブルに選択することを説明したが、Parallelism コントローラ10は、Input matrix dataの次元を用いて、Inter-output parallelism schemeもしくはIntra-output parallelism schemeを、選択してもよい。
【００３５】
例えば、Input matrix dataに含まれるPixelの数が多く、使用するKernelの数が少ない場合、Parallelism コントローラ10は、Intra-output parallelism schemeを選択してもよい。さらに、Input matrix dataに含まれるPixelの数が少なく、使用するKernelの数が多い場合、Parallelism コントローラ10は、Inter-output parallelism schemeを選択してもよい。
【００３６】
また、上記の説明及び以降の説明において、数が多いもしくは少ないとは、予め定められた閾値を基準とし、比較する数が、閾値を超えている場合に数が多いとし、閾値を下回る場合に少ないとしてもよい。
【００３７】
（実施の形態２）
続いて、図３を用いて、実施の形態２にかかる情報処理装置2の構成例について説明する。情報処理装置2は、図１の情報処理装置1に、Sparse Weight Broadcaster30が追加されている。Sparse Weight Broadcaster30は、プロセッサがメモリに格納されたプログラムを実行することによって処理が実行されるソフトウェアもしくはモジュールであってもよい。もしくは、Sparse Weight Broadcaster30は、回路もしくはチップ等のハードウェアであってもよい。
【００３８】
Sparse Weight Broadcaster30は、PE Grid20に含まれる複数のPEに適用されるKernelを決定する。言い換えると、Sparse Weight Broadcaster30は、PE Grid20に含まれる複数のPEが使用するWeight valueを決定する。
【００３９】
続いて、Parallelism コントローラ10の構成例について説明する。Parallelism コントローラ10は、Broadcast Parallelism コントローラ11、Layer Parallelism コントローラ12、及びData Sequencing コントローラ13を有している。
【００４０】
Layer Parallelism コントローラ12は、情報処理装置2内の他の機能ブロックもしくは構成要素から、Layer informationを受け取る。Layer informationは、処理が実行されるlayerにおける、Output matrix dataの次元、使用するKernelの数、及びPEの数、に関する情報等を含む。
【００４１】
Layer Parallelism コントローラ12は、Layer informationに基づいて、Inter-output parallelism scheme及びIntra-output parallelism schemeのいずれを実施するかを決定する。Inter-output parallelism schemeもしくはIntra-output parallelismは、予め定められてもよい。
【００４２】
例えば、Layer Parallelism コントローラ12は、Output matrix dataの次元によって特定されるpixel数が、PE Grid20に含まれるPE数を超える場合に、Intra-output parallelism schemeを選択し、pixel数が、PE Grid20に含まれるPE数を超えない場合に、Inter-output parallelism schemeを選択してもよい。もしくは、Layer Parallelism コントローラ12は、使用するKernelの数が、PE Grid20に含まれるPE数を超える場合に、Inter-output parallelism schemeを選択し、使用するKernelの数が、PE Grid20に含まれるPE数を超えない場合に、Intra-output parallelism schemeを選択してもよい。
【００４３】
もしくは、Layer Parallelism コントローラ12は、pixel数が、PE Grid20に含まれるPE数を超えており、かつ、使用するKernelの数が、PE Grid20に含まれるPE数を超えない場合に、Intra-output parallelism schemeを選択してもよい。さらに、Layer Parallelism コントローラ12は、pixel数が、PE Grid20に含まれるPE数を超えておらず、かつ、使用するKernelの数が、PE Grid20に含まれるPE数を超える場合に、Inter-output parallelism schemeを選択してもよい。
【００４４】
pixel数が、PE Grid20に含まれるPE数を超えており、かつ、使用するKernelの数が、PE Grid20に含まれるPE数を超える場合、並びに、pixel数が、PE Grid20に含まれるPE数を超えておらず、かつ、使用するKernelの数が、PE Grid20に含まれるPE数を超えない場合、については、予めいずれのparallelism schemeを選択するかが定められてもよい。
【００４５】
Layer Parallelism コントローラ12は、選択したparallelism schemeをBroadcast Parallelism コントローラ11及びData Sequencing コントローラ13へ出力する。
【００４６】
Broadcast Parallelism コントローラ11は、同時に送信される異なるカーネルの数（以降、#diffKbcとする）を決定する。#diffKbcは、PE Grid20において、並列に演算を実行する複数のPEにおいて同時に用いられるカーネルの数と言い換えられてもよい。同時とは、実質的に同じタイミングであることを含む。言い換えると、同時とは、異なるタイミングの時間差が所定の時間以内である場合も含む。
【００４７】
例えば、Broadcast Parallelism コントローラ11は、Intra-output parallelism schemeが選択された場合、#diffKbcを１と決定してもよい。また、Broadcast Parallelism コントローラ11は、Inter-output parallelism schemeが選択された場合、#diffKbcを２以上の任意の数に決定してもよい。具体的には、Broadcast Parallelism コントローラ11は、Inter-output parallelism schemeが選択された場合、Kernelの数がPE数を超える場合、#diffKbcをPEの数としてもよく、Kernelの数がPE数を超えない場合、#diffKbcをKernelの数としてもよい。Broadcast Parallelism コントローラ11は、#diffKbcをSparse Weight Broadcaster30へ出力する。
【００４８】
Data Sequencing コントローラ13は、各PEが使用するInput matrix dataのpixelの位置（coordinate）もしくは各PEによって算出されるOutput matrix dataのpixelの位置（coordinate）を決定する。Input matrix data 及びOutput matrix data のpixelの位置は、関連していてもよい。
【００４９】
例えば、Data Sequencing コントローラ13は、Inter-output parallelism schemeが選択された場合、PE Grid20に含まれるすべてのPEにおいて、Input matrix data内の同じpixel位置のデータを使用することを決定してもよい。また、Data Sequencing コントローラ13は、Intra-output parallelism schemeが選択された場合、PE毎に、使用するInput matrix dataのpixelの位置を決定してもよい。例えば、Data Sequencing コントローラ13は、予め定められたStrideに基づいて、PE毎に、使用するInput matrix dataのpixelの位置を決定してもよい。Data Sequencing コントローラ13は、それぞれのPEが使用するInput matrix dataのpixelの位置を示す情報、及び、それぞれのPEが算出するOutput matrix dataのpixelの位置を示す情報をPE Grid20へ出力する。Input matrix data及びOutput matrix dataのpixelの位置は、例えば、data addressと称されてもよい。
【００５０】
続いて、Sparse Weight Broadcaster30の構成について説明する。Sparse Weight Broadcaster30は、Weight メモリメモリ31、Weight コントローラ32、Index メモリメモリ33、Index コントローラ34、Broadcaster35、Main コントローラ36、及び、bcu（broadcast unit）#1〜#Mを有している。bcu#Mにおける符号Mは、Input matrix dataの次元もしくはOutput matrix dataの次元を示すために用いられるN×M におけるMとは関係ない。
【００５１】
Index メモリ33は、Sparse Indexを管理している。Sparse Indexは、KernelのWeight valueとして、Non zero valueが設定されたIndexを示している。例えば、Kernel#1のIndexとして、図４に示されるように、#1〜#9が定められているとする。この場合、Kernel#1の各Indexは、1#1〜1#9と示される。さらに、Index メモリ33は、1#1〜1#9のうち、Non zero valueが設定されたSparse Indexを管理している。また、Weight メモリ31は、Sparse Indexに設定されているNon zero valueとして、Compressed Sparse Weightsを管理している。
【００５２】
ここで、図５を用いて、Sparse Index及びCompressed Sparse Weightsとの関係について説明する。図５には、Kernel#1〜Kernel#4に設定されたWeight valueが示されている。例えば、Kernel#1においては、1#2、1#4、1#8及び1#9に、zero valueが設定されている。そのため、Sparse Indexには、1#1、1#3、1#5、1#6、及び1#7が管理されている。さらに、Compressed Sparse Weightsには、1#1、1#3、1#5、1#6、及び1#7に設定されている値として、k11, k13, k15, k16, and k17が管理されている。Kernel#2〜Kernel#4についても、Kernel#1と同様に、Sparse Index及びCompressed Sparse Weightsが管理される。
【００５３】
図３に戻り、Index コントローラ34は、Index メモリ33から、Sparse Indexの値を読み込み、読み込んだ情報をBroadcaster35へ出力する。Index コントローラ34は、Sparse Indexを、1行目の左から右に順に読み込み、1行目の読み込みを終了したら、2行目の左から右に順に読み込む（read）。さらに、Weight コントローラ32は、Weight メモリ31から、Compressed Sparse Weightsを読み込み、読み込んだ情報をBroadcaster35へ出力する。Weight コントローラ32は、Compressed Sparse Weightsを、1行目の左から右に順に読み込み、1行目の読み込みを終了したら、2行目の左から右に順に読み込む。
【００５４】
Main コントローラ36は、Weight コントローラ32から出力されたWeight value及びIndex コントローラ34から出力されたIndexを、bcu#1〜#Mへ出力する。ここで、bcu#1〜#Mは、PE Grid  20に含まれるPE#1〜#Mに１対１に対応しているとする。つまり、bcu#1から出力されたWeight value及びIndexは、PE#1に入力される。
【００５５】
ここで、#diffKbc=1である場合、Main コントローラ36は、図５に示されるSparse Index及びCompressed Sparse Weightsから読み出された情報を、bcu#1〜#Mを介してPE#1〜#Mへ出力する。PE#1〜#Mは、それぞれ同じWeight value及びIndexを受け取る。
【００５６】
また、図６を用いて、#diffKbc=2である場合について説明する。この場合、例えば、PE Grid20に含まれるPE#1及びPE#2が演算に用いられるとする。この場合、図６に示すように、Index コントローラ34は、Sparse Indexの1行目の2列目まで読み込んだ後、2行目の読み込みに移る。さらに、Index コントローラ34は、Sparse Indexの1行目の3列目から読み込みを開始し、1行目の4列目まで読み込んだ後、2行目の3列目からの読み込みに移る。Index コントローラ34は、Kernel #1及びKernel #3を同時に読み込む。もしくは、Index コントローラ34は、順番に、Kernel #1の1行目、Kernel #3の1行目、Kernel #1の2行目、Kernel #3の2行目を読み込む。Weight コントローラ32も同様である。
【００５７】
Main コントローラ36は、Sparse Index及びCompressed Sparse Weightsの1列目及び2列目から読み込んだWeight value及びIndexを、bcu#1を介してPE#1へ出力する。さらに、Main コントローラ36は、3列目及び4列目から読み込んだWeight value及びIndexをbcu#2を介してPE#2へ出力する。図６は、例えば、PE#1において、Kernel#1及び#2を用いた処理を実行し、PE#2においてKernel#3及び#4を用いた処理を実行することを示している。
【００５８】
続いて、PE Grid20の構成例について説明する。PE Grid20は、PE#1〜#Mを有している。また、PE Grid20は、情報処理装置2内の他の機能ブロックもしくは構成要素から、Input matrix dataを受信する。Input matrix dataは、例えば、Activation dataと称されてもよい。
【００５９】
Input matrix dataは、pixel a1〜ai（iは２以上の整数）等に設定される値が示されている。PE#1〜#Mは、Data Sequencing コントローラ13から出力されたInput matrix dataのpixelの位置に基づいて、Input matrix dataからDataを抽出する。さらに、PE#1〜#Mは、抽出したDataとbcu#1〜#Mから出力されたWeight value及びIndexとを用いて、畳み込み演算を行う。PE#1〜#Mは、算出結果を、Data Sequencing コントローラ13から出力された、Output matrix dataのpixelの位置における値として保持する。
【００６０】
また、図３においては、PE Grid20が複数のPEを有する構成について説明したが、PE Grid20は、複数のPEG（PE Group）を有し、さらに、PEGが複数のPEを有するように構成されてもよい。この場合、Broadcaster35におけるbcuは、PEGと1対1に対応付けられてもよい。PEG内の複数のPEは、Intra-output parallelism scheme を実行すると認識される。さらに、それぞれ異なるKernelを使用する複数のPEGは、Inter-output parallelism scheme.を実行すると認識される。
【００６１】
続いて、図７を用いて、実施の形態２にかかる畳み込み演算処理の流れについて説明する。はじめに、Layer Parallelism コントローラ12は、Layer informationを取得する（S11）。Layer informationは、Layer configurationと称されてもよい。次に、Layer Parallelism コントローラ12は、Parallelism control preparation及びdata sequencingに関する情報を送信（Broadcast）する（S12）。例えば、Layer Parallelism コントローラ12は、選択したParallelism schemeに関する情報をBroadcast Parallelism コントローラ11及びData Sequencing コントローラ13へ送信（Broadcast）してもよい。
【００６２】
次に、Parallelism コントローラ10は、#diffKbcをSparse Weight Broadcaster30へ送信し（send）、さらに、data addressをPE Grid20へ送信する（send）（S13）。次に、Broadcaster35は、Weight コントローラ32及びIndex コントローラ34を介して、Weight value及びIndexを読み込む（S14）。次に、Main コントローラ36は、bcu#1〜#Mへ、Weight value及びIndexを設定する（S15）。ここで、PE Grid20は、ステップS11〜S15までの任意のタイミングに、Input matrix dataを受信しているとする。
【００６３】
次に、bcu#1〜bcu#Mは、PE#1〜PE#MへWeight value及びIndexを送信する（broadcast）（S16）。次に、PE#1〜#Mは、data addressに基づいてInput matrix dataから抽出したDataと、bcu#1〜bcu#Mから送信されたWeight valueとを用いて畳み込み演算を実施する。
【００６４】
以上説明したように、実施の形態２にかかるSparse Weight Broadcaster30は、選択されたParallelism schemeに基づいて、PEの使用効率を上昇させるように、それぞれのPEへWeight valueを送信（broadcast）することができる。その結果、PE Grid20は、Sparse Weight Broadcaster30から送信されたWeight valueを用いて、それぞれのPEを用いて効率的に畳み込み演算を行うことができる。
【００６５】
（実施の形態３）
続いて、Inter-output parallelism scheme及びIntra-output parallelism schemeを組み合わせたMix Parallelismについて説明する。実施の形態２においては、Intra-output parallelism schemeについては、#diffKbc=1の例を主に説明し、Inter-output parallelism schemeについては、それぞれのPEが異なるKernelを使用する例を主に説明した。実施の形態３において、#diffKbc=2〜M-1が主に使用されるMix Parallelismについて説明する。Layer Parallelism コントローラ 12は、Layer informationに基づいて、Inter-output parallelism scheme、Intra-output parallelism scheme、及びMix Parallelismのどれが実施されるべきかを判定する。Inter-output parallelism scheme、Intra-output parallelism scheme、もしくはMix Parallelismは、予め定められていてもよい。
【００６６】
Mix Parallelismにおいては、Inter-output parallelism schemeにおいて複数のPEが同じKernelを使用する例について説明する。具体的にはPE Grid20がPE#1〜#Mを有する場合、PE#1〜#I（Iは1以上、M未満の整数）が同じKernelを用いて畳み込み演算を行い、PE#I+1〜PE#Mが、同じKernelであって、PE#1〜#Iが使用するKernelとは異なるKernelを用いて畳み込み演算を行う。言い換えると、PE#1〜#Iは、bcu#1〜#Iから同じWeight value及びIndexを受け取る。また、PE#I+1〜#Mは、bcu#I+1〜#Mから同じWeight value及びIndexを受け取る。PE#1〜#Iが受け取るWeight value及びIndexと、PE#I+1〜#Mが受け取るWeight value及びIndexとは異なる。
【００６７】
さらに、PE#1〜#Iは、Intra-output parallelism schemeを実行する。PE#I+1〜#Mも、Intra-output parallelism schemeを実行する。具体的には、PE#1〜#Iは、Kernel#1を用いたIntra-output parallelism schemeを実行し、PE#I+1〜#Mは、Kernel#2を用いたIntra-output parallelism schemeを実行する。言い換えると、PE#1〜#Iのグループ及びPE#I+1〜#Mのグループは、それぞれ、#diffKbc=1として演算を行う（compute）。
【００６８】
このようにMix Parallelismを用いることによって、PE#1〜#のグループI及びPE#I+1〜#Mのグループは、それぞれ、Intra-output parallelism schemeを実行し、PE#1〜#IとPE#I+1〜#Mとの間は、Inter-output parallelism schemeが実行されているように認識される。言い換えると、PE#1〜#I及びPE#I+1〜#Mは、それぞれ、#diffKbc=1として演算が行われていると認識され、PE#1〜PE#Mは、全体として#diffKbc=2として演算が行われているように認識される。その結果、Inter-output parallelism schemeにおいても、Kernel数以上のPEの数を利用することができるため、実施の形態２と比較して、PEの利用率をさらに上昇させることができる。
【００６９】
（実施の形態４）
続いて、図８及び図９を用いて、発生するUnbalance workloadを解消する動作について説明する。図８は、４×４のInput matrix dataを３×３のKernel#1〜#4を用いて畳み込み演算を行う際に、PE#1〜#4を用いて並列に演算する（compute）ことを示している。また、図８は、PE#1〜#4が、それぞれ異なるKernel（Kernel#1〜#4）を用いる、Inter-output parallelism schemeを実行することを示している。この場合、それぞれのKernelに含まれるzero valueの数が異なる。PEは、演算を行う際に、zero valueにおける演算をskipすることができる。Kernelに含まれる１つのWeightを用いた演算を1cycleとすると、PE#1は、5cycleの演算を行い、PE#2は、8cycleの演算を行い、PE#3は、2cycleの演算を行い、PE#4は、6cycleの演算を行うことになる。このように、Inter-output parallelism schemeを実行した場合、それぞれのPE間において、Unbalance workloadが発生することになる。その結果、例えば、PE#3は、あるDataを用いた演算が終了した後に、他のPEにおける演算が終了するまで、次のDataを用いた演算の開始を待たなければならない。
【００７０】
また、図８に示すInput matrix dataのStrideを1とすると、２×２のOutput matrix dataを生成することができる。つまり、Output matrix dataのpixel数は４となるため、Intra-output parallelism schemeを実行した場合であっても、PE#1〜#4を用いて並列に演算することができる。
【００７１】
続いて、図９を用いて、Intra-output parallelism schemeを実行した場合のworkloadについて説明する。Intra-output parallelism schemeを実行した場合、PE#1〜#4は、同じKernel#1を用いて演算を行うため、全てのPEが同じ数のcycleの演算を実行する。そのため、それぞれのPE間におけるworkloadは、均等となる。その結果、PE#1~#4は、同じタイミングに、次のKernelを用いた演算を開始することができる。
【００７２】
このように、Inter-output parallelism scheme及びIntra-output parallelism schemeにおいて、PEの利用率が変わらない場合、Layer Parallelism コントローラ12は、PE間のworkloadを考慮して、Intra-output parallelism schemeを選択してもよい。その結果、それぞれのPE間に発生するUnbalance workloadを解消することができる。
【００７３】
ここで、図１０を用いて、Unbalance workloadを解消する他の例について説明する。図１０は、#diffKbc=2とする、Inter-output parallelism schemeの動作を示している。図１０の左図は、PE#1がKernel#1及びKernel#2の順番に演算を行い、PE#2がKernel#3及びKernel#4の順番に演算を行うことを示している。この場合、PE#1は、合計6cycleの演算を行い、PE#2は、合計8cycleの演算を行う。その結果、PE#1とPE#2との間において、Unbalance workloadが発生する。
【００７４】
そこで、Unbalance workloadを解消するために、図１０の右図に示すように、PE#1がKernel#1、Kernel#2、及びKernel#3の順番に演算を行い、PE#2がKernel#4の演算を行ってもよい。このようにすることによって、PE#1及びPE#2ともに、7cycleの演算を行うことになり、Unbalance workloadを解消することができる。このように、Sparse Weight Broadcaster30は、それぞれのPEへ出力するKernelのWeight valueの数を、均等になるように、もしくは、均等に近づくように制御してもよい。
【００７５】
続いて以下では、図１４を用いて、上述の複数の実施形態で説明された情報処理装置1もしくは2の構成例について説明する。
【００７６】
図１４は、情報処理装置1もしくは2の構成例を示すブロック図である。図１４を参照すると、情報処理装置1もしくは2は、ネットワークインタフェース１２０１、プロセッサ１２０２、及びメモリ１２０３を含む。ネットワークインタフェース１２０１は、通信システムを構成する他のネットワークノード装置と通信するために使用される。ネットワークインタフェース１２０１は、例えば、IEEE 802.3 seriesに準拠したネットワークインタフェースカード（NIC）を含んでもよい。
【００７７】
プロセッサ１２０２は、メモリ１２０３からソフトウェア（コンピュータプログラム）を読み出して実行することで、上述の実施形態においてシーケンス図及びフローチャートを用いて説明された情報処理装置1もしくは2の処理を行う。プロセッサ１２０２は、例えば、マイクロプロセッサ、MPU（Micro Processing Unit）、又はCPU（Central Processing Unit）であってもよい。プロセッサ１２０２は、複数のプロセッサを含んでもよい。
【００７８】
メモリ１２０３は、揮発性メモリ及び不揮発性メモリの組み合わせによって構成される。メモリ１２０３は、プロセッサ１２０２から離れて配置されたストレージを含んでもよい。この場合、プロセッサ１２０２は、図示されていないI/Oインタフェースを介してメモリ１２０３にアクセスしてもよい。
【００７９】
図１４の例では、メモリ１２０３は、ソフトウェアモジュール群を格納するために使用される。プロセッサ１２０２は、これらのソフトウェアモジュール群をメモリ１２０３から読み出して実行することで、上述の実施形態において説明された情報処理装置1もしくは2の処理を行うことができる。
【００８０】
図１４を用いて説明したように、情報処理装置1もしくは2が有するプロセッサの各々は、図面を用いて説明されたアルゴリズムをコンピュータに行わせるための命令群を含む１又は複数のプログラムを実行する。
【００８１】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access MemoryJ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００８２】
なお、本開示は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００８３】
1  情報処理装置  
2  情報処理装置  
10  Parallelism コントローラ  
11  Broadcast Parallelism コントローラ  
12  Layer Parallelism コントローラ  
13  Data Sequencing コントローラ  
20  PE Grid  
30  Sparse Weight Broadcaster  
31  Weight メモリ  
32  Weight コントローラ  
33  Index メモリ  
34  Index コントローラ  
35  Broadcaster  
36  Main コントローラ  
【図１】
0006947300.tif 000002
【図２】
0006947300.tif 000003
【図３】
0006947300.tif 000004
【図４】
0006947300.tif 000005
【図５】
0006947300.tif 000006
【図６】
0006947300.tif 000007
【図７】
0006947300.tif 000008
【図８】
0006947300.tif 000009
【図９】
0006947300.tif 000010
【図１０】
0006947300.tif 000011
【図１１】
0006947300.tif 000012
【図１２】
0006947300.tif 000013
【図１３】
0006947300.tif 000014
【図１４】
0006947300.tif 000015