(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023073227
(43)【公開日】2023-05-25
(54)【発明の名称】通信方法及び関連するコンピューティングシステムと記憶媒体
(51)【国際特許分類】
H04L 12/28 20060101AFI20230518BHJP
【FI】
H04L12/28 200Z
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2022181598
(22)【出願日】2022-11-14
(31)【優先権主張番号】202111349680.4
(32)【優先日】2021-11-15
(33)【優先権主張国・地域又は機関】CN
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.BLUETOOTH
2.WCDMA
(71)【出願人】
【識別番号】521254764
【氏名又は名称】北京図森智途科技有限公司
(74)【代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
(74)【代理人】
【識別番号】100107216
【弁理士】
【氏名又は名称】伊與田 幸穂
(72)【発明者】
【氏名】▲キョウ▼ 軼凡
(72)【発明者】
【氏名】▲キン▼ 江明
【テーマコード(参考)】
5K033
【Fターム(参考)】
5K033CB01
5K033CB06
5K033EC01
(57)【要約】 (修正有)
【課題】異なるモジュールの間でデータを効率的に伝送する方法、コンピューティングシステム及び記憶媒体を提供する。
【解決手段】複数のモジュールを含む少なくとも1つのプロセスを実行するコンピューティングシステムに用いられる通信方法であって、少なくとも第1モジュールと第2モジュールを含む複数のモジュールの属性情報を取得することと、データを第1モジュールから第2モジュールに伝送することに応じて、第1モジュールの属性情報と第2モジュールの属性情報を比較することと、前記比較に基づいて、第1モジュールと第2モジュールについて通信チャネルを選択することで、選択した通信チャネルを介して前記データを第1モジュールから第2モジュールに伝送することと、を含む。
【選択図】
図3
【特許請求の範囲】
【請求項1】
複数のモジュールを含む少なくとも1つのプロセスを有するコンピューティングシステムに用いられる通信方法であって、
少なくとも第1モジュールと第2モジュールを含む前記複数のモジュールの属性情報を取得することと、
データを第1モジュールから第2モジュールに伝送することに応じて、第1モジュールの属性情報と第2モジュールの属性情報を比較することと、
前記比較に基づいて、前記第1モジュールと前記第2モジュールについて通信チャネルを選択することで、選択された通信チャネルを介して前記データを前記第1モジュールから前記第2モジュールに伝送することと、を含む、
方法。
【請求項2】
前記複数のモジュールにおける各モジュールの送信トピック集合と受信トピック集合を取得することをさらに含む、
請求項1に記載の方法。
【請求項3】
前記第1モジュールの送信トピック集合と前記第2モジュールの受信トピック集合が同じトピックを含むことに応じて、データを前記第1モジュールから前記第2モジュールに伝送することを決定することをさらに含む、
請求項2に記載の方法。
【請求項4】
少なくとも1つのプロセスはロボットオペレーティングシステムにおけるプロセスである、
請求項1に記載の方法。
【請求項5】
前記コンピューティングシステムは少なくとも1つのコンピューティングデバイスを含み、前記コンピューティングデバイスは前記複数のモジュールを実行する複数のプロセッサを含み、前記プロセッサは中央処理ユニットCPUと画像処理ユニットGPUを含む、
請求項1に記載の方法。
【請求項6】
前記コンピューティングデバイスはメインメモリをさらに含み、前記GPUはGPUメモリを含む、
請求項5に記載の方法。
【請求項7】
前記少なくとも1つのコンピューティングデバイスにおける各コンピューティングデバイスの構成情報を取得することをさらに含み、
前記構成情報は、
当該コンピューティングデバイスに含まれるプロセッサのタイプと数、
当該コンピューティングデバイスのネットワーク構成、及び
当該コンピューティングデバイスのプロセッサリンク構成の少なくとも1つを含む、
請求項5に記載の方法。
【請求項8】
前記比較に基づいて、前記第1モジュールと前記第2モジュールについて通信チャネルを選択することは、
前記比較に基づいて、前記構成情報によって、前記第1モジュールと前記第2モジュールについて通信チャネルを選択することを含む、
請求項7に記載の方法。
【請求項9】
前記CPUによって前記第1モジュールが実行され、前記第1モジュールについて選択された通信チャネルは、
CPUプロセス内通信チャネル、
シングルデバイスCPUプロセス間通信チャネル、
デバイス間ソケット通信チャネル、
デバイス間RDMA通信チャネル、及び
CPU-GPU通信チャネルの少なくとも1つを含む、
請求項5に記載の方法。
【請求項10】
前記GPUによって前記第1モジュールが実行され、前記第1モジュールについて選択された通信チャネルは、
シングルGPUプロセス内通信チャネル、
シングルGPUプロセス間通信チャネル、
デバイス間ソケット通信チャネル、
デバイス間RDMA通信チャネル、
GPU間の通信チャネル、
CPU-GPU通信チャネル、及び
GPU間のGPU-GPUリンク通信チャネルの少なくとも1つを含む、
請求項5に記載の方法。
【請求項11】
各モジュールの属性情報は、
当該モジュールが属するプロセスのプロセス識別子、
当該モジュールの実行に必要なコンピューティングリソースを識別するためのリソース識別子、及び
当該モジュールを実行するコンピューティングデバイスのデバイス識別子の少なくとも1つを含む、
請求項5に記載の方法。
【請求項12】
前記少なくとも1つのプロセスは管理プロセスを含み、前記方法は前記管理プロセスによって実行される、
請求項1に記載の方法。
【請求項13】
複数のモジュールを含む少なくとも1つのプロセスを実行するためのコンピューティングシステムであって、
メインメモリと前記複数のモジュールを実行する複数のプロセッサとを含む少なくとも1つのコンピューティングデバイスを含み、
そのうち、前記プロセッサは中央処理ユニットCPUと画像処理ユニットGPUを含み、
前記少なくとも1つのコンピューティングデバイスは、
少なくとも第1モジュールと第2モジュールを含む前記複数のモジュールの属性情報を取得し、
データを第1モジュールから第2モジュールに伝送することに応じて、第1モジュールの属性情報と第2モジュールの属性情報を比較し、且つ
前記比較に基づいて、前記第1モジュールと前記第2モジュールについて通信チャネルを選択することで、選択された通信チャネルを介して前記データを前記第1モジュールから前記第2モジュールに伝送するように構成されている、
コンピューティングシステム。
【請求項14】
前記少なくとも1つのコンピューティングデバイスは、
前記第1モジュールの送信トピック集合と前記第2モジュールの受信トピック集合が同じトピックを含むことに応じて、データを前記第1モジュールから前記第2モジュールに伝送することを決定するようにさらに構成されている、
請求項13に記載のコンピューティングシステム。
【請求項15】
各モジュールの属性情報は、
当該モジュールが属するプロセスのプロセス識別子、
当該モジュールの実行に必要なコンピューティングリソースを識別するためのリソース識別子、及び
当該モジュールを実行するコンピューティングデバイスのデバイス識別子の少なくとも1つを含む、
請求項13に記載のコンピューティングシステム。
【請求項16】
プロセッサと、
メモリと、を含み、前記メモリには、前記プロセッサによって実行される時、前記システムに請求項1~12のいずれか1項に記載の方法を実行させるプログラム命令が記憶されている、
コンピューティングシステム。
【請求項17】
コンピューティングシステムの1つ又は複数のプロセッサによって実行される時、前記システムに請求項1~12のいずれか1項に記載の方法を実行させるプログラム命令を含むプログラムが記憶されているコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、通信方法に関し、特にロボットオペレーティングシステムの通信方法及び関連するコンピューティングシステムと記憶媒体に関する。
【背景技術】
【0002】
ロボットオペレーティングシステム(ROS)のプロセスは複数のモジュールで構成され、各モジュールは相対的に独立した機能を達成し、モジュールとモジュールの間で相互に通信してデータを伝送する。性能と分離を考慮して、モジュールは異なる形式を備える。例えば、一部のモジュールは異なるプロセスに分散され、一部のモジュールは異なるコンピューティングデバイスで実行され、さらに、一部のモジュールは中央処理ユニット(CPU)によって実行され、一部は画像処理ユニット(GPU)によって実行される。異なるモジュールの間でデータを効率的に伝送することは課題となっている。
【発明の概要】
【0003】
本開示は、少なくとも1つのプロセスを実行するコンピューティングシステムに用いられる通信方法及び関連するコンピューティングシステムと記憶媒体を提供しており、当該プロセスは複数のモジュールを含み、異なるモジュールの間で効率的にデータを伝送することができる。
【0004】
本開示の一態様は、複数のモジュールを含む少なくとも1つのプロセスを実行するコンピューティングシステムに用いられる通信方法を提供しており、前記方法は、
少なくとも第1モジュールと第2モジュールを含む前記複数のモジュールの属性情報を取得することと、
データを第1モジュールから第2モジュールに伝送することに応じて、第1モジュールの属性情報と第2モジュールの属性情報を比較することと、
前記比較に基づいて、前記第1モジュールと前記第2モジュールについて通信チャネルを選択することで、選択された通信チャネルを介して前記データを前記第1モジュールから前記第2モジュールに伝送することと、を含む。
【0005】
本開示の別の態様は、複数のモジュールを含む少なくとも1つのプロセスを実行するためのコンピューティングシステムを提供しており、前記コンピューティングシステムは、
メインメモリと前記複数のモジュールを実行する複数のプロセッサとを含む少なくとも1つのコンピューティングデバイスを含み、
そのうち、前記プロセッサは中央処理ユニットCPUと画像処理ユニットGPUを含み、
前記少なくとも1つのコンピューティングデバイスは、
少なくとも第1モジュールと第2モジュールを含む前記複数のモジュールの属性情報を取得し、
データを第1モジュールから第2モジュールに伝送することに応じて、第1モジュールの属性情報と第2モジュールの属性情報を比較し、且つ
前記比較に基づいて、前記第1モジュールと前記第2モジュールについて通信チャネルを選択することで、選択された通信チャネルを介して前記データを前記第1モジュールから前記第2モジュールに伝送するように構成されている。
【0006】
本開示の別の態様は、
プロセッサと、
メモリと、を含み、前記メモリには、前記プロセッサによって実行される時、前記システムに本開示による方法を実行させるプログラム命令が記憶されている、コンピューティングシステムを提供している。
【0007】
本開示の別の態様は、コンピューティングシステムの1つ又は複数のプロセッサによって実行される時、前記システムに本開示による方法を実行させるプログラム命令を含むプログラムが記憶されているコンピュータ読み取り可能な記憶媒体を提供している。
【0008】
本開示によるコンピューティングシステムの通信方法は、異なるモジュール間でデータを伝送する時、これらのモジュールの属性情報を比較し、比較結果に基づいて、モジュールについて通信チャネルを選択することで、選択された通信チャネルを介してデータを伝送する。このようにして、モジュールの編成形式に基づいて通信チャネルを差別化して選択することにより、モジュール間の通信効率を向上させることができる。
【図面の簡単な説明】
【0009】
図面は、例示的に実施例を示して明細書の一部を構成しており、明細書の文字記載とともに実施例の例示的な実施形態を説明する。無論、以下に説明される図面は、本発明のいくつかの実施例に過ぎず、当業者にとっては、創造的な工夫せずに、これらの図面を基に他の図面を得ることもできる。全ての図面において、同じ符号は類似しているが必ずしも同一ではない要素を示している。
【0010】
【
図1】本願の例示的な実施例によるコンピューティングシステムの模式図である。
【
図2A】本願の例示的な実施例によるモジュール間通信チャネルの模式図である。
【
図2B】本願の例示的な実施例によるモジュール間通信チャネルの模式図である。
【
図2C】本願の例示的な実施例によるモジュール間通信チャネルの模式図である。
【
図3】本願の例示的な実施例による通信方法のプロセスのフローチャートである。
【発明を実施するための形態】
【0011】
本発明の目的、技術的解決手段及び利点をより明らかにするために、以下、図面に合わせて本発明をさらに詳しく説明するが、無論、説明される実施例は、本発明の実施例の一部に過ぎず、全ての実施例ではない。本発明における実施例に基づき、当業者が創造的な工夫せずに得た他の実施例の全ては、本発明の請求の範囲に属する。
【0012】
本開示において、「複数」という用語は、特に説明がない限り、2つ以上を指す。本開示において、「及び/又は」という用語は、関連するオブジェクトの関連関係を説明し、挙げられたオブジェクトの何れか1つ及び全ての可能な組み合わせをカバーする。「/」という符号は、一般的に、前後の関連するオブジェクトが「又は」の関係であることを示す。
【0013】
本開示において、特に説明がない限り、「第1」、「第2」などの用語は、その位置関係、タイミング関係又は重要度の関係を制限することを意図せず、類似のオブジェクトを区別するためのものである。このように使用される用語は、ここで説明される本発明の実施例が、ここで図示又は説明されたもの以外の形態で実施できるように、適当な場合に互いに交換してもよいと理解すべきである。
【0014】
また、「含む」と「有する」という用語及びそれらの任意の変形は、非排他的な包含をカバーすることを意図し、例えば、一連のステップやユニットを含むプロセス、方法、システム、製品又はデバイスは、必ずしも明らかに挙げられたステップやユニットに限定されず、明らかに挙げられていない、又は、これらのプロセス、方法、システム、製品やデバイスに固有の他のステップやユニットを含むことができる。
【0015】
前述のように、ロボットオペレーティングシステム(ROS)のプロセスは複数のモジュールで構成され、性能と分離を考慮して、モジュールには異なる編成形式があるとともに、コンピューティングデバイス間に異なるネットワーク接続形式がある。従来のロボットオペレーティングシステムでは、通信チャネルが明確に分割されず、モジュールの編成形式に基づいて通信チャネルを差別化して選択することができない。
【0016】
図1は、本願の例示的な実施例によるコンピューティングシステム100のブロック図を示す。コンピューティングシステム100は、独立したデバイスとして動作できるシングルコンピューティングデバイス、又は相互接続(例えばネットワーク化)された複数のコンピューティングデバイスを含み、相互接続された複数のコンピューティングデバイスは分散式コンピューティング環境を提供することができる。例えば、
図1の実施例において、コンピューティングシステム100は、コンピューティングデバイス101、コンピューティングデバイス102及びコンピューティングデバイス103を含む。当業者であれば理解されるように、
図1に示されるコンピューティングシステム100は3つのコンピューティングデバイスを含み、コンピューティングシステム100はそれ以上又はそれ以下のコンピューティングデバイスを含んでよい。例えば、コンピューティングシステム100はコンピューティングデバイス101のみを含んでよい。コンピューティングデバイス101、102及び103のそれぞれは、いずれもサーバ、パーソナルコンピュータ(PC)、ラップトップコンピュータ、タブレットコンピュータ、パーソナルディジタルアシスタント(PDA)、携帯電話、スマートフォン又は他の任意の類似するデバイスであってよい。各コンピューティングデバイスは、1つ又は複数のメモリ及び1つ又は複数のプロセッサ(又は処理ユニット)含んでよい。プロセッサは、中央処理ユニット(CPU)と画像処理ユニット(GPU)含んでよい。
【0017】
図1に示すように、コンピューティングデバイス101は、バス190を介して相互通信するCPU110、メインメモリ140及びGPU120と130を含む。CPU110の数は1つ又は複数であってよい。CPUは、シングルコア又はマルチコアのプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラ、或いは他のプロセッサ又は処理/制御回路として実装することができる。メインメモリ140は、本明細書に記載されている機能を実行できる任意の種類の揮発性又は不揮発性メモリ或いはデータ記憶装置として実装することができる。
【0018】
当業者であれば理解されるように、
図1に示されるコンピューティングデバイス101は2つのGPUを含むが、コンピューティングデバイス101はそれ以上又はそれ以下のGPUを含んでよい。いくつかの実施例において、コンピューティングデバイス101はGPUを有しなくてもよい。コンピューティングデバイス101に複数のGPUが含まれる場合、当該複数のGPUのうちの一部又は全てはGPU-GPUリンクを介して相互通信することができる。GPU-GPUリンクの一例はエヌヴィディア(Nvidia)のNVリンク(NVLink)である。例えば、
図1の例において、GPU120、130はNVリンク123を介して相互通信する。GPUは、プロセッサコアアレイ又は並列プロセッサを含んでよく、そのうちのそれぞれが複数の並列と並行のスレッドを実行して、特定のタイプのGPUタスクを処理することができる。各GPUはGPUメモリをさらに含んでもよい。例えば、
図1に示すように、GPU120はGPUメモリ170を含み、GPU130はGPUメモリ180を含む。なお、
図1はGPUメモリがGPU内にあることを示しているが、他の実施例において、GPUメモリはGPUから独立し、データラインを介してGPUと通信してもよい。例えば、GPUメモリとGPUは、グラフィックスカードに配置された異なる素子であってよい。
【0019】
コンピューティングデバイス101は、様々な入力/出力デバイス又はインタフェース150(タッチスクリーンディスプレイ、オーディオジャック、音声インタフェースなど)及びネットワークインタフェース160をさらに含んでもよい。例示的な実施例において、ネットワークインタフェース160は、任意の1つ又は複数の標準無線及び/又はセルラプロトコル又はアクセス技術(例えばセルラシステムの第2世代(2G)、2.5世代、第3世代(3G)、第4世代(4G)及び次世代の無線アクセス、グローバル移動通信システム(GSM)、汎用パケット無線サービス(GPRS)、拡張データGSM環境(EDGE)、広帯域符号分割多元接続(WCDMA)、LTE、CDMA2000、WLAN、無線ルータ(WR)グリッドなど)とともに使用されるように構成された1つ又は複数の無線トランシーバを含んでよい。ネットワークインタフェース160は、様々な他の有線及び/又は無線通信プロトコル(TCP/IP、UDP、SIP、SMS、RTP、WAP、CDMA、TDMA、UMTS、UWB、WiFi、WiMax、Bluetooth(c)、IEEE802.11xなどを含む)と共に使用するように構成されてもよい。本質的に、ネットワークインタフェース160は、任意の有線及び/又は無線通信及びデータ処理機構を実質的に含むか又はサポートすることができ、当該機構によって、情報/データはネットワーク105を介してコンピューティングデバイス101と他のデバイス(例えばコンピューティングデバイス102及び103)との間で伝播することができる。ネットワーク105は、例えば有線又は無線ネットワークであってもよい。
【0020】
いくつかの実施例において、コンピューティングデバイス101は、リモートダイレクトメモリアクセス(Remote Direct Memory Access、RDMA)機能を備えることができ、又はRDMAをサポートすることができる。例えば、ネットワークインタフェース160にモジュールRDMA161を含んでよい。
【0021】
コンピューティングデバイス102及び103は、上記に記載されているコンピューティングデバイス101と同じ又は類似する構造を有してよい。
【0022】
1つ又は複数のソフトウェアプログラム(例えば、ロボットオペレーティングシステム(ROS))の命令(プロセッサ実行可能な命令、コンピュータ読み取り可能な命令又はソフトウェアコードとも呼ばれる)は、ストレージデバイス(
図1には示されず)に記憶されている。ソフトウェアプログラムがコンピューティングシステム100のシングルコンピューティングデバイス(例えば、コンピューティングデバイス101)によって実行される時、コンピューティングデバイス101の動作中に、ソフトウェアプログラムの命令はコンピューティングデバイス101のメモリ(例えば、メインメモリ140)にロードされ、プロセッサによって実行される。ソフトウェアプログラムの命令は、CPU110のみによって実行されてもよく、又はCPU110及び1つ又は複数のGPU(例えば、GPU120及びGPU130)によって共同で実行されてもよい。ソフトウェアプログラムがコンピューティングシステム100の複数のコンピューティングデバイス(例えば、コンピューティングデバイス101、コンピューティングデバイス102及びコンピューティングデバイス103、これらのコンピューティングデバイスは分散式コンピューティング環境を提供することができる)によって共同で実行される時、ソフトウェアプログラムの命令はコンピューティングデバイス101、コンピューティングデバイス102及びコンピューティングデバイス103のメモリ(例えば、メインメモリ)にロードされ、プロセッサによって実行される。
【0023】
コンピューティングシステム100のコンピューティングデバイスで実行されるソフトウェアプログラムは、1つ又は複数のプロセスを含んでよい。
図2A~
図2Cは、コンピューティングシステム100のコンピューティングデバイスで実行される複数のプロセス、例えばプロセス11、プロセス12、プロセス13、プロセス14、プロセス21、プロセス22、プロセス31、プロセス32を示している。各プロセスは1つ又は複数のモジュールを含んでよい。
図2Aに示すように、プロセス11はコンピューティングデバイス101のCPU110、GPU120及びGPU130で実行され、且つ、モジュール111、112、113及び114を含む。具体的には、プロセス11のモジュール111及び112はコンピューティングデバイス101のCPU110で実行され、プロセス11のモジュール113はコンピューティングデバイス101のGPU120で実行され、プロセス11のモジュール114はコンピューティングデバイス101のGPU130で実行される。プロセス12はモジュール121を含み、コンピューティングデバイス101のCPU110で実行される。プロセス13はモジュール131及び132を含み、コンピューティングデバイス101のGPU120で実行される。プロセス14はモジュール141を含み、コンピューティングデバイス101のGPU130で実行される。プロセス21はモジュール211を含み、コンピューティングデバイス102のCPU210によって実行される。
図2B及び
図2Cに示すように、プロセス22はモジュール221を含み、コンピューティングデバイス102のGPU230によって実行され、プロセス31はモジュール311を含み、コンピューティングデバイス103のCPU310によって実行される。プロセス32はモジュール321を含み、コンピューティングデバイス103のGPU320によって実行される。
【0024】
図2A~
図2Cには、コンピューティングデバイス101で4つのプロセスが実行され、コンピューティングデバイス102で2つのプロセスが実行され、コンピューティングデバイス103で2つのプロセスが実行されることが示されているが、当業者であれば理解されるように、任意の時間にコンピューティングデバイス101、102及び103で任意の数のプロセスを並列に実行することができる。
【0025】
1つのモジュールは別のモジュールと通信可能である。通信する2つのモジュールが同じプロセスに属する場合、この通信はプロセス内通信と呼ばれる。通信する2つのモジュールが同じコンピューティングデバイスで実行される異なるプロセスに属する場合、この通信はシングルデバイスプロセス間通信(interprocess communication、IPC)と呼ばれる。通信する2つのモジュールが異なるコンピューティングデバイスで実行される場合、この通信はデバイス間通信と呼ばれる。
【0026】
本願の実施例によれば、1つのプロセスを管理ノード(管理プロセスとも呼ばれる)として設定してよく、管理ノードは、上記に記載されているコンピューティングシステム100で実行される複数のプロセスの何れかのプロセスであってもよく、コンピューティングシステム100で実行される他の何れかのプロセスであってもよい。管理ノードは、起動時にコンピューティングシステムにおける各コンピューティングデバイスの構成情報をロードすることができる。
【0027】
各モジュールがロードされる時、管理ノードに登録され、その属性情報、送信トピック集合及び受信トピック集合が管理ノードに提供される。管理ノードは、属性情報、送信トピック集合及び受信トピック集合を受信した後、モジュールの属性情報、送信トピック集合及び受信トピック集合をデータベースに格納する。
【0028】
モジュールがロードされる時、さらにその属性情報に基づいて通信チャネルを確立する。いくつかの実施例において、各モジュールがロードされる時、その属性情報及びそれが位置するコンピューティングデバイス(即ち、当該モジュールを実行するコンピューティングデバイス)の構成情報に基づいて通信チャネルを確立する。
【0029】
モジュールの属性情報は、モジュールが属するプロセスのプロセス識別子、リソース識別子、モジュールが位置するコンピューティングデバイス(即ち、当該モジュールを実行するコンピューティングデバイス)のデバイス識別子を含む。プロセス識別子(記号はPid)は異なるプロセスを区別するために使用される。デバイス識別子(記号はHid)は異なるコンピューティングデバイスを区別するために使用され、デバイス識別子の一例はコンピューティングデバイスのネットワークアドレス又はデバイス名である。リソース識別子(記号はRid)は、モジュールの実行に必要なコンピューティングデバイス内のコンピューティングリソースを識別するために使用され、例えば、当該モジュールを実行するプロセッサ、又は、プロセッサが当該モジュールを実行する時にアクセスするメモリである。リソース識別子は、異なるプロセッサを区別するとともにプロセッサのタイプ(例えば、GPU又はCPU)を示し、及び/又は異なるメモリを区別するとともにメモリのタイプ(例えば、GPUメモリ又はメインメモリ)を示すことができる。一例として、
図2Aのモジュール111のリソース識別子Rid=CPU、即ち当該モジュールはCPU110で実行される。モジュール131のリソース識別子Rid=GPU1、GPU1はGPU120のコードであり、数字1はGPUの番号を表し、即ち当該モジュールはコンピューティングデバイス101の1番目のGPU(即ちGPU120)で実行される。モジュール141のリソース識別子Rid=GPU2、GPU2はGPU130のコードであり、数字2はGPUの番号を表し、即ち当該モジュールはコンピューティングデバイス101の2番目のGPU(即ちGPU130)で実行される。
【0030】
同時に、モジュールがプロセッサで実行される時、プロセッサは対応するメモリにアクセスするため、メモリのコードをリソース識別子として代替的又は追加的に使用することができる。例えば、モジュール111のリソース識別子Rid=メインメモリ、即ち当該モジュールはCPU110で実行され、CPU110はモジュール111を実行する時にメインメモリ140にアクセスする。モジュール131のリソース識別子Rid=GPUMemory1、Memory1はGPUメモリ170のコードであり、即ち当該モジュールはGPU120で実行され、GPU120はモジュール131を実行する時にGPUメモリ170にアクセスする。モジュール141のリソース識別子Rid=GPUMemory2、Memory2はGPUメモリ180のコードであり、即ち当該モジュールはGPU130で実行され、GPU130はモジュール141を実行する時にGPUメモリ180にアクセスする。
【0031】
コンピューティングデバイスの構成情報は、当該コンピューティングデバイスのデバイス識別子、当該コンピューティングデバイスに含まれているプロセッサのタイプ及び/又は数(及び/又は当該コンピューティングデバイスに含まれているメモリのタイプ及び/又は数、特にGPU及び/又はGPUメモリの数)、当該コンピューティングデバイスのネットワーク構成(例えば、当該コンピューティングデバイスがRDMA機能を備えるか否かを示すためのRDMA構成)、当該コンピューティングデバイスのプロセッサリンク構成(例えば、当該コンピューティングデバイスがGPU-GPUリンクを有するか否かを示すためのGPU-GPUリンク構成)を含む。
【0032】
一例として、モジュールがロードされる時、属性情報のリソース識別子に基づいて、プロセッサが当該モジュールを実行する時にメインメモリにアクセスするか又は当該モジュールがCPUで実行されることを決定する場合、当該モジュールは以下の1つ又は複数の通信チャネルを確立することができる。
【0033】
チャネルA:ポインタ渡し技術を使用してデータを伝送することができる、CPUプロセス内通信チャネル。
【0034】
チャネルB:共有メインメモリ技術を使用してデータを伝送する、シングルデバイスCPUプロセス間通信チャネル。
【0035】
チャネルC:ソケット技術を使用してコンピューティングデバイス間でデータを伝送する、デバイス間ソケット(socket)通信チャネル。
【0036】
チャネルD:RDMA技術を使用してコンピューティングデバイス間でデータを伝送する、デバイス間RDMA通信チャネル(当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがRDMA機能を備えると判断する場合、デバイス間RDMA通信チャネルを確立する)。
【0037】
チャネルE:GPUのメモリコピー機能(例えば、cudamemcopy関数)を使用してデータを伝送する、CPU-GPU通信チャネル(当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがGPUを備えると判断する場合、CPU-GPU通信チャネルを確立する)。
【0038】
一例として、モジュールがロードされる時、モジュールの属性情報のリソース識別子に基づいて、プロセッサが当該モジュールを実行する時にGPUメモリにアクセスするか又は当該モジュールがGPUで実行されることを決定する場合、当該モジュールは以下の1つ又は複数の通信チャネルを確立することができる。
【0039】
チャネルF:ポインタ(GPUのポインタ)渡し技術を使用してシングルGPU内でデータを伝送する、シングルGPUプロセス内通信チャネル。
【0040】
チャネルG:共有GPUメモリ技術を使用してシングルGPU内でデータを伝送する、シングルGPUプロセス間通信チャネル。
【0041】
チャネルE:GPUのメモリコピー機能(例えばcudamemcopy関数)を使用してデータを伝送する、CPU-GPU通信チャネル。
【0042】
チャネルC:ソケット技術を使用してコンピューティングデバイス間でデータを伝送する、デバイス間ソケット通信チャネル。
【0043】
チャネルH:GPU間のメモリコピーを使用してデータを伝送する、GPU間の通信チャネルで(当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがGPU-GPUリンクを備えないと判断する場合、GPU間の通信チャネルを確立する。GPU-GPUリンクがNVリンクである例において、当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがNVリンクリンクを備えないと判断する場合、GPU間の通信チャネルを確立する)。
【0044】
チャネルI:GPU間のGPU-GPUリンクを使用してデータを伝送する、GPU間のGPU-GPUリンク通信チャネル(当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがGPU-GPUリンクを備えると判断する場合、GPU間のGPU-GPUリンク通信チャネルを確立する。GPU-GPUリンクがNVリンクである例において、当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがNVリンクを備えると判断する場合、GPU間のNVリンク通信チャネルを確立する)。
【0045】
チャネルD:RDMA技術を使用してコンピューティングデバイス間でデータを伝送する、デバイス間RDMA通信チャネル(当該モジュールを実行するコンピューティングデバイスの構成情報に基づいて、当該コンピューティングデバイスがRDMA機能を備えると判断する場合、デバイス間RDMA通信チャネルを確立する)。
【0046】
上記から分かるように、モジュールがCPUで実行されるか、又はGPUで実行されるかにかかわらず、当該モジュールは上記のチャネルにおけるD、C及びEを確立することができる。以下、
図2A~
図2Cを参照し、上記のチャネルの確立を説明する。
【0047】
図2Aを参照し、モジュール111及び112は、双方ともプロセス11に属し、コンピューティングデバイス101のCPU110で実行される。モジュール111と通信するために、モジュール112は、チャネルAであるCPUプロセス内通信チャネルを確立し、ポインタ渡し技術を使用してデータを伝送することができる。同様に、モジュール112と通信するために、モジュール111はチャネルAを確立することもできる。モジュール112はプロセス11に属し、モジュール121はプロセス12に属し、モジュール112とモジュール121は、双方ともコンピューティングデバイス101のCPU110で実行されるため、モジュール121と通信するために、モジュール112は、チャネルBであるシングルデバイスCPUプロセス間通信チャネルを確立し、共有メインメモリ技術を使用してデータを伝送することができる。同様に、モジュール112と通信するために、モジュール121はチャネルBを確立することもできる。
【0048】
モジュール111はプロセス11に属し、コンピューティングデバイス101のCPU110で実行され、モジュール211はプロセス21に属し、コンピューティングデバイス102のCPU210で実行され、コンピューティングデバイス101はRDMA機能を備えるが、コンピューティングデバイス102はRDMA機能を備えない。モジュール211と通信するため、モジュール111は、チャネルCであるデバイス間ソケット(socket)通信チャネルを確立し、ソケット技術を使用してコンピューティングデバイス間でデータを伝送することができる。同様に、モジュール111と通信するために、モジュール211はチャネルCを確立することもできる。
【0049】
モジュール112はプロセス11に属し、コンピューティングデバイス101のCPU110で実行され、モジュール113もプロセス11に属するが、コンピューティングデバイス101のGPU120で実行されるため、モジュール113と通信するために、モジュール112は、チャネルEであるCPU-GPU通信チャネルを確立し、GPUのメモリコピー機能(例えば、cudamemcopy)を使用してデータを伝送することができる。同様に、モジュール112と通信するために、モジュール113はチャネルEを確立することもできる。
【0050】
モジュール113はプロセス11に属し、コンピューティングデバイス101のGPU120で実行され、モジュール141はプロセス14に属するが、コンピューティングデバイス101のGPU130で実行され、GPU120とGPU130との間にNVリンク123があるため、モジュール141と通信するために、モジュール113は、チャネルIであるGPU間のNVリンク通信チャネルを確立し、GPU間のNVリンクを使用してデータを伝送することができる。同様に、モジュール113と通信するために、モジュール141はチャネルIを確立することもできる。
【0051】
GPU120とGPU130との間にGPU-GPUリンクが存在しない(例えば、NVリンク123が存在しない)場合、モジュール141と通信するために、モジュール113は、チャネルH(
図2Aの点線で示すように)であるGPU間の通信チャネルを確立し、GPU間のメモリコピーを使用してデータを伝送することができる。同様に、モジュール113と通信するために、モジュール141はチャネルHを確立することもできる。
【0052】
モジュール113はプロセス11に属し、コンピューティングデバイス101のGPU120で実行され、モジュール114はいずれもプロセス11に属し、コンピューティングデバイス101のGPU130で実行され、GPU120とGPU130との間にNVリンク123があるため、モジュール114と通信するために、モジュール113は、チャネルIであるGPU間のNVリンク通信チャネルを確立し、GPU間のNVリンクを使用してデータを伝送することができる。同様に、モジュール113と通信するために、モジュール114はチャネルIを確立することもできる。
【0053】
GPU120とGPU130との間にGPU-GPUリンクが存在しない(例えば、NVリンク123が存在しない)場合、モジュール114と通信するために、モジュール113は、チャネルH(
図2Aの点線で示すように))であるGPU間の通信チャネルを確立し、GPU間のメモリコピーを使用してデータを伝送することができる。同様に、モジュール113と通信するために、モジュール114はチャネルHを確立することもできる。
【0054】
モジュール113はプロセス11に属し、コンピューティングデバイス101のGPU120で実行され、モジュール131はプロセス13に属し、コンピューティングデバイス101のGPU120で実行されるため、モジュール131と通信するために、モジュール113は、共有GPUメモリ技術を使用してデータを伝送するチャネルGであるシングルGPUプロセス間通信チャネルを確立することができる。同様に、モジュール113と通信するために、モジュール131はチャネルGを確立することもできる。
【0055】
モジュール131及びモジュール132は、双方ともプロセス13に属し、コンピューティングデバイス101のGPU120で実行され、モジュール132と通信するために、チャネルFであるシングルGPUプロセス内通信チャネルを確立し、モジュール131は、ポインタ渡し技術を使用してデータを伝送することができる。同様に、モジュール131と通信するために、モジュール132はチャネルFを確立することもできる。
【0056】
図2Bを参照し、モジュール111はプロセス11に属し、コンピューティングデバイス101のCPU110で実行され、モジュール221はプロセス22に属し、コンピューティングデバイス102のGPU230で実行される。
図2Bには、CPU110内のソケットバッファ(socket buffer)116及びCPU210内のソケットバッファ216がさらに示されている。前述のように、コンピューティングデバイス101はRDMA機能を備えるが、コンピューティングデバイス102はRDMA機能を備えない。モジュール221と通信するために、モジュール111はチャネルCを確立することができる。モジュール111と通信するために、モジュール221はチャネルC及びチャネルEを確立することができる。
【0057】
モジュール121はプロセス12に属し、コンピューティングデバイス101のCPU110で実行され、モジュール311はプロセス31に属し、コンピューティングデバイス103のCPU310で実行され、コンピューティングデバイス101及び103はいずれもRDMA機能を備える。
図2Bには、モジュールRDMA161内のRDMAバッファ(RDMA buffer)162及びモジュールRDMA361内のRDMAバッファ362がさらに示されている。従って、モジュール311と通信するために、モジュール121は、チャネルDであるデバイス間RDMA通信チャネルを確立し、RDMAを使用してコンピューティングデバイス間でデータを伝送することができる。同様に、モジュール121と通信するために、モジュール311はチャネルDを確立することもできる。
【0058】
モジュール121はプロセス12に属し、コンピューティングデバイス101のCPU110で実行され、モジュール321はプロセス32に属し、コンピューティングデバイス103のGPU320で実行される。従って、モジュール321と通信するために、モジュール121はチャネルDを確立する。モジュール121と通信するために、モジュール321はチャネルD及びチャネルEを確立する。
【0059】
図2Cに示すように、モジュール114はプロセス11に属し、コンピューティングデバイス101のGPU130で実行され、モジュール211はプロセス21に属し、コンピューティングデバイス102のCPU210で実行され、
図2CにはCPU110内のソケットバッファ(socket buffer)116及びCPU210内のソケットバッファ216がさらに示されている。前述のように、コンピューティングデバイス101はRDMA機能を備えるが、コンピューティングデバイス102はRDMA機能を備えない。モジュール211と通信するために、モジュール114はチャネルC及びチャネルEを確立することができる。モジュール114と通信するために、モジュール211はチャネルCを確立することができる。
【0060】
モジュール114はプロセス11に属し、コンピューティングデバイス101のGPU130で実行され、モジュール221はプロセス22に属し、コンピューティングデバイス102のGPU230で実行される。従って、モジュール221と通信するために、モジュール114はチャネルC及びチャネルEを確立することができる。モジュール114と通信するために、モジュール221はチャネルC及びチャネルEを確立することもできる。
【0061】
モジュール141はプロセス14に属し、コンピューティングデバイス101のGPU130で実行され、モジュール311はプロセス31に属し、コンピューティングデバイス103のCPU310で実行され、コンピューティングデバイス101及び103はいずれもRDMA機能を備える。
図2Cには、モジュールRDMA161内のRDMAバッファ(RDMA buffer)162及びモジュールRDMA361内のRDMAバッファ362がさらに示されている。モジュール311と通信するために、モジュール141はチャネルD及びチャネルEを確立することができる。モジュール141と通信するために、モジュール311はチャネルDを確立することができる。
【0062】
モジュール141はプロセス14に属し、コンピューティングデバイス101のGPU130で実行され、モジュール321はプロセス32に属し、コンピューティングデバイス103のGPU320で実行される。モジュール321と通信するために、モジュール141はチャネルD及びチャネルEを確立する。モジュール141と通信するために、モジュール321についても、チャネルD及びチャネルEを確立する。
【0063】
図3は、本願の実施例によるコンピューティングシステムに用いられる通信方法である。当該コンピューティングシステムは、例えば
図1に示されるコンピューティングシステムである。当該コンピューティングシステムは、
図2A~
図2Cに示される複数のプロセスの1つ又は複数、及び
図2A~
図2Cに示される複数のモジュールの1つ又は複数が実行される。
【0064】
いくつかの実施例において、コンピューティングシステムでは、
図2に示される各プロセス(ノードとも呼ばれる)を含み得るロボットオペレーティングシステム(ROS)が実行される。ロボットオペレーティングシステムにおいて、ノード間で伝送されるデータはメッセージとも呼ばれ、ノード間でメッセージの伝送によって通信し、メッセージはパブリッシュ/サブスクライブの形態によって伝送され、1つ又は複数のノードは所定のトピック(topic)にメッセージをパブリッシュすることができ、1つ又は複数のノードは同じトピックをサブスクライブすることができる。即ち、ROSではプロセス(即ちノード)間でトピックによってメッセージデータを伝送する。
【0065】
301において、管理ノードは複数のモジュールの属性情報を取得する。
【0066】
前述のように、管理ノードは、起動時にコンピューティングシステム内の各コンピューティングデバイスの構成情報をロードすることができる。各モジュールがロードされる時、その属性情報、送信トピック集合及び受信トピック集合が管理ノードに提供される。管理ノードは、属性情報、送信トピック集合及び受信トピック集合を受信した後、モジュールの属性情報、送信トピック集合及び受信トピック集合をデータベースに格納する。
【0067】
302において、管理ノードは、モジュール間でデータを伝送することに応じて、これらのモジュールの属性情報を比較する。例えば、データを複数のモジュールの第1モジュールから第2モジュールに伝送する場合、第1モジュールの属性情報と第2モジュールの属性情報を比較する。
【0068】
前述のように、ロボットオペレーティングシステムにおいて、ノード間で伝送されるデータはメッセージとも呼ばれる。1つのモジュール(即ち第1モジュール)の送信トピック集合と別のモジュール(即ち第2モジュール)の受信トピック集合にはいずれも、同じトピックが含まれる場合、これらのモジュール間でデータを伝送すること、即ちデータを第1モジュールから第2モジュールに送信することを決定する。当業者であれば理解されるように、1つのモジュールの送信トピック集合と複数のモジュールの受信トピック集合はいずれも同じトピックを含んでもよく、同様に、1つのモジュールの受信トピック集合と複数のモジュールの送信トピック集合はいずれも同じトピックを含んでもよい。
【0069】
303において、管理ノードは、属性情報の比較に基づいて、モジュールのために通信チャネルを選択することで、選択された通信チャネルを介してデータを伝送する。例えば、上記の第1モジュールと第2モジュールのために通信チャネルを選択することで、選択された通信チャネルを介してデータを第1モジュールから第2モジュールに伝送する。
【0070】
前述のように、いくつかの通信チャネルの確立は、コンピューティングデバイスの構成情報をさらに考慮するため、管理ノードは、属性情報の比較に加えて、モジュールを実行するコンピューティングデバイスの構成情報に基づいて、モジュールのために通信チャネルを選択することで、選択された通信チャネルを介してデータを伝送する。
【0071】
管理ノードは、選択された通信チャネルを関連するモジュールに通知し、モジュールは管理ノードの通知を受信した後、通知に従って対応する通信チャネルを使用してデータを送信・受信する。
【0072】
いくつかの実施例において、第1モジュールと第2モジュールのために通信チャネルを選択することで、選択された通信チャネルを介してデータを第1モジュールから第2モジュールに伝送することは、
第1モジュールの属性情報と第2モジュールの属性情報を比較すること、
第1モジュールの属性情報のデバイス識別子が第2モジュールの属性情報のデバイス識別子と同じであり、第1モジュールの属性情報のリソース識別子が第2モジュールの属性情報のリソース識別子と同じであるが、第1モジュールの属性情報のプロセス識別子が第2モジュールの属性情報のプロセス識別子と異なることに応じて、前記第1モジュールと前記第2モジュールについてシングルデバイスCPUプロセス間通信チャネル又はシングルGPUプロセス間通信チャネルを選択すること、又は、
第1モジュールの属性情報のデバイス識別子が第2モジュールの属性情報のデバイス識別子と同じであり、第1モジュールの属性情報のプロセス識別子が第2モジュールの属性情報のプロセス識別子と異なり、第1モジュールの属性情報のリソース識別子は第1モジュールがCPUで実行されることを指示し、第2モジュールの属性情報のリソース識別子は第2モジュールがGPUで実行されることを指示することに応じて、第1モジュールについてシングルデバイスCPUプロセス間通信チャネルを選択し、第2モジュールについてシングルデバイスCPUプロセス間通信チャネル及びCPU-GPU通信チャネルを選択すること、又は、
第1モジュールの属性情報のデバイス識別子が第2モジュールの属性情報のデバイス識別子と同じであり、第1モジュールの属性情報のプロセス識別子が第2モジュールの属性情報のプロセス識別子と異なり、第1モジュールの属性情報のリソース識別子が第2モジュールの属性情報のリソース識別子と異なり、第1モジュールの属性情報のリソース識別子は第1モジュールがGPUで実行されることを指示し、第2モジュールの属性情報のリソース識別子は第2モジュールもGPUで実行されることを指示することに応じて、同時に、第1モジュールと与第2モジュールの属性情報のデバイス識別子に対応するコンピューティングデバイス(即ち第1モジュールと第2モジュールが当該コンピューティングデバイスで実行される)の構成情報は当該コンピューティングデバイスにGPU-GPUリンクが存在することを指示することに応じて、第1モジュールと第2モジュールについてGPU間のGPU-GPUリンク通信チャネルを選択し、GPU-GPUリンクがNVリンクである場合、第1モジュールと第2モジュールについてGPU間のNVリンク通信チャネルを選択し、構成情報は当該コンピューティングデバイスにGPU-GPUリンクが存在しない場合、第1モジュールと第2モジュールについてGPU間の通信チャネルを選択すること、を含む。
【0073】
下記表1~表3には、チャネルの選択に関するより多くの例が示されている。表1~表3において、モジュールaはプロセスaに属し、コンピューティングデバイスaで実行され、プロセスaのプロセス識別子はPid_a、コンピューティングデバイスaのデバイス識別子はHid_a、モジュールaのリソース識別子はRid_aである。モジュールbはプロセスbに属し、コンピューティングデバイスbで実行され、プロセスbのプロセス識別子はPid_b、コンピューティングデバイスbのデバイス識別子はHid_b、モジュールbのリソース識別子はRid_bである。なお、表1~表3において、GPU[n]はコンピューティングデバイスでのGPUのコードであり、数字nはGPUの番号であるコンピューティングデバイスのn番目のGPUを表し、nは例えばi、j、x、yであってよい。例えば、Rid_a=GPU[i]は、対応するモジュールがi番目のGPUで実行されることを表す。なお、理解しやすくするために、表1~表3には、GPU-GPUリンクがNVリンクであることを例として説明されている。
【0074】
コンピューティングデバイスaのデバイス識別子Hid_aがコンピューティングデバイスbのデバイス識別子Hid_bと等しく、即ちHid_a=Hid_b(コンピューティングデバイスaとコンピューティングデバイスbが同じコンピューティングデバイスであることを表す)、プロセスaのプロセス識別子Pid_aがプロセスbのプロセス識別子Pid_bと等しく、即ちPid_a=Pid_b(プロセスaとプロセスbが同じプロセスであることを表す)の場合、下記表1に従ってモジュールaとモジュールbのために通信チャネルを選択する(即ち、同じプロセス内のモジュールチャネルの選択)。
【0075】
【0076】
コンピューティングデバイスaのデバイス識別子Hid_aがコンピューティングデバイスbのデバイス識別子Hid_bと等しく、即ちHid_a=Hid_b(コンピューティングデバイスaとコンピューティングデバイスbが同じコンピューティングデバイスであることを表す)、プロセスaのプロセス識別子Pid_aがプロセスbのプロセス識別子Pid_bと等しくなく、即ちPid_a!=Pid_b(プロセスaとプロセスbが異なるプロセスであることを表す)の場合、下記表2に従ってモジュールaとモジュールbのために通信チャネルを選択する(即ち、シングルデバイスプロセス間のモジュールチャネルの選択)。
【0077】
【0078】
コンピューティングデバイスaのデバイス識別子Hid_aがコンピューティングデバイスbのデバイス識別子Hid_bと異なり、即ちHid_a!=Hid_b(コンピューティングデバイスaとコンピューティングデバイスbが異なるコンピューティングデバイスであることを表す)の場合、下記表3に従ってモジュールa及びモジュールbについて通信チャネルを選択する(即ち、デバイス間のモジュールチャネルの選択)。
【0079】
【0080】
【0081】
本明細書に記載のいくつかの実施例は、方法又はプロセスの一般的な文脈で説明され、1つの実施例では、コンピュータ読み取り可能な媒体に含まれるコンピュータプログラム製品によって実施することができ、当該コンピュータプログラム製品は、例えばネットワーク化された環境内のコンピュータによって実行できるコンピュータ実行可能な命令(例えば、プログラムコード)を含んでよい。コンピュータ読み取り可能な媒体は、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、光ディスク(CD)、デジタル多用途ディスク(DVD)などを含むがこれらに限定されないリムーバブル及び非リムーバブルストレージデバイスを含んでよい。従って、コンピュータ読み取り可能な媒体は、非一時的な記憶媒体を含んでよい。一般的には、プログラムモジュールは、特定のタスクを実行するか、又は特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含んでよい。コンピュータ又はプロセッサ実行可能な命令、関連するデータ構造及びプログラムモジュールは、本明細書に開示された方法のステップを実行するためのプログラムコードの例を表す。このような実行可能な命令又は関連するデータ構造の特定のシーケンスは、これらのステップ又はプロセスで説明された機能を実装するための対応する動作の例を表す。
【0082】
開示された実施例におけるいくつかの実施例は、ハードウェア回路、ソフトウェア又はその組み合わせを使用してデバイス又はモジュールとして実装されてよい。例えば、ハードウェア回路の実装は、例えばプリント回路基板の一部として集積できるディスクリートアナログ及び/又はデジタルコンポーネントを含んでよい。代替的又は追加的に、開示されたコンポーネント又はモジュールは、特定用途向け集積回路(ASIC)及び/又はフィールドプログラマブルゲートアレイ(FPGA)デバイスとして実装されてよい。追加的又は代替的に、いくつかの実装は、本願の開示された機能性に関連するデジタルシグナル処理の動作上の必要性に対して最適化されたアーキテクチャを備えた専用マイクロプロセッサであるデジタルシグナルプロセッサ(DSP)を含んでよい。類似的には、各モジュール内の様々なコンポーネント又はサブ構成要素は、ソフトウェア、ハードウェア又はファームウェアで実装されてよい。モジュール及び/又はモジュール内のコンポーネント間の接続は、インターネット、有線ネットワーク又は適切なプロトコルを使用する無線ネットワークによる通信を含むが、これらに限定されない、本分野における既知の任意の接続方法及び媒体により提供され得る。
【0083】
図面を参照して本開示の例示的な実施例又は例を記述したが、上記の例示的な記述は、網羅的であること、又は、本発明を開示された具体的な形態に制限することを意図しないと理解すべきである。上記の教示された内容に基づいて、多くの修正や変形が可能である。そのため、開示された旨は、本明細書に記載の任意の単一の実施例又は例に限定されるべきではなく、添付される特許請求の範囲の幅と範囲に基づいて解釈されるべきである。