(57)【要約】【課題】配列中に格納された要素のそれぞれに対して判定処理を行い、判定結果が真となった要素だけを配列に格納するといった圧縮ストア処理を高速化する。【解決手段】ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する圧縮演算手段と、上記マスクデータのマスクビットの数を計数するカウント手段と、生成された上記ベクトルデータの先頭から、上記計数したマスクビットの数分だけを上記メモリに格納するストア手段と、ベースアドレスの値に、上記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新するアドレス更新手段と、を含む。【選択図】      図２
2017068744.tif 000002
【特許請求の範囲】
【請求項１】
ベクトルデータを圧縮してメモリに格納する圧縮ストア処理装置であって、
前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する圧縮演算手段と、
前記マスクデータのマスクビットの数を計数するカウント手段と、
生成された前記ベクトルデータの先頭から、前記計数したマスクビットの数分だけを前記メモリに格納するストア手段と、
ベースアドレスの値に、前記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新するアドレス更新手段と、を含む圧縮ストア処理装置。
【請求項２】
前記圧縮演算手段は、前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する第１の圧縮演算手段と、前記マスクデータを圧縮する第２の圧縮演算手段とを、含む、請求項１に記載の圧縮ストア処理装置。
【請求項３】
前記計数したマスクビットの数からマスクデータを生成するマスク生成手段を含む、請求項１に記載の圧縮ストア処理装置。
【請求項４】
前記ストア手段は、マスク付ベクトルデータをストアするマスク付ストア手段である、請求項２または請求項３に記載の圧縮ストア処理装置。
【請求項５】
前記圧縮演算手段と前記カウント手段を備える圧縮カウント手段を含む、請求項１乃至請求項４のいずれか一項に記載の圧縮ストア処理装置。
【請求項６】
前記圧縮カウント手段は、前記ベクトルデータの隣接する要素と、前記マスクデータの隣接する要素を入力して、圧縮されたベクトルデータと圧縮された要素数を出力するサブ圧縮カウント手段を含む、請求項５に記載の圧縮ストア処理装置。
【請求項７】
前記圧縮カウント手段は、第１のサブ圧縮カウント手段および第２のサブ圧縮カウント手段と、前記第１のサブ圧縮カウント手段からの出力と前記第２のサブ圧縮カウント手段からの出力とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する第３のサブ圧縮カウント手段を含む、請求項５に記載の圧縮ストア処理装置。
【請求項８】
ベクトルデータを圧縮してメモリに格納する圧縮ストア処理方法であって、
前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成し、
前記マスクデータのマスクビットの数を計数し、
生成された前記ベクトルデータの先頭から、前記計数したマスクビットの数分だけを前記メモリに格納し、
ベースアドレスの値に、前記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新する、圧縮ストア処理方法。
【請求項９】
前記ベクトルデータの生成および前記マスクビットの数の計数と、前記メモリへの格納および前記ベースアドレスの更新とのどちらかまたは両方が同時に行われる、請求項８に記載の圧縮ストア処理方法。
【請求項１０】
ベクトルデータを圧縮してメモリに格納する圧縮ストア処理プログラムであって、
処理装置に、
前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する処理と、
前記マスクデータのマスクビットの数を計数する処理と、
生成された前記ベクトルデータの先頭から、前記計数したマスクビットの数分だけを前記メモリに格納する処理と、
ベースアドレスの値に、前記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新する処理と、を実行させる圧縮ストア処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮ストア処理装置、および圧縮ストア処理方法に関し、特に圧縮ストア演算の対象となる複数の要素のうち、マスクレジスタの要素の値に対応する要素を連続するように並べたベクトルデータの生成、やこのようなベクトルデータのストアに関する。
【背景技術】
【０００２】
配列中に格納された要素のそれぞれに対して判定処理を行い、判定結果が真となった要素だけを配列に格納する処理がある。このような処理を絞り込み処理と呼ぶ。図１４に、絞り込み処理の一例を示す。図１４では配列a〜pの１６個の要素に対して絞り込み処理を行い、判定結果が１の{b, e, f, g, k}の５要素を絞り込み処理の結果出力として、配列出力を得ている。
【０００３】
絞り込み処理は、例えば、画像による物体認識で利用される。画像による物体認識では、大量の候補画像集合に対して、認識対象の物体であるかどうかを判定するという処理が行われる。この際に、一度の判定で認識対象の物体であるかを判断するのではなく、何度かの判定を繰り返し、徐々に候補を絞り込むといった方法が取られる。全候補に対して詳細な判定を行うと処理時間を要するため、処理時間の短い粗い判定によって候補集合を絞り込み、全体の処理時間を短縮することを目的とする場合などに用いられる。
【０００４】
絞り込み処理の典型的な実現方法として、配列中の各要素を順番に判定しながら、判定を通った要素のみの配列を作成するという方法が取られる。なお、入力配列を残す必要が無い場合は、結果を格納する出力配列を入力配列と同じ配列としてもよい。以下の説明でも同様である。
【０００５】
特許文献１は、ベクトル圧縮命令の実行に関するものである。特許文献１では、マスクレジスタからの複数のデータフィールドのそれぞれについて、ベクトルソースオペランドからの対応するベクトルエレメントを、ベクトルデスティネーションオフセット位置から始まる、ベクトルデスティネーションの隣接する連続したエレメント位置にコピーすることが、提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第５７３９９６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述したベクトル圧縮では以下のような課題がある。
【０００８】
各候補の判定がそれぞれ独立している場合は、配列中の各要素に対して、同じ演算を同時に行うベクトル演算を利用して、高速化を行うことができる。しかしながら判定後に結果を出力配列に書き込む処理を行う場合、ベクトル処理においても、判定を通った要素の配列の出力は、判定を通った要素のみを順番に配列に格納する必要がある。このため判定を通った要素のみを順番に配列に格納するという逐次的処理にならざるを得ず、ベクトル処理を利用することができない。このため、高速化ができないという課題がある。
【０００９】
特許文献１は、判定を通った要素のみをベクトルデスティネーションオフセット位置から始まる、ベクトルデスティネーションの隣接する連続したエレメント位置にコピーすることができるが、メモリ中の配列に結果を出力する方法は開示していない。
【００１０】
本発明の目的は、ベクトルデータを圧縮してメモリに格納する圧縮ストア処理を高速化できる圧縮ストア処理装置、および圧縮ストア処理方法を提供することにある。
【課題を解決するための手段】
【００１１】
前記目的を達成するため、本発明に係る圧縮ストア処理装置は、ベクトルデータを圧縮してメモリに格納する圧縮ストア処理装置であって、
上記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する圧縮演算手段と、
上記マスクデータのマスクビットの数を計数するカウント手段と、
生成された上記ベクトルデータの先頭から、上記計数したマスクビットの数分だけを上記メモリに格納するストア手段と、
ベースアドレスの値に、上記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新するアドレス更新手段と、を含む。
【００１２】
本発明に係る圧縮ストア処理方法は、ベクトルデータを圧縮してメモリに格納する圧縮ストア処理方法であって、
上記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成し、
上記マスクデータのマスクビットの数を計数し、
生成された上記ベクトルデータの先頭から、上記計数したマスクビットの数分だけを上記メモリに格納し、
ベースアドレスの値に、上記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新する。
【００１３】
本発明に係る圧縮ストア処理プログラムは、ベクトルデータを圧縮してメモリに格納する圧縮ストア処理プログラムであって、
処理装置に、
上記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する処理と、
上記マスクデータのマスクビットの数を計数する処理と、
生成された上記ベクトルデータの先頭から、上記計数したマスクビットの数分だけを上記メモリに格納する処理と、
ベースアドレスの値に、上記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新する処理と、を実行させる。
【発明の効果】
【００１４】
本発明によれば、ベクトルデータを圧縮してメモリに格納する圧縮ストア処理を高速化できる。
【図面の簡単な説明】
【００１５】
【図１】（ａ）は本発明の最上位概念の実施形態の圧縮ストア処理装置を示すブロック図であり、（ｂ）はその他の実施形態の圧縮ストア処理装置を示すブロック図である。
【図２】本発明の第１実施形態の圧縮ストア処理装置を示すブロック図である。
【図３】本発明の第１実施形態の圧縮ストア処理方法を説明するためのフローチャートである。
【図４】入力配列、判定結果、ベースアドレスの一例を説明するための図である。
【図５】圧縮ストア処理によってメモリに格納された配列とアドレスとの対を説明するための図である。
【図６】本発明の第２実施形態の圧縮ストア処理装置を示すブロック図である。
【図７】本発明の第３実施形態の圧縮カウントを説明するための概念図である。
【００１６】
【図８】本発明の第４実施形態の圧縮ストア処理装置を示すブロック図である。
【図９】本発明の第４実施形態の圧縮ストア処理装置に用いるサブ圧縮カウント部の詳細を説明するためのブロック図である。
【図１０】本発明の第４実施形態の圧縮ストア処理装置に用いる圧縮カウント部の詳細を説明するためのブロック図である。
【図１１】第４実施形態の動作を示す擬似コードの一例である。
【図１２】第４実施形態の別形態の動作を示す擬似コードの一例である。
【図１３】圧縮カウント動作の処理手順を説明する図である。
【図１４】絞り込み処理の一例を説明するための図である。
【発明を実施するための形態】
【００１７】
本発明の好ましい実施形態について説明する前に、本発明の最上位概念の実施形態による圧縮ストア処理装置を説明する。図１（ａ）は、本発明の最上位概念の実施形態の圧縮ストア処理装置を示すブロック図である。
【００１８】
図１（ａ）の圧縮ストア処理装置は、圧縮演算手段１４と、カウント手段１５と、ストア手段１６と、アドレス更新手段１７と、を含む。圧縮演算手段１４は、ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する。カウント手段１５は、マスクデータのマスクビットの数を計数する。ストア手段１６は、圧縮演算手段１４が生成したベクトルデータの先頭から、カウント手段１５が計数したマスクビットの数分だけをメモリに格納する。アドレス更新手段１７は、ベースアドレスの値に、上記計数したマスクビットの数と各要素のデータサイズとの積を加算して、ベースアドレスを更新する。
【００１９】
図１（ａ）の圧縮ストア処理装置によれば、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成し、このベクトルデータの先頭から、カウント手段１５が計数したマスクビットの数分だけをメモリに格納する。さらに、格納されたベクトルデータのアドレスを生成する。これにより、圧縮ストア処理を高速化することができる。このような圧縮ストア処理により、配列中に格納された要素のそれぞれに対して判定処理を行い、判定結果が真となった要素だけを配列に格納するといった絞り込み処理の高速化が期待される。以下、本発明をより具体的な実施形態や実施例について説明する。
【００２０】
〔第１実施形態〕
初めに、本発明の第１実施形態による圧縮ストア処理装置、および圧縮ストア処理方法について、説明する。図２は、本発明の第１実施形態の圧縮ストア処理装置を示すブロック図である。図３は、本発明の第１実施形態の圧縮ストア処理方法を説明するためのフローチャートである。図４は、入力配列、判定結果、ベースアドレスの一例を説明するための図である。図５は、圧縮ストア処理によってメモリに格納された配列とアドレスとの対を説明するための図である。
【００２１】
［構成の説明］
本実施形態の圧縮ストア処理装置は図２に示すように、圧縮演算手段の一例としての圧縮演算部４と、カウント手段の一例としてのカウント部５と、ストア手段の一例としてのストア部６と、アドレス更新手段の一例としてのアドレス更新部７と、を含む。
【００２２】
本実施形態の圧縮ストア処理装置は、圧縮ストア演算の入力であるベクトルレジスタ１、マスクレジスタ２、およびベースアドレスレジスタ３から入力して演算処理を実行し、出力結果をメモリ８に格納する。なお、ベースアドレスレジスタ３は圧縮ストア演算の出力先でもある。
【００２３】
ベクトルレジスタ１は、圧縮ストア演算の対象となる複数の要素を格納したレジスタである。マスクレジスタ２は、ベクトルレジスタ１のベクトルデータの各要素について、メモリ８に格納するか否かを示すマスクデータを格納したレジスタである。マスクレジスタ２のマスクビットは、１または０のデータであり、いずれか一方がメモリ８に格納することを示す。以下では、マスクレジスタ２の要素の値が１の場合が、メモリ８に格納する対象であることを示しているものとして説明する。ベースアドレスレジスタ３は、演算結果をストアする配列のメモリ８上のアドレスを格納したレジスタである。
【００２４】
圧縮演算部４は、ベクトルレジスタ１とマスクレジスタ２を用いて圧縮演算を行う機能を有する。すなわち圧縮演算部４は、ベクトルレジスタ１の要素のなかで、対応するマスクレジスタ２の要素の値が１である要素を連続に並べたベクトルデータを生成する機能を有する。圧縮演算部４は生成されたベクトルデータを、ストア部６に渡す。
【００２５】
カウント部５は、マスクレジスタ２中の値が１の要素の数を数える機能を有する。
【００２６】
ストア部６は、圧縮演算部４が生成したベクトルデータの先頭から、カウント部５が数えた要素数分だけ、ベースアドレスレジスタ３で示されるメモリ８中にストアする機能を有する。要素数が０の場合は、メモリ８へのストアは行われない。
【００２７】
アドレス更新部７は、ベースアドレスレジスタ３の値にカウント部５が数えた要素数に要素のデータサイズ（例えば単精度浮動小数点であれば一般に４（バイト））を乗じた値を加算して、ベースアドレスレジスタ３に格納する機能を有する。
【００２８】
［動作の説明］
次に、本実施形態の圧縮ストア処理装置の動作、および圧縮ストア処理方法について説明する。図３に示すように、圧縮演算部４が、圧縮演算を実行し、ベクトルレジスタ１の要素の中で、対応するマスクレジスタ２の要素の値が１である要素を連続的に並べたベクトルデータを生成する（Ｓ１０１）。
【００２９】
カウント部５がマスクレジスタ２内の値が１の要素の数をカウントする（Ｓ１０１）。このカウント部５のカウント動作は、Ｓ１０１と同時に行ってもよい。カウント部５による計数の結果、マスクレジスタ２内の値が１の要素の数が０の場合（Ｓ１０３のfalse）は、処理を終了し、メモリ８へのストアは行われない。カウント部５による計数の結果、マスクレジスタ２内の値が１の要素の数が０でない場合（Ｓ１０３のtrue）は、Ｓ１０４およびＳ１０５に進む。
【００３０】
ストア部６が、圧縮演算部４が生成したベクトルデータの先頭から、カウント部５が数えた要素数分だけを、ベースアドレスレジスタ３で示されるメモリ８に格納する。言い換えると、カウント部５が数えた要素数分だけベクトルデータの要素をメモリ８に連続ストアする（Ｓ１０４）。
【００３１】
アドレス更新部７が、ベースアドレスレジスタ３の値に、Ｓ１０２で数えた要素数分の要素のデータサイズを乗じた値を加えた値を計算し、ベースアドレスレジスタ３に格納し、ベースアドレスを更新する（Ｓ１０５）。このアドレス更新部７によるベースアドレス更新動作はＳ１０４と同時に行ってもよい。
【００３２】
図４のような例では、配列a〜pの１６個の要素に対して絞り込み処理を行い、判定結果が１の{b, e, f, g, k}の５要素を絞り込み処理の結果出力として配列出力を得る。図５に示すようにメモリ８では、アドレス0x0001000に要素b、アドレス0x0001004に要素e、アドレス0x0001008に要素f、アドレス0x000100cに要素g、アドレス0x0001010に要素kが格納される。図４のようにベースアドレス0x0001000の場合、アドレス更新部７は0x000010000+4*4を実行し、0x0001010をベースアドレスレジスタ３に格納する。
【００３３】
［効果の説明］
本実施形態の圧縮ストア処理装置、および圧縮ストア処理方法では、ベクトルレジスタ１に格納された複数の要素を一度に圧縮ストア処理することができるので、一要素ずつ順番にメモリに格納する場合に比べて、絞り込み処理を高速に行うことが可能である。
【００３４】
ベクトルレジスタ１からの入力配列に対して、ベクトル長ずつ一度に判定演算を行った後に、得られた判定結果をレジスタに格納し、圧縮ストア演算を行う。これにより、判定を通ったデータを一度にメモリ８中に連続して書き込み、かつ、その後メモリ８中の書き込み位置を次の書き込み位置にずらす処理を同時に行うことができる。したがって、次のベクトル長分の入力配列の要素に対して、同じ動作（判定および圧縮ストア演算）を行うことのみで、入力配列全体に対して、判定結果を通った要素のみをメモリ８に連続して格納することができる。
【００３５】
（第１実施形態の別形態）
本実施形態の別形態として、圧縮演算部４の生成するベクトルデータ中の圧縮された要素間の並び順が任意であるような、特殊な圧縮演算を用いても良い。例えば、ベクトルレジスタ１のベクトルデータが{a, b, c, d}であり、マスクレジスタ２のマスクデータが{0, 1, 1, 1}である場合、結果として{b, c, d, 0}ではなく、{c, b, d, 0}などの、元のベクトルレジスタ１中での並び順に依らない結果を生成する場合である。この別形態は、絞り込み処理が、判定を通った要素の並び順は問わない場合に、利用することができる。また、圧縮された要素以降には、任意の値を含むことを可能としても良い。カウント部５で判定を通った要素数だけメモリ８にストアされるので、その要素数以降に任意の値が入っていても、出力結果に書かれることはないためである。
【００３６】
例えば、上記の例では、結果として{c, b, d, d}（４番目にベクトルレジスタ１中の４番目のデータが入っている）を生成する場合である。このような別形態は、要素の順序の制約が無い場合や後続の要素に任意の値を入れて良い場合に、圧縮演算部４のハードウェア実装時の回路規模や処理時間を短くできる場合に効果的である。
【００３７】
なお、上記の説明では、圧縮演算の結果として、左詰めで表記をしているが、この順序は本発明とは無関係である。
【００３８】
〔第２実施形態〕
次に、本発明の第２実施形態による圧縮ストア処理装置、および圧縮ストア処理方法について、説明する。図６は、本発明の第２実施形態の圧縮ストア処理装置を示すブロック図である。図７は、本発明の第２実施形態の圧縮カウントを説明するための概念図である。
【００３９】
［構成の説明］
本実施形態の圧縮ストア処理装置は図６に示すように、第１実施形態と同様に、カウント手段の一例としてのカウント部５と、アドレス更新手段の一例としてのアドレス更新部７と、を含む。さらに、本実施形態の圧縮ストア処理装置は図６に示すように、圧縮演算手段の一例としての圧縮演算部４ａおよび圧縮演算部４ｂと、ストア手段の一例としてのマスク付ストア部６ａと、を含む。言い換えると、本実施形態では、圧縮演算部を二つ備え、マスク付ストア部を備えることを特徴とする。その他の構成要素は、第１実施形態と同様である。
【００４０】
本実施形態の圧縮ストア処理装置は第１実施形態と同様に、圧縮ストア演算の入力であるベクトルレジスタ１、マスクレジスタ２、およびベースアドレスレジスタ３から入力して演算処理を実行し、出力結果をメモリ８に格納する。なお、ベースアドレスレジスタ３は圧縮ストア演算の出力先でもある。
【００４１】
本実施形態では、第１の圧縮演算手段および第２の圧縮演算手段の一例としての、二つの圧縮演算部４ａおよび圧縮演算部４ｂと、マスク付ストア手段の一例としてのマスク付ストア部６ａと、を備える。一つ目の圧縮演算部４ａの機能や入力は、第１実施形態と同様である。二つ目の圧縮演算部４ｂの機能は第１実施形態と同様であるが、圧縮演算部４ｂの二つの入力がともにマスクレジスタ２であり、マスクレジスタ２を圧縮するために利用される。すなわち、値が１である要素が先頭から並ぶベクトルデータを生成する。
【００４２】
マスク付ストア部６ａは、マスク付ストア演算を行う機能を有する。本実施形態では、圧縮されたベクトルデータと圧縮されたマスクレジスタ２のマスクデータを入力として受け取り、ベースアドレスレジスタ３で指定されるメモリアドレスに対して、マスク付ストアを行う。
【００４３】
本実施形態では、ベクトルレジスタ１のベクトルデータの圧縮に合わせて、マスクレジスタ２のマスクデータも圧縮するので、メモリ８に結果を格納する際に、マスク付ストアを利用できるという特徴を有する。本実施形態の動作は、これまでの説明と第１実施形態の動作の説明とから明らかであるため、詳しい説明は省略する。二つの圧縮動作は独立した処理であるので、同時に実行できる。
【００４４】
［効果の説明］
本実施形態の圧縮ストア処理装置、および圧縮ストア処理方法では第１実施形態と同様に、ベクトルレジスタ１に格納された複数の要素を一度に圧縮ストア処理することができる。これにより、一要素ずつ格納する場合に比べて、絞り込み処理を高速に行うことが可能である。
【００４５】
さらに本実施形態によれば、ベクトルデータの圧縮に合わせて、マスクデータも圧縮するので、メモリ８に結果を格納する際に、マスク付ストアを利用できる。さらに二つの圧縮動作は独立した処理であるので、同時に実行できる。本実施形態によれば、マスク付ストアが通常のストアより高速に行える計算機では、本実施形態はより高速に絞り込み処理を実行できるという効果がある。
【００４６】
なお、本実施形態の別形態として、一つの圧縮演算部を二回利用して、ベクトルレジスタ１とマスクレジスタ２の両方に対して圧縮を行う形態としてもよい。この場合、圧縮動作を順に行うことにより実行時間が長くなる代わりに、圧縮演算部が一つで良いので、ハードウェア実装時の回路規模を小さくできるという利点がある。
【００４７】
〔第３実施形態〕
次に、本発明の第３実施形態による圧縮ストア処理装置、および圧縮ストア処理方法について、説明する。図７は、本発明の第３実施形態の圧縮ストア処理装置を示すブロック図である。
【００４８】
［構成の説明］
本実施形態の圧縮ストア処理装置は図７に示すように、第１実施形態と同様に、圧縮演算手段の一例としての圧縮演算部４と、カウント手段の一例としてのカウント部５と、アドレス更新手段の一例としてのアドレス更新部７と、を含む。さらに、本実施形態の圧縮ストア処理装置は図７に示すように、第２実施形態と同様に、ストア手段の一例としてのマスク付ストア部６ａを、含む。さらに本実施形態の圧縮ストア処理装置は図７に示すように、マスク生成手段の一例としてのマスク生成部９を、含む。言い換えると、本実施形態では、マスク付ストア部６ａとマスク生成部９とを備えることを、特徴とする。その他の構成要素は、第１実施形態や第２実施形態と同様である。
【００４９】
本実施形態のマスク生成部９は、指定された数だけ値が１の要素が並ぶマスクデータを生成する機能を有する。例えば、ベクトル長が４の場合に、２が指定された場合、マスク生成部９はマスクデータとして、{0, 0, 1, 1}を生成する。生成したマスクデータをマスク生成部９はマスク付ストア部６ａに出力する。
【００５０】
本実施形態では、カウント部５が数えた値に対して、マスク生成部９を利用することで、圧縮したマスクデータを生成し、それを用いてマスク付ストアを利用することを特徴とする。
【００５１】
［効果の説明］
本実施形態の圧縮ストア処理装置、および圧縮ストア処理方法では第１実施形態などと同様に、ベクトルレジスタ１に格納された複数の要素を一度に処理することができるので、一要素ずつ格納する場合に比べて、絞り込み処理を高速に行うことが可能である。
【００５２】
さらに本実施形態によれば第２実施形態と同様に、ベクトルレジスタ１の圧縮に合わせて、マスクレジスタ２も圧縮するので、メモリ８に結果を格納する際に、マスク付ストアを利用できる。本実施形態によれば、マスク付ストアが通常のストアより高速に行える計算機では、本実施形態はより高速に絞り込み処理を実行できるという効果がある。
【００５３】
さらに本実施形態によれば、圧縮演算部４に比べて、マスク生成部９の方がハードウェア実装時の回路面積を小さく実装できる場合に、第２実施形態のような圧縮演算部を二つ用いる場合に比べて、全体の回路面積を小さくできるという利点がある。
【００５４】
なお、マスク生成部９は、カウント部５による処理とマスク付ストア部６ａによる処理との間で、実行される。このため、全体の処理時間を長くする可能性があるが、圧縮処理部４の実行時間が、カウント部５の実行時間とマスク生成部９の実行時間との合計よりも大きい場合は、全体の処理時間は変わらない。
【００５５】
〔第４実施形態〕
次に、本発明の第４実施形態による圧縮ストア処理装置、および圧縮ストア処理方法について、説明する。図８は、本発明の第４実施形態の圧縮ストア処理装置を示すブロック図である。図９は、本発明の第４実施形態の圧縮ストア処理装置に用いるサブ圧縮カウント部の詳細を説明するためのブロック図である。図１０は、本発明の第４実施形態の圧縮ストア処理装置に用いる圧縮カウント部の詳細を説明するためのブロック図である。
【００５６】
［構成の説明］
本実施形態の圧縮ストア処理装置は図８に示すように、第１実施形態などと同様に、ストア手段の一例としてのストア部６と、アドレス更新手段の一例としてのアドレス更新部７と、を含む。さらに本実施形態の圧縮ストア処理装置は図８に示すように、圧縮カウント手段の一例としての圧縮カウント部１０を含む。言い換えると、本実施形態の圧縮ストア処理装置は、第１実施形態の圧縮演算部４およびカウント部５に代えて、圧縮カウント部１０を備えることを特徴とする。
【００５７】
圧縮カウント部１０は、圧縮演算とカウント演算とを同時に行う機能を有している。すなわち、ベクトルレジスタ１をマスクレジスタ２に従って圧縮したベクトルデータを生成するとともに、マスクレジスタ２中の値が１の要素の数を数える機能を有している。その他の構成要素は、第１実施形態と同様である。
【００５８】
次に、本実施形態の圧縮カウント部１０の構成について、より詳細に説明する。図９に、圧縮カウント部１０の構成に利用されるサブ圧縮カウント部１０ａの構成を示している。サブ圧縮カウント部１０ａは、圧縮済みの二つのベクトルデータ（図中v0、v1）とそれぞれの圧縮された要素数（図中c0、c1）を受け取る。そしてサブ圧縮カウント部１０ａは、受け取った二つのベクトルデータを結合して圧縮したベクトルデータ（すなわち全要素数が二つのベクトルデータの合計となるベクトルデータ）とそのベクトルデータ中の圧縮された要素数を出力する機能を有する。
【００５９】
サブ圧縮カウント部１０ａは、データ移動部１０ｂと、加算部１０ｃと、を備える。データ移動部１０ｂは、圧縮済みベクトルデータであるベクトルv0の先頭から要素数c0個と、圧縮済みベクトルデータであるベクトルv1の先頭から要素数c1個とを接続したベクトルデータを、生成する（その後ろの要素の値は任意である）。加算部１０ｃは、要素数c0と要素数c1とを加算して、出力する機能を有する。なお、入力と出力は同じベクトルレジスタに格納しても良い。
【００６０】
図１０は一例として、サブ圧縮カウント部を３個用いた、４要素のベクトルデータに対する圧縮カウント部１０の構成を示している。図１０の上段のサブ圧縮カウント部１０ａ１およびサブ圧縮カウント部１０ａ２では、１要素の圧縮済みベクトルデータ二つを入力し、２要素の圧縮済みベクトルデータを出力する。図１０の下段のサブ圧縮カウント部１０ａ３では、２要素の圧縮済みベクトルデータを入力として、４要素の圧縮済みベクトルデータと、圧縮された要素数とを、出力している。図１０の圧縮カウント部１０は全体として、４要素のベクトルデータを入力して、４要素の圧縮済みベクトルデータと、圧縮された要素数とを、出力する。言い換えると、二組の圧縮済みのベクトルデータとその圧縮された要素数とを受け取り、二つのベクトルデータを結合した圧縮済みベクトルデータとその圧縮された要素数を出力するサブ圧縮カウント部１０ａを繰り返し利用することで、圧縮カウント処理を行うものである。
【００６１】
［動作の説明］
次に、本実施形態の圧縮ストア処理装置の動作、および圧縮ストア処理方法について説明する。本実施形態に特徴的な動作は、圧縮カウント部１０の動作である。図１１は、本実施形態の動作例を示す疑似コードの一例である。なお、圧縮カウント部１０は、圧縮とカウントを同時に行う機能を持っていれば、本動作例以外の動作でも良い。
【００６２】
図１１のsrcは入力となるベクトルレジスタ、maskはマスクレジスタ、dstは結果のベクトルデータを格納する内部バッファ、cntは一時的に利用されるバッファであり、全てベクトル長分の記憶領域を有する。Ｎはベクトル長を示す。本動作では、Ｎは２の累乗である。
【００６３】
本動作では圧縮カウント部１０は、まず隣接する２要素ずつの圧縮およびカウントを、ベクトルデータ全体に対して行う。その後、４要素、８要素と倍の長さにしながら、ベクトル長の半分に達するまで繰り返すことで、最終的にベクトルデータ全体に対して圧縮とカウントとを行っている。
【００６４】
各ステップでの動作を説明する。各ステップで対象とする要素数を半分に割ると、それぞれは前のステップで圧縮されており、またそれぞれの圧縮された要素数（以下要素数と略す）は計算済みである（iが前半、i+jが後半の開始位置、cnt[i]が前半、cnt[i+j]が後半の要素数を示す）。したがって、前半の先頭から前半の要素数分だけずらした位置から、後半の要素数分を接続すれば、このステップでの圧縮処理を行うことができる。また前半と後半の要素数を足すことで、全体の圧縮された要素数を求めることができる。ベクトルレジスタ全体の圧縮された要素数は、最終的にcnt[0]に格納される。
【００６５】
したがって、本動作を終えると、圧縮されたベクトルデータとその要素数が同時に得られる。なお、本動作例では、各ステップでの圧縮とカウントは同時に行うことができるため、全体として、ベクトル長に対しては、O(log(ベクトル長))のステップ数で、圧縮とカウントを行うことができる（なおここで、logの底は2である）。
【００６６】
本実施形態の別形態として、圧縮カウント部１０で、マスクレジスタ２に対しても同時に圧縮を行ってよい。この場合は、圧縮されたマスクデータが得られ、メモリ８へ結果を格納する際に、マスク付ストアを利用できるという効果がある。この場合の動作例を図１２に示す。図１２は、第４実施形態の別形態の動作を示す擬似コードの一例である。マスクレジスタmaskに対しても圧縮を行うため、ベクトルレジスタsrcと同様の処理が行われているが、マスクレジスタの場合は、値が１以外の後続の要素には０を格納する必要があるため、その処理が追加されている。
【００６７】
［効果の説明］
本実施形態の圧縮ストア処理装置、および圧縮ストア処理方法では第１実施形態などと同様に、ベクトルレジスタ１に格納された複数の要素を一度に処理することができるので、一要素ずつ格納する場合に比べて、絞り込み処理を高速に行うことが可能である。
【００６８】
さらに本実施形態によれば、圧縮カウント部１０で圧縮演算とカウント演算とを同時に行うことにより、それぞれを独立して演算する場合よりも、ハードウェア実装時の回路規模を少なくすることができる。
【実施例】
【００６９】
（実施例１）
次に、具体的な実施例を用いて、本発明を実施するための形態の動作を説明する。
【００７０】
図４は、本実施例での入力データを示している。本実施例では、入力となる配列は１６要素であり、図に示す様に各要素にはaからpの値が入っている。また判定結果は図４に示すようになるとする。またベースアドレスの値は0x00001000とし、ここに判定結果が１であるデータだけを格納する場合について説明する。本実施例ではベクトル長は８とする。データサイズは４バイトとする。
【００７１】
まず、本発明の第２実施形態を用いた場合の例を示す。ベクトル長は８であるので、本発明の第２実施形態を適用する場合は、８要素ずつ処理を行う。本実施例では、まずベクトルレジスタに入力配列の前半を格納し、判定処理をベクトル演算を使って同時に行う。その結果、図に示す判定結果の前半がベクトルレジスタに格納される。ここまでの動作は、本発明とは無関係であるため詳細な説明は省略する。
【００７２】
次に、二つの圧縮演算部４ａおよび圧縮演算部４ｂを用いて、ベクトルレジスタ１とマスクレジスタ２に対して圧縮を行い、カウント部５を用いて、マスクレジスタ２の値が１の数を数える。結果として、{b, e, f, g, 0, 0, 0, 0}および{1, 1, 1, 1, 0, 0, 0, 0}、要素数４が得られる。ここでは、圧縮された値の後続には0が格納されるとしている。次に、マスク付ストア部６ａに{b, e, f, g, 0, 0, 0, 0}と{1, 1, 1, 1, 0, 0, 0, 0}とベースアドレスレジスタ３からのベースアドレスを渡し、マスク付ストアを実行する。この結果、メモリ８中に{b, e, f, g}が格納される。同時に、アドレス更新部７に、要素数４とベースアドレスレジスタ３の値を渡す。アドレス更新部７は0x000010000+4*4を実行し、0x0001010をベースアドレスレジスタ３に格納する。
【００７３】
次に、入力配列の後半に対して同様の処理を行う。圧縮とカウント演算を行うと{k,0,0,0,0,0,0,0}および{1,0,0,0,0,0,0,0}、要素数１が得られる。これを現在のベースアドレスレジスタ３の0x00001010にストアすると、メモリ８中には図５に示す値が格納される。図に示されるように、判定結果が１の要素のみの配列を作成することができている。
【００７４】
（実施例２）
次に、本発明の第２の実施例について説明する。本実施例は、本発明の第４実施形態に対応する実施例である。入力データは、第１の実施例と同様である。本実施例の特徴的な動作は、圧縮カウント動作であるので、この動作を中心に説明する。図１３は、圧縮化運と動作を説明するための図である。本図面では、入力配列の前半８要素に対する圧縮カウント動作を説明する。本実施例では、ベクトルレジスタ１には、値として[a, b, c, d, e, f, g, h]が格納されており、マスクレジスタ２の値は[0, 1, 0, 0, 1, 1, 1, 0]が格納されている。
【００７５】
図１３の一番上の段の結果のベクトルデータを格納する内部バッファdstおよび一時的に利用されるバッファcntは、初期化後のdst,cntの値を示している。すなわち、これらは入力のベクトルレジスタ１とマスクレジスタ２と同じ値である。点線の鍵括弧が各ステップの処理部分を表しており、上から下へと処理が進んでいる。最初のステップでは、２要素ずつの圧縮とカウントが行われる。一番左の２要素について説明する。ここでは、全体が二要素なので、半分に割るとそれぞれ１要素で[a],[b]である。前半のマスクレジスタ２の対応する要素の値が１の要素数（以下要素数と略す）は、０、後半は１である。したがって、前半の先頭から前半の要素数分（０）個取り出し、後半の要素数分（１）だけ後半の要素を接続する。その結果、[b, *]（*は任意の値）という結果が得られる。またカウント数を足すことで、cnt[0] = 1が得られる。灰色部分が現在のステップでの操作によって変更された部分である。同様の動作を、別の２要素間にも繰り返すことによって、各２要素間で圧縮とカウントが行われる。各２要素間での処理は独立していることに注意されたい。
【００７６】
次のステップでは４要素間に対して同様の操作を行い、最後のステップでは８要素全体に対して行うことで、最下段の結果が得られる。dstに圧縮されたベクトルデータ{b, e, f, g, e, f, g, h}が得られ、cnt[0]に要素数４が得られている。
【００７７】
本実施例では、得られた結果に対して、ストア部を呼び出し、圧縮されたベクトルデータのうち、先頭の４要素がメモリに格納される。入力配列の後半の動作については、省略する。本実施例でも同様に図５に示す結果が得られる。
【００７８】
〔その他の実施形態〕
以上、本発明の好ましい実施形態や実施例を説明したが、本発明はこれに限定されるものではない。例えば、図１（ａ）の圧縮演算手段１４、カウント手段１５、ストア手段１６、およびアドレス更新手段１７は、ソフトウェア或いはソフトウェアとハードウェアとの組合せによっても、実現することができる。
【００７９】
図１（ｂ）は、本発明のその他の実施形態の圧縮ストア処理装置を示す構成図である。図１（ｂ）の圧縮ストア処理装置は、制御部である処理装置２１と、記憶装置２２と、を含む。記憶装置２２は、ＲＡＭ（Random Access Memory）等で構成される。
【００８０】
図１（ｂ）の圧縮ストア処理装置は、処理装置２１に、ベクトルレジスタ中の要素の中から、対応するマスクレジスタの要素の値が１または０のいずれか一方である要素を先頭から連続に並べたベクトルデータを生成する処理と、上記マスクレジスタの要素の値が上記１または０である要素の数を計数する処理と、生成された上記ベクトルデータの先頭から、上記計数した要素の数分だけをメモリに格納する処理と、ベースアドレスレジスタの値に、カウント部で計算された要素数分と各要素のデータサイズとの積を加算する処理とを実行させるような、圧縮ストア処理プログラムを読み込んで、圧縮ストア処理を実行する。このプログラムは、ＣＦ（Compact Flash（登録商標））およびＳＤ（Secure Digital）等の汎用的な半導体記録デバイス、フレキシブルディスク（Flexible Disk）等の磁気記録媒体、またはＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記録媒体などの形態で、流通され得る。このような記録媒体に記録されたプログラムを読み込んで、圧縮ストア処理装置の演算装置２１で実行することにより、上述した本実施形態の処理機能をソフトウェア的に実現してもよい。
【００８１】
以上、本発明の好ましい実施形態や実施例を説明したが、本発明はこれに限定されるものではない。特許請求の範囲に記載した発明の範囲内で、種々の変形が可能であり、それらも本発明の範囲に含まれることはいうまでもない。
【００８２】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）ベクトルデータを圧縮してメモリに格納する圧縮ストア処理装置であって、
前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する圧縮演算手段と、
前記マスクデータのマスクビットの数を計数するカウント手段と、
生成された前記ベクトルデータの先頭から、前記計数したマスクビットの数分だけを前記メモリに格納するストア手段と、
ベースアドレスの値に、前記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新するアドレス更新手段と、を含む圧縮ストア処理装置。
（付記２）前記圧縮演算手段は、前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する第１の圧縮演算手段と、前記マスクデータを圧縮する第２の圧縮演算手段とを、含む、付記１に記載の圧縮ストア処理装置。
（付記３）前記計数したマスクビットの数からマスクデータを生成するマスク生成手段を含む、付記１に記載の圧縮ストア処理装置。
（付記４）前記ストア手段は、マスク付ベクトルデータをストアするマスク付ストア手段である、付記２または付記３に記載の圧縮ストア処理装置。
（付記５）前記圧縮演算手段と前記カウント手段を備える圧縮カウント手段を含む、付記１乃至付記４のいずれか一つに記載の圧縮ストア処理装置。
（付記６）前記圧縮カウント手段は、前記ベクトルデータの隣接する要素と、前記マスクデータの隣接する要素を入力して、圧縮されたベクトルデータと圧縮された要素数を出力するサブ圧縮カウント手段を含む、付記５に記載の圧縮ストア処理装置。
（付記７）前記圧縮カウント手段は、第１のサブ圧縮カウント手段および第２のサブ圧縮カウント手段と、前記第１のサブ圧縮カウント手段からの出力と前記第２のサブ圧縮カウント手段からの出力とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する第３のサブ圧縮カウント手段を含む、付記５に記載の圧縮ストア処理装置。
（付記８）ベクトルデータを圧縮してメモリに格納する圧縮ストア処理方法であって、
前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成し、
前記マスクデータのマスクビットの数を計数し、
生成された前記ベクトルデータの先頭から、前記計数したマスクビットの数分だけを前記メモリに格納し、
ベースアドレスの値に、前記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新する、圧縮ストア処理方法。
（付記９）前記ベクトルデータの生成および前記マスクビットの数の計数と、前記メモリへの格納および前記ベースアドレスの更新とのどちらかまたは両方が同時に行われる、付記８に記載の圧縮ストア処理方法。
（付記１０）前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成し、前記マスクデータを圧縮する、付記８または付記９に記載の圧縮ストア処理方法。
（付記１１）前記ベクトルデータの生成と前記マスクデータの圧縮とが同時に行われる、付記１０に記載の圧縮ストア処理方法。
（付記１２）前記ベクトルデータの生成と前記マスクデータの圧縮とが順番に行われる、付記１０に記載の圧縮ストア処理方法。
（付記１３）前記計数したマスクビットの数からマスクデータを生成する、付記８または付記９に記載の圧縮ストア処理方法。
（付記１４）マスク付ベクトルデータとしてストアする、付記８乃至付記１３のいずれか一つに記載の圧縮ストア処理方法。
（付記１５）前記ベクトルデータの隣接する要素と、前記マスクデータの隣接する要素とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する、付記８または付記９に記載の圧縮ストア処理方法。
（付記１６）前記ベクトルデータのうち、前記隣接する要素とは異なる隣接する要素と、前記マスクデータのうち、前記隣接する要素とは異なる隣接する要素とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する、付記１５に記載の圧縮ストア処理方法。
（付記１７）前記ベクトルデータおよび前記マスクデータのうち、前記隣接する要素を元に出力された圧縮されたベクトルデータと圧縮された要素数と、前記ベクトルデータおよび前記マスクデータのうち、前記隣接する要素とは異なる隣接する要素を元に出力された圧縮されたベクトルデータと圧縮された要素数とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する、付記１６に記載の圧縮ストア処理方法。
（付記１８）ベクトルデータを圧縮してメモリに格納する圧縮ストア処理プログラムであって、
処理装置に、
前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する処理と、
前記マスクデータのマスクビットの数を計数する処理と、
生成された前記ベクトルデータの先頭から、前記計数したマスクビットの数分だけを前記メモリに格納する処理と、
ベースアドレスの値に、前記計数したマスクビットの数と各要素のデータサイズとの積を加算してベースアドレスを更新する処理と、を実行させる圧縮ストア処理プログラム。
（付記１９）前記ベクトルデータの生成および前記マスクビットの数の計数と、前記メモリへの格納および前記ベースアドレスの更新とのどちらかまたは両方が同時に行われる、付記１８に記載の圧縮ストア処理プログラム。
（付記２０）前記ベクトルデータの要素の中から、対応するマスクデータのマスクビットに従って要素を先頭から連続に並べたベクトルデータを生成する処理と、前記マスクデータを圧縮する処理とを実行させる、付記１８または付記１９に記載の圧縮ストア処理プログラム。
（付記２１）前記ベクトルデータの生成と前記マスクデータの圧縮とが同時に行われる、付記２０に記載の圧縮ストア処理プログラム。
（付記２２）前記ベクトルデータの生成と前記マスクデータの圧縮とが順番に行われる、付記２０に記載の圧縮ストア処理プログラム。
（付記２３）前記計数したマスクビットの数からマスクデータを生成する処理を実行させる、付記１８または付記１９に記載の圧縮ストア処理プログラム。
（付記２４）マスク付ベクトルデータとしてストアする処理を実行させる、付記１８乃至付記２３のいずれか一つに記載の圧縮ストア処理プログラム。
（付記２５）前記ベクトルデータの隣接する要素と、前記マスクデータの隣接する要素とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する処理を実行させる、付記１８または付記１９に記載の圧縮ストア処理プログラム。
（付記２６）前記ベクトルデータのうち、前記隣接する要素とは異なる隣接する要素と、前記マスクデータのうち、前記隣接する要素とは異なる隣接する要素とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する処理を実行させる、付記２５に記載の圧縮ストア処理プログラム。
（付記２７）前記ベクトルデータおよび前記マスクデータのうち、前記隣接する要素を元に出力された圧縮されたベクトルデータと圧縮された要素数と、前記ベクトルデータおよび前記マスクデータのうち、前記隣接する要素とは異なる隣接する要素を元に出力された圧縮されたベクトルデータと圧縮された要素数とを入力して、圧縮されたベクトルデータと圧縮された要素数を出力する処理を実行させる、付記２６に記載の圧縮ストア処理プログラム。
【産業上の利用可能性】
【００８３】
本発明は、画像による物体認識を、ベクトル処理を用いて高速に行うといった用途に利用できる。
【符号の説明】
【００８４】
１    ベクトルレジスタ
２    マスクレジスタ
３    ベースアドレスレジスタ
４、４ａ、４ｂ    圧縮演算部
５    カウント部
６    ストア部
７    アドレス更新部
８    メモリ
９    マスク生成部
１０    圧縮カウント部
１０ａ、１０ａ１、１０ａ２、１０ａ３    サブ圧縮カウント部
１０ｂ    データ移動部
１０ｃ    加算部
１４    圧縮演算手段
１５    カウント手段
１６    ストア手段
１７    アドレス更新手段
２１    処理装置
２２    記憶装置
【図１】
2017068744.tif 000003
【図２】
2017068744.tif 000004
【図３】
2017068744.tif 000005
【図４】
2017068744.tif 000006
【図５】
2017068744.tif 000007
【図６】
2017068744.tif 000008
【図７】
2017068744.tif 000009
【図８】
2017068744.tif 000010
【図９】
2017068744.tif 000011
【図１０】
2017068744.tif 000012
【図１１】
2017068744.tif 000013
【図１２】
2017068744.tif 000014
【図１３】
2017068744.tif 000015
【図１４】
2017068744.tif 000016