(57)【要約】【課題】アクセラレータ部による高速化の度合に応じた利用料を決定する。【解決手段】１以上のアクセラレータであるアクセラレータ部の利用に対する課金を支援する課金支援システムが、稼働量取得部、加速率推定部及び利用料決定部を有する。稼働量取得部は、アクセラレータ部に入力された１以上のコマンドの各々について、当該コマンドに対してアクセラレータ部から出力された応答から、当該コマンドの実行に関する稼働量を取得する。加速率推定部は、アクセラレータ部に入力された１以上のコマンドについて、当該１以上のコマンドの処理に要した時間であるコマンド実行時間と、当該１以上のコマンドについてそれぞれ取得された１以上の稼働量とを基に加速率を推定する。利用料決定部は、当該推定された加速率に基づきアクセラレータ部の利用料を決定する。【選択図】図２
2019082819.tif 000002
【特許請求の範囲】
【請求項１】
１以上のアクセラレータであり入力されたコマンドについて稼働量を計測し当該稼働量を関連付けた応答を出力する回路を有するアクセラレータ部に入力された１以上のコマンドの各々について、当該コマンドに対して前記アクセラレータ部から出力された応答から、当該コマンドの実行に関する稼働量を取得する稼働量取得部と、
前記アクセラレータ部に入力された前記１以上のコマンドについて、当該１以上のコマンドの処理に要した時間であるコマンド実行時間と、当該１以上のコマンドについてそれぞれ取得された１以上の稼働量とを基に加速率を推定する加速率推定部と、
前記推定された加速率に基づき前記アクセラレータ部の利用料を決定する利用料決定部と
を有する課金支援システム。
【請求項２】
前記アクセラレータ部の前記回路は、入力回路、演算器群、カウンタ群及び出力回路を含み、
前記１以上のコマンドの各々について、
前記入力回路が、当該コマンドを入力し、
前記演算器群が、１以上の演算器であり、前記１以上の演算器のうちの少なくとも１つの演算器が、当該入力されたコマンドを実行し、
前記カウンタ群が、１以上のカウンタであり、前記１以上のカウンタのうち、当該入力されたコマンドを実行する前記少なくとも１つの演算器に対応したカウンタが、当該入力されたコマンドを実行するための前記少なくとも１つの演算器の稼働をカウントし、
前記出力回路が、当該入力されたコマンドについて前記カウンタ群におけるカウント値が関連付けられた応答を出力し、
前記１以上のコマンドの各々について、前記稼働量は、当該コマンドに対応した応答に関連付けられているカウント値である、
請求項１に記載の課金支援システム。
【請求項３】
前記１以上の演算器は、複数種類の演算器を含む複数の演算器であり、
前記加速率推定部は、前記１以上のコマンドについて、演算器の種類毎の重み係数と、演算器の種類毎のカウント値とに基づいて、前記加速率を推定する、
請求項２に記載の課金支援システム。
【請求項４】
前記回路は、更に、前記１以上のコマンドの各々について、当該コマンドについての１以上のカウンタにそれぞれ対応した１以上のカウント値の一次結合値を算出する一次結合回路を含み、
前記１以上のコマンドの各々について、当該コマンドに対応した応答に関連付けられているカウント値は、当該コマンドについて算出された一次結合値である、
請求項２又は３に記載の課金支援システム。
【請求項５】
前記利用料決定部は、
前記推定された加速率に応じて単位時間当たりの利用料である単価を決定し、
前記決定した単価と、前記１以上のコマンドの前記コマンド実行時間とを基に、前記利用料を決定する、
請求項１乃至４のうちのいずれか１項に記載の課金支援システム。
【請求項６】
前記回路を構成するためのＩＰ（Intellectual Property）コア、
を更に有し、
前記アクセラレータは、前記ＩＰコアがロードすることにより前記回路が構築されたＰＬＤ（Programmable Logic Device）を含む、
請求項１乃至５のうちのいずれか１項に記載の課金支援システム。
【請求項７】
１以上のアクセラレータであり入力されたコマンドについて稼働量を計測し当該稼働量を関連付けた応答を出力する回路を有するアクセラレータ部に入力された１以上のコマンドの各々について、当該コマンドに対して前記アクセラレータ部から出力された応答から、当該コマンドの実行に関する稼働量を取得し、
前記アクセラレータ部に入力された前記１以上のコマンドについて、当該１以上のコマンドの処理に要した時間であるコマンド実行時間と、当該１以上のコマンドについてそれぞれ取得された１以上の稼働量とを基に加速率を推定し、
前記推定された加速率に基づき前記アクセラレータ部の利用料を決定する、
を有する課金支援方法。
【請求項８】
１以上のアクセラレータであり入力されたコマンドについて稼働量を計測し当該稼働量を関連付けた応答を出力する回路を有するアクセラレータ部に入力された１以上のコマンドについて、当該１以上のコマンドの処理に要した時間であるコマンド実行時間と、当該１以上のコマンドについてそれぞれ取得された１以上の稼働量とを基に加速率を推定し、
前記推定された加速率に基づき前記アクセラレータ部の利用料を決定する、
ことを計算機に実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、１以上のアクセラレータであるアクセラレータ部の利用に対する課金の支援に関する。
【背景技術】
【０００２】
一般に、クラウドサービスでは、ユーザに割り当てられたＣＰＵやメモリなどのリソースの量と当該リソースの稼働時間とに基づいて、当該ユーザに課金がされる。
【０００３】
特許文献１に開示の課金システムは、仮想マシンにより使用されるリソースの使用率が基準値よりも低い場合、リソースの稼働率に応じて決定された課金金額を減額する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１４８６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、近年、特定の処理を高速に行うハードウェア（アクセラレータ）を有する計算機システムが注目されている。この場合、通常のＣＰＵやメモリの利用料以外に、アクセラレータの利用料が課金される。ＣＰＵやメモリはＯＳ（オペレーティングシステム）により稼働率が測定される。しかし、アクセラレータは、１コンポーネントとして、割り当て時間と稼働時間のみ測定可能である。
【０００６】
そこで、アクセラレータの利用料を、当該アクセラレータの割り当て時間と稼働時間から決定することが考えられる。
【０００７】
しかし、その決定が、妥当であるとは限らない。その理由は、次の通りである。
【０００８】
すなわち、アクセラレータに対してユーザが期待することは、ソフトウェアによる処理よりも高速な処理であり、故に、アクセラレータの利用料は、その高速化に対しての対価であることが望ましい。しかし、アクセラレータによる高速化は一定ではない。例えば、処理対象のコマンドやデータにより、アクセラレータの処理速度が低下することもある。この場合、アクセラレータの割り当て時間又は稼働時間は長くなり得る。そのため、アクセラレータによってあまり高速に処理ができなくてもアクセラレータの利用料が高額になってしまうことが考えられる。
【課題を解決するための手段】
【０００９】
１以上のアクセラレータであるアクセラレータ部の利用に対する課金を支援する課金支援システムが、稼働量取得部、加速率推定部及び利用料決定部を有する。稼働量取得部は、アクセラレータ部に入力された１以上のコマンドの各々について、当該コマンドに対してアクセラレータ部から出力された応答から、当該コマンドの実行に関する稼働量を取得する。加速率推定部は、アクセラレータ部に入力された１以上のコマンドについて、当該１以上のコマンドの処理に要した時間であるコマンド実行時間と、当該１以上のコマンドについてそれぞれ取得された１以上の稼働量とを基に加速率を推定する。利用料決定部は、当該推定された加速率に基づきアクセラレータ部の利用料を決定する。
【発明の効果】
【００１０】
本発明によれば、アクセラレータ部による高速化の度合に応じた利用料を決定することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施例１に係るシステム全体のハードウェア構成図である。
【図２】実施例１に係るシステム全体の機能ブロック図である。
【図３】ＦＰＧＡとそのドライバ間のやり取りを示す。
【図４】重みテーブルの構成図である。
【図５】単価テーブルの構成図である。
【図６】本発明の実施例２に係るＦＰＧＡの一部を示す。
【発明を実施するための形態】
【００１２】
以下の説明では、「インターフェース部」は、１以上の通信インターフェースデバイスでよい。１以上の通信インターフェースデバイスは、１以上の同種の通信インターフェースデバイス（例えば１以上のNIC（Network Interface Card））であってもよいし２以上の異種の通信インターフェースデバイス（例えばNICとHBA（Host Bus Adapter））であってもよい。
【００１３】
また、以下の説明では、「メモリ部」は、１以上のメモリでよい。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。メモリ部は、主に、プロセッサ部による処理の際に使用される。
【００１４】
また、以下の説明では、「ＰＤＥＶ部」は、１以上のＰＤＥＶでよい。「ＰＤＥＶ」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。ＰＤＥＶ部は、ＲＡＩＤグループであってもよい。「ＲＡＩＤ」は、Redundant Array of Independent (or Inexpensive) Disksの略である。
【００１５】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサでよい。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。一部のプロセッサは、処理の一部または全部を行うハードウェア回でもよい。
【００１６】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜にメモリ部及び／又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部（或いは、そのプロセッサ部を有する装置又はシステム）とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１７】
また、以下の説明では、同種の要素を区別して説明する場合は、その要素の参照符号を使用し（例えば、演算器４２１Ａ、演算器４２１Ｂ１、演算器４２１Ｂ２）、同種の要素を区別しないで説明する場合は、その要素の参照符号のうちの共通符号のみ使用する（例えば、演算器４２１）ことがある。
【００１８】
以下、図面を参照しながら、幾つかの実施例を説明する。なお、以下の説明により本発明が限定されるものではない。
【実施例１】
【００１９】
図１は、本発明の実施例１に係るシステム全体のハードウェア構成図である。
【００２０】
インターネットのような通信ネットワーク１０５に、１以上のユーザ端末１０３及びクラウド基盤１００が接続されている。
【００２１】
１以上のユーザ端末１０３の各々は、ユーザ（典型的にはいわゆるエンドユーザ）の計算機、例えば、パーソナルコンピュータ、スマートフォンである。
【００２２】
クラウド基盤１００は、計算機システムの一例であり、クラウドサービスを提供するシステムである。「計算機システム」は、１以上の計算機、例えば、サーバシステムとストレージシステムのうちの少なくとも１つでよい。「サーバシステム」は、１以上の物理的なサーバ（例えばサーバのクラスタ）であってもよいし、少なくとも１つの仮想的なサーバ（例えばＶＭ（Virtual Machine））を含んでもよい。また、「ストレージシステム」は、１以上の物理的なストレージ装置であってもよいし、少なくとも１つの仮想的なストレージ装置（例えばＳＤＳ（Software Defined Storage））を含んでもよい。
【００２３】
クラウド基盤１００は、複数（又は１）のノード（計算機）１０１を有する。本実施例では、複数のノード１０１は、ユーザ端末１０３からの要求に応じた処理を実行するノード１０１Ｎと、ユーザを管理するノード１０１Ｕとを含む。しかし、そのような区別はなくてもよい。
【００２４】
各ノード１０１が、Ｉ／Ｆ部（インターフェース部）１１１、ＰＤＥＶ部１１２、ＦＰＧＡ（Field-Programmable Gate Array）部１１３、メモリ部１１４、及び、それらに接続されたプロセッサ部１１５を有する。一部のノード１０１（例えばノード１０１Ｕ）にはＦＰＧＡ部１１３はなくてもよい。ＦＰＧＡ部１１３は、アクセラレータ部の一例であり、１以上のＦＰＧＡである。ＦＰＧＡは、ＰＬＤ（Programmable Logic Device）の一例であり、アクセラレータの一例である。つまり、本実施例では、アクセラレータがＦＰＧＡで実現されている。
【００２５】
図２は、実施例１に係るシステム全体の機能ブロック図である。
【００２６】
ＦＰＧＡ４０は、ＦＰＧＡ部１１３に相当する。すなわち、本実施例では、ＦＰＧＡ部１１３は、１つのＦＰＧＡ４０である。図中のＦＰＧＡ４０内のブロックは、ハードウェア機能ブロックである。図中のアプリケーション（アプリケーションプログラム）２０、ＯＳ（オペレーティングシステム）３０、加速率推定プロセス５０２及び利用料決定プロセス５０３は、プロセッサ部１１５上で動作するプログラムである。ＯＳ３０上では、ＦＰＧＡ４０のドライバ３１が実行される。ドライバ３１も、プロセッサ部１１５上で動作するプログラムである。また、ドライバ３１におけるサブミッションプロセス３１１、コンプリーションプロセス３１２及び積算プロセス５０１も、プログラムでよい。ユーザ端末１０３内のユーザプログラム１３は、ユーザ端末１０３内のプロセッサ部（図示せず）で実行されるプログラムである。ノード１０１Ｕ内の課金システム６０は、ノード１０１Ｕのプロセッサ部１１５で実行されるプログラムである。
【００２７】
本実施例において、ユーザプログラム１３から処理要求をアプリケーション２０が受信した場合、アプリケーション２０が、当該要求の処理を行う。アプリケーション２０は、当該処理の一部処理を、ＦＰＧＡ４０にオフロードするために、当該一部処理のコマンドを発行することができる。本実施例では、ＦＰＧＡ４０の利用料金に注目しているため、ＦＰＧＡ４０以外の要素（例えば、プロセッサ部１１５、メモリ部１１４及びアプリケーション２０）の使用料金については言及していない。
【００２８】
ＦＰＧＡ４０（図中のハードウェア機能ブロック（回路））は、初期のＦＰＧＡにＩＰ（Intellectual Property）コア８２がロードされることで構築される。ＩＰコア８２（例えばコンフィグレーションファイル）は、例えばドライバ３１により、図中のハードウェア機能ブロック（回路）を構築するために初期のＦＰＧＡにロードされる。ＦＰＧＡ４０における回路は、専用のＬＳＩ（Large Scale Integration）（例えば、ＡＳＩＣ（Application Specific Integrated Circuit）））や、汎用のＬＳＩを組み合わせて構成してもよい。
【００２９】
ＦＰＧＡ４０（構築された回路）は、入力回路４０１と、演算器群４０２と、カウンタ群４０３と、出力回路４０４とを含む。
【００３０】
入力回路４０１は、ドライバ３１から出力された（サブミッションプロセス３１１により出力された）コマンドを入力する。
【００３１】
演算器群４０２は、１以上の演算器４２１である。高速に処理をするために、演算器群４０２の構成は、パイプライン構成や並列構成であ。図２の例によれば、演算器群４０２は、カスケード接続された複数種類の演算器４２１Ａ〜４２１Ｅを含む。「演算器の種類」は、演算種類（例えば、算術演算、比較演算）、演算能力（例えば規模）及び演算負荷のうちの少なくとも１つに依存してよい。演算器群４０２は、１つの第１種の演算器４２１Ａ、並列になった３つの第２種の演算器４２１Ｂ１〜４２１Ｂ３、１つの第３種の演算器４２１Ｃ、並列になった２つの第４種の演算器４２１Ｄ１及び４２１Ｄ２、及び、１つの第５種の演算器４２１Ｅを有する。このように、全体では、第１種の演算器４２１Ａから第５種の演算器４２１Ｅまで５段階のパイプラインが構成される。演算器群４０２の構成として他の構成が採用されてよい。例えば、各コマンドについて、演算器群４０２における全ての演算器４２１が稼働することに代えて、コマンドによっては、一部の演算器４２１が稼働しないでもよい。演算器群４０２（図示の例では演算器４２１Ｅ）から、コマンドの処理結果が出力される。
【００３２】
演算器４２１の稼働量を計測するために、カウンタ群４０３が設けられる。すなわち、演算器の種類毎に、稼働量をカウントするカウンタ４３１が設けられる。図２の例によれば、５つの演算器種類にそれぞれ対応した５つのカウンタ４３１Ａ〜４３１Ｅが設けられる。コマンドの種類やデータの内容によって演算器４２１の稼働量が変わり得る。また、本実施例では、演算器４２１の種類によって、カウント値の重み係数（重み）が異なる。言い換えれば、演算器４２１の種類が同じであれば、カウント値の重み係数は同じである。このため、本実施例では、演算器４２１の種類毎に、カウンタ４３１が設けられる。カウント値の重み係数と演算器４２１との関係に応じて、カウンタ４３１が設けられてよい。カウンタ４３１のカウント値は、当該カウンタ４３１に対応する演算器４２１が有効な演算をした際のクロック数でよい。カウンタ群４０３における各カウンタ４３１のカウント値は、カウンタ群４０３から出力される。
【００３３】
出力回路４０４は、コマンド毎に、当該コマンドについて演算器群４０２から出力された処理結果と、当該コマンドについてカウンタ群４０３から出力されたカウント値（１以上のカウント値）とを取得し、処理結果とカウント値とを関連付けた応答を出力する。応答はドライバ３１に出力される。
【００３４】
このようなＦＰＧＡ４０とドライバ３１間では、図３を参照して後述するように、メモリ部１１４に設けられたキュー３９１及び３９２を介したやり取りが行われる。
【００３５】
メモリ部１１４は、重みテーブル５２０及び単価テーブル５３０を格納する。
【００３６】
重みテーブル５２０は、カウンタ４３１（カウント値）と重み係数との関係を示す。具体的には、重みテーブル５２０は、図４に示すように、カウンタ４３１毎に、カウンタＩＤ４１と重み係数４２といった情報を格納する。カウンタＩＤ４１は、カウンタ４３１のＩＤを示す。重み係数４２は、重み係数として代入される値を示す。本実施例では、上述したように、カウンタ４３１は、演算器の種類毎に存在する。このため、重みテーブル５２０は、演算器の種類に応じたカウント値の重み係数を示す。なお、各重み係数は、あらかじめ実験等によって決められた値でよい。
【００３７】
単価テーブル５３０は、推定加速率と単価の関係を示す。具体的には、単価テーブル５３０は、図５に示すように、推定加速率ｒの範囲毎に、加速率範囲５１と、単価５２といった情報を格納する。加速率範囲５１は、推定加速率ｒの範囲（上限及び下限のうちの少なくとも１つ）を示す。単価５２は、単価（単位時間当たりの利用料）として代入される値を示す。
【００３８】
以下、本実施例で行われる処理の流れを、主に図２を参照して説明する（適宜に、図３〜図５を参照する）。
【００３９】
アプリケーション２０がユーザプログラム１３からの処理要求を受けると（矢印３５０）、要求内容に従ってＡＰＰ２０は処理をする。その際に、アプリケーション２０が、ＦＰＧＡ４０での処理が適当と判断した処理は、ＯＳ３０の一部であるドライバ３１（ＦＰＧＡ４０のドライバ３１）を通して、ＦＰＧＡ４０に処理を依頼する（矢印３５１）。当該処理依頼には、例えば、ＦＰＧＡ４０を利用するユーザ（アカウント）のＩＤが指定されている。このため、後述の積算プロセス５０１は、ユーザ（アカウント）毎に、カウント値の積算を行う。以下の説明において、処理要求を発行したユーザプログラム１３のユーザを、「対象ユーザ」と言う。
【００４０】
ドライバ３１は、アプリケーション２０から処理依頼を受け取ると、サブミッションプロセス３１１が、ＦＰＧＡ４０にコマンドを投入する（矢印３５２）。具体的には、例えば、サブミッションプロセス３１１は、図３に示すように、メモリ部１１４におけるコマンドキュー３９１にコマンドを格納し（矢印３５２Ａ）、当該コマンドの格納を入力回路４０１に通知し（矢印３５２Ｂ）、通知を受けた入力回路４０１が、当該コマンドをコマンドキュー３９１から取得する（矢印３５２Ｃ）。当該コマンドでは、例えば、当該コマンドに対する応答の格納先記憶領域（メモリ部１１４における領域）のアドレスが指定されており、応答が、その指定されたアドレスが示す記憶領域に格納されることになる。
【００４１】
ＦＰＧＡ４０の入力回路４０１は、コマンドを取得した場合、カウンタ４３１Ａ〜４３１Ｅをリセットする（矢印３５３）。その後、入力回路４０１は、当該コマンドを演算器群４０２（演算器４２１Ａ）に投入し（矢印３５４）、演算器４２１Ａ〜４２１Ｅが、当該コマンドの実行のために稼働する。カウンタ４３１Ａ〜４３１Ｅが、演算器４２１Ａ〜４２１Ｅの稼働をカウントする（矢印３５５Ａ〜３５５Ｅ（図３の矢印３５５））。例えば、カウンタ４３１Ａは、演算器４２１Ａの稼働をカウントする（矢印３５５Ａ）。カウンタ４３１Ｂは、演算器４２１Ｂ１〜４２１Ｂ３の稼働をカウントする（矢印３５５Ｂ）。カウンタ４３１Ｂのカウント値は、演算器４２１Ｂ１〜４２１Ｂ３の稼働の合計となる。
【００４２】
当該コマンドの実行が終わると、演算器群４０２（演算器４２１Ｅ）が、当該コマンドの処理結果を出力回路４０４に出力する（矢印３５６）。当該実行結果を受けた出力回路４０４が、各カウンタ４３１からカウント値を取得する（矢印３５７）。出力回路４０４は、処理結果と各カウンタ４３１のカウント値とを含んだ応答を、ドライバ３１に返す（矢印３５８）。具体的には、例えば、出力回路４０４は、図３に示すように、処理（実行）されたコマンドで指定されているアドレスを入力回路４０１から受け（矢印３５８Ａ）、当該アドレスが示す領域（メモリ部１１４における応答キュー３９２の領域）に当該応答を格納し（矢印３５８Ｂ）、応答の格納をドライバ３１に通知し（矢印３５８Ｃ）、ドライバ３１のコンプリーションプロセス３１２は、処理されたコマンドで指定されたアドレスが示す領域（メモリ部１１４における応答キュー３９２の領域）から応答を取得する（矢印３５８Ｄ）。
【００４３】
ドライバ３１のコンプリーションプロセス３１２は、取得した応答中の処理結果をアプリケーション２０に返す（矢印３５９）。アプリケーション２０は、当該処理結果に基づく応答をユーザプログラム１３に返す（矢印３６０）。
【００４４】
また、コンプリーションプロセス３１２は、各カウンタ４３１のカウント値を積算プロセス５０１に渡す（矢印３６１）。
【００４５】
積算プロセス５０１は、対象ユーザ（アカウント）について、各カウンタ４３１の暫定的な積算値（カウント値の積算値）を管理している。積算プロセス５０１は、カウンタ４３１毎に、暫定的な積算値に、今回取得されたカウント値を積算する。
【００４６】
積算プロセス５０１（稼働量取得部の一例）は、課金のタイミングごとに、加速率推定プロセス５０２に、各カウンタ４３１の積算値（カウント値の積算値）を送る（矢印３６２）。課金のタイミングとは、コマンドごと（応答を取得するごと）であってもよいし、所定時間ごと（例えば毎時間、毎日、又は、毎月）であってもよい。課金のタイミングは、ＦＰＧＡ部１１３の利用契約等に基づく任意のタイミングでよい。
【００４７】
加速率推定プロセス５０２（加速率推定部の一例）は、各カウンタ４３１の積算値を基に、加速率を推定し、推定した加速率を利用料決定プロセス５０３へ通知する（矢印３６３）。具体的には、加速率推定プロセス５０２は、重みテーブル５２０を参照し、数１に示すように、カウンタ４３１Ａ〜４３１Ｅの積算値を１次結合し、コマンド実行時間で割ることで、平均の加速率を推定する。ＦＰＧＡ４０ではパイプライン構成や並列構成により、プロセッサ部１１５上で逐次処理されるソフトウェアよりも、単位時間当たりの稼働（演算回数）が多くなる。そのため、稼働（演算回数）をカウントし、コマンド実行時間で割ることで、平均の加速率を推定することができる。
【数１】
2019082819.tif 000003
【００４８】
なお、ｔは、コマンド実行時間である。この「コマンド実行時間」は、具体的には、前回の課金のタイミングから今回の課金のタイミングまでに対象ユーザについて処理されたコマンドの実行時間の累積値である。コマンド後の実行時間は、ＯＳ３０のタイマ（図示せず）により計測されてもよいし（例えばコマンド発行から応答取得までの時間）、ＦＰＧＡ４０のタイマ（図示せず）により計測されてもよい（例えばコマンド取得から応答出力までの時間）。
【００４９】
ｃｉは、積算値（カウント値の積算値）である。ｗｉは、重み係数である。加速率推定プロセス５０２は、重みテーブル５２０（図４）を参照し、カウンタ４３１毎の重み係数ｗｉを取得する。
【００５０】
ｒは、推定加速率である。
【００５１】
そして、利用料決定プロセス５０３（利用料決定部の一例）は、推定加速率ｒを基に、ＦＰＧＡ４０の利用料を決定し、決定した利用料を課金システム６０に通知する（矢印３６４）。
【００５２】
具体的には、例えば、利用料決定プロセス５０３は、単価テーブル５３０を参照し、数２に示すように、推定加速率に応じた単価ｋを求める。
【数２】
2019082819.tif 000004
【００５３】
その後、利用料決定プロセス５０３は、数３に示すように、ＦＰＧＡ４０の利用料ａとして、求めた単価ｋとコマンド実行時間ｔの積により求める。
【数３】
2019082819.tif 000005
【００５４】
求められた利用料（決定された利用料）は、上述したように、課金システム６０に送らる。課金システム６０は、通知された利用料（又は当該利用料に対して何らかの金額を足した又は減じた金額）をユーザに対して課金する。
【００５５】
以上、本実施例によれば、入力されたコマンドの処理のための稼働量を計測する回路を構築するためのＩＰコア８２が初期のＦＰＧＡにロードされることで、当該回路を有するＦＰＧＡ４０が構築される。すなわち、ＦＰＧＡ４０のコマンドの処理のための稼働量を計測する技術的手段が構築される。ＦＰＧＡ４０中の当該回路が、ＦＰＧＡ４０に入力されたコマンドの処理の稼働量を計測し当該稼働量の計測値であるカウント値が関連付けられた応答を出力する。加速率推定プロセス５０２が、当該カウント値の積算値を基に、ＦＰＧＡ４０の加速率（つまり高速化の度合）を推定し、利用料決定プロセス５０３が、推定加速率ｒを基に利用料を決定する。このように、ＦＰＧＡ４０の高速化の度合を推定することが技術的手段により実現され、これにより、ＦＰＧＡ４０の利用料として、ＦＰＧＡ４０の高速化の度合に応じた料金を算出することができる。結果として、ユーザにとって、費用対効果の維持が期待できる。例えば、高速化の度合が相対的に高い場合には高い利用料とし、高速化の度合が相対的に低い場合には（例えばあまり高速化できなかった場合には）低い利用料を提供することができる。
【００５６】
なお、ジョブ（上述の例では、ユーザプログラム１３からの処理要求に従う処理）を二重に実行すること（プロセッサ部１１５だけとプロセッサ部１１５とＦＰＧＡ４０との併用との両方が実行すること）で、ＦＰＧＡ４０を利用することの高速化の度合（プロセッサ部１１５だけの実行に比しての高速化の度合）を算出することはできる。しかし、ジョブの二重実行は、少なくとも本願環境（実際のサービス運用中）では望ましいとは言えない。
【００５７】
また、開発環境等での実験結果を基に、ＦＰＧＡ４０に入力されるコマンドやデータ等の属性から、高速化の度合を推定することが考えられる。しかし、そのためには、入力されるコマンドやデータの解析が必要となり、高負荷化が懸念される。また、常に実験結果通りの結果が得られるとは限らない。
【００５８】
そのため、本実施例のように、入力されたコマンドの処理のための稼働量を計測する回路（技術的手段）をＦＰＧＡに構築し、課金のタイミングまでの稼働量に基づく加速率に応じた利用料を決定することは、有用である。
【００５９】
また、本実施例では、重みテーブル５２０（図４）において、演算負荷が相対的に低い（例えば、演算が相対的に簡単である）演算器種類に対応したカウンタの重み係数は、演算負荷が相対的に高い（例えば、演算が相対的に複雑である）演算器種類に対応したカウンタの重み係数より低くてよい。なぜなら、演算負荷が相対的に低い演算を高速に実行することは、演算負荷が相対的に高い演算を高速に実行することよりも、ユーザにとって価値は低く、故に、相対的に低額な利用料が算出されることが望ましいと考えられるからである。
【００６０】
また、本実施例では、単価テーブル５３０（図５）において、相対的に低い加速率範囲５１に対応する単価５２（例えばｋ１）は、相対的に高い加速率範囲５１に対応する単価５２（例えばｋ２）よりも低くてよい。なぜなら、単位時間当たりの高速化の度合が相対的に低く、結果として、コマンド実行時間が相対的に長くなってしまう可能性があるためである。
【００６１】
また、本実施例では、稼働量の一例として、演算器４２１の稼働量が採用されているが、少なくとも演算器４２１の稼働量が採用されることが効果的であると考えられる。なぜなら、ＦＰＧＡ４０の高速化の度合は、プロセッサ部１１５との比較であるからである。なお、演算器４２１の稼働量に加えて、ＦＰＧＡ４０における図示しないメモリの消費記憶容量が採用されてもよい。
【実施例２】
【００６２】
本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。
【００６３】
図６は、本発明の実施例２に係るＦＰＧＡの一部を示す。
【００６４】
実施例２に係るＦＰＧＡ４０´は、カウンタ群４０３からの複数のカウント値の一次結合計算を行う一次結合回路６０１１を有する。一次結合回路６０１１の計算は、数１の中のシグマ計算の部分をハードウェア化したものである。出力回路４０４は、一次結合結果を関連付けた応答を出力する。これにより、積算プロセス５０１及び加速率推定プロセス５０２の処理が軽くなる。また、ＦＰＧＡ４０´の出力回路４０４がドライバ３１のコンプリーションプロセス３１２へ通知するデータの量が減り、性能の向上が期待できる。
【００６５】
なお、本実施例では、ドライバ３１の積算プロセス５０１は、一次結合後の単一の値の積算処理となる。加速率推定プロセス５０２は、一次結合値の積算値を実行時間で割り、加速率を推定する。
【００６６】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【００６７】
例えば、説明を簡単にするために、ＦＰＧＡ部１１３は１つのＦＰＧＡ４０であるが、ＦＰＧＡ部１１３は、複数のＦＰＧＡ４０であってもよい。同一ノード１０１内のＦＰＧＡ４０間で連携があってもよいし、２以上のノード１０１における２以上のＦＰＧＡ４０間で連携があってもよい。
【００６８】
また、例えば、積算プロセス５０１は、ドライバ３１の外にあってもよい。また、加速率推定プロセス５０２、利用料決定プロセス５０３及び課金システム６０の少なくとも１つが、ドライバ３１内にあってもよい。
【００６９】
また、例えば、重みテーブル５２０と単価テーブル５３０とＩＰコア８２とのパッケージがノード１０１にインストールされ、テーブル５２０及び５３０がメモリ部１１４に格納され、ＩＰコア８２が例えばドライバ３１によりＦＰＧＡにロードされてよい。
【００７０】
また、例えば、コマンド毎に、カウント値に基づき加速率を推定することと、推定された加速率を基に利用料を決定することと、当該利用料をこれまでの利用料積算値に積算さすることとが行われ、課金のタイミングで、利用料の積算値が課金システム６０に送られてもよい。
【００７１】
また、例えば、コマンド毎に、カウント値に基づき加速率を推定することと、当該加速率を基にこれまでの推定加速率（例えば平均値）を更新することとが行われてよい。課金のタイミングで、推定加速率を基に利用料を決定することと、決定された利用料が課金システム６０に送られることとが行われてもよい。
【符号の説明】
【００７２】
３１…ドライバ、４０…ＦＰＧＡ、４０２…演算器群、４０３…カウンタ群、５０１…積算プロセス、５０２…加速率推定プロセス、５０３…利用料決定プロセス
【図１】
2019082819.tif 000006
【図２】
2019082819.tif 000007
【図３】
2019082819.tif 000008
【図４】
2019082819.tif 000009
【図５】
2019082819.tif 000010
【図６】
2019082819.tif 000011