(57)【要約】【課題】本発明の目的は、装置にアプリケーション関数をオフロードするためのシステム及び方法を提供することにある。【解決手段】システムは、ホスト装置と、エンベデッドプロセッサを含むストレージ装置と、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含むブリッジカーネル装置と、を備えるシステムを有し、ブリッジカーネル装置は、ホスト装置から複数の引数を受信し、データ処理のために、エンベデッドプロセッサに複数の引数を伝送するように構成される。【選択図】  図１Ａ
2020102218.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置と、
エンベデッドプロセッサを含むストレージ装置と、
ブリッジカーネルのハードウェア及び前記ブリッジカーネルのファームウェアを含むブリッジカーネル装置を含むシステムと、を備え、
前記ブリッジカーネル装置は、前記ホスト装置から複数の引数を受信し、データ処理のために、前記エンベデッドプロセッサに前記複数の引数を伝送するように構成されることを特徴とするシステム。
【請求項２】
前記ブリッジカーネル装置の実装は、前記ホスト装置に明白（ｔｒａｎｓｐａｒｅｎｔ）であり、
前記ブリッジカーネル装置は、前記ホスト装置と前記ブリッジカーネル装置との間の伝送（トランスポート）メカニズムに無関係であり、
前記トランスポートメカニズムは、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）又はイーサネット（登録商標）連結のいずれか１つであることを特徴とする請求項１に記載のシステム。
【請求項３】
前記ストレージ装置は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ）であり、
前記エンベデッドプロセッサは、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）プロセッサ、ＳＳＤコントローラ又は離散コプロセッサであり、
前記エンベデッドプロセッサは、前記エンベデッドプロセッサ上で実行されるように構成される、オフロードされたアプリケーション関数を含み、前記ブリッジカーネルのファームウェアをさらに含み、
前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置のホストレジスタインターフェースから受信された前記複数の引数をフェッチすることを特徴とする請求項１に記載のシステム。
【請求項４】
前記ストレージ装置は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）レジスタ及びＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を含み、
前記ＤＲＡＭは、前記ホスト装置から受信された前記複数の引数を格納するために、複数のデータバッファ及びハンドシェイク領域を含み、
前記ＦＩＦＯレジスタ及び前記ＤＲＡＭは、前記ブリッジカーネルのハードウェアと通信できるように連結されることを特徴とする請求項３に記載のシステム。
【請求項５】
前記ＦＩＦＯレジスタは、データ処理のために、前記オフロードされたアプリケーション関数を含む前記エンベデッドプロセッサに前記複数の引数を通過させるように構成されることを特徴とする請求項４に記載のシステム。
【請求項６】
前記ブリッジカーネルのハードウェアは、前記ホスト装置から受信された前記複数の引数を前記ＤＲＡＭの前記ハンドシェイク領域に一時的に格納するように構成されることを特徴とする請求項４に記載のシステム。
【請求項７】
前記ブリッジカーネル装置は、前記ホスト装置のカスタマーアプリケーションモジュール上で実行されるホストアプリケーションに対するプロキシとして動作するように構成され、
前記ホストアプリケーションは、前記オフロードされたアプリケーション関数がどこで又はどのように実行されるかとは無関係であることを特徴とする請求項４に記載のシステム。
【請求項８】
前記ホスト装置は、カスタマーアプリケーションモジュール及びＯｐｅｎＣＬ（Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ）モジュールを含み、
前記ホスト装置は、前記ストレージ装置を利用して、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｎｅｔ  ｅｘｐｒｅｓｓ）又はイーサネット（登録商標）連結を設定するように構成されることを特徴とする請求項４に記載のシステム。
【請求項９】
前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネルを含み、
前記ブリッジカーネルのファームウェアは、前記エンベデッドプロセッサ上で実行されるように構成される複数のソフトウェアカーネルを含み、
前記ホスト装置の前記カスタマーアプリケーションモジュール上で実行されるホストアプリケーションは、前記ＯｐｅｎＣＬモジュールを介して前記複数のソフトウェアカーネル、及び前記複数のハードウェアカーネルの中の少なくとも１つと接続するように構成されることを特徴とする請求項８に記載のシステム。
【請求項１０】
前記ブリッジカーネル装置は、コスト関数に基づいて、データ処理のために、前記複数のハードウェアのカーネルと前記複数のソフトウェアカーネルの中から１つ以上のカーネルを選択するように構成されることを特徴とする請求項９に記載のシステム。
【請求項１１】
前記ブリッジカーネル装置は、前記複数の引数と前記ホスト装置から受信されたストレージ又はネットワークのパラメータとを用いて、前記コスト関数に基づいて、データ処理のために、前記１つ以上のカーネルを選択するように構成され、前記ホスト装置から受信された前記ストレージ又は前記ネットワークのパラメータは、ＳＱＩＤ（Ｓｕｂｍｉｓｓｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ＣＱＩＤ（Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ストリームＩＤ、ホストＩＤ、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の範囲、ＮＳＩＤ（Ｎｅｔｗｏｒｋ  Ｓｅｒｖｉｃｅ  ＩＤ）、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ＩＤ、  ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）フィールド、アプリケーション識別子、又は前記ホストに関連付けられた日付及び時刻の中の少なくとも１つを含むことを特徴とする請求項１０に記載のシステム。
【請求項１２】
前記ブリッジカーネル装置は、前記ＦＩＦＯレジスタを利用して、データ処理のために前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から１つ以上のカーネルを選択するように構成されることを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記ブリッジカーネルのファームウェアは、前記ＤＲＡＭの前記ハンドシェイク領域内の前記複数の引数をフェッチするように構成され、前記ホスト装置から受信された前記複数の引数を有する前記オフロードされたアプリケーション関数を呼び出すように構成されることを特徴とする請求項１２に記載のシステム。
【請求項１４】
前記オフロードされたアプリケーション関数は、データ処理のため前記複数の引数を使用するように構成されることを特徴とする請求項１３に記載のシステム。
【請求項１５】
ストレージ装置内のブリッジカーネル装置により、前記ストレージ装置に連結されたホスト装置からトリガーを受信する段階と、
前記ブリッジカーネル装置により、前記ホスト装置から受信された複数の引数をフェッチする段階と、
前記ブリッジカーネル装置により、前記ストレージ装置のＤＲＡＭ内に前記複数の引数を格納する段階と、
前記ブリッジカーネル装置により、前記ＤＲＡＭ内に第１の準備フラグ（ｒｅａｄｙ  ｆｌａｇ）を設定する段階と、
前記ブリッジカーネル装置により、前記複数の引数に基づいて前記ストレージ装置のエンベデッドプロセッサ内の前記ブリッジカーネル装置のファームウェア内の、オフロードされたアプリケーション関数の処理が完了したかを決定する前記ブリッジカーネル装置に基づいて、前記ＤＲＡＭ内の完了フラグ（ｄｏｎｅ  ｆｌａｇ）をポーリングする段階と、
前記ブリッジカーネル装置により、ホストレジスタインターフェース内に第２の準備フラグが設定される段階と、を備え、
前記ブリッジカーネル装置は、前記ホストレジスタインターフェースから前記複数の引数をフェッチするように構成され、
前記複数の引数は、前記ＤＲＡＭのハンドシェイク領域内に格納され、
前記第１の準備フラグは、前記ＤＲＡＭの前記ハンドシェイク領域内に設定され、
前記完了フラグは、前記ＤＲＡＭの前記ハンドシェイク領域内にポーリングされることを特徴とする方法。
【請求項１６】
前記ブリッジカーネル装置により、前記ＤＲＡＭの前記ハンドシェイク領域内の前記完了フラグを検出することに基づいて、前記ＤＲＡＭの前記ハンドシェイク領域からエラー又は状態を読み取る段階と、
前記ブリッジカーネル装置により、前記ホストレジスタインターフェースで前記エラー又は前記状態をアップデートする段階と、をさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記ブリッジカーネル装置の前記ファームウェアにより、前記ＤＲＡＭ内に前記第１の準備フラグをポーリングする段階と、
前記ブリッジカーネル装置の前記ファームウェアにより、前記ＤＲＡＭの前記ハンドシェイク領域内に前記複数の引数をフェッチする段階と、
前記ブリッジカーネル装置の前記ファームウェアにより、データ処理のために前記複数の引数を有する前記ストレージ装置の前記エンベデッドプロセッサ内の前記オフロードされたアプリケーション関数を呼び出す段階と、
前記オフロードされたアプリケーション関数により、前記データ処理の完了に基づいて前記ブリッジカーネル装置の前記ファームウェアに前記ブリッジカーネル装置の前記ファームウェアによって呼び出された前記オフロードされたアプリケーション関数を返す段階と、
前記ブリッジカーネル装置の前記ファームウェアにより、前記ＤＲＡＭの前記ハンドシェイク領域内に完了フラグを設定する段階と、をさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１８】
エンベデッドプロセッサを含むストレージ装置と、
ホスト装置から複数の引数を受信し、データ処理のために前記複数の引数を前記エンベデッドプロセッサに伝送するブリッジカーネル装置と、を備えることを特徴とするシステム。
【請求項１９】
前記ブリッジカーネル装置は、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含み、
前記ストレージ装置は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）であり、
前記エンベデッドプロセッサは、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）プロセッサ、ＳＳＤコントローラ又は離散コプロセッサであり、
前記エンベデッドプロセッサは、オフロードされたアプリケーション関数及び前記ブリッジカーネルのファームウェアを含み、
前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記エンベデッドプロセッサ上で実行されるように構成される前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置から受信された前記複数の引数をホストレジスタインターフェースからフェッチすることを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記ストレージ装置は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）レジスタ及びＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｅｓｓ  Ｍｅｍｏｒｙ）を含み、
前記ＤＲＡＭは、複数のデータバッファ及びハンドシェイク領域を含み、
前記ＦＩＦＯレジスタ及び前記ＤＲＡＭは、前記ブリッジカーネルのハードウェアと通信できるように連結され、
前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネル及び複数のソフトウェアカーネルを含み、
前記複数のソフトウェアカーネルは、前記エンベデッドプロセッサ上で実行されるように構成され、
前記ブリッジカーネル装置は、前記複数の引数と前記ホスト装置から受信されたストレージ又はネットワークのパラメータを利用して、コスト関数に基づいて、データ処理のために前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から１つ以上のカーネルを選択するように構成され、
前記ホスト装置から受信された前記ストレージ又は前記ネットワークのパラメータは、ＳＱＩＤ（Ｓｕｂｍｉｓｓｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ＣＱＩＤ（Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ストリームＩＤ、ホストＩＤ、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の範囲、ＮＳＩＤ（Ｎｅｔｗｏｒｋ  Ｓｅｒｖｉｃｅ  ＩＤ）、ＭＡＣ（  Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ＩＤ、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）フィールド、アプリケーション識別子、又は前記ホストに関連付けられた日付及び時刻の中の１つ以上を含み、
前記ブリッジカーネル装置は、前記ＦＩＦＯレジスタを使用して、データ処理のために前記複数のハードウェアカーネル及び前記複数のソフトウェアカーネルの中から、前記１つ以上のカーネルを選択するように構成されることを特徴とする請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オフロードするためのシステム及び方法に係り、より詳しくは、装置にアプリケーション関数を分担するシステム及び方法に関する。
【背景技術】
【０００２】
最新の情報技術（ＩＴ）インフラストラクチャでは、多様な装置とプロセスによって、比較的多量のデータが生成され得る。このようなデータ生成器のいくつかの例は、スマート装置（例えば、アイフォーン（ｉＰｈｏｎｅ（登録商標））、アイパッド（登録商標）（ｉＰａｄ（登録商標））など）、自律走行車両、ソーシャルネットワーク、及びモノのインターネット（ＩＯＴ）装置を含む。収集されたデータを分析・使用して、高いアプリケーションの効率性と生産性を達成するために、人工知能（Ａｒｔｉｆｉｃｉａｌ  Ｉｎｔｅｌｌｉｇｅｎｃｅ：ＡＩ）と機械学習（Ｍａｃｈｉｎｅ  Ｌｅａｒｎｉｎｇ：ＭＬ）のアルゴリズムが開発されている。最近のＩＴインフラストラクチャの発展に照らしてデータを処理・分析することが好ましい。
【０００３】
前記情報は、単に技術の背景に対する理解を増安ためだけのものであり、従来技術の存在又は関連性を認めるものと解釈されてはならない。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第８８４８７４１号明細書
【特許文献２】米国特許出願公開第２００７／０２４５４０９号明細書
【特許文献３】米国特許出願公開第２００８／０１４０９３２号明細書
【特許文献４】米国特許出願公開第２０１４／０１４９６９２号明細書
【特許文献５】米国特許出願公開第２０１４／０１９８６５２号明細書
【特許文献６】米国特許出願公開第２０１６／０２９３２７４号明細書
【特許文献７】米国特許出願公開第２０１９／０１０７９５６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、上述した技術的課題を解決しようとするものであって、本発明の目的とするところは、装置にアプリケーション関数をオフロードするためのシステム及び方法を提供することにある。
【課題を解決するための手段】
【０００６】
本開示の実施形態の一面は、装置にアプリケーション関数をオフロードするためのシステム及び方法に関連付けられる。本開示のいくつかの実施形態によると、システムは、ホスト装置と、エンベデッドプロセッサを含むストレージ装置と、ブリッジカーネルのハードウェア及び前記ブリッジカーネルのファームウェアを含むブリッジカーネル装置と、を備えるシステムを有し、前記ブリッジカーネル装置は、前記ホスト装置から複数の引数を受信し、データ処理のために前記エンベデッドプロセッサに前記複数の引数を伝送するように構成される。
【０００７】
いくつかの実施形態において、前記ブリッジカーネル装置の実装は、前記ホスト装置に明白（ｔｒａｎｓｐａｒｅｎｔ）であり、前記ブリッジカーネル装置は、前記ホスト装置と前記ブリッジカーネル装置と間の伝送（ｔｒａｎｓｐｏｒｔ）メカニズムに無関係であり、伝送メカニズムは、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）又はイーサネット（登録商標）連結のいずれか一つである。いくつかの実施形態では、前記ストレージ装置は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｅｖｉｃｅ）であり、前記エンベデッドプロセッサは、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）プロセッサ、ＳＳＤコントローラ又は離散コプロセッサであり、前記エンベデッドプロセッサは、前記エンベデッドプロセッサ上で実行されるように構成されるオフロードされたアプリケーション関数を含み、前記ブリッジカーネルのファームウェアをさらに含み、前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を、前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置のホストレジスタインターフェースから受信された前記複数の引数をフェッチする。
【０００８】
いくつかの実施形態で、前記ストレージ装置は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）レジスタ及びＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を含み、前記ＤＲＡＭは、前記ホスト装置から受信された前記複数の引数を格納するために、複数のデータバッファ及びハンドシェイク領域を含み、前記ＦＩＦＯレジスタ及び前記ＤＲＡＭは、前記ブリッジカーネルのハードウェアと通信できるように連結される。いくつかの実施形態では、前記ＦＩＦＯレジスタは、データ処理のために前記オフロードされたアプリケーション関数を含む前記エンベデッドプロセッサに前記複数の引数を通過させるように構成される。いくつかの実施形態では、前記ブリッジカーネル装置は、前記ホスト装置のカスタマーアプリケーションモジュール上で実行されるホストアプリケーションに対するプロキシとして動作するように構成され、前記ホストアプリケーションは、前記オフロードされたアプリケーション関数がどこで、どのように実行されるかとは無関係である。
【０００９】
いくつかの実施形態では、前記ホスト装置は、カスタマーアプリケーションモジュール及びＯｐｅｎＣＬ（Ｏｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ）モジュールを含み、前記ホスト装置は、前記ストレージ装置を利用して、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｎｅｔ  ｅｘｐｒｅｓｓ）又はイーサネット（登録商標）連結を設定するように構成される。いくつかの実施形態では、前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネルを含み、前記ブリッジカーネルのファームウェアは、前記エンベデッドプロセッサ上で実行されるように構成される複数のソフトウェアカーネルを含み、前記ホスト装置の前記カスタマーアプリケーションモジュール上で実行されるホストアプリケーションは、前記ＯｐｅｎＣＬモジュールを介して、前記複数のソフトウェアカーネルと前記複数のハードウェアカーネルのうち少なくとも一つと連結するように構成される。いくつかの実施形態では、前記ブリッジカーネル装置は、コスト関数に基づいて、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から１つ以上のカーネルを選択するように構成される。
【００１０】
いくつかの実施形態で、前記ブリッジカーネル装置は、前記複数の引数と、前記ホスト装置から受信されたストレージ又はネットワーキングのパラメータを用いて、前記コスト関数に基づいて、データ処理のために前記１つ以上のカーネルを選択するように構成され、前記ホスト装置から受信された前記ストレージ又は前記ネットワーキングのパラメータは、ＳＱＩＤ（Ｓｕｂｍｉｓｓｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ＣＱＩＤ（Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ストリームＩＤ、ホストＩＤ、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）範囲、ＮＳＩＤ（Ｎｅｔｗｏｒｋ  Ｓｅｒｖｉｃｅ  ＩＤ）、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ＩＤ、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）フィールド、アプリケーション識別子、又はホストに関連付けられた日付及び時刻の中の少なくとも１つを含む。いくつかの実施形態では、前記ブリッジカーネル装置は、前記ＦＩＦＯレジスタを利用して、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から１つ以上のカーネルを選択するように構成される。いくつかの実施形態では、前記ブリッジカーネルのファームウェアは、前記ＤＲＡＭの前記ハンドシェイク領域内の前記複数の引数をフェッチするように構成され、前記ホスト装置から受信された前記複数の引数を有する前記オフロードされたアプリケーション関数を呼び出すように構成される。いくつかの実施形態では、前記オフロードされたアプリケーション関数は、データ処理のため、前記複数の引数を使用するように構成される。
【００１１】
ここで開示されるいくつかの実施形態によると、方法は、ストレージ装置内のブリッジカーネル装置により、前記ストレージ装置に連結されたホスト装置からトリガーを受信する段階と、前記ブリッジカーネル装置により、前記ホスト装置から受信された複数の引数をフェッチする段階と、前記ブリッジカーネル装置により、前記ストレージ装置のＤＲＡＭ内に前記複数の引数を格納する段階と、前記ブリッジカーネル装置により、前記ＤＲＡＭ内の第１の準備フラグを設定する段階と、前記ブリッジカーネル装置により、前記複数の引数に基づいて前記ストレージ装置のエンベデッドプロセッサ内の前記ブリッジカーネル装置のファームウェア内のオフロードされた関数の処理が完了されたかを決定する前記ブリッジカーネル装置に基づいて、前記ＤＲＡＭ内の完了フラグをポーリングする段階と、前記ブリッジカーネル装置により、ホストレジスタインターフェース内に第２の準備フラグが設定される段階と、を備え、前記ブリッジカーネル装置は、前記ホストレジスタインタフェースから前記複数の引数をフェッチするように構成され、前記複数の引数は、前記ＤＲＡＭのハンドシェイク領域内に格納され、前記第１の準備フラグは前記ＤＲＡＭの前記ハンドシェイク領域内に設定され、前記完了フラグは前記ＤＲＡＭの前記ハンドシェイク領域内にポーリングされる。
【００１２】
いくつかの実施形態で、方法は、前記ブリッジカーネル装置により、前記ＤＲＡＭの前記ハンドシェイク領域内の前記完了フラグを検出することに基づいて、前記ＤＲＡＭの前記ハンドシェイク領域からエラー又は状態を読み取る段階と、前記ブリッジカーネル装置により、前記ホストレジスタインターフェースへの前記エラー又は前記状態をアップデートする段階と、をさらに備える。いくつかの実施形態では、方法は、前記ブリッジカーネル装置の前記ファームウェアにより、前記ＤＲＡＭ内の前記第１の準備フラグをポーリングする段階と、前記ブリッジカーネル装置の前記ファームウェアにより、前記ＤＲＡＭの前記ハンドシェイク領域内に前記複数の引数をフェッチする段階と、前記ブリッジカーネル装置の前記ファームウェアにより、データ処理のために前記複数の引数を有する前記ストレージ装置の前記エンベデッドプロセッサ内の前記オフロードされたアプリケーション関数を呼び出す段階と、前記オフロードされたアプリケーション関数により、前記データ処理の完了に基づいて前記ブリッジカーネル装置の前記ファームウェアに、前記ブリッジカーネル装置の前記ファームウェアによって呼び出された前記オフロードされたアプリケーション関数を返す段階と、前記ブリッジカーネル装置の前記ファームウェアにより、前記ＤＲＡＭの前記ハンドシェイク領域内に完了フラグを設定する段階と、を備える方法を有する。
【００１３】
本開示のいくつかの実施形態によると、システムは、エンベデッドプロセッサを含むストレージ装置と、ホスト装置から複数の引数を受信してデータ処理のために前記複数の引数を前記エンベデッドプロセッサに伝送するブリッジカーネル装置と、を備える。いくつかの実施形態で、前記ブリッジカーネル装置は、ブリッジカーネルのハードウェア及びブリッジカーネルのファームウェアを含み、前記ストレージ装置は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）であり、前記エンベデッドプロセッサはＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）プロセッサ、ＳＳＤコントローラ又はコプロセッサであり、前記エンベデッドプロセッサはオフロードされたアプリケーション関数及び前記ブリッジカーネルのファームウェアを含み、前記ブリッジカーネル装置は、前記ホスト装置から受信された前記複数の引数を前記エンベデッドプロセッサ上で実行されるように構成される前記オフロードされたアプリケーション関数に伝送し、前記ホスト装置から受信された前記複数の引数をホストレジスタインターフェースからフェッチする。
【００１４】
いくつかの実施形態で、前記ストレージ装置は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）レジスタ及びＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｅｓｓ  Ｍｅｍｏｒｙ）を含み、前記ＤＲＡＭは複数のデータバッファ及びハンドシェイク領域を含み、前記ＦＩＦＯレジスタ及び前記ＤＲＡＭは前記ブリッジカーネルのハードウェアと通信できるように連結され、前記ブリッジカーネルのハードウェアは、複数のハードウェアカーネル及び複数のソフトウェアカーネルを含み、前記複数のソフトウェアカーネルは、前記エンベデッドプロセッサ上で実行されるように構成され、前記ブリッジカーネル装置は、前記複数の引数及び前記ホスト装置から受信されたストレージ又はネットワーキングのパラメータを利用して、コスト関数に基づいて、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から１つ以上のカーネルを選択するように構成され、前記ホスト装置から受信された前記ストレージ又は前記ネットワーキングのパラメータは、ＳＱＩＤ（Ｓｕｂｍｉｓｓｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ＣＱＩＤ（Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ストリームＩＤ、ホストＩＤ、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の範囲、ＮＳＩＤ（Ｎｅｔｗｏｒｋ  Ｓｅｒｖｉｃｅ  ＩＤ）、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ＩＤ、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）フィールド、アプリケーション識別子、又は前記ホストに関連付けられた日付と時刻の中の１つ以上を含み、前記ブリッジカーネル装置は、前記ＦＩＦＯレジスタを使用して、データ処理のために、前記複数のハードウェアカーネルと前記複数のソフトウェアカーネルの中から前記１つ以上のカーネルを選択するように構成される。
【発明の効果】
【００１５】
本発明は、ソフトウェアベースのオフロードされた関数を用いて、ホストでその機能を遂行するソフトウェアコードを再利用することができる。また、本発明は、ソフトウェア又はファームウェアとしてオフロードされた関数を実行して、ホストソフトウェアスタックとオフロードされるカーネルとの間のインターフェースをソフトウェアカーネル及び他の形態のカーネルの実装と同じように維持することができる。したがって、初期の迅速なオフロードがソフトウェアカーネルの形態で遂行され、後にオフロードされた関数は、全体のホストソフトウェアスタック、及び／又はシステムアーキテクチャを大幅に変更したり、中断したりせずに、ハードウェアで実装され得る。速いオフロード及び実行を通じて、より高い性能のカーネルが開発されているうち、他のシステムの活動（例えば、システム統合、検証、特性化など）が進行され得る。
【００１６】
すなわち、本発明は、効率的且つコスト効率的なデータ処理のために、アプリケーション関数をエンベデッドプロセッサを含むＳＳＤのようなコンピュータのストレージ装置にオフロードすることができる。
【図面の簡単な説明】
【００１７】
【図１Ａ】ブリッジカーネルを含むシステムの例としてのブロック図を示す。
【図１Ｂ】ブリッジカーネルによってオフロードされた関数の異なるカーネルへのコストベースのルーティングプロセスを示す。
【図２Ａ】オフロードされたカーネルに接続するホストアプリケーションの例としてのフローチャートを示す。
【図２Ｂ】オフロードされたカーネルに接続するホストアプリケーションの例としてのフローチャートを示す。
【図３】ブリッジカーネルによってホストに提示されたレジスタインターフェースの例を示す。
【図４】図１のＤＲＡＭハンドシェイク領域のレイアウトの例を示す。
【図５】ブリッジのカーネルのハードウェアを状態マシンとして使用するフローチャートを示す。
【図６】ブリッジカーネルのファームウェアの動作を示す。
【発明を実施するための形態】
【００１８】
添付した図面と関連して、以下の詳細な説明は、本発明に基づいて提供された装置にアプリケーション関数をオフロード（ｏｆｆ−ｌｏａｄ）するためのシステム及び方法のいくつかの例としての実施形態の説明として意図したものであり、本開示が構成できたり、使用できたりする唯一の形態を示すために意図したものではない。本説明は、図示した実施形態に関連して、本開示の特徴を説明する。しかし、同一又は同等の機能及び構造は、また本開示の範囲内に含まれるように意図した、異なる実施形態により達成され得ることを理解しなければならない。類似の要素符号は、類似の要素又は特徴を示すように意図する。
【００１９】
いくつかのシステムアーキテクチャで、データは、永続的ストアから高性能ネットワークを使用してストア（ストレージ装置）に連結できる比較的高性能のサーバにフェッチされ得る。処理及び分析のために、中央処理装置（ＣＰＵ）に多量のローデータ（ｒａｗ  ｄａｔａ）のようなデータ移動は、エネルギー消費、コンピューティング及び配置されたネットワークリソースの量の観点から多くのコストがかかる。このような大量のローデータの移動は、ネットワーク帯域幅、ＣＰＵサイクル及びＣＰＵメモリのようなリソースの負担を増加させる。処理のためにサーバに大量のローデータを移動することは、サーバ上で実行されるアプリケーションによって経験されるレイテンシを増加させる。
【００２０】
いくつかの状況で、アプリケーションは、処理が完了し、決定が行われる前に、データがサーバにフェッチされるまで待機する必要がある。このような追加のリソース要求により高い資本支出と運用支出のコストが発生する可能性がある。したがって、ストレージ装置（例えば、ＳＳＤ（ｓｏｌｉｄ  ｓｔａｔｅ  ｄｅｖｉｃｅ））内でローデータを処理することは、多くのデータ分析の使用事例（例えば、増加するローデータの量を通じた収益を指向する使用事例）に対するコスト効率的な解決策を示すことができる。なお、データの移動を減らすことで、アプリケーションを実行するシステム応答の待機時間を向上させることができる。
【００２１】
さらに、データの分析作業を利用するシステムは、たびたび比較的多量のデータを読み取ってそれを処理し、フィルタリング及び他のデータ減少動作を通じてこれを減らすことができる。このような作業は、縮小された結果を移動するだけで、装置（例えば、ＳＳＤ）内で、より高い利用可能な帯域幅を活用して、ＳＳＤとＣＰＵ（例えば、ＲＡＤ（Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）の場合、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）インターフェース又はネットワークファブリックインターフェース）との間の制限された帯域幅を格納することにより、このような作業及びその他の類似の作業がＳＳＤベースのサービスとして実装され得る。したがって、ストレージ装置（例えば、ＳＳＤ）にもっと近くに又はその内部でデータを処理する技術は、効率的且つコスト効率的なデータ処理のために好ましい。
【００２２】
本開示のいくつかの実施形態は、アプリケーション関数をコンピュータのストレージ装置（例えば、エンベデッドプロセッサを含むＳＳＤ）にオフロードするための方法及びシステムを含んでおり、これは、いくつかの例では、効率的且つコスト効率なデータ処理の解決策につながることができる。スマートストレージ装置（例えば、エンベデッドプロセッサを含むＳＳＤ）は、ホストＣＰＵプロセッサによって遂行され得るデータ処理機能の少なくとも一部を遂行するためのプラットフォームを提供することができる。スマートＳＳＤ又は類似のストレージ装置内では、このようなデータ処理機能を遂行することは、ストレージネットワークに対するエネルギー消費量、ネットワーク帯域幅、ＣＰＵサイクル、メモリなどに関する利点を提供することができる。
【００２３】
いくつかの例で、オフロードされた関数は、ストレージネットワークの性能を向上させつつ消費電力を低減させるため、エンベデッドプロセッサ（例えば、ＦＰＧＡ、ＳＳＤコントローラ又は離散コプロセッサ）を含むストレージ装置からＲＴＬ（Ｒｅｇｉｓｔｅｒ−Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）ロジック、ＨＬＳ（Ｈｉｇｈ−Ｌｅｖｅｌ  Ｓｙｎｔｈｅｓｉｓ）又はＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）ロジックを使用して実装され得る。しかし、ＲＴＬ又はＨＬＳを使用する高性能のオフロードされた関数の長い開発サイクルは、システム開発の他の活動を遮断するか、相当に遅らす。本開示のいくつかの実施形態では、ソフトウェア（ファームウェアとも呼ばれる）関数として（例えば、ＳＳＤ内の）エンベデッドプロセッサでオフロードされた関数の実行を可能にする。ソフトウェアとしてオフロードされた関数を実行すると、迅速な開発時間が達成され得る。ソフトウェアベースのオフロードされた関数は、ホスト（例えば、ホストＣＰＵ）で、すでにその機能を遂行するソフトウェアコードを再利用することができる。
【００２４】
ストレージ装置又はＳＳＤのエンベデッドプロセッサでソフトウェア又はファームウェアとしてオフロードされた関数を実行することは、ホストソフトウェアスタックとオフロードされるカーネルとの間のインターフェースをソフトウェアカーネル及び他の形態のカーネルの実装と同じように維持することができる。したがって、初期の迅速なオフロードがソフトウェアカーネル形態で遂行され、後にオフロードされた関数は、全体のホストソフトウェアスタック、及び／又はシステムアーキテクチャを大幅に変更したり、中断したりせずに、ハードウェアで実装され得る。速いオフロードと実行を通じて、より高い性能のカーネルが開発されている間に、他のシステムの活動（例えば、システム統合、検証、特性化など）が進行され得る。
【００２５】
上述したように、本発明の一部の実施形態は、効率的且つコスト効率的なデータ処理のために、アプリケーション関数をＦＰＧＡ、ＳＳＤコントローラ又は離散コプロセッサのようなエンベデッドプロセッサを含むＳＳＤのようなコンピュータのストレージ装置にオフロードするための方法及びシステムを有する。いくつかの実施形態は、オフロードされた関数の代わりにホスト（例えば、ホストＣＰＵ）に対してプロキシとして機能できるＦＰＧＡハードウェアベースのブリッジカーネルを含み得る。ブリッジカーネルは、ホストドライバからの引数を受け入れ、それらの引数（例えば、パラメータ値、メモリポインタなど）をエンベデッドプロセッサ（例えば、ＦＰＧＡ、ＳＳＤコントローラ又は離散コプロセッサ）でソフトウェアカーネルとして実行されるオフロードされた関数へ伝送することができる。他の実施形態では、ハードウェアとファームウェアのピース（ｐｉｅｃｅｓ）は、ホスト上で実行されるアプリケーションとソフトウェアカーネルとの間のブリッジとして使われ得る。その次に、これらのソフトウェアカーネルを高性能のためにハードウェアに移動し、後にホストへわかりやすく（ｔｒａｎｓｐａｒｅｎｔ）移動することができる。従って、ブリッジカーネルのホストインターフェースを追加の修正なしで使用でき、これにより、コンピュータのストレージ装置（例えば、スマートＳＳＤ）のユーザーは、例として、既存のアプリケーション関数のコードベースをストレージ装置内のエンベデッドプロセッサ（例えば、  ＦＰＧＡ、ＳＳＤコントローラ又は離散コプロセッサ）にポーティング（ｐｏｒｔｉｎｇ）して、使用事例を迅速に開発することができる。
【００２６】
スマートＳＳＤのための、これらの利用容易性の開発は、ここで開示した技術に対するユーザーのより速い採用を可能にする。ＨＬＳとＲＴＬを使用する高性能のカーネルは、比較的多くの開発時間とリソースを要求できる。本開示の例としての実施形態は、高性能カーネルがバックグラウンドで開発される間、ユーザーが多様な作業（例えば、システム統合、カスタマーデモ、システムの状態及び他の作業）を遂行できるようにする。なお、ブリッジカーネルは、他のカーネルにコストベースのルーティングを遂行することができる。つまり、ブリッジカーネルは、ホストから受信された引数の一部の機能とエンベデッドプロセッサを含むストレージ装置に構成された、多様なストレージ装置又はネットワーキングパラメータをベースに、他のカーネルを呼び出すことができるとの意味である。例として、いくつかの実施形態では、ランタイム時に、ホストから受信された引数に基づいて、ブリッジカーネルは、適切に異なる性能レベルのカーネルを呼び出すことができる。
【００２７】
図１Ａは、ブリッジカーネルを含むシステムの例としてのブロック図を示す。システム１００は、ホスト１０２及びストレージ装置１０４（例えば、ＦＰＧＡプロセッサを含むＮＶＭｅ−ｏＦ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  ｅｘｐｒｅｓｓ  ｏｖｅｒ  Ｆａｂｒｉｃｓ）互換ｅＳＳＤ（Ｅｔｈｅｒｎｅｔ  ＳＳＤ）のようなスマートＳＳＤ、又はアクセラレーション機能があるＮＶＭｅ  ＳＳＤ）を含む。ホスト１０２は、ユーザーアプリケーション１０６モジュール及びＯｐｅｎＣＬ（ｏｐｅｎ  ｃｏｍｐｕｔｉｎｇ  ｌａｎｇｕａｇｅ）１０８モジュールを含む。ＯｐｅｎＣＬ１０８モジュールは、コンピューティング・オフロード・アプリケーション・プログラミング・インターフェースを示すために使用され得る（例えば、これは、ホスト１０２とストレージ装置１０４との間の任意のコンピューティングオフロードインターフェース（例えば、ＳＳＤ）に適用され得る）。ホスト１０２は、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）又はイーサネット（登録商標）の連結を使用してストレージ装置１０４との連結を設定することができる。
【００２８】
ストレージ装置１０４は、ブリッジカーネルを含む。一部の実施形態では、ブリッジのカーネルは、ブリッジカーネルのハードウェア１１０及びブリッジカーネルのファームウェア１１６を含み得る。ストレージ装置１０４は、エンベデッドプロセッサ１１２、ＦＩＦＯ（ｆｉｒｓｔ  ｉｎ  ｆｉｒｓｔ  ｏｕｔ）１１８レジスタ及びＤＲＡＭ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ）をさらに含む。ＤＲＡＭ１２０は、データバッファ１２２及びハンドシェイク領域１２４を含む。エンベデッドプロセッサ１１２は、オフロードされたアプリケーション関数１１４及びブリッジカーネルのファームウェア１１６を含む。
【００２９】
一部の実施形態では、システム１００のホスト１０２は、オペレーティングシステム（ＯＳ）、ファイルシステム（ＦＳ）及びＮＶＭｅ−ｏＦドライバをさらに含み得る。いくつかの実施形態では、ストレージ装置１０４は、イーサネット（登録商標）スイッチ、ベースボード管理コントローラ（ｂａｓｅｂｏａｒｄ  ｍａｎａｇｅｍｅｎｔ  ｃｏｎｔｒｏｌｌｅｒ、以下ではＢＭＣ）及びＰＣＩｅスイッチを含むシャーシ（図示せず）内に有り得る。イーサネット（登録商標）スイッチは、ミッドプレーンを介してストレージ装置１０４（例えば、スマートＳＳＤ）へのイーサネット（登録商標）連結を提供し、ＰＣＩｅスイッチは、ミッドプレーンを介してストレージ装置１０４に管理インターフェースを提供する。ＢＭＣは、システムマネージャーによって与えられた命令に基づいてストレージ装置１０４をプログラムすることができる。ＢＭＣは、イーサネット（登録商標）スイッチ、ＰＣＩｅスイッチ及びストレージ装置１０４を含むシャーシの内部の構成要素を管理することができる。ＢＭＣは、システム管理のためのＰＣＩｅ及び／又はシステム管理バス（ＳＭＢｕｓ）のインターフェースをサポートすることができる。ＢＭＣは、ストレージ装置１０４を構成し、イーサネット（登録商標）スイッチをプログラムすることができる。いくつかの実施形態では、イーサネット（登録商標）スイッチは、ホスト１０２とストレージ装置１０４との間のネットワーク連結を提供する。
【００３０】
図１Ｂは、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）によってオフロードされた関数の異なるカーネルへのコストベースのルーティングプロセスを示す。いくつかの実施形態では、システム１００は、オフロードされた関数（例えば、オフロードされたアプリケーション関数１１４）をスマートＳＳＤ（例えば、ストレージ装置１０４）のようなストレージ装置に比較的迅速にポーティングすることができる。いくつかの実施形態では、ホスト（例えば、ホスト１０２）のＣＰＵ上で実行されるユーザーアプリケーション１０６は、いくつかの機能をスマートＳＳＤ（例えば、ストレージ装置１０４）にオフロードすることから利益を得ることができる。一般的に、ＳＳＤ（例えば、ストレージ装置１０４）に格納された多くのデータを処理する機能は、このようなオフロードから利益を得ることができる。オフロードされた関数（例として、オフロードされたアプリケーション関数１１４）は、「カーネル」（例えば、１２６（１）〜１２６（ｎ）、１２６（ｎ＋１）〜１２６（ｍ））として参照され得る。
【００３１】
図１Ｂにおいて、カーネル（１２６（１）〜１２６（ｎ））は、ソフトウェアカーネルであり、カーネル（１２６（ｎ＋１）〜１２６（ｍ））は、ハードカーネル又はハードウェアカーネルである。カーネル（１２６（１）〜１２６（ｎ））の中でのソフトウェアカーネルは、エンベデッドプロセッサ１１２上で実行され得る。ホストアプリケーション（例えば、ユーザーアプリケーション１０６で実行）は、ホスト１０２上のＯｐｅｎＣＬ（例えば、ＯｐｅｎＣＬ１０８）のような言語により提供されるインターフェースを介して、ストレージ装置１０４側のブリッジカーネルのハードウェア１１０を介してカーネル（１２６（１）〜１２６（ｎ）、１２６（ｎ＋１）〜１２６（ｍ））とインターフェースすることができる。
【００３２】
一部の実施形態で、カーネル（例えば、１２６（１）〜１２６（ｎ）、１２６（ｎ＋１）〜１２６（ｍ））の中で、複数のカーネルは、高性能カーネル（例として、高性能のカーネルは設定された、又は予め決定された閾値を超える性能メトリックを有し得る）になることができ、カーネル（１２６（１）〜１２６（ｎ）、１２６（ｎ＋１）〜１２６（ｍ））の中で、他の複数のカーネルは、低性能のカーネルであり得る（例えば、低性能カーネルは設定された、又は予め決定された閾値未満の性能メトリックを有し得る）。ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）は、データ処理のためにカーネル（１２６（１）〜１２６（ｎ）、１２６（ｎ＋１）〜１２６（ｍ））の中から複数のカーネルの選択を行うことができる。
【００３３】
いくつかの実施形態で、ブリッジカーネルは、コスト関数に基づいて、データ処理のためのカーネルの選択を行うことができる。一部の実施形態では、コスト関数は、ホスト１０２から受信された引数と、ホスト１０２から受信されたストレージ又はネットワーキングのパラメータに基づいて決定され得る。ストレージ又はネットワーキングのパラメータの例は、ＳＱＩＤ（Ｓｕｂｍｉｓｓｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ＣＱＩＤ（Ｃｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）、ストリームＩＤ、ホストＩＤ、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の範囲、ＮＳＩＤ（Ｎｅｔｗｏｒｋ  Ｓｅｒｖｉｃｅ  ＩＤ）、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ＩＤ  、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）フィールド、アプリケーション識別子、ホスト１０２に関連付けられた時間及び／又は日付、これらの組み合せなどを含み得るが、これに限定されない。
【００３４】
例えば、引数はホスト１０２アプリケーション側からブリッジカーネルに伝達され得る（例えば、ホスト１０２アプリケーションは、コスト関数をブリッジカーネルのハードウェア１１０にオフロードすることができる）。ブリッジカーネルは与えられたカーネルを使用してコストを計算することができる。ブリッジカーネルは、コスト関数とホスト１０２から受信された格納又はネットワーキングパラメータの組み合せに基づいて、最適なカーネルを選択することができる。例としては、ストレージ装置１０４は、２つのデータ圧縮カーネルを実現することができ、１つはスループットのために、他の１つは、より良い圧縮率のために設計されたものである。ホスト１０２からの圧縮の与えられたランタイムの呼び出しに対し、ブリッジカーネルは長さの引数をチェックすることができ、長さが、例えば６４ＫＢよりも大きいごとに、より良い圧縮率のカーネルを選択することができ、残りのためには、他のタイプの圧縮率のカーネルを選択することができる。一部の実施形態では、ブリッジカーネルのハードウェア１１０は、ＦＩＦＯレジスタを用いてデータ処理に使用するために、カーネルの（１２６（１）〜１２６（ｎ）、１２６（ｎ＋１）〜１２６（ｍ））の中から最適なカーネルを選択することができる。
【００３５】
図２Ａ、２Ｂは、オフロードされたカーネルに接続するホストアプリケーション（例えば、ユーザーアプリケーション１０６）の例としてのフローチャート２００を示す。Ｓ２０１において、ブリッジカーネル（例えば、ブリッジカーネルのドライバ）は、上位階層（例として、図４に示すように、ホストの上位階層のソフトウェア１３６）からコール（ｃａｌｌ）又は呼び出しを受信することができる。Ｓ２０２において、ブリッジカーネル（例えば、ブリッジカーネルドライバ）は、ホストの引数（例えば、引数−１〜引数−ｎ）をホストのレジスタインターフェース（例として、図３に示すレジスタインターフェース）に格納することができる。Ｓ２０３において、ブリッジカーネル（例えば、ブリッジカーネルのドライバ）は、データ処理のためにバッファ（例えば、データバッファ１２２）を割り当てることができる。Ｓ２０４において、ブリッジカーネル（例えば、ブリッジカーネルのドライバ）は、オフロードされたアプリケーション関数１１４によって必要な他の引数を初期化することができる。Ｓ２０５において、ブリッジカーネル（例えば、ブリッジカーネルのドライバ）は、処理のためにバッファにデータをフェッチすることができる。Ｓ２０６において、ブリッジカーネル（例えば、ブリッジカーネルのドライバ）は、処理カーネルを呼び出すことができる。データ処理が完了すると、Ｓ２０７において、システム１００は、クリーンアップの動作を遂行することができる。Ｓ２０８において、オフロードされたアプリケーション関数１１４は、ブリッジカーネル（例えば、ブリッジカーネルのドライバ）を介して、上位階層のアプリケーションソフトウェアに対する呼び出しを返すことができる。
【００３６】
一部の実施形態で、ブリッジカーネルは、ホスト１０２に一般的なレジスタインターフェースを提供することができる。図３は、ブリッジカーネルによってホスト１０２に提示されたレジスタインターフェース３００の例を示す。レジスタインターフェース３００は、ストレージ装置１０４に位置することができる。システム１００は、オフロードされた関数（例として、オフロードされたアプリケーション関数１１４）に引数を伝達して返された値又は状態を検出するために（例えば、図３に示すように）レジスタインターフェース３００を使用して、カーネルを（例えば、ユーザーアプリケーション１０６で実行中である）ホストアプリケーションに提示することができる。一部の実施形態では、システム１００は、カーネルに対するバッファの割り当てを容易にするために、ＯｐｅｎＣＬ１０８プラットフォームを使用することができる。
【００３７】
図４は、図１のＤＲＡＭ１２０のハンドシェイク領域１２４のレイアウトの例を示す。図４に示すように、いくつかの実施形態では、ブリッジカーネルのハードウェア１１０は、ホスト１０２から受信された引数（例えば、引数−１〜引数−ｎ）をストレージ装置１０４（例えば、スマートＳＳＤ）のＤＲＡＭ１２０内に存在するセット又は予め決定されたメモリの位置に一時的に格納することができる。いくつかの実施形態では、オンチップのＦＩＦＯ１１８の構造は、ＤＲＡＭ１２０の代わりにオフロードされたアプリケーション関数１１４、ファームウェア、及びブリッジカーネルのファームウェア１１６を統合するエンベデッドプロセッサ１１２に引数を伝達するのに使用され得る。
【００３８】
レジスタインターフェース３００の内容、例えば、引数−１〜引数−ｎはＤＲＡＭ１２０のハンドシェイク領域１２４に一時的に格納され得る。一度引数がＤＲＡＭ１２０に格納されると、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４に「準備」フラグ１２８を設定することができる。この時点で、ブリッジカーネルのハードウェア１１０は、ファームウェア（例えば、ブリッジカーネルのファームウェア１１６）で実行される、オフロードされた関数が処理を完了するのを待機することができる。したがって、オフロードされた関数処理の完了を決定するために、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４で「完了」フラグ１３０をポーリングすることができる。
【００３９】
ブリッジカーネルのハードウェア１１０が「完了」フラグ１３０を検出すると、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４から任意のエラー又は他の状態を読み取ることができる。ブリッジカーネルのハードウェア１１０は、（図３に示したように）レジスタインターフェース３００の対応するレジスタへのエラー及び／又は他の状態１３２をアップデートすることができる。ブリッジカーネルのハードウェア１１０は、「完了」レジスタを設定することができ、これは、最終的にオフロードされた関数の呼び出しの完了を表示するために、ホストアプリケーションのソフトウェア１３４によってポーリングされ得る。
【００４０】
図５は、ブリッジカーネルのハードウェアを状態マシンとして使用するフローチャート５００を示す。ブリッジカーネルのハードウェアは、図１のブリッジカーネルのハードウェア１１０であり得る。
【００４１】
Ｓ５０１において、ブリッジカーネルのハードウェア１１０は、アイドル状態に維持される。Ｓ５０１において、ブリッジカーネルハードウェア１１０は、ホスト１０２からトリガーを受信する。Ｓ５０３において、ブリッジカーネルのハードウェア１１０は、ホストレジスタインターフェースからのホスト１０２から受信された引数（例えば、引数−１〜引数−ｎ）をフェッチする（例として、図３に示すレジスタインターフェース）。Ｓ５０５において、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４にホスト１０２から受信された引数（例えば、引数−１〜引数−ｎ）を一時的に格納する。引数がＤＲＡＭ１２０に一時的に格納されると、Ｓ５０７において、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４の「準備」フラグ１２８を設定する。
【００４２】
この時点で、ブリッジカーネルのハードウェア１１０は、ファームウェア（例えば、ブリッジカーネルのファームウェア１１６）でのオフロードされた関数が引数に基づいて、それの処理を完了するのを待機する。このために、Ｓ５０９において、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４で「完了」フラグ１３０をポーリングする。一部の実施形態では、ブリッジカーネルのハードウェア１１０が「完了」フラグ１３０を検出すると、ブリッジカーネルのハードウェア１１０は、ＤＲＡＭ１２０のハンドシェイク領域１２４から任意のエラー及び／又は他の状態を読み取ることができる。ブリッジカーネルのハードウェア１１０は、（図３に示したように）レジスタインターフェース３００の適切なレジスタへのエラー及び／又は他の状態１３２をアップデートする。ブリッジカーネルのハードウェア１１０は、オフロードされた関数の呼び出しの完了を示すためにホストアプリケーションのソフトウェア１３４によって順番にポーリングされる「完了」レジスタを設定する。
【００４３】
Ｓ５１１において、ブリッジカーネルのハードウェア１１０は、ホストレジスタインターフェース（例として、図３の３００）で「準備」フラグ（ｒｅａｄｙ  ｆｌａｇ）１２８を設定する。Ｓ５１１の後に、ブリッジカーネルのハードウェア１１０は、Ｓ５０１に復帰する。
【００４４】
図６は、ブリッジカーネルのファームウェアの動作を示す。ブリッジカーネルファームウェアは、図１のブリッジカーネルのファームウェア１１６であり得る。
【００４５】
Ｓ６０１において、ブリッジカーネルのファームウェア１１６は、アイドル状態に維持される。Ｓ６０３において、ＤＲＡＭ１２０の「準備」フラグ１２８は、エンベデッドプロセッサ１１２上で実行されるブリッジカーネルのファームウェア１１６によってポーリングされる。言い換えると、ブリッジカーネルのファームウェア１１６は、適切な引数を有するオフロードされた関数（例えば、オフロードされたアプリケーション関数１１４）を呼び出すオフロードマネージャーとして動作する。ブリッジカーネルのファームウェア１１６が「準備」フラグ１２８が設定されることを検出すると、Ｓ６０５において、ブリッジカーネルのファームウェア１１６は、ＤＲＡＭ１２０のハンドシェイク領域１２４に一時的に格納された引数（例えば、引数−１〜引数−ｎ）をフェッチする。Ｓ６０７において、ブリッジカーネルのファームウェア１１６は、ホスト１０２の引数とともにオフロードされたアプリケーション関数１１４を呼び出す。オフロードされたアプリケーション関数１１４は、引数（例えば、引数−１〜引数−ｎ）を使用して設計された通りに、データ処理関数を遂行する。オフロードされたアプリケーション関数１１４の例は、６０８に示す。データ処理が完了すると、Ｓ６０９において、オフロードされたアプリケーション関数１１４は、ブリッジカーネルのファームウェア１１６への呼び出しを返す。Ｓ６１１において、ブリッジカーネルのファームウェア１１６は、ＤＲＡＭ１２０のハンドシェイク領域１２４で「完了」フラグ１３０を設定する。「完了」フラグ１３０は、前に説明したように、ブリッジカーネルのハードウェア１１０によってポーリングされて完了を再びホスト１０２に伝送する。Ｓ６１１の後に、ブリッジカーネルのファームウェア１１６は、Ｓ６０１に返される。
【００４６】
一部の実施形態で、ブリッジカーネルは、アプリケーション（例えば、ユーザーアプリケーション１０６で実行中）をホストするためのプロキシとして動作する。例として（例えば、ユーザーアプリケーション１０６で実行中）、ホストアプリケーションは、オフロードされた関数がどこで又はどのように実装されるかとは無関係である。いくつかの実施形態では、カーネルの実装は、ホスト１０２に明白（ｔｒａｎｓｐａｒｅｎｔ）であり得る。いくつかの実施形態では、カーネルは、ソフトウェアカーネルとしてエンベデッドプロセッサ（例えば、エンベデッドプロセッサ１１２）上に実装され得る。しかし、いくつかの実施形態では、カーネルは、ハードウェアゲート（例えば、ブリッジカーネルのハードウェア１１０）に実装され得る。
【００４７】
いくつかの実施形態で、ブリッジカーネルそのものは、オフロードされた関数（例えば、オフロードされたアプリケーション関数１１４）に無関係であり、これは、ユーザーの機密性（例えば、ＩＰアドレスの機密性）を可能にする。したがって、ストレージ装置のユーザーに公開しなくても、ソフトウェアカーネル又はハードウェアカーネルに独自のオフロードされた関数を作成することができる。つまり、ブリッジカーネルのメカニズムの例としての実施形態は、個人（ｐｒｉｖａｔｅ）アクセラレーション機能をストレージ装置にオフロードするために、ユーザーによって使用されるプラットフォームとして動作できる。いくつかの実施形態では、カーネル及び／又はオフロードされた関数のホストインターフェースは変更されない可能性がある（例として、相当にホスト側を変更せず、カーネルを高性能バージョンにアップグレードすることができる）。そのような場合に、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）のＲＴＬは、ホストアプリケーション（例えば、ユーザーアプリケーション１０６）に標準の又は合意されたインターフェースを提供することができる。
【００４８】
一部の実施形態で、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）は、ブリッジカーネルのファームウェア１１６とのハンドシェイクを遂行するために、ＦＰＧＡ  ＤＲＡＭ（例えば、ＤＲＡＭ１２０）メモリを使用することができる。他の実施形態では、ブリッジカーネルのハードウェア１１０はブリッジカーネルのファームウェア１１６とのハンドシェイクを遂行するために、オンチップＦＩＦＯ（例えば、ＦＩＦＯ１１８）を使用することができる。一部の実施形態では、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）のＲＴＬは、エンベデッドプロセッサ１１２上で実行されるオフロードされた関数に引数を伝達するためにＦＰＧＡ  ＤＲＡＭ（例えば、ＤＲＡＭ１２０）を使用することができる。
【００４９】
一部の実施形態で、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）は、基本的なトランスポート（ｔｒａｎｓｐｏｒｔ、伝送）メカニズム（例えば、ＰＣＩｅ、イーサネット（登録商標）など）とは無関係の可能性があり、これは、ホスト１０２とストレージ装置１０４との間の連結を設定するために使用される。一部の実施形態では、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）を含むシステム１００は、ブリッジカーネルを使用しないシステムと比較して、比較的迅速なポーティング又は開発オプションを提供することで、比較的速いユーザーの参加を提供することができ、ユーザーによって既存のコードベースの再利用を増加させることができ、高性能のカーネルを開発している間に、システムは、他の活動を行うことになる。いくつかの実施形態では、ブリッジカーネル（例えば、ブリッジカーネルのハードウェア１１０）を含むシステム１００は、またシステム統合、認証、テスト、デモなどを提供することができる。
【００５０】
いくつかの実施形態で、ブリッジカーネルは、ホストによって伝達された（及び／又は装置によって設定される）引数を使用して呼び出す、オフロードされた関数（例えば、カーネル）を決定することができる。一部の実施形態では、ブリッジカーネルは、ソフトカーネル、ハードカーネル又は多様な性能レベルの１つ以上のカーネルを呼び出すことができる。一部の実施形態では、ブリッジカーネルは、引数に基づいて、特定のカーネルを選択するために、コスト関数を使用することができる。いくつかの実施形態では、カーネルの選択は、アプリケーションのタイプ、アプリケーション識別子、名前空間識別子、ホスト識別子、ＬＢＡアドレスの範囲、ＮＶＭｅセット識別子、ＮＶＭｅ提出キュー識別子、完了キュー識別子、ストリーム識別子、イーサネット（登録商標）ＭＡＣのような構成パラメータ及び識別子、ＴＣＰ／ＩＰアドレス及びその他のトランスポート／ネットワークパラメータ、並びに日付及び時刻のような一般的なパラメータに基づく。
【００５１】
ただし、ここで第１、第２、第３などの用語は、多様なエレメント、構成要素、領域、層及び／又はセクションを説明するために使用するが、これらのエレメント、構成要素、領域、層及び／又はセクションは、これらの用語により限定されないと理解されるであろう。これらの用語は、他のエレメント、構成要素、領域、層又はセクションから１つのエレメント、構成要素、領域、層又はセクションを区別するために使用する。したがって、後述する第１のエレメント、構成要素、領域、層又はセクションは、本発明の思想及び範囲を逸脱することなく、第２のエレメント、構成要素、領域、層又はセクションを指すことができる。
【００５２】
１つのエレメント又は特色と図面で示した他のエレメント又は特色との特徴的な関係を説明するための説明を容易にするために、「すぐ下に」、「より下に」、「下部」、「特定の部分の下に」、「の上に」、「上部」のような空間的かつ相対的な用語がここで使用できる。空間的かつ相対的な用語は、図面で描写した方向に加えて、使用又は動作において、装置の他の方向を含むように意図する。例えば、もし図面の装置が裏返されると、他の構成要素又は特徴の「より下に」、「すぐ下に」又は「特定の部分の下に」で説明した構成要素は、他の構成要素又は特徴の「の上に」配置されるようになる。したがって、「より下に」又は「特定の部分の下に」の例としての用語は、上又は下の方向の両方を含み得る。装置は、別な方法で方向付けられ（例えば、９０度又は他の方向に回転される）、空間的かつ相対的な記述語は、それに応じて解釈されるべきである。なお、エレメント又は層が２つのエレメント又は層の間にあると言及されるときは、それは、エレメント又は層が２つのエレメント又は層の間に有り得るか、又は１つ以上の間のエレメント又は層が、また存在することができる。
【００５３】
本明細書で使用する用語は、単に特定の実施形態を説明するためのものであり、本発明を限定しようとするものではない。本明細書で使用する「大体は」、「約」という用語及びこれと類似の用語は、近似の用語として使用し、程度の用語として使用せずに、本発明の当業者によって識別される、測定された又は計算された値の固有の変動を考慮するためのものである。
【００５４】
本明細書で使用するように、文脈上明らかに別のものを示していると判定されない限り、単数形「１つ」は、複数の形態も含むものと意図する。「構成される」、「構成されている」、「含む（ｃｏｍｐｒｉｓｅ）」、及び「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」という用語は、本明細書で使用するとき、これらの用語は、定められた特徴、整数、段階、動作、エレメント、及び／又は構成要素の存在を明示するが、１つ以上の他の特徴、整数、段階、動作、エレメント、構成要素、及び／又はそれらのグループの追加又は存在を排除しない。本明細書で使用する「及び／又は」という用語は、１つ又はそれ以上のリスト（ｌｉｓｔ）された項目に関連付けられる任意かつすべての組み合せを含む。「少なくとも１つ」のような表現は、エレメント全体のリストを修正し、リストの個々のエレメントを修正しない。なお、本発明の実施形態を記述するときに、「できる」の使用は、「本発明の１つ以上の実施形態」を意味する。本明細書で使用する「使用（ｕｓｅ）」、「使用される（ｕｓｉｎｇ）」、及び「使用された（ｕｓｅｄ）」という用語は、「利用（ｕｔｉｌｉｚｅ）」、「利用される（ｕｔｉｌｉｚｉｎｇ）」、及び「利用された（ｕｔｉｌｉｚｅｄ）」という用語の同義語として各々見なされ得る。また、「例示」という用語は、例又は図案を意味する。
【００５５】
１つのエレメントが、他のエレメントに「連結」されると述べるときには、それが他のエレメントと直接連結されたり、介在するエレメントが存在することができるものと理解されるべきである。一方、１つのエレメントが、他のエレメントと「直接連結」されると述べる場合には、介在するエレメントが存在しないことを示す。ここで使用する、「及び／又は」という用語は１つ以上の関連された、リストされた項目のすべての可能な組み合せを指示したり、含んだりすると理解されるべきである。
【００５６】
ここで引用された任意の数値範囲は、引用の範囲内に含まれる同一の数値精度のすべての部分範囲を含むものと意図する。たとえば、「１．０〜１０．０」の範囲は、記載された最小値１．０と記載された最大値１０．０との間、すなわち、２．４〜７．６のような１０．０以下の最大値と１．０以上の最小値を有する（及び含む）すべての部分範囲を含むように意図する。例えば、本明細書に引用した任意の最大値の限定は、その中に含まれるすべての下位数値の限定を含むものと意図し、本明細書に引用した任意の最小値の限定は、それに含まれるすべてより高い数値の限定を含むものと意図する。
【００５７】
一部の実施形態で、本開示の方法とシステムの異なる実施形態の１つ以上の出力は、本開示の方法及びシステムの異なる実施形態の１つ以上の出力又は１つ以上の出力に関する情報を表示するためのディスプレイ装置に連結されたり、これを有する電子装置に伝送されたりすることができる。
【００５８】
本明細書で記述された本発明の実施形態による電子や電気装置、及び／又は他の任意の関連付けられる装置やエレメントは、任意の適切なハードウェア、ファームウェア（例えば、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）、ソフトウェア、又はソフトウェア、ファームウェア及びハードウェアの組み合せを用いて実装され得る。たとえば、これらの装置の多様なエレメントは、１つの集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＩＣ）チップ又は分離されたＩＣチップに形成され得る。なお、これらの装置の多様なエレメントは、フレキシブルプリント回路フィルム（Ｆｌｅｘｉｂｌｅ  Ｐｒｉｎｔｅｄ  Ｃｉｒｃｕｉｔ  Ｆｉｌｍ）、ＴＣＰ（Ｔａｐｅ  Ｃａｒｒｉｅｒ  Ｐａｃｋａｇｅ）、プリント回路基板（Ｐｒｉｎｔｅｄ  Ｃｉｒｃｕｉｔ  Ｂｏａｒｄ：ＰＣＢ）上に実装されたり、単一の基板上に形成されたりすることができる。なお、これらの装置の多様なエレメントは、コンピュータプログラムの命令を遂行し、本明細書で説明した、多様な機能を遂行するための他のシステムエレメントと相互作用する１つ以上のコンピューティング装置、又は１つ以上のプロセッサで遂行されるプロセス又はスレッド（Ｔｈｒｅａｄ）であり得る。コンピュータプログラムの命令は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような標準的なメモリ装置を利用するコンピューティング装置で実現されるメモリ内に格納される。コンピュータプログラムの命令は、また、例えば、ＣＤ−ＲＯＭ、フラッシュドライブ（Ｆｌａｓｈ  Ｄｒｉｖｅ）、又はそのような他の一時的でないコンピュータ読み取り可能なメディア（Ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  Ｃｏｍｐｕｔｅｒ  Ｒｅａｄａｂｌｅ  Ｍｅｄｉａ）に格納される可能性もある。また、本発明の当業者は、本発明の例としての実施形態の思想と範囲を逸脱することなく、多様なコンピューティング装置の機能は、単一のコンピューティング装置に統合されたり集積されたりし、特定のコンピューティング装置の機能が１つ又はそれ以上の他のコンピューティング装置に分散され得ることを認識しなければならない。
【００５９】
アプリケーション関数を装置にオフロードするためのシステム及び方法の例としての実施形態を、具体的に説明して図示したが、多くの修正及び変形が当業者には明らかであろう。したがって、ここで開示した、このように本開示の原理に基づいて構成された装置に、アプリケーション関数をオフロードするシステム及び方法は、本明細書に具体的に説明したものとは異なるように実装され得ることが理解されるべきである。本発明の概念は、また以下の特許請求の範囲及びその等価物で定義される。
【符号の説明】
【００６０】
１００  システム
１０２  ホスト
１０４  ストレージ装置
１０６  ユーザーアプリケーション
１０８  ＯｐｅｎＣＬ
１１０  ブリッジカーネルのハードウェア
１１２  エンベデッドプロセッサ
１１４  オフロードされたアプリケーション関数
１１６  ブリッジカーネルのファームウェア
１１８  ＦＩＦＯ
１２０  ＤＲＡＭ
１２２  データバッファ
１２４  ハンドシェイク領域
１２６  カーネル
１２８  「準備」フラグ
１３０  「完了」フラグ
１３２  レジスタへのエラー及び／又は他の状態
１３４  ホストアプリケーションのソフトウェア
１３６  ホストの上位階層のソフトウェア
２００、５００  フローチャート
３００  レジスタインターフェース
６０８  アプリケーション関数の例
【図１Ａ】
2020102218.tif 000003
【図１Ｂ】
2020102218.tif 000004
【図２Ａ】
2020102218.tif 000005
【図２Ｂ】
2020102218.tif 000006
【図３】
2020102218.tif 000007
【図４】
2020102218.tif 000008
【図５】
2020102218.tif 000009
【図６】
2020102218.tif 000010