(57)【要約】      （修正有）【課題】複数のバンクを備えたメモリに複数のハッシュ演算回路から同時に異なるバンクを指定してアクセスすることにより、メモリからのデータ読み込みを効率化する情報処理装置を提供する。【解決手段】情報処理装置１００は、複数のバンクを備えたメモリ１と、複数のハッシュ演算回路８と、メモリの各バンクとハッシュ演算回路とを接続するインターコネクト２と、を備える。各ハッシュ演算回路は、メモリからデータを読み出すためのリードリクエストが同一サイクルにおいてそれぞれが異なるバンクを指定するためのバンク番号を含むように制御する。【選択図】図１
2020184095.tif 000002
【特許請求の範囲】
【請求項１】
複数のバンクを備えたメモリと、
複数のハッシュ演算回路と、
前記メモリの各バンクと前記ハッシュ演算回路とを接続するインターコネクトと、を備えた情報処理装置において、
前記各ハッシュ演算回路は、前記メモリからデータを読み出すためのリードリクエストが同一サイクルにおいてそれぞれが異なるバンクを指定するためのバンク番号を含むように制御することを特徴とする情報処理装置。
【請求項２】
前記メモリは、事前に計算されたＤＡＧデータを記憶し、
前記ハッシュ演算回路は、ハッシュ演算部と、スレッド部と、スレッドコントローラと、アドレス生成・バンク判定部と、前記バンクの数と等しい数のＦＩＦＯと、セレクタと、カウンタと、を備え、
前記ハッシュ演算部は、前記メモリから読み出したＤＡＧデータに基づいてハッシュ演算を行い、
前記アドレス生成・バンク判定部は、前記スレッド部のコンテキストに基づき入力データをハッシュ演算してアクセスするＤＡＧデータが格納されたバンク番号とアドレスを得ると共に前記バンク番号に等しい番号のＦＩＦＯにデータを格納し、
前記セレクタは、入力されるカウンタ値に基づきＦＩＦＯを決定したことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記セレクタに入力されるカウンタ値は、全てのハッシュ演算回路においてそれぞれ異なることを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記インターコネクトは、複数のルータをバタフライ接続した構成であることを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記インターコネクトは、前記バンクの数を２ビットで表した場合のビット数に等しい段数であることを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記インターコネクトは、リードリクエストに含まれる指定バンク情報に基づいて前記各ハッシュ演算回路と前記メモリの各バンクとを接続し、リードリクエストをメモリのバンクに供給することを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記インターコネクトは、前記リードリクエストに含まれるハッシュ演算回路の番号に基づいて前記各ハッシュ演算回路と前記メモリとを接続し、前記メモリから読み出したデータを前記番号を有するハッシュ演算回路に供給することを特徴とする請求項６記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関し、特にブロックチェーン等に利用される複数のハッシュ値を並列に演算するのに好適な情報処理装置に関する。
【背景技術】
【０００２】
ブロックチェーン技術を利用すると、ブロック内のデータが改ざんされていないことを証明することができる。そのため、ブロックチェーン技術は、仮想通貨システムのトランザクション証明や、第三者を介さずに信用が担保されたトランザクションを処理できるスマートコントラクト等をはじめ、様々なサービスに利用されている。
仮想通貨システムに関するブロックチェーンは、様々存在するが、代表的なものとしてビットコイン（Ｂｉｔｃｏｉｎ）や、イーサリアム（Ｅｔｈｅｒｅｕｍ）があり、これらの仮想通貨システムではプルーフ・オブ・ワーク（ＰｏＷ）と呼ばれ、ブロック同士をチェーンで繋ぐためのキーであるナンス（ｎｏｎｃｅ）を探し当てるハッシュ関数演算が行われる。
ハッシュ関数演算は、従来ＣＰＵやＧＰＵを用いて行われていた。しかし、近年はハッシュ関数演算用のＡＳＩＣ（特定用途向け集積回路）が用いられ、ＡＳＩＣを大量に準備できる資本を有する者が優位な立場にあり、マイニングの中央集権化が問題となりつつある。
【０００３】
一方、イーサリアム（Ｅｔｈｅｒｅｕｍ）は、ナンス（ｎｏｎｃｅ）を探し当てるハッシュ関数演算のアルゴリズムにおいて、ＤＡＧと呼ばれる事前に計算された数ギガバイトのデータセットをランダムに参照する手順が含まれ、ＤＡＧが格納されたメモリへのアクセス速度がプルーフ・オブ・ワーク（ＰｏＷ）の処理速度を制限するという特徴がある。
そのため、ビットコイン（Ｂｉｔｃｏｉｎ）のハッシュ関数演算に比較してＡＳＩＣ耐性があるが、イーサリアム（Ｅｔｈｅｒｅｕｍ）の仮想通貨をマイニング（ナンスの特定）するためには、ＤＡＧに格納されたデータへの高速アクセスが課題である。
【０００４】
＜プルーフ・オブ・ワーク（ＰｏＷ）のアルゴリズムの概要＞
図８は、従来のイーサリアム（Ｅｔｈｅｒｅｕｍ）に用いられるプルーフ・オブ・ワーク（ＰｏＷ）のアルゴリズムの概要を示す図である。
まず、１つ前のブロックヘッダ情報と推測したナンスとをＳＨＡ３（Ｋｅｃｃａｋ５１２）のアルゴリズムを用いてハッシュ演算し（ステップＳ１）、その演算結果（Ｍｉｘ０）を得る。
その後、演算結果（Ｍｉｘ０）をアドレス生成用Ｍｉｘｉｎｇ関数（ＦＮＶハッシュアルゴリズム）でハッシュ演算し、ＤＡＧのアドレス情報を求め、求められたアドレスに格納されている１２８バイトのデータを読み出す（ステップＳ２）。
【０００５】
その後、読み出したデータと演算結果Ｍｉｘ０とをＭｉｘデータ生成用Ｍｉｘｉｎｇ関数（ＦＮＶハッシュアルゴリズム）を用いて演算し、演算結果であるＭｉｘ１を得る（ステップＳ３）。Ｍｉｘ１の演算結果も前記と同様にアドレス生成用のＭｉｘｉｎｇ関数でハッシュ演算し、ＤＡＧのアドレス情報を求め、求められたアドレスに格納されているＤＡＧのデータを読み出し、読み出したデータとＭｉｘ１とを用いてＦＮＶハッシュアルゴリズム演算し、Ｍｉｘ２を得る。
このようなアドレス生成用のハッシュ演算と、ＤＡＧからのデータ読み出しと、読み出したデータとＭｉｘ値とを用いたＭｉｘデータ生成用のハッシュ演算とを６４回繰り返し（ステップＳ４）、Ｍｉｘ６４を得る（ステップＳ５）。
その後、事後処理関数を用いてデータの圧縮等の処理を行い（ステップＳ６）、得られたハッシュ値が特定の条件を満たす場合（ターゲットとなる閾値以下）であればプルーフ・オブ・ワーク（ＰｏＷ）の成功と見なされる（ステップＳ７）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ＥｔｈｅｒｅｕｍのＰｏＷアルゴリズム  Ｅｔｈｅｒｅｕｍに用いられているプルーフ・オブ・ワーク（ＰｏＷ）のアルゴリズムは、Ｅｔｈａｓｈと称され、そのアルゴリズムは下記ＵＲＬに示すＷｅｂに開示されている。ｈｔｔｐｓ：／／ｖｉｃｒｙｐｔｏｐｉｘ．ｃｏｍ／ｅｔｈａｓｈ／
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ハッシュ演算に用いるＤＡＧのアドレス情報（ページ情報）は、上記ステップＳ４の繰り返し処理における各フェーズの演算結果（ｍｉｘ値）（Ｍｉｘ０〜Ｍｉｘ６３）により決まるため、ＤＡＧのデータ取得を並列化することができず、そのためマイニングを高速化するためにはＤＡＧへの高速アクセスが必要である。
ＤＡＧのデータセットが格納されているメモリに高速アクセスするためには、メモリとしてＨＢＭ（High Bandwidth Memory）やＨＢＭ２を利用することが考えられるが、ＨＢＭやＨＢＭ２はＤＲＡＭが用いられているので、ＤＲＡＭのレイテンシを遮蔽すると共にメモリ帯域を最大限に利用する必要がある。
ハッシュ演算におけるＤＡＧリードのリードアドレスはランダム性を持つことから、単純にハッシュ演算回路を多数準備して並列実行させたとしても、複数のバンクを備えるメモリに対するバンクアクセス競合が避けられず、メモリアクセス効率が落ちてしまう。
本発明の一実施形態は、上記に鑑みてなされたもので、その目的は、多数のハッシュ演算回路から複数のバンクを備えるメモリに対してバンク競合を起こさないように制御することにより、メモリ帯域を最大限に有効活用することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、請求項１記載の発明は、複数のバンクを備えたメモリと、複数のハッシュ演算回路と、前記メモリの各バンクと前記ハッシュ演算回路とを接続するインターコネクトと、を備えた情報処理装置において、前記各ハッシュ演算回路は、前記メモリからデータを読み出すためのリードリクエストが同一サイクルにおいてそれぞれ異なるバンクを指定するためのバンク番号を含むように制御することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、複数のバンクを備えたメモリに複数のハッシュ演算回路がそれぞれ異なるバンクを指定してアクセスすることにより、メモリからのデータ読み込みを効率化することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態に係る情報処理装置の構成を示す図である。
【図２】本発明の一実施形態に係る情報処理装置のハッシュ演算回路、インターコネクト、メモリの関係を示す概要図である。
【図３】（ａ）は本発明の一実施形態に係る情報処理装置のインターコネクトの構成、及び各ルータのポート番号を示す図であり、（ｂ）は一つのルータの構造を示す図である。
【図４】本発明の一実施形態に係る情報処理装置のハッシュ演算回路の概要を示す図である。
【図５】ＦＩＦＯとセレクタの周辺回路の一例を示す図である。
【図６】本発明の一実施形態に係る情報処理装置の各ハッシュ演算回路のカウンタに設定されている初期値が異なることを表で示す図である。
【図７】メモリのレイテンシを遮蔽し、各ハッシュ演算回路のスレッド部が処理を行うタイミングを示す図である。
【図８】従来のイーサリアムに用いられるプルーフ・オブ・ワークのアルゴリズムの概要を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明を図面に示した実施の形態により詳細に説明する。
本発明は、複数のバンクを備えたメモリにバンクに対して複数のハッシュ演算回路から同時に異なるバンクを指定してアクセスすることにより、メモリの帯域を有効活用する。
すなわち、本発明の情報処理装置は、複数のバンクを備えたメモリと、複数のハッシュ演算回路と、メモリの各バンクとハッシュ演算回路とを接続するインターコネクトと、を備えた情報処理装置において、各ハッシュ演算回路は、メモリからデータを読み出すためのリードリクエストが同一サイクルにおいてそれぞれが異なるバンクを指定するためのバンク番号を含むように制御することを特徴とする。
以上の構成を備えることにより、複数のバンクを備えたメモリに複数のハッシュ演算回路から同時に異なるバンクを指定してアクセスすることにより、メモリの帯域を有効活用することができる。
上記記載の本発明の特徴について、以下の図面を用いて詳細に解説する。但し、この実施形態に記載される構成要素、種類、組み合わせ、形状、その相対配置などは特定的な記載がない限り、この発明の範囲をそれのみに限定する主旨ではなく単なる説明例に過ぎない。
上記の本発明の特徴に関して、以下、図面を用いて詳細に説明する。
【００１２】
＜情報処理装置＞
本発明の一実施形態に係る情報処理装置は、プロセッサと高速なメモリ（例として、ＨＢＭ）とＡＳＩＣやＦＰＧＡ等の半導体集積回路とを用いてハッシュ関数演算を行うものであり、メモリはマルチバンク構成とし、ハッシュ関数演算を行う半導体集積回路はメモリのアクセスレイテンシを遮蔽するためマルチスレッドを採用し、かつメモリの帯域をフルに使うことができる並列演算を行うものである。
イーサリアム（Ｅｔｈｅｒｅｕｍ）のプルーフ・オブ・ワーク（ＰｏＷ）を高速に実現するためには、ＤＡＧに格納された１２８ｂｙｔｅのデータ（以下、「ＤＡＧデータ」という。）を高速に読み込みすることが効果的である。
そのため、本実施形態では、ＤＡＧデータを帯域幅の広いＨＢＭ（High Bandwidth Memory）やＨＢＭ２に格納する。
ＨＢＭやＨＢＭ２は、ＤＲＡＭをスタックした構成であるため、長いアクセスレイテンシが発生する。
本実施形態では、メモリのアクセスレイテンシを遮蔽するため、ハッシュ演算回路はマルチスレッド構成を採用する。
【００１３】
図１は、本発明の一実施形態に係る情報処理装置の構成を示す図である。
情報処理装置１００は、メモリ１と、インターコネクト２と、複数のハッシュ演算クラスタ３と、を備えている。
メモリ１は、ＨＢＭ２（High Bandwidth Memory 2）と呼ばれ、複数のバンク（本実施形態では３２個のバンク）を有するマルチバンク構成のＤＲＡＭ（Dynamic Random Access Memory）である。
インターコネクト２は、前記メモリ１とハッシュ演算クラスタ３に含まれる各ハッシュ演算回路８とを接続している。
各ハッシュ演算クラスタ（ＨＣＬ（０）〜ＨＣＬ（７））３は、ナンス生成回路４、チェック回路５、ケチャック回路（５１２）６、ケチャック回路（２５６）７、複数のハッシュ演算回路８を備えている。
ナンス生成回路４は、ブロック同士をチェーンで繋ぐためのキーであるナンス候補を生成する回路である。
チェック回路５は、演算結果が所望のものであるか否か（マイニングが成功したか否か）を判定する回路である。
ケチャック回路（５１２）６は、ケチャック（Ｋｅｃｃａｋ）と呼ばれるハッシュ関数演算ロジックであり、ケチャック回路（５１２）は、背景技術において説明したＳＨＡ３と同様に、一つ前のブロックヘッダ情報と推測したナンスをハッシュ化するための回路である。
ケチャック回路（２５６）７は、ハッシュ演算結果であるＭｉｘ６４をハッシュ演算し、演算結果を圧縮するものである。なお、ケチャック回路（２５６）７は、背景技術において説明したＭｉｘダイジェスト（３２ｂ）と同様である。
【００１４】
ハッシュ演算回路８であるＨＡＳ（０）〜ＨＡＳ（３）は、ＦＮＶハッシュ関数アルゴリズムを実行する演算ロジックであり、それぞれ入力したミックス値とＤＡＧから得たデータとを組み合わせ６４回のハッシュ演算を行う。
情報処理装置１００には、ハッシュ演算クラスタ３を８個含み、各ハッシュ演算クラスタ３に４個のハッシュ関数部が実装されているので、合計３２個のハッシュ演算部ＨＡＳ（０）〜ＨＡＳ（３１）を含んでいる。
一方、各ハッシュ演算クラスタ３には、ケチャック回路（５１２）６、ケチャック回路（２５６）７、ナンス生成回路４、チェック回路５がそれぞれ１個ずつ実装され、それらを４つのハッシュ演算回路８で共用している。
ハッシュ演算回路８の実装数はメモリ１の帯域、インターコネクトのバス幅、動作周波数、扱うデータ量によって定める。
例えば、メモリ１の帯域が５１２ＧＢ／ｓｅｃであり、インターコネクト２のバス幅を６４ｂｙｔｅ、動作周波数を２５０ＭＨｚとすると、１２８ｂｙｔｅのＤＡＧデータを処理するハッシュ演算回路８は３２個あればメモリ１の帯域を使いきることとなる。すなわち、バス幅６４ｂｙｔｅのインターコネクト２で１２８ｂｙｔｅのデータを処理するためには２クロックで一回のデータ処理が行われるので、５１２ＧＢ／（１２８ｂｙｔｅ×１２５ＭＨｚ）＝３２となる。
また、ケチャック回路（５１２）６、ケチャック回路（２５６）７のスループットと、ハッシュ演算回路８のスループットとがバランスがとれるようにハッシュ演算クラスタ３内のハッシュ演算回路８の個数を選定している。
【００１５】
＜ハッシュ演算回路、インターコネクト、メモリの関係＞
図２は、本発明の一実施形態に係る情報処理装置のハッシュ演算回路、インターコネクト、メモリの関係を示す概要図である。なお、図２に示す各部に付与した符号は図１と同様である。また、図１に示した８つのハッシュ演算クラスタ（ＨＣＬ（０）〜ＨＣＬ（７））に含まれるハッシュ演算回路（ＨＡＳ（０）〜ＨＡＳ（３））を説明の都合上、ＨＡＳ（０）〜ＨＡＳ（３１）と通し番号で記載している。
したがって、図２において、ＨＡＳ（４）はハッシュ演算クラスタＨＣＬ（１）のＨＡＳ（０）に相当し、ＨＡＳ（３０）、ＨＡＳ（３１）はハッシュ演算クラスタＨＣＬ（７）のＨＡＳ（２）及びＨＡＳ（３）に相当する。
【００１６】
インターコネクト２は、図２に示すように、メモリ１内のバンク（０）〜バンク（３１）を制御対象としており、各ハッシュ演算回路から同時並列に出力された各アドレス（バンク）に応じて、メモリ１内のバンク（０）〜バンク（３１）の任意のバンクに接続できるよう構成られている。なお、所定のタイミングにおいて、一つのハッシュ演算回路８がインターコネクト２を介してアクセスするバンクは任意の一つであり、各ハッシュ演算回路８はアクセスするバンクが重複しないよう制御されている。これにより、インターコネクト２は、メモリ１の帯域を有効活用している。
【００１７】
インターコネクト２は、アドレスルータ２Ａとデータルータ２Ｄとから構成されている。
図示したように、各ハッシュ演算回路８からハッシュ演算回路のスレッド番号（後述）及びアドレスが出力され、インターコネクト２のアドレスルータ２Ａがハッシュ演算回路の回路番号及びバンク番号を付加し、ハッシュ演算回路からのリードリクエストＲＲｑをメモリ１側に出力する。
また、インターコネクト２のアドレスルータ２Ａの出力段では、バンク番号に関するデータを削除し、メモリ１にはアドレス、ハッシュ演算回路番号及びスレッド番号が供給される。メモリ１は供給されたアドレス情報に基づいてＤＡＧデータを読み出し、ハッシュ演算回路番号及びスレッド番号はメモリ１に一時記憶され、読み出されたＤＡＧデータをハッシュ演算回路に出力する際、ハッシュ演算回路番号及びスレッド番号が利用される。なお、インターコネクト２のアドレスルータ２Ａはハッシュ演算回路８から出力されたリードリクエストＲＲｑに含まれるアドレス（バンク）バンク番号に応じて、バンク０〜バンク３１の任意のバンクに接続できるよう構成している。
ここで、図において、ＲＲｑはハッシュ演算回路８からのリードリクエストを表し、ＲＤはメモリ１から出力されるＤＡＧデータを表している。
【００１８】
メモリ１から読み出されたＤＡＧデータは、リードデータＲＤおよびリードリクエストＲＲｑを行ったハッシュ演算回路の回路番号、スレッド番号と共にインターコネクト２のデータルータ２Ｄに供給され、ハッシュ演算回路番号に応じたルート制御が行われ、リードリクエストＲＲｑを行ったハッシュ演算回路にデータが供給される。この際、データルータ２Ｄの出力段でハッシュ演算回路番号に関するデータが削除され、ハッシュ演算回路にはデータとスレッド番号が供給される。
【００１９】
＜インターコネクトの構成＞
図３（ａ）は、本発明の一実施形態に係る情報処理装置のインターコネクト２のアドレスルータ２Ａの構成、及び各ルータのポート番号を示す図であり、図３（ｂ）は一つのルータのポート構造を示す図である。なお、インターコネクト２のデータルータ２Ｄもアドレスルータ２Ａと同じ構成である。
図３（ａ）において、符号１２はメモリ１に設けられたメモリバンク側Ｉ／Ｏを示し、１４Ａはインターコネクト２に設けられたアドレスルータ２Ａのルーティング部を示し、１６はハッシュ演算クラスタ（ＨＣＬ０〜ＨＣＬ７）に設けられたハッシュ演算回路のＩ／Ｏを示している。
ルーティング部１４Ａは、バンク数及びハッシュ演算回路数に応じてルータ列が決定され、本実施形態のようにバンク数及びハッシュ演算回路数が３２個の場合には、３２を二進数で表した際のビット数５に等しいルータ列が必要となる。
ルーティング部１４Ａのハッシュ演算回路のＩ／Ｏに接続しているルータ列（Ｒ１−１〜Ｒ１−１６）は各ハッシュ演算回路８から出力されるバンク番号（後述するＦＩＦＯの番号）の最上位ビット（５ビット目）の“０”または“１”によってルートが制御され、次のルータ列（Ｒ２−１〜Ｒ２−１６）は最上位から２番目のビットの値によってルートが制御される。
以下同様にハッシュ演算回路のＩ／Ｏから３列目、４列目、５列目のルータ列はそれぞれバンク番号の３ビット目、４ビット目、５ビット目（最下位ビット）のビット値によってルートが制御される。
バンク番号の最下位ビットにより制御されるルータ列（Ｒ５−１〜Ｒ５−１６）はメモリ１の各バンクのＩ／Ｏへ接続されている。また、ルーティング部１４Ａは複数のルータをバタフライ接続した構成であり、各ルータは図３（ｂ）に示すように入力２ポート、出力２ポートであり、入力ポートから“０”が入力するとポート０（ｐｏｒｔ０）へ接続し、“１”が入力するとポート１（ｐｏｒｔ１）へ接続するように構成している。
例えば、１列目のルータＲ１−１のハッシュ演算回路側から見た出力ポートのポート１（ｐｏｒｔ１）は２列目のルータＲ２−９の入力ポートのポート０（ｐｏｒｔ０）と接続し、同じく１列目のルータＲ１−８の出力ポートのポート１は２列目のルータＲ２−１６の入力ポートのポート０（ｐｏｒｔ０）と接続している。また、１列目のルータＲ１−２〜Ｒ１−７の出力ポート１は２列目のルータＲ２−１０〜Ｒ２−１６の入力ポート０（ｐｏｒｔ０）とそれぞれ接続している。さらに、ルータＲ１−１〜Ｒ１−８はいずれもその出力ポート０は２列目のルータ列のＲ２−１〜Ｒ２−８の入力ポート０と接続している。
一方、１列目のルータＲ１−９〜Ｒ１−１６は出力ポート１がそれぞれ２列目のルータ列のＲ２−９〜Ｒ２−１６の入力ポート１と接続し、出力ポート０がそれぞれ２列目のルータ列のＲ２−１〜Ｒ２−８の入力ポート１と接続するよう結線されている。
２列目から５列目の各入出力ポートの接続は図３（ａ）に示した通りである。
【００２０】
例えば、ハッシュ演算回路の回路番号０がメモリ１のバンク番号０を指定した場合、ハッシュ演算回路からルーティング部１４Ａに入力されるバンク番号は０００００であるため、Ｒ１−１、Ｒ２−１、Ｒ３−１、Ｒ４−１、Ｒ５−１のすべてのルータにおいてポート０が選択され、バンク０に接続しているＩ／Ｏとの間でデータの送信ができることになる。
また、ハッシュ演算回路の回路番号０がメモリ１のバンク番号３１を指定した場合、ハッシュ演算回路からルーティング部１４Ａに入力されるバンク番号は１１１１１となり、ルータＲ１−１、Ｒ２−９、Ｒ３−１３、Ｒ４−１５、Ｒ５−１６のすべてのルータでポート１出力となり、バンク３１に接続しているＩ／Ｏとの間でデータの送信ができることとなる。
【００２１】
なお各ルータにおいて、２つの入力をルーティングした結果、出力ポートが同一になると調停が発生し、バスの帯域を有効利用できなくなる。そのため、同じルータに入力するデータには所定の規則を持たせている。
すなわち、初期値として、ハッシュ演算回路の回路番号として偶数番号（０、２、４、・・・３０）をメモリ１のバンク番号０〜１５に割り当て、ハッシュ演算回路の回路番号として奇数番号（１、３、５、・・・３１）をメモリ１のバンク番号１６〜３１に割り当てることで、データの衝突を回避している。このように構成することにより、同じルータに接続した２つの異なるハッシュ演算回路から出力されるバンク番号の最上位ビットが必ず異なり、調停が不要となるのでデータの転送速度を向上することができる。
【００２２】
なお、ルータにおける接続制御の対象になるビットが互いに異なる組み合わせは多数存在するが、図３に示した初期設定にすることで、ルーティング部の２段目〜５段目においても調停が不要となる。
ハッシュ演算回路８から出力される、メモリ１のバンク番号を表すビットは、ルーティング部１４Ａを制御し、メモリアドレスはバンク内のＤＡＧデータを読み出すアドレスであり、ハッシュ演算回路８の回路番号はメモリ１から読み出したデータを要求元であるハッシュ演算回路８に戻すために用いられ、スレッド番号はハッシュ演算回路８のスレッドを制御するために用いられる。
【００２３】
＜データ転送＞
次に、メモリ１のバンクから読み出されたＤＡＧデータをリクエスト元のハッシュ演算回路に転送する制御について説明する。
メモリ１のバンクから読み出されたＤＡＧデータをリクエスト元のハッシュ演算回路に転送する際はデータルータ２Ｄを介してＤＡＧデータが転送される。データルータ２Ｄは図３（ａ）に示したアドレスルータ２Ａと同じ構成であり、データの流れがアドレスルータ２Ａと異なるだけである。
先に述べたように、ハッシュ演算回路８は、自己の回路番号をアドレスルータ２Ａのルーティング部１４Ａに供給しているので、リードリクエストＲＲｑの結果、各バンクから読み出したデータ転送の際に、データルータ２Ｄのルーティング部１４Ａはこの回路番号を利用してルーティングを行う。
例えば、ハッシュ演算回路の回路番号１からバンク番号１６を表す値「１００００」がアドレスルータ２Ａルーティング部に入力され、バンク番号に基づきルーティングが制御され、メモリ１のバンク番号「１６」にリードリクエストＲＲｑが行われると、メモリ１のバンク番号「１６」から読み出されたＤＡＧデータはデータルータ２Ｄを介して要求元であるハッシュ演算回路の回路番号１に転送される。
【００２４】
より詳細には、メモリ１はバンク番号「１６」に対するリードリクエストを受け付け、所定のレイテンシを経た後、ＤＡＧデータが読み出され、要求元のハッシュ演算回路１に出力される。この際、データルータ２Ｄのルーティング部１４Ａは、リードリクエスト元のハッシュ演算回路の回路番号を表す最下位ビットを最上位ビットにシフトすると共に、残りのビットをそれぞれシフトダウンすることで得られた値を用いてルーティングを制御する。
ハッシュ演算回路の回路番号１は、回路番号として００００１をアドレスルータ２Ａに供給し、インターコネクト２のルーティングコントローラ（図示省略）は受け取った回路番号を、１００００に変換すると共にバンク番号「１６」から読み出したＤＡＧデータと変換した回路番号のデータとスレッド番号とをデータルータ２Ｄに供給する。データルータ２Ｄはルータ列（Ｒ５−１〜Ｒ５−１６）において、変換された回路番号のデータの最下位ビットに基づきルート判定を行い、その後、各ルータ列（Ｒ４、Ｒ３、Ｒ２、Ｒ１）でも最下位ビットから２ビット目、３ビット目、４ビット目、５ビット目（最上位ビット）の値に基づきルート判定が行われ、読み出したＤＡＧデータをハッシュ演算回路の回路番号１に供給する。
なお、ルーティングコントローラにおける回路番号のビットシフト処理を行わず、図３（ａ）に示したルーティング部１４Ａのルータ列が反転した構成、すなわち、メモリバンク側のＩ／Ｏに最も近いルータ列にＲ１−１〜Ｒ１−１６を配置し、ハッシュ演算回路側のＩ／Ｏに最も近いルータ列にＲ５−１〜Ｒ５−１６を配置すると共に、それに伴い２段目から４段目の各ルータ列も反転した位置に配置し、ルータ列Ｒ１−１〜Ｒ１−１６にて回路番号の最上位ビットでルーティングを制御し、ルータ列Ｒ５−１〜Ｒ５−１６で回路番号の最下位ビットでルーティングを制御するよう構成しても良い。
このようにアドレスルータとデータルータのルータ列およびその接続を反転させることで、データルータにおけるルーティング制御でビットの入れ替えやビットシフト等、回路番号のアドレス加工が不要となる。
ただし、インターコネクト２を構成する半導体素子の実装上の配線が複雑になるので、アドレスルータ２Ａ及びデータルータ２Ｄは相似の構成とするのが好ましい。
【００２５】
＜ハッシュ演算回路＞
図４は、本発明の一実施形態に係る情報処理装置のハッシュ演算回路の概要を示す図である。
ハッシュ演算回路８は、ハッシュ演算部（ＦＮＶアルゴリズム）２１、スレッド部２３、スレッドコントローラ２５、アドレス生成・バンク判定部（ＦＮＶアルゴリズム）２７、ＦＩＦＯ２９、セレクタ３１と、カウンタ３３を備えている。
図１にて説明したように、ケチャック回路（５１２）６は、ナンス生成回路４から取得したデータをハッシュ演算し、その結果である演算結果（Ｍｉｘ０）を得て、ハッシュ演算回路８に設けられたスレッド部２３に演算結果（Ｍｉｘ０）を出力する。
【００２６】
スレッド部２３は、スレッド部２３のコンテキストに基づき、演算結果（Ｍｉｘ０）をアドレス生成・バンク判定部２７に出力し、該アドレス生成・バンク判定部２７は、スレッド部２３から取得した演算結果（Ｍｉｘ０）に対して、ＦＮＶアルゴリズムに基づくハッシュ演算を行うことで、次に読み出すべきメモリ１のバンク番号およびメモリ１のアドレスを得る。
なお、スレッドコントローラ２５は、スレッド部２３を構成しているＳＲＡＭの中のマルチスレッドコンテキストの空き状況や計算状況（計算中・計算完了）等の情報に基づきスレッド部２３のスレッド実行制御を行っている。また、スレッド部２３が保持するスレッド数は、メモリ１のアクセスレイテンシよりも十分大きな数とすることで、レイテンシを完全に遮蔽する。
次に、アドレス生成・バンク判定部２７は、得られたバンク番号に対応したＦＩＦＯ２９にメモリのアドレス及びスレッド番号を表すデータを格納する。各ＦＩＦＯ２９は複数のデータを先入れ先出しするメモリで、各ＦＩＦＯは例えば８段分のデータを格納できる。
次に、セレクタ３１は、カウンタ３３から入力されるカウンタ値に基づいて３２個のＦＩＦＯ２９のうちの１つを選択し、選択したＦＩＦＯ２９から当該セレクタ３１を介してアドレス及びスレッド番号を含むリードリクエストＲＲｑをインターコネクト２へ送出する。この際、インターコネクト２はリードリクエストを出力しているハッシュ演算回路の回路番号や各ハッシュ演算回路のセレクタ３１を介してリクエストが出力されたＦＩＦＯの番号をバス側から把握できるので、ハッシュ演算回路番号やバンク番号（＝ＦＩＦＯ番号）をリードリクエスト及び読み出しデータ転送のルーティングに利用する。
【００２７】
＜プルーフ・オブ・ワーク（ＰｏＷ）のアルゴリズムの概要＞
図１及び図４を参照して、ハッシュ演算回路によるプルーフ・オブ・ワーク（ＰｏＷ）のアルゴリズムの概要について説明する。
（１）ケチャック（５１２）６は、２５６ビットのヘッダーと６４ビットのナンスからなる３２０ビットのデータをハッシュ演算し、５１２ビットの演算結果を得、その演算結果を２回繰り返すことで１０２４ビットのＭｉｘ０を得る。
（２）ハッシュ演算回路８のスレッド部２３はＭｉｘ０とスレッド番号とからなるデータをアドレス生成・バンク判定部２７に供給し、該アドレス生成・バンク判定部２７にてＭｉｘ０のデータについてＦＮＶハッシュ演算を行うことでバンク番号及びアドレスの情報を得る。
（３）アドレス生成・バンク判定部２７は、得られたバンク番号と同じ番号のＦＩＦＯ２９にアドレスとスレッド番号を格納する。
（４）セレクタ３１がいずれかのＦＩＦＯ２９をインターコネクト２に接続すると、該ＦＩＦＯ２９に格納されているリードリクエスト（アドレスおよびスレッド番号）がインターコネクト２を介してメモリ１の所望のバンクに供給される。なお、メモリ１のバンク番号はセレクタ３１が選択したＦＩＦＯ番号に等しいので、インターコネクト２はＦＩＦＯ番号を見ることでリードリクエストを供給すべきバンク番号を把握することができ、バンク番号に基づいてアドレスルータ２Ａのルーティング部１４Ａを制御する。また、ハッシュ演算回路８の番号もインターコネクト２側から把握することができるので、インターコネクト２はハッシュ演算回路８の番号をリードリクエスト受付時に記憶し、リードリクエストに対応するリードデータがメモリ１から出力された際にハッシュ演算回路８の回路番号を再度付与することでリードデータのルーティングを制御している。
（５）インターコネクト２に供給されたリードリクエストはメモリ１の所望のバンクに供給され、ＤＡＧデータが読み出される。インターコネクト２を介したリードリクエストの供給および読み出したＤＡＧデータの転送については、図２及び図３で説明した通りである。
（６）インターコネクト２を介してメモリ１から読み出されたＤＡＧデータはハッシュ演算回路８のハッシュ演算部２１に供給される。該ハッシュ演算部２１ではＦＮＶアルゴリズムに基づくハッシュ演算が行われ、ハッシュ演算結果であるＭｉｘ１がスレッド部２３に供給される。
（７）その後、Ｍｉｘ１及びスレッド番号をアドレス生成・バンク判定部２７に供給し、該アドレス生成・バンク判定部２７にてＭｉｘ１のデータについてＦＮＶハッシュ演算を行うことで次のハッシュ演算に利用するＤＡＧデータが格納されているバンク番号及びアドレスの情報を得る。
（８）以降、上記（２）〜（６）を６３回（既に記載した処理も含め、合計６４回）繰り返し、Ｍｉｘ６４を得、得られたＭｉｘ６４（１０２４ビット）をＦＮＶで２５６ビットに圧縮する。
（９）その後、ケチャック（２５６）７は、得られたＭｉｘ６４をハッシュ演算によりデータ圧縮し、その結果が所定の条件を満たしているか否かをチェック回路５にて判定する。
【００２８】
＜ＦＩＦＯとセレクタの周辺回路＞
図５は、ＦＩＦＯとセレクタの周辺回路の一例を示す図である。
アドレス生成・バンク判定部２７とＦＩＦＯ２９（０）〜（３１）との間には、アドレスデコーダ３５（０）〜（３１）が設けられている。
アドレスデコーダ３５（０）〜（３１）は、アドレス生成・バンク判定部２７から出力されるバンク番号およびアドレスのうち、バンク番号（０）〜（３１）をそれぞれデコードしてバンクイネーブル信号ＢＥ（０）〜（３１）を生成し、生成されたバンクイネーブル信号ＢＥ（０）〜（３１）をそれぞれ対応するＦＩＦＯ２９（０）〜（３１）に供給することで、それぞれ適切なバンク番号およびアドレスが各ＦＩＦＯ２９（０）〜（３１）に入力される。
この結果、各ＦＩＦＯ２９（０）〜（３１）には、同一番号のバンク番号（０）〜（３１）およびアドレスが順次に格納される。
【００２９】
カウンタ３３は、コントローラから初期化時にハッシュ演算回路の番号に応じた初期値が設定される。カウンタ３３のカウント値はセレクタ３１に出力され、選択信号として用いられる。
【００３０】
この際、カウンタ３３から出力されるカウンタ値は、セレクタ３１から送出するアドレスが向かうバンク番号を示している。前述した通り、このカウンタ値はすべてのハッシュ演算回路８で異なっていることから、すべてのハッシュ演算回路８から送出するアドレスが向かうバンク番号は、同一サイクルにおいて重複しない。
なお、ハッシュ演算回路（ＨＡＳ（０）〜ＨＡＳ（３１））８のカウンタ初期値は図３に示した通りである。
【００３１】
上述したように、カウンタ初期値を設定し、情報処理装置１００を起動すると、起動直後はセレクタ３１で選択したＦＩＦＯ内のデータが空のため、ハッシュ演算回路８からリードリクエストが出力されない。しかし、ＦＩＦＯに蓄積されるリードリクエストがＦＩＦＯからセレクタ３１を介してインターコネクト２に出力されるリードリクエストより多くなるようスレッド部２３、スレッドコントローラ２５、セレクタ３１を制御することでＦＩＦＯにリードリクエストが蓄積され、セレクタ３１がいずれのＦＩＦＯを選択しても常にリードリクエストが出力される状況となる。
【００３２】
＜各カウンタの初期値＞
図６は、本発明の一実施形態に係る情報処理装置の各ハッシュ演算回路のカウンタに設定されているカウンタ初期値を表で示す図であり、同図に示すように、ハッシュ演算クラスタ３（０）〜（７）の各々には４つのハッシュ演算回路８（ハッシュ演算回路０〜３１）が備わっているので、各ハッシュ演算回路８に備えられたカウンタ３３の初期設定値は全てが重複しないように設定している。また、同じルータに同時にアクセスするハッシュ演算回路８はデータ転送における調停が発生しないよう、カウンタ初期値が選択されている。
すなわち、カウンタ値はインターコネクト２に出力するリードリクエストが格納されたＦＩＦＯの番号であり、またＦＩＦＯの番号はリードリクエストにより読み出されるＤＡＧのデータセットが格納されたメモリ１のバンク番号に等しい。
そのため、３２個のハッシュ演算回路８がそれぞれ異なるバンクにアクセスするようカウンタの初期値が設定され、かつ同じルータに同時にアクセスするハッシュ演算回路８はルーティング部１４Ａの１列目〜５列目のいずれの列においても、各ルータで異なるポートが選択されることで、ルーティング制御において調停が発生しないようにカウンタ初期値並びにルーティング部１４Ａのバタフライ接続の結線が設定されている。
【００３３】
＜各ハッシュ演算回路のスレッド構成＞
図７は、メモリ１のレイテンシを遮蔽する目的で各ハッシュ演算回路８のスレッド部がスレッド処理を行う状態をタイミングチャートで示したものである。
ハッシュ演算クラスタ３では、複数（本実施形態では４つ）のハッシュ演算回路８がナンス生成回路４、チェック回路５、ケチャック回路（５１２）６、ケチャック回路（２５６）７を共用している。そのため、同じクラスタに属するハッシュ演算回路から出力されるリードリクエストＲＲｑは出力されるタイミングが異なる。例えば、図７に例示したように、ハッシュ演算クラスタ（０）に含まれるハッシュ演算回路（０）とハッシュ演算回路（１）はリードリクエストＲＲｑが出力されるタイミングがずれている。またリードリクエストＲＲｑのずれに伴い、リードデータの出力もずれている。
一方、ハッシュ演算クラスタ（１）、（２）、（３）に属するハッシュ演算回路（８）、（１６）、（２４）はハッシュ演算クラスタ（０）に含まれるハッシュ演算回路（０）と同じタイミングでリードリクエストＲＲｑを出力し、同じタイミングでリードデータが得られる。
図７ではスレッド数が２５６のものを例示しており、このスレッド数はメモリ１のレイテンシ（ＬＴＣ）を遮蔽するのに十分な数としている。
また各スレッド番号の下に表示した数字は各ハッシュ演算回路８のカウンタ値であり、図６に示したものと同じ情報を記載している。各セレクタ３１を制御している全てのカウンタ３３は初期値が異なるが同期してカウント動作を行っているので、インターコネクト２のアドレスルータ２Ａにおけるアドレスの衝突は発生せず、かつデータルータ２Ｄにおけるデータの衝突も発生しない。
【００３４】
本実施形態によれば、以下の特徴的な構成、及び効果を有している。
＜マルチスレッド構成＞
ＤＡＧのデータは帯域幅の広いＨＢＭ（High Bandwidth Memory）やＨＢＭ２に格納する。しかし、ＨＢＭやＨＢＭ２はＤＲＡＭをスタックした構成であるため、長いアクセスレイテンシが発生する。
本実施形態では、長いアクセスレイテンシの発生を遮蔽するために、ハッシュ演算回路８はマルチスレッド構成を採用する。マルチスレッド構成を採用することで、リードリクエストからリードデータ出力までの遅延時間が生じても、その遅延時間に他のスレッドのリードリクエスト及びリードデータ出力が行われるので、ＨＢＭやＨＢＭ２の帯域を効率的に活用することができる。
【００３５】
＜複数のハッシュ演算回路＞
本実施形態では、マルチスレッドを採用したハッシュ演算回路８を複数備え、各ハッシュ演算回路８はメモリ１の異なるバンクに同時にアクセスするよう制御しているので、マルチスレッドによるメモリ帯域の活用に加え、ＨＢＭやＨＢＭ２の性能をさらに引き出す、すなわち、帯域をフルに使うことが可能となる。なお、本実施形態ではハッシュ演算回路８の実装数をメモリ１のバンク数に等しい数に設定しているが、これに限定されるものではなく、バンク数以上のハッシュ演算回路を実装するようにしても良い。ただし、バンク数以上のハッシュ演算回路を実装すると、バンクに対してリードリクエストを出すことができない、すなわち、ハッシュ演算を行うことができないハッシュ演算回路が発生することとなり無駄が生じる。また、バンク数以上のハッシュ演算回路を実装すると、バス（インターコネクト）における調停論理回路を導入する必要があり、バスの実装面積が大きくなる。そのため、ハッシュ演算回路数は最大でバンク数と等しいのが好ましい。
【００３６】
＜メモリへのアクセス制御＞
各ハッシュ演算回路８がメモリ１の異なるバンクに同時にアクセスするためには、メモリ１の各バンクに対して衝突がないリードリクエストが必要となる。
本実施形態では、各ハッシュ演算回路８のＩ／Ｏとメモリ１の各バンクのＩ／Ｏとの接続において、同時にアクセスされるバンクが重複しないようにバスを構成することで、各ハッシュ演算回路８がメモリ１の異なるバンクに同時にアクセスすることができる。
【００３７】
＜本実施形態の態様例の作用、効果のまとめ＞
＜第１態様＞
本態様の情報処理装置は、複数のバンクを備えたメモリ１と、複数のハッシュ演算回路８と、メモリ１の各バンクとハッシュ演算回路８とを接続するインターコネクト２と、を備えた情報処理装置において、各ハッシュ演算回路８は、メモリ１からデータを読み出すためのリードリクエストが同一サイクルにおいてそれぞれが異なるバンクを指定するためのバンク番号を含むように制御することを特徴とする。
本態様によれば、各ハッシュ演算回路８は、メモリ１からデータを読み出すためのリードリクエストが同一サイクルにおいてそれぞれが異なるバンクを指定するためのバンク番号を含むように制御することで、複数のバンクを備えたメモリに複数のハッシュ演算回路が常にそれぞれ重複しないバンクにアクセスすることにより、メモリからのＤＡＧデータ読み込みを効率的に行うことができる。
【００３８】
＜第２態様＞
本態様の情報処理装置において、メモリ１は、事前に計算されたＤＡＧデータを記憶し、ハッシュ演算回路８は、ハッシュ演算部２１と、スレッド部２３と、スレッドコントローラ２５と、アドレス生成・バンク判定部２７と、バンクの数と等しい数のＦＩＦＯ２９と、セレクタ３１と、カウンタ３３を備え、ハッシュ演算部２１は、メモリ１から読み出したＤＡＧデータに基づいてハッシュ演算を行い、アドレス生成・バンク判定部２７は、スレッド部２３のコンテキストに基づき入力データをハッシュ演算してアクセスするＤＡＧのデータセットが格納されたバンク番号とアドレスを得ると共にバンク番号に等しい番号のＦＩＦＯ２９にデータを格納し、セレクタ３１は、入力されるカウンタ値に基づきＦＩＦＯ２９を決定したことを特徴とする。
本態様によれば、ハッシュ演算部２１は、メモリ１から読み出したＤＡＧのデータに基づいてハッシュ演算を行い、アドレス生成・バンク判定部２７は、スレッド部２３のコンテキストに基づき入力データをハッシュ演算してアクセスするＤＡＧデータが格納されたバンク番号とアドレスを得ると共にバンク番号に等しい番号のＦＩＦＯ２９にデータを格納し、セレクタ３１は、入力されるカウンタ値に基づきＦＩＦＯ２９を決定し、各ハッシュ演算回路８のカウンタ初期値がいずれのハッシュ演算回路とも重複しないよう設定している。そのため、全てのハッシュ演算回路からのリードリクエストは衝突することなくインターコネクト２を介してメモリ１に供給され、またメモリ１から読み出されたＤＡＧデータも衝突することなく各ハッシュ演算回路に供給される。
【００３９】
＜第３態様＞
本態様のセレクタ３１に入力されるカウンタ値は、全てのハッシュ演算回路８においてそれぞれ異なることを特徴とする。
本態様によれば、セレクタ３１に入力されるカウンタ値は、全てのハッシュ演算回路８においてそれぞれ異なることで、各ハッシュ演算回路８がメモリ１の異なるバンクに衝突せずに同時にアクセスすることができる。
【００４０】
＜第４態様＞
本態様のインターコネクト２は、複数のルータをバタフライ接続した構成であることを特徴とする。
本態様によれば、インターコネクト２は、複数のルータをバタフライ接続した構成であることで、全てのハッシュ演算回路からのリードリクエストは衝突することなくインターコネクト２を介してメモリ１に供給され、またメモリ１から読み出されたＤＡＧデータも衝突することなく各ハッシュ演算回路に供給される。
【００４１】
＜第５態様＞
本態様のインターコネクト２は、バンクの数を２ビットで表した場合のビット数に等しい段数であることを特徴とする。
本態様によれば、インターコネクト２は、バンクの数を２ビットで表した場合のビット数に等しい段数であることで、メモリのバンクの数と同数の経路をインターコネクト２の内部に構成することができる。
【００４２】
＜第６態様＞
本態様のインターコネクト２は、リードリクエストＲＲｑに含まれる指定バンク情報に基づいてハッシュ演算回路８とメモリ１のバンクとを接続し、リードリクエストＲＲｑをメモリ１のバンクに供給することを特徴とする。
本態様によれば、インターコネクト２は、リードリクエストＲＲｑに含まれる指定バンク情報に基づいて各ハッシュ演算回路８とメモリ１の各バンクとを接続し、リードリクエストＲＲｑをメモリ１のバンクに供給することで、インターコネクト２により各ハッシュ演算回路８とメモリ１の各バンクとを１対１で接続することができる。
【００４３】
＜第７態様＞
本態様のインターコネクト２は、リードリクエストＲＲｑに含まれるハッシュ演算回路８の番号に基づいてハッシュ演算回路８とメモリ１とを接続し、メモリ１から読み出したデータを前記番号を有するハッシュ演算回路８に供給することを特徴とする。
本態様によれば、インターコネクト２は、リードリクエストＲＲｑに含まれるハッシュ演算回路８の番号に基づいてハッシュ演算回路８とメモリ１とを接続し、メモリ１から読み出したデータをハッシュ演算回路８に供給することで、メモリ１から読み出したデータを前記番号を有するハッシュ演算回路８に供給することができる。
【符号の説明】
【００４４】
１…メモリ、２…インターコネクト、２Ａ…アドレスルータ、２Ｄ…データルータ、３…ハッシュ演算クラスタ、４…ナンス生成回路、５…チェック回路、６…ケチャック回路（５１２）、７…ケチャック回路（２５６）、８…ハッシュ演算回路、１４Ａ…ルーティング部、２１…ハッシュ演算部、２３…スレッド部、２５…スレッドコントローラ、２６…スレッドコントローラ、２７…アドレス生成・バンク判定部、２９…ＦＩＦＯ、３１…セレクタ、３３…カウンタ、３５…アドレスデコーダ、１００…情報処理装置
【図１】
2020184095.tif 000003
【図２】
2020184095.tif 000004
【図３】
2020184095.tif 000005
【図４】
2020184095.tif 000006
【図５】
2020184095.tif 000007
【図６】
2020184095.tif 000008
【図７】
2020184095.tif 000009
【図８】
2020184095.tif 000010