(57)【要約】  入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、行列処理のコストを算出する、コスト算出部２と、行列処理を組み合わせ、組み合わせに含まれる行列処理に対応するコストを合計し、組み合わせごとに合計したコストのうち、最小となる合計したコストに対応する行列処理の組み合わせを選択する、行列処理選択部３と、を有する情報処理装置１である。
2020031281.tif 000002
【特許請求の範囲】
【請求項１】
入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出手段と、
前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択手段と、
を有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記コスト算出手段は、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記コスト算出手段は、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記コスト算出手段は、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理装置。
【請求項５】
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を有することを特徴とする情報処理方法。
【請求項６】
請求項５に記載の情報処理方法であって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
を有することを特徴とする情報処理方法。
【請求項７】
請求項６に記載の情報処理方法であって、
前記（ａ）のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
を有することを特徴とする情報処理方法。
【請求項８】
請求項７に記載の情報処理方法であって、
前記（ａ）のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
を有することを特徴とする情報処理方法。
【請求項９】
コンピュータに、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１０】
請求項９に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１１】
請求項１０に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１２】
請求項１１に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、畳み込み処理を実行する情報処理装置、情報処理方法に関し、更には、これらを実現するためのプログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
近年、物体認識、音声認識、自然言語処理などの分野において、深層学習が多く利用されている。また、画像を入力とする深層学習においては、多くの畳み込み層を用いることが知られている。そのため、畳み込み層において、入力画像に対して実行させる畳み込み処理は、一般的に処理コストが大きくなるため、高速化が望まれている。【０００３】
畳み込み処理を高速化する技術として、入力画像（入力データ：行列）を、カーネル（フィルタ：行列）を用いて、列行列を再配置する列行列変換処理（ｉｍ２ｃｏｌ処理）を実行した後、行列積（ｇｅｍｍ：general matrix multiplication）処理を行う方法が知られている。このうち、行列積処理は、汎用の中央演算装置（ＣＰＵ：Central Processing Unit）、又はＧＰＵ（Graphic Processing Unit）などのベンダが提供するＢＬＡＳ（Basic Linear Algebra Subprograms）ライブラリなどを用いることで、畳み込み処理の高速化を行っている。【０００４】
ＢＬＡＳライブラリを用いることにより行列積処理を高速化できる理由は、ＣＰＵのベクトル演算器の有効活用、メモリアクセスの最小化など、ハードウェアを高効率に活用できるように最適化しているためである。【０００５】
関連する技術として、非特許文献１には、行列積処理を高速化する技術が開示されている。具体的には、非特許文献１では、元の行列を複数の所定の形状の行列に分解し、分解した行列それぞれの形状に応じて、行列積処理を行うことが開示されている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Kazushige Goto，Robert A. van de Geijn，“Anatomy of High-Performance Matrix Multiplication” ACM Transactions on Mathematical Software (TOMS) Volume 34，２００８年５月３日，Article No. 12 P.12:1-12:25，インターネット＜URL：https://dl.acm.org/citation.cfm?id=1356053＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、畳み込み処理を、量子化後に実行する場合、又は、ＢＬＡＳライブラリの無い環境で実行する場合、ベンダが提供するライブラリを利用できない場合がある。このような場合、ユーザは自前で開発した、ベクトル演算器を効率的に活用できるような、ユーザ関数を用意しなければならない。具体的には、並列性の異なる二つの行列の組み合わせごとに、複数のユーザ関数（行列積処理）を用意しなければならない。【０００８】
並列性の異なる行列とは、例えば、対象となる二つの行列において、行列それぞれの行数は同じであるが、列数がそれぞれ異なる行列、又は、一方の行列の行数と他方の行列の列数は同じであるが、一方の行列の列数と他方の行列数の行は異なる行列などである。【０００９】
更に、複数のユーザ関数（行列積処理）を効率的に利用するためには、前処理である列行列変換処理の出力データが、後処理である行列積処理で利用できるデータ構造に合致するようにしなければならない。具体的には、列行列変換処理の後に行列積処理を実行する畳み込み処理において、ベクトル演算器を有効活用するためには（行列積処理時に実行されるメモリ命令を効果的に用いるためには）、転置処理などを用いて、列行列変換処理の出力データを並び替えなければならない。そのため、列行列変換処理の出力データの並びごとに、異なるユーザ関数を用意しなければならない。【００１０】
また、非特許文献１に開示の技術では、分解した行列それぞれの形状に対応するパラメータに応じて、行列積処理を切り替えている。しかし、非特許文献１に開示の技術を、畳み込み処理に適用したとしても、上述したように列行列変換処理の出力データを並び替え、分解した行列それぞれに合致する処理が必要となるため、畳み込み処理の処理速度を向上させることができない。【００１１】
本発明の目的の一例は、畳み込み処理の処理速度を向上させる情報処理装置、情報処理方法、及びコンピュータ読み取り可能な記録媒体を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明の一側面における情報処理装置は、
入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出部と、
前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択部と、
を有することを特徴とする。【００１３】
また、上記目的を達成するため、本発明の一側面における情報処理方法は、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を有することを特徴とする。【００１４】
更に、上記目的を達成するため、本発明の一側面におけるプログラムを記録したコンピュータ読み取り可能な記録媒体は、
コンピュータに、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１５】
以上のように本発明によれば、畳み込み処理の処理速度を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、情報処理装置の一例を示す図である。
【図２】図２は、情報処理装置の構成を具体的に示す図である。
【図３】図３は、列行列変換処理のコスト算出を説明するための図である。
【図４】図４は、列行列変換処理のコスト算出の一例を示す図である。
【図５】図５は、行列積処理のプログラムの一例を示す図である。
【図６】図６は、ベクトル演算器を利用した行列積処理を説明するための図である。
【図７】図７は、ベクトル演算器を利用した行列積処理を説明するための図である。
【図８】図８は、列行列変換処理のコスト算出の一例を示す図である。
【図９】図９は、行列処理選択情報のデータ構造の一例を示す図である。
【図１０】図１０は、情報処理装置１の動作の一例を示す図である。
【図１１】図１１は、コスト算出部、行列処理選択部の動作の一例を図である。
【図１２】図１２は、情報処理装置を実現するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１７】
（実施の形態）
以下、本発明の実施の形態について、図１から図１２を参照しながら説明する。
【００１８】
［装置構成］
最初に、図１を用いて、本実施の形態における情報処理装置の構成について説明する。図１は、情報処理装置の一例を示す図である。
【００１９】
図１に示す本実施形態における情報処理装置１は、畳み込み処理の処理速度を向上させるための装置である。図１に示すように、情報処理装置１は、コスト算出部２と、行列処理選択部３とを有する。
【００２０】
このうち、コスト算出部２は、入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、行列処理のコストを算出する。
【００２１】
入力データ情報は、畳み込み処理において入力される、入力データ（入力画像：行列）などの情報である。また、対象情報は、少なくとも次のようなパラメータ（ｎｕｍ、ｃｈａｎｎｅｌｓ、ｈｅｉｇｈｔ、ｗｉｄｔｈ）を有する。これらのパラメータは、「ｎｕｍ」が入力データの数を表し、「ｃｈａｎｎｅｌｓ」がチャンネル数を表し、「ｈｅｉｇｈｔ」が行数を表し、「ｗｉｄｔｈ」が列数を表している。
【００２２】
カーネル情報とパラメータ情報とは、畳み込み処理で用いる処理内容を示す情報である。処理内容を示す情報は、例えば、次のようなパラメータ（ｎｕｍ＿ｏｕｔｐｕｔ、ｋｅｒｎｅｌ＿ｈ、ｋｅｒｎｅｌ＿ｗ、ｓｔｒｉｄｅ＿ｈ、ｓｔｒｉｄｅ＿ｗ、ｐａｄ＿ｈ、ｐａｄ＿ｗ）を有する。なお、更に次のようなパラメータ（ｄｉｌａｔｉｏｎ＿ｈ、ｄｉｌａｔｉｏｎ＿ｗ、ｇｒｏｕｐｓ）を有してもよい。
【００２３】
それらのパラメータは、「ｎｕｍ＿ｏｕｔｐｕｔ」が出力チャネル数を表し、「ｋｅｒｎｅｌ＿ｈ」がカーネルの行数を表し、「ｋｅｒｎｅｌ＿ｗ」がカーネルの列数を表している。また、パラメータ「ｓｔｒｉｄｅ＿ｈ」及び「ｓｔｒｉｄｅ＿ｗ」はストライドの移動量を表し、「ｐａｄ＿ｈ」及び「ｐａｄ＿ｗ」がパディングする範囲のサイズを表す。また、「ｄｉｌａｔｉｏｎ＿ｈ」及び「ｄｉｌａｔｉｏｎ＿ｗ」は拡張畳み込みにおける拡張レートを表し、「ｇｒｏｕｐｓ」はグループ化畳み込み処理におけるグループ数を表す。
【００２４】
行列処理は、例えば、列行列変換処理（ｉｍ２ｃｏｌ処理）、行列積処理（ｇｅｍｍ処理）、列行列変換処理と行列積処理との間のデータ変換処理（転置処理）などの処理である。
【００２５】
行列処理ごとのコストは、例えば、列行列変換処理、行列積処理、データ変換処理それぞれについて、後述するメモリアクセス（例えば、ＣＰＵのレジスタ、キャシュ、メモリ領域（データ領域など）などへのアクセス）に基づくコスト算出方法を用いて算出する。
【００２６】
行列処理選択部３は、行列処理それぞれを組み合わせ、組み合わせに含まれる行列処理に対応するコストを合計し、組み合わせごとに合計したコストのうち、最小となる合計したコストに対応する行列処理の組み合わせを選択する。
【００２７】
例えば、行列処理それぞれの組み合わせが、列行列変換処理Ａ、行列積処理Ｂ、データ変換処理Ｃの組み合わせ、及び、列行列変換処理Ｄ、行列積処理Ｅ、データ変換処理Ｆの組み合わせであったとする。その場合、行列処理Ａ、Ｂ、Ｃそれぞれのコストの合計と、行列処理Ｄ、Ｅ、Ｆそれぞれのコストの合計とを比較し、最小となる行列処理の組み合わせを選択する。
【００２８】
このように、本実施の形態では、メモリアクセスに基づいたコストの合計が最小となる行列処理の組み合わせを選択し、選択した行列処理の組み合わせを用いて、畳み込み処理を行うので、畳み込み処理の処理速度を向上させることができる。
【００２９】
続いて、図２を用いて、本実施の形態における情報処理装置１の構成をより具体的に説明する。図２は、情報処理装置の構成を具体的に示す図である。
【００３０】
図２に示すように、本実施の形態における情報処理装置１は、コスト算出部２と行列処理選択部３とに加えて、畳み込み処理部２０を有する。畳み込み処理部２０は、コスト算出部２と行列処理選択部３とを用いて選択した、行列処理の組み合わせを用いて、畳み込み処理を実行する。すなわち、畳み込み処理部２０は、コストが最小となる行列処理の組み合わせを用いて、畳み込み処理を実行する。
【００３１】
コスト算出部２は、畳み込み処理部２０が畳み込み処理を実行する場合、上述したパラメータを取得し、取得したパラメータを用いて、メモリアクセスに基づくコストを算出する。また、コスト算出部２は、列行列変換処理コスト算出部２１と、行列積処理コスト算出部２２と、データ変換処理コスト算出部２３とを有する。
【００３２】
列行列変換処理コスト算出部２１は、取得したパラメータを用いて、メモリアクセスに基づいて、一つ以上の種類の列行列変換処理のコストを算出する。具体的には、まず、列行列変換処理コスト算出部２１は、メモリ上で一以上の連続な要素のコピーと、メモリ上で一以上の連続な定数値のコピーとに分けて、要素数と要素数に対するコピー回数を算出する。
【００３３】
すなわち、列行列変換処理コスト算出部２１は、メモリ上で一以上の連続な要素のコピーに対して、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数とを算出する。また、列行列変換処理コスト算出部２１は、定数値を出力データにコピーする場合の値のコピーを、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数を算出する。
【００３４】
続いて、列行列変換処理コスト算出部２１は、算出した要素数に対するコピー回数と、連続な要素数に応じて設定したコピーに対するコスト設定値とを乗算した値をコストとする。また、列行列変換処理コスト算出部２１は、算出した要素数における定数値のコピー回数と、連続な要素数に応じて設定した定数値コピーに対するコスト設定値とを乗算した値をコストとする。その後、列行列変換処理コスト算出部２１は、上述したコストの合計を算出し、当該列行列変換処理のコスト総和とする。
【００３５】
図３は、図４を用いて、列行列変換処理のコスト算出について、更に詳細に説明をする。図３は、列行列変換処理のコスト算出を説明するための図である。図４は、列行列変換処理のコスト算出の一例を示す図である。
【００３６】
図３は、要素（ａ、ｂ、ｃ、ｄ、ｅ、ｆ、ｇ、ｈ、ｉ）から構成される３×３の入力データに対する列行列変換処理をし、出力データを算出した例である。また、図３において、入力データの要素ａ、ｂ（破線内）から出力データの要素ａ、ｂ（破線内）までの矢印は、メモリ上連続な二つの要素のコピーを示している。また、入力データの要素ｇ、ｈ、ｉ（破線内）から出力データの要素ｇ、ｈ、ｉ（破線内）までの矢印は、メモリ上連続な三つの要素のコピーを示している。更に、図３において、出力データにおける破線内の定数値「０」は、定数値「０」を三つの要素にコピーしたことを示している。
【００３７】
図３を用いて、３×３の入力データから９×９の出力データを生成する場合のメモリ上で一以上の連続な要素のコピー（メモリコピー）と、ある定数値のメモリ上で一以上の領域へのコピー（定数値コピー）の分類方法を説明する。図３の例では、対象となる入力データ情報は、ｎｕｍ＝１、ｃｈａｎｎｅｌｓ＝１、ｈｅｉｇｈｔ＝３、ｗｉｄｔｈ＝３とする。
【００３８】
また、畳み込み処理で用いる処理内容を示す情報（カーネル情報、パラメータ情報）は、ｎｕｍ＿ｏｕｔｐｕｔ＝１、ｋｅｒｎｅｌ＿ｈ＝３、ｋｅｒｎｅｌ＿ｗ＝３、ｓｔｒｉｄｅ＿ｈ＝１、ｓｔｒｉｄｅ＿ｗ＝１、ｐａｄ＿ｈ＝１、ｐａｄ＿ｗ＝１、ｄｉｌａｔｉｏｎ＿ｈ＝１、ｄｉｌａｔｉｏｎ＿ｗ＝１、ｇｒｏｕｐｓ＝１とする。
【００３９】
出力データの１行目においては、定数値０を［０］［０：２］にコピー（３要素の定数値コピー）、定数値０を［０］［３］にコピー（１要素の定数値コピー）、入力データ［０］［０：１］を出力データ［０］［４：５］にコピー（２要素のメモリコピー）、定数値０を［０］［６］にコピー（１要素の定数値コピー）、入力データ［１］［０：１］を出力データ［０］［７：８］にコピー（２要素のメモリコピー）に分類される。
【００４０】
出力データの２行目においては、定数値０を［１］［０：２］にコピー（３要素の定数値コピー）、入力データ［０］［０：２］を出力データ［１］［３：５］にコピー（３要素のメモリコピー）、入力データ［１］［０：２］を出力データ［１］［６：８］にコピー（３要素のメモリコピー）に分類される。
【００４１】
出力データの３行目においては、定数値０を［２］［０：２］にコピー（３要素の定数値コピー）、入力データ［０］［１：２］を出力データ［２］［３：４］にコピー（２要素のメモリコピー）、定数値０を［２］［５］にコピー（１要素の定数値コピー）、入力データ［１］［１：２］を出力データ［２］［６：７］にコピー（２要素のメモリコピー）、定数値０を［２］［８］にコピー（１要素の定数値コピー）に分類される。
【００４２】
出力データの４行目においては、定数値０を［３］［０］にコピー（１要素の定数値コピー）、入力データ［０］［０：１］を出力データ［３］［１：２］にコピー（２要素のメモリコピー)、定数値０を［３］［３］にコピー（１要素の定数値コピー）、入力データ［１］［０：１］を出力データ［３］［４：５］にコピー（２要素のメモリコピー）、定数値０を［３］［６］にコピー（１要素の定数値コピー）、入力データ［２］［０：１］を出力データ［３］［７：８］にコピー（２要素のメモリコピー）に分類される。
【００４３】
出力データの５行目においては、入力データ［０］［０：２］を出力データ［４］［０：２］にコピー（３要素のメモリコピー）、入力データ［１］［０：２］を出力データ［４］［３：５］にコピー（３要素のメモリコピー）、入力データ［２］［０：２］を出力データ［４］［６：８］にコピー（３要素のメモリコピー）に分類される。
【００４４】
出力データの６行目においては、入力データ［０］［１：２］を出力データ［５］［０：１］にコピー（２要素のメモリコピー）、定数値０を［５］［２］にコピー（１要素の定数値コピー）、入力データ［１］［１：２］を出力データ［５］［３：４］にコピー（２要素のメモリコピー）、定数値０を［５］［５］にコピー（１要素の定数値コピー）、入力データ［２］［１：２］を出力データ［５］［６：７］にコピー（２要素のメモリコピー）、定数値０を［５］［８］にコピー（１要素の定数値コピー）に分類される。
【００４５】
出力データの7行目においては、定数値０を［６］［０］にコピー（１要素の定数値コピー）、入力データ［１］［０：１］を出力データ［６］［１：２］にコピー（２要素のメモリコピー)、定数値０を［６］［３］にコピー（１要素の定数値コピー）、入力データ［２］［０：１］を出力データ［６］［４：５］にコピー（２要素のメモリコピー）、定数値０を［６］［６：８］にコピー（３要素の定数値コピー）に分類される。
【００４６】
出力データの８行目においては、入力データ［１］［０：２］を出力データ［７］［０：２］にコピー（３要素のメモリコピー)、入力データ［２］［０：２］を出力データ［７］［３：５］にコピー（３要素のメモリコピー）、定数値０を［７］［６：８］にコピー（３要素の定数値コピー）に分類される．
【００４７】
出力データの９行目においては、入力データ［１］［１：２］を出力データ［８］［０：１］にコピー（３要素のメモリコピー）、定数値０を［８］［２］にコピー（１要素の定数値コピー）、入力データ［２］［１：２］を出力データ［８］［３：４］にコピー（３要素のメモリコピー）、定数値０を［８］［５］にコピー（１要素の定数値コピー）、定数値０を［８］［６：８］にコピー（３要素の定数値コピー）に分類される。
【００４８】
図４を用いて、図３の例に対するコスト算出の説明をする。図３の例に対して、要素数２のメモリコピー回数は１４回、要素数３のメモリコピー回数は７回、要素数１の定数値コピー回数は１４回、要素数３の定数値コピー回数は６回となる。
【００４９】
要素数２のメモリコピーの一回当たりのコスト設定値を１２とすると、コストは１６８となる。要素数３のメモリコピーの一回当たりのコスト設定値を１２とすると、コストは８４となる。要素数１の定数値コピーの一回当たりのコスト設定値を１０とすると、コストは１４０となる。要素数３の定数値コピーの一回当たりのコスト設定値を１１とすると、コストは６６となる。従って、このときのコスト総和は４５８となる。なお、コスト設定値は、コストを算出する際に用いる値で、予め実験、シミュレーションなどにより算出した値である。
【００５０】
行列積処理コスト算出部２２は、取得したパラメータを用いて行列サイズを算出し、メモリアクセスに基づいて、一つ以上の種類の行列積処理のコストを算出する。具体的には、まず、行列積処理コスト算出部２２は、利用する並列性に応じた乗算回数と、利用する並列性に応じた加算回数とを算出する。
【００５１】
続いて、行列積処理コスト算出部２２は、算出した乗算回数と加算回数とに、メモリに対する命令ごとのコスト設定値を乗算してコストを算出する。その後、行列積処理コスト算出部２２は、上述したコストの合計を算出し、当該行列積処理のコストのコスト総和とする。
【００５２】
図５、図６、図７、図８を用いて、行列積処理のコスト算出について、更に詳細に説明をする。図５は、行列積処理のプログラムの一例を示す図である。図５のプログラムは、６ｂｉｔ整数の行列Ａ［Ｍ］［Ｋ］と、６ｂｉｔ整数の行列Ｂ［Ｋ］［Ｎ］とを用いて、３２ｂｉｔ整数の行列Ｃ［Ｍ］［Ｎ］を算出する行列積のプログラムを示す。また、図５のプログラムは、行列Ｂ［Ｋ］［Ｎ］を転置して行列ＢＴ［Ｎ］［Ｋ］とし、ベクトル演算器を利用しない一般的なプログラムを示す。なお、図５のプログラムでは、Ｍが３２、Ｎが１００、Ｋが２８８とする。
【００５３】
図６は、ベクトル演算器を利用した行列積処理を説明するための図である。図６は、図５に示したプログラムのＫ方向のループに対して、ベクトル演算器を利用した場合の動作イメージを示す。また、図６の例では、ベクトル演算器のベクトル長は２５６ｂｉｔとする。
【００５４】
まず、行列ＡのＫ方向データをベクトルレジスタに読み込む。２５６ｂｉｔのベクトルレジスタに読み込まれるため、８ｂｉｔデータが、３２個一括でベクトルレジスタ０（ＶＲ０）に読み込まれる。また、行列ＢＴのＫ方向データをベクトルレジスタに読み込む。２５６ｂｉｔのベクトルレジスタに読み込まれるため、８ｂｉｔデータが、３２個一括でベクトルレジスタ１（ＶＲ１）に読み込まれる。
【００５５】
データ並びを［３２］［８］とするベクトルレジスタ０（ＶＲ０［３２］［８］と表現する）と、データ並びを［３２］［８］とするベクトルレジスタ１（ＶＲ１［３２］［８］と表現する）に対して、［０］［８］同士、［１］［８］同士となるような同一位置の８ｂｉｔデータの乗算と、［０］［８］同士と［１］［８］同士の乗算結果の加算をし、その結果を１６ｂｉｔデータが１６個のベクトルレジスタ２（ＶＲ２［１６］［１６］）の［０］［１６］に書き込む。
【００５６】
次に、上述した乗算と加算により算出したベクトルレジスタ２（ＶＲ２）の結果と、総和を算出するために用いるベクトルレジスタ３（ＶＲ３［１６］［１６］）の結果とを繰り返し加算する。このようにすることで、３２で除算したときの余り以外のＫ方向の乗算の総和は、分割された１６個の総和としてベクトルレジスタ３（ＶＲ３）に書き込まれる。
【００５７】
ところで、行列Ａと行列Ｂとのｂｉｔ数に応じて１６ｂｉｔのベクトルレジスタ３（ＶＲ３）でのオーバーフローを回避するためには、１６ｂｉｔで保持していた結果を３２ｂｉｔで保持する必要がある。そこで、行列Ａと行列Ｂとのデータのｂｉｔ数の和に応じて、１６ｂｉｔ加算がある回数ごとに３２ｂｉｔへの変換を行う。
【００５８】
図７は、ベクトル演算器を利用した行列積処理を説明するための図である。図７は、１６ｂｉｔでのオーバーフローを回避するための３２ｂｉｔ化の動作イメージを示す。
【００５９】
図７の例では、行列Ａと行列Ｂとがともに６ｂｉｔ整数の行列ため、乗算によっては最大１２ｂｉｔで隣の要素との加算で１３ｂｉｔとなる。そのため、１６ｂｉｔでの一時的な総和は、最大で３２回の加算まで可能となる。そこで、３２回に一度３２ｂｉｔ化を行い、３２ｂｉｔのレジスタに書き込む。
【００６０】
例えば、ベクトルレジスタ３（ＶＲ３［１６］［１６］）のＶＲ３［０］［１６］と、ＶＲ３［１］［１６］とを加算して、３２ｂｉｔデータが８個のＶＲ４［８］［３２］のＶＲ４［０］［３２］に書き込むために、１６ｂｉｔで値「１」が１６個のベクトルレジスタ６（ＶＲ６）とＶＲ３［１６］［１６］を乗算する。
【００６１】
また、上述した乗算の結果と、総和を算出するために用いるベクトルレジスタ（ＶＲ５［３２］［８］）の結果とをベクトル加算することで、Ｋ方向の乗算の総和は、分割された８個の総和結果となる。
【００６２】
最後に、分割された８個の総和結果をそれぞれ加算して３２で除算したときの余り以外の総和を算出する。３２で除算したときの余り部分は、ベクトル演算を用いずに一要素ずつの乗算結果を余り以外の総和に加算することでＫ方向の乗算の総和を算出する。
【００６３】
図８は、列行列変換処理のコスト算出の一例を示す図である。図８は、Ｍが３２、Ｎが１００、Ｋが２８８の場合のＫ方向ループに対してベクトル演算器を利用した場合のコストを示す。
【００６４】
図８において、８ｂｉｔ乗算＋加算命令は、Ｋ方向に対して、Ｋ／３２回とＭ×Ｎ回行われるため、当該命令回数はＭ×Ｎ×（Ｋ／３２）回と表される。従って、当該命令では命令回数は、２８８００（＝３２×１００×（２８８／３２））となる。また、一回当たりのコスト設定値を０．５とすると、コストは１４４００となる。コスト設定値は、コストを算出する際に用いる値で、予め実験、シミュレーションなどにより算出した値である。
【００６５】
また、図８において、１６ｂｉｔ加算命令は、Ｋ方向に対して、Ｋ／３２回とＭ×Ｎ回行われるため、当該命令回数はＭ×Ｎ×（Ｋ／３２）回と表される。従って、当該命令では命令回数は、２８８００（＝３２×１００×（２８８／３２））となる。また、一回当たりのコスト設定値を０．３３とすると、コストは９５０４となる。
【００６６】
また、３２ｂｉｔベクトル変換命令は、１６ｂｉｔ乗算＋加算命令の回数は、Ｋ方向に対して、Ｋ／３２／３２回とＭ×Ｎ回（又は、最低１回）行われるため、Ｍ×Ｎ×（Ｋ／３２／３２）回と表される。従って、当該変換では命令回数は、９００（＝３２×１００×（２８８／３２／３２））となる。また、一回当たりのコスト設定値を０．５とすると、コストは４５０となる。
【００６７】
また、３２ｂｉｔベクトル加算命令において、１６ｂｉｔ乗算＋加算命令の回数は、Ｋ方向に対して、Ｋ／３２／３２回とＭ×Ｎ回（又は、最低１回）行われるため、Ｍ×Ｎ×（Ｋ／３２／３２）回と表される。従って、当該変換では命令回数は、９００（＝３２×１００×（２８８／３２／３２））となる。また、一回当たりのコスト設定値を０．３３とすると、コストは２９７となる。
【００６８】
データ変換処理コスト算出部２３は、列行列変換処理が出力した出力データ（行列）のデータ構造と、行列積処理に入力可能なデータのデータ構造とを用いて、テータ変換処理が必要であるか否かを判定する。テータ変換処理が必要である場合、メモリアクセスに基づいて、テータ変換処理コストを算出する。テータ変換処理が必要でない場合、テータ変換処理コストを算出しない。
【００６９】
具体的には、データ変換処理コスト算出部２３は、列行列変換処理と行列積処理との全ての組み合わせにおいて、データ変換処理が必要である場合、列行列変換処理が出力した出力データのデータ構造を行列積処理に適用できるデータ構造に変換する。
【００７０】
データ変換処理コスト算出部２３が扱うデータ変換処理として転置処理があげられる。Ａ×Ｂの行列の転置処理は１要素のメモリコピーがＡ×Ｂ回行われると定義できる。１要素のメモリコピーのコスト設定値を１２とした場合、データ変換のコストはＡ×Ｂ×１２として算出できる。図３で示したｉｍ２ｃｏｌの出力データを転置する場合、データ変換処理コスト算出部２３は、９×９×１２＝９７２のコストを算出する。
【００７１】
行列処理選択部３は、行列処理ごとのコスト（列行列変換処理（ｉｍ２ｃｏｌ処理）ごとのコストと、行列積処理（ｇｅｍｍ処理）ごとのコストと、データ変換コスト（例えば、転置処理など））とを取得し、行列処理の組み合わせのうち最小となる、組み合わせを選択する。そして、行列処理選択部３は、コストが最小の組み合わせに含まれる行列処理を用いて、畳み込み処理をするように、畳み込み処理部２０へ指示をする。
【００７２】
図９を用いて具体的に説明をする。図９は、行列処理選択情報のデータ構造の一例を示す図である。図９の行列処理選択情報には、ユーザ関数として列行列変換処理が二種類（ＮＮ、ＮＴ）、行列積処理が三種類（Ｋ並列＿ＮＴＮ、Ｎ並列＿ＮＮＮ、Ｍ並列＿ＴＮＮ）に対して、６種類の組み合わせが示されている。また、行列処理選択情報には、６種類の組み合わせに対して、列行列変換処理コスト、行列積処理コスト、データ変換処理コストの総和が示されている。
【００７３】
列行列変換処理の種類ＮＮは、入力データ情報（ｃｈａｎｎｅｌｓ×（Ｈｅｉｇｈｔ×Ｗｉｄｔｈ））を、ｃｈａｎｎｅｌｓ×ｋｅｒｎｅｌ＿ｈ×ｋｅｒｎｅｌ＿ｗ×（ｏｕｔＨｅｉｇｈｔ×ｏｕｔＷｉｄｔｈ）へと再構成する、ｉｍ２ｃｏｌ処理である。
【００７４】
列行列変換処理の種類ＮＴは、入力データ情報（ｃｈａｎｎｅｌｓ×（Ｈｅｉｇｈｔｘ Ｗｉｄｔｈ））を、（ｏｕｔＨｅｉｇｈｔ×ｏｕｔＷｉｄｔｈ）×ｋｅｒｎｅｌ＿ｈ×ｋｅｒｎｅｌ＿ｗ×ｃｈａｎｎｅｌｓへと再構成する、ｉｍ２ｃｏｌ処理である。
【００７５】
行列積処理の種類Ｋ並列＿ＮＴＮは、Ｋ方向の並列性を利用する行列積を示し、種類Ｋ並列＿ＮＮＮは、Ｎ方向の並列性を利用する行列積を示し、種類Ｍ並列＿ＴＮＮは、Ｍ方向の並列性を利用する行列積を示している。
【００７６】
列行列変換処理コストは、列行列変換処理の種類ＮＮ、ＮＴそれぞれのコストを示している。行列積処理コストは、行列積処理の種類Ｋ並列＿ＮＴＮ、Ｋ並列＿ＮＮＮ、Ｍ並列＿ＴＮＮそれぞれのコストを示している。データ変換処理コストは、六種類の組み合わせにおける、列行列変換処理の出力データを変換するのに必要なコストを示している。
【００７７】
例えば、行列処理選択部３は、図９の場合であれば、コスト総和が最小の１１００に対応する組み合わせを選択する。すなわち、列行列変換処理の種類ＮＴと行列積処理の種類Ｋ並列＿ＮＴＮとを選択する。
【００７８】
［装置動作］
次に、本発明の実施の形態における情報装置１の動作について図１０を用いて説明する。図１０は、情報処理装置の動作の一例を示す図である。以下の説明においては、適宜図２から図９を参酌する。また、本実施の形態では、情報処理装置１を動作させることにより、情報処理方法が実施される。よって、本実施の形態における情報処理方法の説明は、以下の情報処理装置１の動作説明に代える。
【００７９】
情報処理装置１はパラメータを取得する（ステップＡ１）。続いて、情報処理装置１は、取得したパラメータを用いて、メモリアクセスに基づき、行列処理（列行列変換処理（ｉｍ２ｃｏｌ処理）、行列積処理（ｇｅｍｍ処理）、データ変換コスト（例えば、転置処理など））ごとのコストを算出する（ステップＡ２）。続いて、情報処理装置１は、行列処理ごとのコスト（列行列変換処理（ｉｍ２ｃｏｌ処理）ごとのコストと、行列積処理（ｇｅｍｍ処理）ごとのコストと、データ変換コスト（例えば、転置処理など））とを取得し、行列処理の組み合わせのうち最小となる、組み合わせを選択する（ステップＡ３）。続いて、情報処理装置１は、コストが最小の組み合わせに含まれる行列処理を用いて、畳み込み処理部２０に畳み込み処理をさせるための指示を出力する（ステップＡ４）。そして、情報処理装置１は、コストが最小となる組み合わせが有する行列処理を用いて、畳み込み処理を実行する（ステップＡ５）。
【００８０】
続いて、図１１を用いて、図１０に示したステップＡ２、Ａ３について詳細に説明する。図１１は、コスト算出部、行列処理選択部の動作の一例を示す図である。
【００８１】
ステップＡ１１１において、列行列変換処理コスト算出部２１は、取得したパラメータを用いて、メモリアクセスに基づいて、一つ以上の種類の列行列変換処理に対してコストを算出する。
【００８２】
具体的には、まず、列行列変換処理コスト算出部２１は、メモリ上で一以上の連続な要素のコピーと、メモリ上で一以上の連続な定数値のコピーとに分けて、要素数と要素数に対するコピー回数を算出する。
【００８３】
すなわち、列行列変換処理コスト算出部２１は、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数とを算出する。また、列行列変換処理コスト算出部２１は、定数値を出力データにコピーする場合の値のコピーを、メモリ上で一以上連続な要素数と、当該要素数に対するコピー回数を算出する。
【００８４】
続いて、列行列変換処理コスト算出部２１は、算出した要素数のコピー回数と、連続な要素数に応じて設定したコピーに対するコスト設定値とを乗算してコストを算出する。また、列行列変換処理コスト算出部２１は、算出した要素数における定数値のコピー回数と、連続な要素数に応じて設定した定数値コピーのコスト設定値とを乗算してコストを算出する。
【００８５】
その後、列行列変換処理コスト算出部２１は、上述したコストの合計（当該列行列変換処理のコスト総和）を算出する。
【００８６】
ステップＡ１１２において、行列積処理コスト算出部２２は、取得したパラメータを用いて行列サイズを算出し、メモリアクセスに基づいて、一つ以上の種類の行列積処理のコストを算出する。
【００８７】
具体的には、まず、行列積処理コスト算出部２２は、利用する並列性に応じた乗算回数と、利用する並列性に応じた加算回数とを算出する。
【００８８】
続いて、行列積処理コスト算出部２２は、算出した乗算回数と加算回数とに、メモリに対する命令ごとのコスト設定値を乗算してコストを算出する。その後、行列積処理コスト算出部２２は、上述したコストの合計（当該行列積処理のコスト総和）を算出する。
【００８９】
ステップＡ１１３において、データ変換処理コスト算出部２３は、列行列変換処理が出力した出力データ（行列）のデータ構造と、行列積処理に入力可能なデータのデータ構造とを用いて、テータ変換処理が必要であるか否かを判定する。続いて、テータ変換処理が必要である場合、メモリアクセスに基づいて、テータ変換処理コストを算出する。テータ変換処理が必要でない場合、テータ変換処理コストを算出しない。
【００９０】
具体的には、データ変換処理コスト算出部２３は、列行列変換処理と行列積処理との全ての組み合わせにおいて、テータ変換処理が必要である場合、列行列変換処理が出力した出力データのデータ構造を行列積処理に適用できるデータ構造に変換する。
【００９１】
ステップＡ１１４において、行列処理選択部３は、行列処理ごとのコスト（列行列変換処理（ｉｍ２ｃｏｌ処理）ごとのコストと、行列積処理（ｇｅｍｍ処理）ごとのコストと、データ変換コスト（例えば、転置処理など））とを取得し、行列処理の組み合わせのうち最小となる、組み合わせを選択する。
【００９２】
［本実施の形態の効果］
以上のように本実施の形態によれば、メモリアクセスに基づいたコストの合計が最小となる行列処理の組み合わせを選択し、選択した行列処理の組み合わせを用いて、畳み込み処理を行うので、畳み込み処理の処理速度を向上させることができる。
【００９３】
［プログラム］
本発明の実施の形態におけるプログラムは、コンピュータに、図１０に示すステップＡ１からＡ５、図１１に示すステップＡ１１１からＡ１１４を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における情報処理装置と情報処理方法とを実現することができる。この場合、コンピュータのプロセッサは、コスト算出部２（列行列変換処理コスト算出部２１、行列積処理コスト算出部２２、データ変換処理コスト算出部２３）、行列処理選択部３、畳み込み処理部２０として機能し、処理を行なう。
【００９４】
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されてもよい。この場合は、例えば、各コンピュータが、それぞれ、コスト算出部２（列行列変換処理コスト算出部２１、行列積処理コスト算出部部２２、データ変換処理コスト算出部２３）、行列処理選択部３、畳み込み処理部２０のいずれかとして機能してもよい。
【００９５】
［物理構成］
ここで、実施の形態におけるプログラムを実行することによって、情報装置を実現するコンピュータについて図１２を用いて説明する。図１２は、情報処理装置を実現するコンピュータの一例を示す図である。
【００９６】
図１２に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。なお、コンピュータ１１０は、ＣＰＵ１１１に加えて、又はＣＰＵ１１１に代えて、ＧＰＵ（Graphics Processing Unit）、又はＦＰＧＡ（Field-Programmable Gate Array）を備えていてもよい。
【００９７】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであってもよい。
【００９８】
また、記憶装置１１３の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置があげられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。
【００９９】
データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【０１００】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記録媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記録媒体があげられる。
【０１０１】
［付記］
以上の実施の形態に関し、更に以下の付記を開示する。上述した実施の形態の一部又は全部は、以下に記載する（付記１）から（付記１２）により表現することができるが、以下の記載に限定されるものではない。
【０１０２】
（付記１）
入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出部と、
前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択部と、
を有することを特徴とする情報処理装置。
【０１０３】
（付記２）
付記１に記載の情報処理装置であって、
前記コスト算出部は、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理装置。
【０１０４】
（付記３）
付記２に記載の情報処理装置であって、
前記コスト算出部は、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理装置。
【０１０５】
（付記４）
付記３に記載の情報処理装置であって、
前記コスト算出部は、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理装置。
【０１０６】
（付記５）
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を有することを特徴とする情報処理方法。
【０１０７】
（付記６）
付記５に記載の情報処理方法であって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理方法。
【０１０８】
（付記７）
付記６に記載の情報処理方法であって、
前記（ａ）のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理方法。
【０１０９】
（付記８）
付記７に記載の情報処理方法であって、
前記（ａ）のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理方法。
【０１１０】
（付記９）
コンピュータに、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体。
【０１１１】
（付記１０）
付記９に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
【０１１２】
（付記１１）
付記１０に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
【０１１３】
（付記１２）
付記１１に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記（ａ）のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
プログラムを記録したコンピュータ読み取り可能な記録媒体。
【０１１４】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【０１１５】
以上のように本発明によれば、畳み込み処理の処理速度を向上させることができる。本発明は、畳み込み層を用いた深層学習を必要とする分野において有用である。例えば、物体認識、音声認識、自然言語処理、生体認証などの分野において有用である。
【符号の説明】
【０１１６】
１  情報処理装置
２  コスト算出部
３  行列処理選択部
２０  畳み込み処理部
２１  列行列変換処理コスト算出部
２２  行列積処理コスト算出部
２３  データ変換処理コスト算出部
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
2020031281.tif 000003
【図２】
2020031281.tif 000004
【図３】
2020031281.tif 000005
【図４】
2020031281.tif 000006
【図５】
2020031281.tif 000007
【図６】
2020031281.tif 000008
【図７】
2020031281.tif 000009
【図８】
2020031281.tif 000010
【図９】
2020031281.tif 000011
【図１０】
2020031281.tif 000012
【図１１】
2020031281.tif 000013
【図１２】
2020031281.tif 000014
【手続補正書】
【提出日】令和3年1月29日(2021.1.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、コスト算出手段と、
前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、行列処理選択手段と、
を有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記コスト算出手段は、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記コスト算出手段は、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記コスト算出手段は、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理装置。
【請求項５】
コンピュータが、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行することを特徴とする情報処理方法。
【請求項６】
請求項５に記載の情報処理方法であって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
ことを特徴とする情報処理方法。
【請求項７】
請求項６に記載の情報処理方法であって、
前記（ａ）のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
ことを特徴とする情報処理方法。
【請求項８】
請求項７に記載の情報処理方法であって、
前記（ａ）のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
ことを特徴とする情報処理方法。
【請求項９】
コンピュータに、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させるプログラム。
【請求項１０】
請求項９に記載のプログラムであって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
プログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、畳み込み処理を実行する情報処理装置、情報処理方法に関し、更には、これらを実現するためのプログラムに関する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
並列性の異なる行列とは、例えば、対象となる二つの行列において、行列それぞれの行数は同じであるが、列数がそれぞれ異なる行列、又は、一方の行列の行数と他方の行列の列数は同じであるが、一方の行列の列数と他方の行列の行数は異なる行列などである。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
本発明の目的の一例は、畳み込み処理の処理速度を向上させる情報処理装置、情報処理方法、及びプログラムを提供することにある。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、
コンピュータに、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させることを特徴とする。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
【図１】図１は、情報処理装置の一例を示す図である。
【図２】図２は、情報処理装置の構成を具体的に示す図である。
【図３】図３は、列行列変換処理のコスト算出を説明するための図である。
【図４】図４は、列行列変換処理のコスト算出の一例を示す図である。
【図５】図５は、行列積処理のプログラムの一例を示す図である。
【図６】図６は、ベクトル演算器を利用した行列積処理を説明するための図である。
【図７】図７は、ベクトル演算器を利用した行列積処理を説明するための図である。
【図８】図８は、列行列変換処理のコスト算出の一例を示す図である。
【図９】図９は、行列処理選択情報のデータ構造の一例を示す図である。
【図１０】図１０は、情報処理装置１の動作の一例を示す図である。
【図１１】図１１は、コスト算出部、行列処理選択部の動作の一例を示す図である。
【図１２】図１２は、情報処理装置を実現するコンピュータの一例を示す図である。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００７８
【補正方法】変更
【補正の内容】
【００７８】
［装置構成］
次に、本発明の実施の形態における情報処理装置１の動作について図１０を用いて説明する。図１０は、情報処理装置の動作の一例を示す図である。以下の説明においては、適宜図２から図９を参酌する。また、本実施の形態では、情報処理装置１を動作させることにより、情報処理方法が実施される。よって、本実施の形態における情報処理方法の説明は、以下の情報処理装置１の動作説明に代える。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００９４
【補正方法】変更
【補正の内容】
【００９４】
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されてもよい。この場合は、例えば、各コンピュータが、それぞれ、コスト算出部２（列行列変換処理コスト算出部２１、行列積処理コスト算出部２２、データ変換処理コスト算出部２３）、行列処理選択部３、畳み込み処理部２０のいずれかとして機能してもよい。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
［物理構成］
ここで、実施の形態におけるプログラムを実行することによって、情報処理装置を実現するコンピュータについて図１２を用いて説明する。図１２は、情報処理装置を実現するコンピュータの一例を示す図である。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
（付記９）
コンピュータに、
（ａ）入力データのデータサイズを表す入力データ情報と、カーネルのデータサイズを表すカーネル情報と、畳み込み処理で用いるパラメータを表すパラメータ情報とを用いて、前記畳み込み処理において実行される行列処理ごとに、メモリアクセスに基づいて、前記行列処理のコストを算出する、ステップと、
（ｂ）前記行列処理を組み合わせ、組み合わせに含まれる前記行列処理に対応する前記コストを合計し、組み合わせごとに合計したコストのうち、最小となる前記合計したコストに対応する前記行列処理の組み合わせを選択する、ステップと、
を実行させるプログラム。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０１１１
【補正方法】変更
【補正の内容】
【０１１１】
（付記１０）
付記９に記載のプログラムであって、
前記（ａ）のステップにおいて、列行列変換処理におけるメモリアクセスに基づいて、前記列行列変換処理のコストを算出する
プログラム。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０１１２
【補正方法】変更
【補正の内容】
【０１１２】
（付記１１）
付記１０に記載のプログラムであって、
前記（ａ）のステップにおいて、行列積処理におけるメモリアクセスに基づいて、前記行列積処理のコストを算出する
プログラム。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０１１３
【補正方法】変更
【補正の内容】
【０１１３】
（付記１２）
付記１１に記載のプログラムであって、
前記（ａ）のステップにおいて、前記列行列変換処理の出力データを変換するデータ変換処理におけるメモリアクセスに基づいて、前記データ変換処理のコストを算出する
プログラム。
【国際調査報告】
2020031281.tif 000015
2020031281.tif 000016