IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 北京図森智途科技有限公司の特許一覧

特開2023-143824グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器
<>
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図1
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図2
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図3
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図4
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図5
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図6
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図7
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図8
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図9
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図10
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図11
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図12
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図13
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図14
  • 特開-グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023143824
(43)【公開日】2023-10-06
(54)【発明の名称】グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器
(51)【国際特許分類】
   G06F 9/52 20060101AFI20230928BHJP
   G06F 9/54 20060101ALI20230928BHJP
【FI】
G06F9/52 120B
G06F9/54 B
G06F9/54 A
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2023043961
(22)【出願日】2023-03-20
(31)【優先権主張番号】202210297294.3
(32)【優先日】2022-03-24
(33)【優先権主張国・地域又は機関】CN
(71)【出願人】
【識別番号】521254764
【氏名又は名称】北京図森智途科技有限公司
(74)【代理人】
【識別番号】110001139
【氏名又は名称】SK弁理士法人
(74)【代理人】
【識別番号】100130328
【弁理士】
【氏名又は名称】奥野 彰彦
(74)【代理人】
【識別番号】100130672
【弁理士】
【氏名又は名称】伊藤 寛之
(72)【発明者】
【氏名】孫▲パン▼博
(72)【発明者】
【氏名】▲呉▼昊
(72)【発明者】
【氏名】▲キン▼江明
(57)【要約】      (修正有)
【課題】タスクの処理効率を上げるグラフィックスプロセッサの呼び出し方法を提供する。
【解決手段】方法は、第1のプロセスと第2のプロセスとが実行される中央プロセッサで、第1のプロセスがタスクに対応するプログラミング・インタフェースのコールを指示し、プログラミング・インタフェースに対応する実行要求発行のためのハイジャック・コードの呼び出し命令に応答するステップと、第1のプロセスが、ハイジャック・コードを実行し、第1のプロセスに対応する、第2のプロセスにプログラミング・インタフェースを呼び出すための実行要求を第2のプロセスに送信するステップと、第2のプロセスが、第1のプロセスに対応する実行要求に応答し、第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出し、タスクを処理することで処理効率を上げるステップと、を含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
グラフィックスプロセッサの呼び出し方法であって、前記方法は、第1のプロセスと第2のプロセスとが実行される中央プロセッサに適用され、前記方法は、
前記第1のプロセスが、前記第1のプロセスの実行タスクに対応するプログラミング・インタフェースのコールを指示し、前記プログラミング・インタフェースに対応するハイジャック・コードを呼び出すための呼び出し命令に応答するステップであって、前記ハイジャック・コードは、実行要求の発行を指示するために用いられるステップと、
前記第1のプロセスが、前記ハイジャック・コードを実行し、前記第1のプロセスに対応する実行要求を第2のプロセスに送信するステップであって、前記実行要求は、第2のプロセスに前記プログラミング・インタフェースを呼び出すように指示するために用いられるステップと、
前記第2のプロセスが、前記実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップと、を含む、グラフィックスプロセッサの呼び出し方法。
【請求項2】
前記プログラミング・インタフェースは、関数タイプを指示するための呼び出し関数識別子を有し、前記第1のプロセスが前記プログラミング・インタフェースに対応するハイジャック・コードを呼び出すステップは、
前記プログラミング・インタフェースの関数タイプが通常タイプであることに応答し、前記第1のプロセスが、予め設定されたハイジャック・ライブラリにより、前記プログラミング・インタフェースの呼び出し関数識別子に対応するハイジャック・コードを呼び出すステップであって、前記予め設定されたハイジャック・ライブラリは、複数のハイジャック・コードを含むステップを含む、請求項1に記載の方法。
【請求項3】
前記第1のプロセスが前記プログラミング・インタフェースに対応するハイジャック・コードを呼び出すステップは、
前記プログラミング・インタフェースの関数タイプが隠しタイプであることに応答し、前記第1のプロセスが、予め設定されたハイジャック・ライブラリにより、前記プログラミング・インタフェースの呼び出し関数識別子に対応するハイジャック・ポインタを決定し、且つ前記ハイジャック・ポインタに基づいて、前記ハイジャック・ポインタに対応するハイジャック・コードを呼び出すステップであって、前記ハイジャック・ポインタは、前記プログラミング・インタフェースに対応するハイジャック・コードの位置を指示するために用いられるステップを含む、請求項2に記載の方法。
【請求項4】
前記実行タスクは、前記第1のプロセスが記憶データを前記グラフィックスプロセッサ内のビデオメモリに送信する必要があり、前記実行タスクは、前記第1のプロセスに対する前記記憶データの記憶アドレスを特徴付けるための第1の仮想アドレスを含み、前記方法は、
前記第1の仮想アドレスが第1のメモリに対応するアドレス範囲内に位置することに応答し、前記第1のプロセスが、予め設定されたマッピング関係により、前記第1の仮想アドレスを第2の仮想アドレスに変換し、且つ前記第2の仮想アドレスを前記第2のプロセスに送信するステップであって、前記第2の仮想アドレスは、前記第2のプロセスに対する前記記憶データの記憶アドレスを特徴付けるために用いられ、前記第1のメモリは、前記第1のプロセスと前記第2のプロセスとの共有メモリであるステップと、
前記第2のプロセスが、前記第2の仮想アドレスにより前記記憶データを取得するステップと、
前記第2のプロセスが、応答し、グラフィックスプロセッサ応答し、グラフィックスプロセッサ前記記憶データを前記グラフィックスプロセッサに送信するステップと、をさらに含む、請求項1に記載の方法。
【請求項5】
前記方法は、
前記第1の仮想アドレスが第1のメモリに対応するアドレス範囲外に位置することに応答し、前記第1のプロセスが、前記第1の仮想アドレスにより取得された記憶データを前記第1のメモリに送信するステップと、
前記第2のプロセスが、前記第1のメモリから前記記憶データを取得するステップと、をさらに含み、
ここで、前記第1のメモリは、第1のサブメモリと第2のサブメモリとを含み、前記第1のプロセスが、前記第1の仮想アドレスにより取得された記憶データを前記第1のメモリに送信するステップは、
前記第1のプロセスが、取得された記憶データを複数のサブ記憶データに分割し、且つ前記複数のサブ記憶データを前記第1のサブメモリ及び前記第2のサブメモリに交互に順次伝送するステップを含み、
前記第2のプロセスが、前記第1のメモリから前記記憶データを取得するステップは、
前記第2のプロセスが、前記第1のサブメモリ及び前記第2のサブメモリから交互に前記複数のサブ記憶データを取得するステップを含む、請求項4に記載の方法。
【請求項6】
前記第1のプロセスが、前記実行要求を第2のプロセスに送信するステップは、
前記第1のプロセスが、前記実行要求を前記第1のプロセスに対応する第1のメモリ内の第1のメッセージ・キューに送信するステップであって、前記第1のメモリは、前記第1のプロセスと前記第2のプロセスとの共有メモリであり、前記第1のメッセージ・キューは、前記第1のプロセスと1対1に対応するステップと、
前記第1のプロセスが、前記第1のメッセージ・キューに対応する第1のセマフォ・パラメータを調整するステップであって、前記第1のセマフォ・パラメータは、第1のメッセージ・キューにおける読み取り可能な実行要求の数を特徴付けるために用いられるステップと、
前記第2のプロセスが、調整された第1のセマフォ・パラメータにより、前記第1のメッセージ・キューにおける実行要求を取得するステップと、を含む、請求項1に記載の方法。
【請求項7】
前記第1のプロセスが、前記実行要求を前記第1のプロセスに対応する第1のメモリ内の第1のメッセージ・キューに送信するステップは、
前記実行要求の占有するメモリ値が第1の値以下であることに応答し、前記第1のプロセスが、前記実行要求を前記第1のメッセージ・キューに送信するステップを含み、
前記方法は、
前記実行要求の占有するメモリ値が第1の値よりも大きいことに応答し、前記第1のプロセスが、前記実行要求を前記第1のメモリ内の一時メモリに送信し、且つマークアップ情報を生成して前記第1のメッセージ・キューに送信するステップであって、前記一時メモリは、前記第1のプロセスが申請した一時記憶領域であり、前記マークアップ情報は、前記実行要求の位置情報を指示するステップをさらに含み、
前記第2のプロセスが、調整された第1のセマフォ・パラメータにより、前記第1のメッセージ・キュー内の実行要求を取得するステップは、
前記第2のプロセスが、調整された第1のセマフォ・パラメータにより、前記第1のメッセージ・キュー内のマークアップ情報を取得し、且つ前記マークアップ情報により前記一時メモリ内の実行要求を取得するステップと、
前記第2のプロセスが、前記一時メモリを解放するステップと、を含む、請求項6に記載の方法。
【請求項8】
前記方法は、
前記第2のプロセスが、前記グラフィックスプロセッサが返信した実行結果を、前記実行結果に対応する第1のプロセスに対応する第1のメモリ内の第2のメッセージ・キューに送信するステップであって、前記第1のメモリは、前記第1のプロセスと前記第2のプロセスとの共有メモリであり、前記第2のメッセージ・キューは、前記第1のプロセスと1対1に対応するステップと、
前記第2のプロセスが、前記第2のメッセージ・キューに対応する第2のセマフォ・パラメータを調整するステップであって、前記第2のセマフォ・パラメータは、第2のメッセージ・キューにおける読み取り可能な実行要求の数を特徴付けるために用いられるステップと、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける実行結果を取得するステップと、をさらに含む、請求項1に記載の方法。
【請求項9】
前記第1のプロセスは、第1のスレッド識別子と1対1に対応する複数の第1のスレッドを含み、前記実行結果は、第1のスレッド識別子を有し、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける実行結果を取得するステップは、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける各前記第1のスレッドの第1のスレッド識別子に対応する実行結果を複数の第1のスレッドがそれぞれ取得するように、前記第1のプロセスにおける複数の第1のスレッドをウェイクアップさせるステップを含む、請求項8に記載の方法。
【請求項10】
前記第1のプロセスは、第1のスレッド識別子と1対1に対応する複数の第1のスレッドを含み、前記実行結果は、第1のスレッド識別子を有し、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける実行結果を取得するステップは、
前記第1のプロセスが、調整された第2のセマフォ・パラメータ及び予め設定された第1のスレッド識別子とコンテナとの間の対応関係により、前記第2のメッセージ・キューにおける実行結果を、前記第1のスレッド識別子に対応する前記実行結果におけるコンテナに記憶するステップであって、前記コンテナは、リンク・テーブル形式の記憶構造であるステップと、
第1のスレッドが前記第1のスレッドの第1のスレッド識別子に対応する実行結果を対応するコンテナから取得するように、前記第1のプロセスが、前記コンテナに対応する第1のスレッドをウェイクアップさせるステップと、を含み、
前記コンテナは、複数のコンテナであり、且つ1つのコンテナは、複数の第1のスレッド識別子に対応する、請求項8に記載の方法。
【請求項11】
前記方法は、
前記第2のプロセスが、前記グラフィックスプロセッサに対応する第2のスレッドを前記第2のプロセス内に作成するステップと、
前記第1のプロセスが、接続要求を前記第2のプロセスに送信ステップであって、前記接続要求は、前記第2のプロセスとの通信接続の確立を特徴付けるステップと、
前記第2のプロセスが、前記接続要求に応答し、前記第1のプロセスに対応する第3のスレッドを前記第2のプロセス内に作成するステップであって、前記第3のスレッドは、その対応する第1のプロセスが送信した実行要求を取得するために用いられるステップと、をさらに含み、
前記第2のプロセスが、前記実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップは、
前記第2のプロセスにおける第2のスレッドが、前記第3のスレッドが送信した実行要求に応答し、前記プログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップを含む、請求項1に記載の方法。
【請求項12】
前記プログラミング・インタフェースは、呼び出し関数識別子を有し、前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースを呼び出すことでグラフィックスプロセッサを呼び出すステップは、
前記プログラミング・インタフェースに対応する呼び出し関数識別子が同期関数識別子に属することに応答し、前記第2のプロセスが、置換ライブラリにより、前記プログラミング・インタフェースの呼び出し関数識別子に対応する置換コードを呼び出すステップであって、前記置換コードは、前記呼び出し関数識別子に対応するプログラミング・インタフェースの同期機能コードを非同期機能コードに置換するために用いられ、前記置換ライブラリは、複数の置換コードを含むステップと、
前記第2のプロセスが、前記第1のプロセスに対応するプログラミング・インタフェースの置換コードにより、グラフィックスプロセッサを呼び出し、且つ前記グラフィックスプロセッサが返信した非同期通知を受信するステップであって、前記非同期通知は、第1のプロセスが送信した実行要求を継続して実行するように第2のプロセスに指示するために用いられるステップと、を含む、請求項1に記載の方法。
【請求項13】
前記実行要求は、前記プログラミング・インタフェースのインタフェース情報を含み、前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップは、
前記第2のプロセスが、前記実行要求内のインタフェース情報に応答し、前記第1のプロセスに対応するプログラミング・インタフェースを決定し、且つ前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップを含む、請求項1に記載の方法。
【請求項14】
メモリと、中央プロセッサと、グラフィックスプロセッサとを含み、
メモリは、前記中央プロセッサ実行可能命令を記憶するためのメモリであり、
ここで、前記中央プロセッサは、前記実行可能命令を実行する時、前記実行可能命令により、請求項1~13のいずれか1項に記載の方法を実行するために用いられる、電子機器。
【請求項15】
コンピュータ読み取り可能な記憶媒体であって、プロセッサにより実行される時、請求項1~13のいずれか1項に記載の方法を実現するためのコンピュータ実行命令が記憶される、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、コンピュータ分野に関し、特に、グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器に関する。
【背景技術】
【0002】
人工知能及びディープラーニング分野が絶えず進むにつれて、これらの分野におけるコンピューティング・タスクは、通常、多くのコンピューティング・リソースが必要である。しかし、中央プロセッサの実行リソースの限定により、コンピューティング・タスクに多くのコンピューティング・リソースが必要である場合、中央プロセッサは、コンピューティング・タスクに対応するコンピューティング結果を適時に提供することができず、処理効率が低い。
【0003】
現在、グラフィックスプロセッサ(graphics processing unit、GPU)は、その強力なコンピューティング能力により幅広く注目される。どのようにグラフィックスプロセッサを呼び出すことでコンピューティング・タスクの処理効率を上げるかは、急務の課題である。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本願にて提供されるグラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器は、関連技術における中央プロセッサの処理効率が低い問題を解決するために用いられる。
【課題を解決するための手段】
【0005】
第1の態様において、本願は、グラフィックスプロセッサの呼び出し方法を提供し、前記方法は、第1のプロセスと第2のプロセスとが実行される中央プロセッサに適用され、前記方法は、
前記第1のプロセスが、前記第1のプロセスの実行タスクに対応するプログラミング・インタフェースのコールを指示し、前記プログラミング・インタフェースに対応するハイジャック・コードを呼び出すための呼び出し命令に応答するステップであって、前記ハイジャック・コードは、実行要求の発行を指示するために用いられるステップと、
前記第1のプロセスが、前記ハイジャック・コードを実行し、前記第1のプロセスに対応する実行要求を第2のプロセスに送信するステップであって、前記実行要求は、第2のプロセスに前記プログラミング・インタフェースを呼び出すように指示するために用いられるステップと、
前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップと、を含む。
【0006】
いくつかの実施例において、前記プログラミング・インタフェースは、関数タイプを指示するための呼び出し関数識別子を有し、前記第1のプロセスが前記プログラミング・インタフェースに対応するハイジャック・コードを呼び出すステップは、
前記プログラミング・インタフェースの関数タイプが通常タイプであることに応答し、前記第1のプロセスが、予め設定されたハイジャック・ライブラリにより、前記プログラミング・インタフェースの呼び出し関数識別子に対応するハイジャック・コードを呼び出すステップであって、前記予め設定されたハイジャック・ライブラリは、複数のハイジャック・コードを含むステップを含む。
【0007】
いくつかの実施例において、前記方法は、
前記プログラミング・インタフェースの関数タイプが隠しタイプであることに応答し、前記第1のプロセスが、予め設定されたハイジャック・ライブラリにより、前記プログラミング・インタフェースの呼び出し関数識別子に対応するハイジャック・ポインタを決定し、且つ前記ハイジャック・ポインタに基づいて、前記ハイジャック・ポインタに対応するハイジャック・コードを呼び出すステップであって、前記ハイジャック・ポインタは、前記プログラミング・インタフェースに対応するハイジャック・コードの位置を指示するために用いられるステップをさらに含む。
【0008】
いくつかの実施例において、前記実行タスクは、第1のプロセスが記憶データを前記グラフィックスプロセッサ内のビデオメモリに送信することを特徴付けるために用いられ、前記実行タスクは、前記第1のプロセスに対する前記記憶データの記憶アドレスを特徴付けるための第1の仮想アドレスを含み、前記方法は、
前記第1の仮想アドレスが第1のメモリに対応するアドレス範囲内に位置することに応答し、前記第1のプロセスが、予め設定されたマッピング関係により、前記第1の仮想アドレスを第2の仮想アドレスに変換し、且つ前記第2の仮想アドレスを前記第2のプロセスに送信するステップであって、前記第2の仮想アドレスは、前記第2のプロセスに対する前記記憶データの記憶アドレスを特徴付けるために用いられ、前記第1のメモリは、前記第1のプロセスと前記第2のプロセスとの共有メモリであるステップと、
前記第2のプロセスが、前記第2の仮想アドレスにより前記記憶データを取得するステップと、をさらに含み、
前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップは、
前記第1のプロセスに対応する実行要求に応答し、前記第2のプロセスが、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出し、且つ前記記憶データを前記グラフィックスプロセッサに送信するステップを含む。
【0009】
いくつかの実施例において、前記方法は、
前記第1の仮想アドレスが第1のメモリに対応するアドレス範囲外に位置することに応答し、前記第1のプロセスが、前記第1の仮想アドレスにより取得された記憶データを前記第1のメモリに送信するステップと、
前記第2のプロセスが、前記第1のメモリから前記記憶データを取得するステップと、をさらに含む。
【0010】
いくつかの実施例において、前記第1のメモリは、第1のサブメモリと第2のサブメモリとを含み、前記第1のプロセスが、前記第1の仮想アドレスにより取得された記憶データを前記第1のメモリに送信するステップは、
前記第1のプロセスが、取得された記憶データを複数のサブ記憶データに分割し、且つ前記複数のサブ記憶データを前記第1のサブメモリ及び前記第2のサブメモリに交互に順次伝送するステップを含み、
前記第2のプロセスが、前記第1のメモリから前記記憶データを取得するステップは、
前記第2のプロセスが、前記第1のサブメモリ及び前記第2のサブメモリから交互に前記複数のサブ記憶データを取得するステップを含む。
【0011】
いくつかの実施例において、前記第1のプロセスが、前記第1のプロセスに対応する実行要求を第2のプロセスに送信するステップは、
前記第1のプロセスが、前記第1のプロセスに対応する実行要求を前記第1のプロセスに対応する第1のメモリ内の第1のメッセージ・キューに送信するステップであって、前記第1のメモリは、前記第1のプロセスと前記第2のプロセスとの共有メモリであり、前記第1のメッセージ・キューは、前記第1のプロセスと1対1に対応するステップと、
前記第1のプロセスが、前記第1のメッセージ・キューに対応する第1のセマフォ・パラメータを調整するステップであって、前記第1のセマフォ・パラメータは、第1のメッセージ・キューにおける読み取り可能な実行要求の数を特徴付けるために用いられるステップと、
前記第2のプロセスが、調整された第1のセマフォ・パラメータにより、前記第1のメッセージ・キューにおける実行要求を取得するステップと、を含む。
【0012】
いくつかの実施例において、前記第1のプロセスが、前記第1のプロセスに対応する実行要求を前記第1のプロセスに対応する第1のメモリ内の第1のメッセージ・キューに送信するステップは、
前記実行要求の占有するメモリ値が第1の値以下であることに応答し、前記第1のプロセスが、前記実行要求を前記第1のメッセージ・キューに送信するステップを含む。
【0013】
いくつかの実施例において、前記方法は、
前記実行要求の占有するメモリ値が第1の値よりも大きいことに応答し、前記第1のプロセスが、前記実行要求を前記第1のメモリ内の一時メモリに送信し、且つマークアップ情報を生成して前記第1のメッセージ・キューに送信するステップであって、前記一時メモリは、前記第1のプロセスが申請した一時記憶領域であり、前記マークアップ情報は、前記実行要求の位置情報を指示するステップをさらに含み、
前記第2のプロセスが、調整された第1のセマフォ・パラメータにより、前記第1のメッセージ・キュー内の実行要求を取得するステップは、
前記第2のプロセスが、調整された第1のセマフォ・パラメータにより、前記第1のメッセージ・キュー内のマークアップ情報を取得し、且つ前記マークアップ情報により前記一時メモリ内の実行要求を取得するステップと、
前記第2のプロセスが、前記一時メモリを解放するステップと、を含む。
【0014】
いくつかの実施例において、前記方法は、
前記第2のプロセスが、前記グラフィックスプロセッサが返信した実行結果を、前記実行結果に対応する第1のプロセスに対応する第1のメモリ内の第2のメッセージ・キューに送信するステップであって、前記第1のメモリは、前記第1のプロセスと前記第2のプロセスとの共有メモリであり、前記第2のメッセージ・キューは、前記第1のプロセスと1対1に対応するステップと、
前記第2のプロセスが、前記第2のメッセージ・キューに対応する第2のセマフォ・パラメータを調整するステップであって、前記第2のセマフォ・パラメータは、第2のメッセージ・キューにおける読み取り可能な実行要求の数を特徴付けるために用いられるステップと、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける実行結果を取得するステップと、をさらに含む。
【0015】
いくつかの実施例において、前記第1のプロセスは、第1のスレッド識別子と1対1に対応する複数の第1のスレッドを含み、前記実行結果は、第1のスレッド識別子を有し、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける実行結果を取得するステップは、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける各前記第1のスレッドの第1のスレッド識別子に対応する実行結果を複数の第1のスレッドがそれぞれ取得するように、前記第1のプロセスにおける複数の第1のスレッドをウェイクアップさせるステップを含む。
【0016】
いくつかの実施例において、前記第1のプロセスは、第1のスレッド識別子と1対1に対応する複数の第1のスレッドを含み、前記実行結果は、第1のスレッド識別子を有し、
前記第1のプロセスが、調整された第2のセマフォ・パラメータにより、前記第2のメッセージ・キューにおける実行結果を取得するステップは、
前記第1のプロセスが、調整された第2のセマフォ・パラメータ及び予め設定された第1のスレッド識別子とコンテナとの間の対応関係により、前記第2のメッセージ・キューにおける実行結果を、前記第1のスレッド識別子に対応する前記実行結果におけるコンテナに記憶するステップであって、前記コンテナは、リンク・テーブル形式の記憶構造であるステップと、
第1のスレッドが前記第1のスレッドの第1のスレッド識別子に対応する実行結果を対応するコンテナから取得するように、前記第1のプロセスが、前記コンテナに対応する第1のスレッドをウェイクアップさせるステップと、を含む。
【0017】
いくつかの実施例において、前記コンテナの数は、複数であり、且つ1つのコンテナは、複数の第1のスレッド識別子に対応する。
【0018】
いくつかの実施例において、前記第1のプロセスが呼び出し命令に応答する前に、前記方法は、
前記第2のプロセスが、前記グラフィックスプロセッサに対応する第2のスレッドを前記第2のプロセス内に作成するステップと、
前記第1のプロセスが、前記第1のプロセスに対応する接続要求を前記第2のプロセスに送信ステップであって、前記接続要求は、前記第2のプロセスとの通信接続の確立を特徴付けるステップと、
前記第2のプロセスが、前記第1のプロセスに対応する接続要求に応答し、前記第1のプロセスに対応する第3のスレッドを前記第2のプロセス内に作成するステップであって、前記第3のスレッドは、その対応する第1のプロセスが送信した実行要求を取得するために用いられるステップと、をさらに含み、
前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップは、
前記第2のプロセスにおける第2のスレッドが、前記第3のスレッドが送信した実行要求に応答し、前記プログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップを含む。
【0019】
いくつかの実施例において、前記プログラミング・インタフェースは、呼び出し関数識別子を有し、前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップは、
前記プログラミング・インタフェースに対応する呼び出し関数識別子が同期関数識別子に属することに応答し、前記第2のプロセスが、置換ライブラリにより、前記プログラミング・インタフェースの呼び出し関数識別子に対応する置換コードを呼び出すステップであって、前記置換コードは、前記呼び出し関数識別子に対応するプログラミング・インタフェースの同期機能コードを非同期機能コードに置換するために用いられ、前記置換ライブラリは、複数の置換コードを含むステップと、
前記第2のプロセスが、前記第1のプロセスに対応するプログラミング・インタフェースの置換コードにより、グラフィックスプロセッサを呼び出し、且つ前記グラフィックスプロセッサが返信した非同期通知を受信するステップであって、前記非同期通知は、第1のプロセスが送信した実行要求を継続して実行するように第2のプロセスに指示するために用いられるステップと、を含む。
【0020】
いくつかの実施例において、前記実行要求は、前記プログラミング・インタフェースのインタフェース情報を含み、前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップは、
前記第2のプロセスが、前記第1のプロセスに対応する実行要求内のインタフェース情報に応答し、前記第1のプロセスに対応するプログラミング・インタフェースを決定し、且つ前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出すステップを含む。
【0021】
いくつかの実施例において、前記プログラミング・インタフェースは、統合的コンピューティング機器アーキテクチャ駆動アプリケーションのプログラミング・インタフェースである。
【0022】
いくつかの実施例において、前記第1のプロセスは、複数の第1のプロセスである。
【0023】
第2の態様において、本願は、第1の態様のいずれか1項に記載の方法を実現するための中央プロセッサを提供する。
【0024】
第3の態様において、本願は、第2の態様に記載の中央プロセッサと、グラフィックスプロセッサとを含む制御チップを提供する。
【0025】
第4の態様において、本願は、第3の態様に記載の制御チップが設定される車両を提供する。
【0026】
第5の態様において、本願は、メモリと、中央プロセッサと、グラフィックスプロセッサとを含む電子機器を提供し、
メモリは、前記中央プロセッサ実行可能命令を記憶するためのメモリであり、
ここで、前記中央プロセッサは、前記実行可能命令により、第1の態様のいずれか1項に記載の方法を実行するために用いられる。
【0027】
第6の態様において、本願は、プロセッサにより実行される時、第1の態様のいずれか1項に記載の方法を実現するためのコンピュータ実行命令が記憶されたコンピュータ読み取り可能な記憶媒体を提供する。
【0028】
第7の態様において、本願は、プロセッサにより実行される時、第1の態様のいずれか1項に記載の方法を実現するコンピュータプログラムを含むコンピュータプログラム製品である。
【発明の効果】
【0029】
本願にて提供されるグラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器は、前記方法が中央プロセッサに適用され、前記中央プロセッサは、第1のプロセスと第2のプロセスとが実行され、前記方法は、前記第1のプロセスが、前記第1のプロセスの実行タスクに対応するプログラミング・インタフェースのコールを指示し、前記プログラミング・インタフェースに対応するハイジャック・コードを呼び出すための呼び出し命令に応答するステップであって、前記ハイジャック・コードは、実行要求の発行を指示するために用いられるステップと、前記第1のプロセスが、前記ハイジャック・コードを実行し、前記第1のプロセスに対応する実行要求を第2のプロセスに送信するステップであって、前記実行要求は、第2のプロセスに前記プログラミング・インタフェースを呼び出すように指示するために用いられるステップと、前記第2のプロセスが、前記第1のプロセスに対応する実行要求に応答し、前記第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出し、且つグラフィックスプロセッサにより第1のプロセスの実行タスクを実行することで、実行タスクの処理効率を向上させるステップと、を含む。
【図面の簡単な説明】
【0030】
本明細書における図面は、本明細書に組み込まれ、本明細書の一部を構成し、本願に適合する実施例を示し、本願の原理を解釈するために本明細書とともに使用される。
【0031】
図1】本願の実施例にて提供されるグラフィックスプロセッサの呼び出し方法のフロー模式図である。
図2】本願の実施例にて提供される第1の応用シーン模式図である。
図3】本願の実施例にて提供される記憶データをグラフィックスプロセッサに送信する方法のフロー模式図である。
図4】本願の実施例にて提供される第1のプロセスと第2のプロセスとがデータ伝送を行うシーン模式図である。
図5】本願の実施例にて提供される第1のプロセスが実行要求を第2のプロセスに送信する方法のフロー模式図である。
図6】本願の実施例にて提供される第2の応用シーン模式図である。
図7】本願の実施例にて提供される第1のプロセスが実行要求を第2のプロセスに送信する別の方法のフロー模式図である。
図8】本願の実施例にて提供される第2のプロセスが実行結果を第1のプロセスに返信する方式のフロー模式図である。
図9】本願の実施例にて提供される第3の応用シーン模式図である。
図10】本願の実施例にて提供される第4の応用シーン模式図である。
図11】本願の実施例にて提供される第1のプロセスと第2のプロセスとの通信接続の確立方法のフロー模式図である。
図12】本願の実施例にて提供される第5の応用シーン模式図である。
図13】本願の実施例にて提供される第2のプロセスがグラフィックスプロセッサを呼び出す方法のフロー模式図である。
図14】本願の実施例にて提供されるグラフィックスプロセッサの動作のフロー模式図である。
図15】本願の実施例にて提供される電子機器の構造の模式図である。
【0032】
本願の明確な実施例は、上記図面により示され、以下でより詳細に記述される。これらの図面及び文字記述は、本願の考えの範囲をいかなる方式で限定するものではなく、所定の実施例を参照することで当業者に本願の概念を説明するものである。
【発明を実施するための形態】
【0033】
本明細書において、例示的な実施例を詳細に説明し、その例が図面に示される。以下の記述が図面に関する場合、特に示さない限り、異なる図面における同一の参照番号は、同一又は類似の要素を示す。以下の例示的な実施例に記述された実施形態は、本願と一致する全ての実施形態を表すものではない。むしろ、それらは、本願のいくつかの態様に合致する装置及び方法の例である。
【0034】
人工知能及びディープラーニング分野が絶えず進むにつれて、上記技術で関連するコンピューティング又は処理を行う場合、通常、中央プロセッサのコンピューティング・リソースを多く消費する必要がある。中央プロセッサの実行リソースの限定により、コンピューティング・タスクに多くのコンピューティング・リソースが必要である場合、中央プロセッサは、コンピューティング・タスクに対応するコンピューティング結果を適時に提供することができず、処理効率が低い。
【0035】
グラフィックスプロセッサ(graphics processing unit、GPU)は、強力なコンピューティング能力を有するマイクロプロセッサであり、中央プロセッサ(central processing unit、CPU)による画像処理などのコンピューティング・タスクの実行を補助するために用いられる。どのようにグラフィックスプロセッサを呼び出すことでコンピューティング・タスクの処理効率を上げるかは、急務の課題である。
【0036】
一例において、中央プロセッサでグラフィックスプロセッサを呼び出す必要があるプロセスは、グラフィックス処理のプログラミング・インタフェースを直接呼び出すことで、グラフィックスプロセッサへの呼び出しを実現することができる。しかしながら、現在のGPUは、GPUのハードウェア・リソースに限定されることにより、複数のプロセスの同時アクセスをサポートしないため、さらにGPU内の多くのコンピューティング・リソースの浪費をもたらす。
【0037】
本願は、上記技術的課題の少なくとも1つを解決するために、グラフィックスプロセッサの呼び出し方法、中央プロセッサ及び機器を提供する。
【0038】
以下、具体的な実施例で本願の技術的解決手段及び本願の技術的解決手段がどのように上記技術的課題を解決するかについて詳細に説明する。以下のいくつかの具体的な実施例は、互いに組み合わされてもよく、同一又は同様の概念又は過程について、ある実施例において、再度説明しないことがある。以下、本願の実施例について図面と組み合わせて記述する。
【0039】
図1は、本願の実施例にて提供されるグラフィックスプロセッサの呼び出し方法のフロー模式図である。本実施例にて提供される方法は、第1のプロセスと第2のプロセスとが実行される中央プロセッサに適用される。いくつかの実施例において、本願の実施例にて提供されるグラフィックスプロセッサの呼び出し方法は、組み込み機器、例えば、Xavierチップにも適用され、当該チップにはGPU及びCPUが集積され、車両に搭載可能であり、車両レーダー、カメラ、レーザレーダー及び超音波システムからの自律運転データを処理するために用いられる。
【0040】
本実施例にて提供される方法は、以下のステップを含む。
【0041】
S101において、第1のプロセスは、第1のプロセスの実行タスクに対応するプログラミング・インタフェースのコールを指示し、プログラミング・インタフェースに対応するハイジャック・コードを呼び出すための呼び出し命令に応答し、ハイジャック・コードは、実行要求の発行を指示するために用いられる。
【0042】
例示的に、現在、プロセスがグラフィックスプロセッサを呼び出す必要がある場合、通常、グラフィックスプロセッサのプログラミング・インタフェースを呼び出し、且つ当該プログラミング・インタフェースを解析し、当該プログラミング・インタフェースの実行コードを実行することで実現され、ここで、プログラミング・インタフェースの実行コードは、グラフィックスプロセッサの開発者により提供されるプログラミング・インタフェースの具体的な実行ロジックとして理解される。本実施例において、第1のプロセスの実行中に、グラフィックスプロセッサのプログラミング・インタフェースを呼び出す必要がある場合、第1のプロセスは、呼び出し命令に応答し、当該プログラミング・インタフェースに対応するハイジャック・コードを直接呼び出し、ここで、当該ハイジャック・コードは、実行要求を第2のプロセスに送信することを特徴付けるために用いられる。即ち、本ステップにおいて、第1のプロセスは、当該第1のプロセスの実行タスクに対応するプログラミング・インタフェースを呼び出す呼び出し命令に応答する場合、第1のプロセスが実際に呼び出すのは、当該プログラミング・インタフェースに対応するハイジャック・コードである。
【0043】
一例において、プログラミング・インタフェースは、統合的コンピューティング機器アーキテクチャ駆動アプリケーションのプログラミング・インタフェースである。
【0044】
一例において、第1のプロセスが、当該第1のプロセスの実行タスクに対応するプログラミング・インタフェースを呼び出す時、当該プログラミング・インタフェースに対応するハイジャック文書を実行するようにするために、当該インタフェースに対応する実行文書でハイジャック処理を行うことができる。列挙として、グラフィックスプロセッサにより提供されるプログラミング・インタフェースの実行コードが全てlibcuda.soライブラリに記憶されれば、あるグラフィックスプロセッサのプログラミング・インタフェースを具体的に呼び出す時、第1のプロセスは、プログラミング・インタフェースを呼び出す命令を解析した後、libcuda.soライブラリにより、現在呼び出す必要があるプログラミング・インタフェースに対応する実行コードをルックアップする。本実施例において、第1のプロセスが呼び出し命令に応答する時に当該プログラミング・インタフェースに対応するハイジャック・コードを呼び出すことができるようにするために、libcuda.soライブラリに含まれる実行コードを置換し、各プログラミング・インタフェースに対応する実行コードをハイジャック・コードに置換することができ、さらに、第1のプロセスが呼び出し命令に応答する時、具体的に実行されるコードは、元の実行コードではなく、ハイジャック・コードである。
【0045】
S102において、第1のプロセスは、ハイジャック・コードを実行し、第1のプロセスに対応する実行要求を第2のプロセスに送信し、実行要求は、第2のプロセスにプログラミング・インタフェースを呼び出すように指示するために用いられる。
【0046】
例示的に、第1のプロセスがハイジャック・コードを実行した後、第1のプロセスは、第2のプロセスにプログラミング・インタフェースを呼び出すように指示するための実行要求を第2のプロセスに送信する。つまり、第1のプロセスは、ステップS101とステップS102とを実行することで、第2のプロセスに本来第1のプロセスが呼び出す必要があるプログラミング・インタフェースを呼び出すように、本来プログラミング・インタフェースを呼び出す必要がある要求を第2のプロセスに送信する。
【0047】
S103において、第2のプロセスは、第1のプロセスに対応する実行要求に応答し、第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出す。
【0048】
例示的に、本実施例における第2のプロセスは、第1のプロセスが送信した実行要求を受信し、且つ受信した第1のプロセスに対応する実行要求に基づいて、実行要求に対応するプログラミング・インタフェースを呼び出し、さらにグラフィックスプロセッサへの呼び出しを実現することができる。
【0049】
一例において、中央プロセッサは、複数の第1のプロセスを実行する。複数の第1のプロセスは、図1に示す実施例におけるステップS101~ステップS103でグラフィックスプロセッサへの呼び出しを実現することができる。具体的には、第2のプロセスは、複数の第1のプロセスが送信した実行要求を受信した場合、複数の第1のプロセスが実行要求を送信した時系列に基づいて、各第1のプロセスに対応する実行要求に順次応答することができる。又は、各第1のプロセスが送信した実行要求には、当該実行要求に対応する優先度クラスがさらに含まれ、第2のプロセスは、優先度クラスの並び順に基づいて、各第1のプロセスが送信した実行要求に応答することができる。
【0050】
一例において、実行要求にプログラミング・インタフェースのインタフェース情報が含まれ、列挙として、インタフェース情報は、プログラミング・インタフェースの識別子、プログラミング・インタフェースに必要なパラメータなどを含んでもよい。第2のプロセスは、実行要求を受信した後、第1のプロセスに対応する実行要求内のインタフェース情報に応答し、受信したインタフェース情報を解析し、第1のプロセスが呼び出す必要があるプログラミング・インタフェースを決定し、その後、第2のプロセスは、決定されたプログラミング・インタフェースによりグラフィックスプロセッサを呼び出す。
【0051】
一例において、実行要求にグラフィックスプロセッサ内のコンピューティング・ユニットのパラメータ(例えば、kernelパラメータ)がさらに含まれ、第2のプロセスは、第1のプロセスが送信したコンピューティング・ユニットのパラメータを受信する時、受信したコンピューティング・ユニットのパラメータに基づいて、グラフィックスプロセッサ内のコンピューティング・ユニットへの呼び出しを実現することができる。1つの可能な状況において、実行要求内のコンピューティング・ユニットのパラメータが当該コンピューティング・ユニットを起動する関数に含まれ、第1のプロセスは、第2のプロセスにより解析されたポインタの長さ及び2次元ポインタの数により、呼び出す必要があるコンピューティング・ユニットのパラメータを当該コンピューティング・ユニットの関数において決定する必要がある。
【0052】
列挙として、図2は、本願の実施例にて提供される第1の応用シーン模式図である。図2に示すように、中央プロセッサに、第2のプロセスと3つの異なる第1のプロセスとが含まれ、図において、それぞれ第1のプロセス1、第1のプロセス2、及び第1のプロセス3で示される。3つの第1のプロセスは、実行要求を第2のプロセスに送信した後、第2のプロセスがグラフィックスプロセッサを呼び出すことを実現することで、さらに複数の第1のプロセスのグラフィックスプロセッサへの呼び出しを実現することができる。
【0053】
本実施例において、中央プロセッサに第1のプロセスと1つの第2のプロセスとが実行される。第1のプロセスがグラフィックスプロセッサを呼び出す必要がある場合、第1のプロセスは、呼び出し命令に応答し、呼び出し命令内のプログラミング・インタフェースに対応するハイジャック・コードを呼び出し、その後、第1のプロセスは、ハイジャック・コードを実行することで、実行要求を第2のプロセスに送信し、且つ当該実行要求により、第2のプロセスに、本来第1のプロセスが呼び出す必要があるプログラミング・インタフェースを呼び出すように指示し、さらにグラフィックスプロセッサにより対応する実行タスクを実行し、実行タスクの処理効率を向上させる。また、本実施例にて提供される方法は、複数の第1のプロセスがグラフィックスプロセッサを呼び出す必要がある応用シーンにも適用される。中央プロセッサにグラフィックスプロセッサを呼び出す必要がある第1のプロセスが複数ある場合、本来複数の第1のプロセスがグラフィックスプロセッサを呼び出す必要がある実行ステップは、いずれも第2のプロセスにより実行され、即ち、第2のプロセスにより複数の第1のプロセスによるグラフィックスプロセッサへの呼び出しを実現する。グラフィックスプロセッサに対しては、現在、第2のプロセスのみがグラフィックスプロセッサを呼び出し、複数の第1のプロセスが同時にグラフィックスプロセッサを呼び出すという効果を実現し、グラフィックスプロセッサのリソース利用率を向上させる。
【0054】
いくつかの実施例において、呼び出し命令は、呼び出されたプログラミング・インタフェースが呼び出し関数識別子を有することを指示し、ここで、呼び出し関数識別子は、関数タイプを指示するために用いられ、関数タイプは、通常タイプと、隠しタイプとを含み、ここで、通常タイプのプログラミング・インタフェースに対応する実行コードは、オープンソースコードである。また、本実施例において、予め設定されたハイジャック・ライブラリがさらに設定される。ここで、予め設定されたハイジャック・ライブラリは、中央プロセッサのメモリ又は当該中央プロセッサが所在する電子機器のメモリに記憶されてもよく、ここで、予め設定されたハイジャック・ライブラリの記憶位置について具体的に限定されない。予め設定されたハイジャック・ライブラリには複数のハイジャック・コードが含まれ、ハイジャック・コードとプログラミング・インタフェースとは1対1に対応する。
【0055】
一例において、ハイジャック・コードとプログラミング・インタフェースとの対応関係は、同一の呼び出し関数識別子を設定することで確立することができる。第1のプロセスは、呼び出す必要があるプログラミング・インタフェースの関数タイプが通常タイプであると決定した場合、当該呼び出し関数識別子に基づいて、当該プログラミング・インタフェースの呼び出し関数識別子に対応するハイジャック・コードを予め設定されたハイジャック・ライブラリからルックアップすることができる。
【0056】
1つの可能な状況において、隠しタイプのプログラミング・インタフェースに対応する実行コードは、オープンソースではなく、ユーザは、隠しタイプのプログラミング・インタフェースの関数ポインタしか解析できず、ここで、関数ポインタは、当該プログラミング・インタフェースの実行コードを指すために用いられ、つまり、プロセスが隠しタイプのプログラミング・インタフェースを呼び出す場合、まずプログラミング・インタフェースに対応する関数ポインタを決定し、且つ関数ポインタに基づいて、当該プログラミング・インタフェースに対応する実行コードを決定する必要がある。そのため、隠しタイプのプログラミング・インタフェースに対して、予め設定されたハイジャック・ライブラリに、複数のハイジャック・ポインタと各ハイジャック・ポインタに対応するハイジャック・コードとがさらに設定され、且つ、各ハイジャック・ポインタは、さらに1つの呼び出し関数識別子に対応する。
【0057】
第1のプロセスは、呼び出す必要があるプログラミング・インタフェースの関数タイプが隠しタイプであると決定した場合、第1のプロセスは、予め設定されたハイジャック・ライブラリにおいて、当該プログラミング・インタフェースの呼び出し関数識別子に対応するハイジャック・ポインタを決定し、且つ当該ハイジャック・ポインタに基づいて、当該ハイジャック・ポインタに対応するハイジャック・コードを決定する必要がある。
【0058】
本実施例において、第1のプロセスが呼び出し命令に応答し、プログラミング・インタフェースに対応するハイジャック・コードを呼び出す時、第1のプロセスが実行要求を第2のプロセスに送信する正確性を確保するように、呼び出し命令に対応するプログラミング・インタフェースの関数タイプに基づいて、異なる方式で、当該プログラミング・インタフェースに対応するハイジャック・コードを決定する。
【0059】
いくつかの実施例において、図3は、本願の実施例にて提供される記憶データをグラフィックスプロセッサに送信する方法のフロー模式図である。呼び出し命令内の実行タスクは、第1のプロセスが記憶データをグラフィックスプロセッサ内のビデオメモリに送信することを特徴付けるために用いられる場合、実行タスクは、第1のプロセスに対する記憶データの記憶アドレスを特徴付けるための第1の仮想アドレスを含む。第1のプロセスが、グラフィックスプロセッサを呼び出すプログラミング・インタフェースにより、記憶データをグラフィックスプロセッサに送信する必要がある場合、上記図1に示すグラフィックスプロセッサの呼び出し方法に加え、ステップS102の後、以下のステップをさらに含む。
【0060】
S201において、第1のプロセスは、第1のプロセスの実行タスクに対応するプログラミング・インタフェースのコールを指示し、プログラミング・インタフェースに対応するハイジャック・コードを呼び出すための呼び出し命令に応答し、ハイジャック・コードは、実行要求の発行を指示するために用いられる。
【0061】
例示的に、ステップS201の具体的な原理は、図1のステップS101を参照することができ、ここではその説明が省略される。
【0062】
S202において、第1のプロセスは、ハイジャック・コードを実行し、第1のプロセスに対応する実行要求を第2のプロセスに送信し、実行要求は、第2のプロセスにプログラミング・インタフェースを呼び出すように指示するために用いられる。
【0063】
例示的に、ステップS202の具体的な原理は、図1のステップS101を参照することができ、ここではその説明が省略される。
【0064】
S203において、第1の仮想アドレスが第1のメモリに対応するアドレス範囲に位置することに応答し、第1のプロセスは、予め設定されたマッピング関係により、第1の仮想アドレスを第2の仮想アドレスに変換し、且つ第2の仮想アドレスを第2のプロセスに送信し、第2の仮想アドレスは、第2のプロセスに対する記憶データの記憶アドレスを特徴付けるために用いられ、第1のメモリは、第1のプロセスと第2のプロセスとの共有メモリである。
【0065】
例示的に、本実施例において、第1のプロセスが記憶データをグラフィックスプロセッサに送信する必要がある場合、第1のプロセスによるグラフィックスプロセッサのプログラミング・インタフェースの呼び出しは、いずれも第2のプロセスにより実行されるため、第1のプロセスは、記憶データを第2のプロセスに送信する必要があり、第2のプロセスは、グラフィックスプロセッサのプログラミング・インタフェースを呼び出す時、第2のプロセスが取得した記憶データをグラフィックスプロセッサに送信することができる。また、第1のメモリがさらに設定され、第1のメモリを第1のプロセスと第2のプロセスとの共有メモリとする。
【0066】
第1のプロセスが、実行タスクに含まれる第1の仮想アドレスが第1のメモリのアドレス範囲内に位置すると決定した場合、同一の記憶空間に対して、異なるプロセスが同一の記憶空間にデータを記憶する時に決定された記憶アドレスは、異なるため、第1のプロセスは、さらに、記憶データに対応する第1の仮想アドレスを、第2のプロセスが認識可能なアドレスに変換する必要がある。具体的には、第1のプロセスは、予め設定されたマッピング関係に基づいて、記憶データに対応する第1の仮想アドレスを第2の仮想アドレスに変換することができ、第2の仮想アドレスは、第2のプロセスに対する記憶データの記憶アドレスを特徴付けるために用いられ、その後、第2のプロセスが第2の仮想アドレスにより第1のメモリから記憶データを取得することができるように、第1のプロセスは、第2の仮想アドレスを第2のプロセスに送信する。第2のプロセスは、当該第1のプロセスが送信した実行要求内のプログラミング・インタフェースを呼び出す時、得られた記憶データをグラフィックスプロセッサに送信する。
【0067】
一例において、第1のプロセスと第2のプロセスとの共有メモリは、第2のプロセスが作成したものであってもよい。第2のプロセスが共有メモリから記憶データを取得した後、第2のプロセスは、当該共有メモリを解放してメモリ・リソースを節約することができる。
【0068】
なお、第1のプロセスと第2のプロセスとの共有メモリ(即ち、第1のメモリ)は、第1のプロセスが申請して作成したものであってもよく、第2のプロセスが申請して作成したものであってもよく、ここでは具体的に限定されない。
【0069】
S204において、第2のプロセスは、第2の仮想アドレスに基づいて、記憶データを取得する。
【0070】
例示的に、第2のプロセスは、第1のプロセスが送信した第2の仮想アドレスを受信した後、第2の仮想アドレスに対応する記憶データ、即ち、この時に第1のプロセスがグラフィックスプロセッサのビデオメモリに送信する必要がある記憶データを、第1のメモリにルックアップする。
【0071】
S205において、第1のプロセスに対応する実行要求に応答し、第2のプロセスは、第1のプロセスに対応するプログラミング・インタフェースによりグラフィックスプロセッサを呼び出し、且つ記憶データをグラフィックスプロセッサに送信する。
【0072】
例示的に、第2のプロセスは、当該第1のプロセスが送信した実行要求内のプログラミング・インタフェースを呼び出す時、得られた記憶データをグラフィックスプロセッサに送信する。
【0073】
本実施例において、第1のプロセスが記憶データをグラフィックスプロセッサに送信する必要がある場合、第1のプロセスは、記憶データに対応する第1の仮想アドレスが第1のメモリのアドレス範囲に位置すると決定した時、第1のプロセスは、第1の仮想アドレスを第2の仮想アドレスに変換し、さらに、第2のプロセスは、第2の仮想アドレスに基づいて第1のメモリから記憶データを取得することができ、第2のプロセスが当該第1のプロセスの実行要求を受信する時、実行要求内のインタフェースを呼び出すと同時に、記憶データをグラフィックスプロセッサに送信する。
【0074】
いくつかの実施例において、図3に示す方法に加え、本実施例にて提供される記憶データをグラフィックスプロセッサに送信する方法は、第1のプロセスが、第1の仮想アドレスが第1のメモリに対応するアドレス範囲外に位置することに応答し、第1の仮想アドレスにより取得された記憶データを第1のメモリに送信するステップと、第2のプロセスが、第1のメモリから記憶データを取得するステップと、をさらに含む。
【0075】
例示的に、第1のプロセスは、記憶データの第1の仮想アドレスの記憶位置が第1のメモリに位置せず、即ち、記憶データが第1のプロセスと第2のプロセスとの共有メモリに保存されないと決定した場合、第1のプロセスは、当該記憶データを第1のメモリに記憶することができる。その後、第2のプロセスは、第1のメモリから記憶データを取得することができる。一例において、第2のプロセスが第1のメモリから記憶データを取得する時、第1のプロセスは、第1のメモリ内の記憶データの記憶アドレスを第2のプロセスに送信することができ、その後、第2のプロセスは、第1のプロセスが送信した記憶アドレスに基づいて第1のメモリ内の記憶データを取得することができる。
【0076】
一例において、第1のプロセスが記憶データを第1のメモリに送信する場合、記憶データを第1のメモリに一度に全て格納することが考えられる。
【0077】
又は、一例において、第1のメモリに、第1のサブメモリと第2のサブメモリとが含まれ、第1のプロセスは、取得した記憶データを複数のサブ記憶データに分割し、且つ複数のサブ記憶データを第1のサブメモリと第2のサブメモリとに交互に順次伝送する。第2のプロセスは、第1のサブメモリ及び第2のサブメモリから複数のサブ記憶データを交互に取得する。
【0078】
例示的に、第1のプロセスは、記憶データを複数のサブ記憶データに分割し、その後、複数のサブ記憶データを第1のメモリ内の分割された第1のサブメモリと第2のサブメモリとに交互に順次記憶することができる。その後、第2のプロセスは、第1のプロセスが交互に送信する複数のサブ記憶データを、第1のメモリ内の分割された第1のサブメモリと第2のサブメモリから交互に取得することができ、さらにデータ送信効率を向上させる。
【0079】
列挙として、図4は、本願の実施例にて提供される第1のプロセスと第2のプロセスとがデータ伝送を行うための模式図である。図において、第1のプロセスと第2のプロセスとの共有の第1のメモリを、第1のサブメモリと第2のサブメモリとの2つのサブメモリに分割する。且つ、記憶データを複数のサブ記憶データに分割する。第1のプロセスが記憶データを第1のメモリに送信する時、複数のサブ記憶データを、第1のメモリ内の第1のサブメモリと第2のサブメモリとに交互に送信することができる。また、同時に、第2のプロセスは、第1のサブメモリと第2のサブメモリとからサブ記憶データを交互に順次取得することができる。
【0080】
例えば、記憶データは、サブ記憶データ1と、サブ記憶データ2と、サブ記憶データ3と、サブ記憶データ4とに分割される場合、まずサブ記憶データ1とサブ記憶データ2とを第1のサブメモリと第2のサブメモリとに順次伝送し、その後、第2のプロセスは、第1のサブメモリからサブ記憶データ1を取得することができ、第2のプロセスがサブ記憶データ1を取得した後、第1のプロセスは、サブ記憶データ3を第1のサブメモリに記憶することができると同時に、第1のプロセスがサブ記憶データ3を送信する時、第2のプロセスは、第2のサブメモリから記憶データ2を継続して取得することができ、さらに、上記第1のプロセスがサブ記憶データを交互に記憶し、第2のプロセスが第1のメモリ内のサブ記憶データを交互に取得する方式で、第1のプロセスと第2のプロセスとのデータ伝送の時間を節約することができ、且つ、第1のメモリを2つのサブメモリに分割する方式で、第1のメモリがメモリ空間を大幅に占有するという問題をさらに回避し、メモリ・リソースを節約することができる。
【0081】
いくつかの実施例において、ステップS102を実行する時、即ち、第1のプロセスが第1のプロセスに対応する実行要求を第2のプロセスに送信する時、具体的に、以下のステップで実行することができ、図に示すように、図5は、本願の実施例にて提供される第1のプロセスが実行要求を第2のプロセスに送信する方法のフロー模式図である。
【0082】
ステップS1021において、第1のプロセスは、第1のプロセスに対応する実行要求を第1のプロセスに対応する第1のメモリ内の第1のメッセージ・キューに送信し、第1のメモリは、第1のプロセスと第2のプロセスとの共有メモリであり、第1のメッセージ・キューは、第1のプロセスと1対1に対応する。
【0083】
例示的に、本実施例において、第1のプロセスと第2のプロセスとの共有の第1のメモリに第1のメッセージ・キューが設定され、ここで、第1のプロセスと第1のメッセージ・キューとは、1対1に対応する。第1のメッセージ・キューは、当該メッセージ・キューに対応する第1のプロセスが送信した実行要求を受信するために用いられることができる。列挙として、図6は、本願の実施例にて提供される第2の応用シーン模式図であり、ここで、3つの第1のプロセスが含まれ、且つ、各第1のプロセスは、それぞれの第1のメッセージ・キューに対応する。図6において、第1のプロセス1は、第1のメッセージ・キュー1に対応し、第1のプロセス2は、第1のメッセージ・キュー2に対応し、第1のプロセス3は、第1のメッセージ・キュー3に対応する。ここで、各第1のプロセスは、その対応する第1のメッセージ・キューにより実行要求を第2のプロセスに送信することができる。
【0084】
ステップS1022において、第1のプロセスは、第1のメッセージ・キューに対応する第1のセマフォ・パラメータを調整し、第1のセマフォ・パラメータは、第1のメッセージ・キューにおける読み取り可能な実行要求の数を特徴付けるために用いられ、
例示的に、第1のメッセージ・キューには、第1のセマフォ・パラメータがさらに対応して設定され、ここで、第1のセマフォ・パラメータは、第1のメッセージ・キューに保存された実行要求の数を特徴付けるために用いられることができ、第2のプロセスは、第1のセマフォ・パラメータの値に基づいて、現在の第1のメッセージ・キューに実行要求が存在するか否かを決定することができる。第1のプロセスは、送信する必要がある実行要求を第1のプロセスに対応する第1のメッセージ・キューに送信した後、第1のプロセスは、第1のセマフォ・パラメータを調整し、第1のセマフォ・パラメータを現在の第1のメッセージ・キュー内の実行要求の数に調整し、さらに第1のメッセージ・キュー内から実行要求を取得するように第2のプロセスに通知する。
【0085】
ステップS1023において、第2のプロセスは、調整された第1のセマフォ・パラメータに基づいて、第1のメッセージ・キューにおける実行要求を取得する。
【0086】
例示的に、第2のプロセスは、第1のセマフォ・パラメータを監視することで、現在のメッセージ・キューに実行要求が存在するか否かを決定することができる。第1のプロセスが実行要求を第1のメッセージ・キューに取り入れ、且つ第1のセマフォ・パラメータを調整した後、第2のプロセスは、調整されたセマフォ・パラメータに基づいて、第1のメッセージ・キューから実行要求を取得することができる。
【0087】
列挙として、第1のメッセージ・キューは、最初に、その対応する第1のセマフォ・パラメータを0に設定することができ、その後、第1のプロセスが4つの実行要求を第1のメッセージ・キューに送信した後、第1のセマフォ・パラメータを4に設定することができ、その後、第2のプロセスは、第1のセマフォ・パラメータの取り得る値が0に等しくないことを監視すると、実行要求を第1のメッセージ・キューから順次取得する。また、第2のプロセスが第1のメッセージ・キューから実行要求を取り出した後、第1のセマフォ・パラメータの取り得る値を対応して調整することもでき、例えば、第2のプロセスが1つの実行要求を第1のメッセージ・キューから取り出した後、第1のセマフォ・パラメータを1だけ減らす処理を行うことができ、即ち、第1のセマフォ・パラメータを数値4から数値3に調整することができる。
【0088】
本実施例において、第1のプロセスは、第1のメッセージ・キューにより実行要求を第2のプロセスに送信することができる。且つ、第1のプロセスは、第1のメッセージ・キューの信号量を調整することに基づいて、第1のメッセージ・キューから実行要求を取得するように第2のプロセスに通知することができる。
【0089】
一例において、第1のプロセスが実行要求を第1のメッセージ・キューに送信する時、具体的には、実行要求の占有するメモリ値を判断することもできる。第1のプロセスは、実行要求の占有するメモリ値が第1の値以下であることに応答し、第1のプロセスは、実行要求を第1のメッセージ・キューに送信する。
【0090】
例示的に、第1のプロセスは、実行要求に対応するメモリ値が第1の値以下であると決定した場合、第1のプロセスは、実行要求を当該第1のプロセスに対応する第1のメモリ内の第1のメッセージ・キューに直接送信することができる。
【0091】
別の例において、図7は、本願の実施例にて提供される第1のプロセスが実行要求を第2のプロセスに送信する別の方法のフロー模式図である。
【0092】
S301において、実行要求の占有するメモリ値が第1の値よりも大きいことに応答し、第1のプロセスは、実行要求を第1のメモリ内の一時メモリに送信し、且つマークアップ情報を生成して第1のメッセージ・キューに送信し、ここで、一時メモリは、第1のプロセスが申請した一時記憶領域であり、マークアップ情報は、実行要求の位置情報を指示する。
【0093】
例示的に、第1のプロセスが実行要求を第1のメッセージ・キューに送信する時、第1のプロセスは、実行要求の占有するメモリ値が第1の値よりも大きいと決定した時、第1のプロセスは、一時メモリを第1のメモリ内に申請し、その後、第1のプロセスは、実行要求を一時メモリに送信することができる。且つ、第2のプロセスが、第1のメッセージ・キューにおけるマークアップ情報を取得した後、マークアップ情報における一時メモリの位置情報に基づいて、実行要求を一時メモリから取得することができるように、第1のプロセスが一時メモリの申請に成功した後、一時メモリの位置情報に基づいてマークアップ情報を生成して第1のプロセスに対応する第1のメッセージ・キューに格納する。
【0094】
S302において、第1のプロセスは、第1のメッセージ・キューに対応する第1のセマフォ・パラメータを調整し、第1のセマフォ・パラメータは、第1のメッセージ・キューにおける読み取り可能な実行要求の数を特徴付けるために用いられる。
【0095】
S303において、第2のプロセスは、調整された第1のセマフォ・パラメータにより、第1のメッセージ・キュー内のマークアップ情報を取得し、且つマークアップ情報により一時メモリ内の実行要求を取得する。
【0096】
例示的に、第2のプロセスは、第1のプロセスが第1のメッセージ・キューの第1のセマフォ・パラメータを調整したと決定した後、第2のプロセスは、マークアップ情報を第1のメッセージ・キューから取得し、且つマークアップ情報に基づいて、当該マークアップ情報に対応する実行要求のアドレスを決定し、その後、決定されたアドレスに基づいて実行要求を取得する。
【0097】
S304において、第2のプロセスは、一時メモリを解放する。
【0098】
例示的に、第2のプロセスが実行要求を取得した後、一時メモリの解放を要求するか、又は第1のプロセスが当該一時メモリを解放するように第1のプロセスに通知し、さらにメモリ・リソースの浪費を回避する。
【0099】
本実施例において、第1のプロセスと第2のプロセスとは、第1のメッセージ・キューにより実行要求を伝送する時、第1のメッセージ・キューの占有する記憶空間が大きい現象を回避するために、本願において、第1のプロセスが実行要求を送信する必要がある場合、第1のプロセスは、現在送信する必要がある実行要求の占有するメモリ値の大きさに基づいて、実行要求の送信方式を決定する。実行要求の占有するメモリ値が大きい場合、第1のプロセスは、一時メモリを第1のメモリ内に申請し、実行要求を記憶するために用いられ、マークアップ情報を第1のメッセージ・キューに送信してもよく、第2のプロセスは、第1のメッセージ・キューからマークアップ情報を取得した後、マークアップ情報に基づいて一時メモリから実行要求を取得することができ、第1のメッセージ・キューの占有するメモリが大きいという問題を回避する。
【0100】
いくつかの実施例において、図8は、本願の実施例にて提供される第2のプロセスが実行結果を第1のプロセスに返信する方式のフロー模式図であり、図1に示す方法のフロー模式図に加え、本願は、以下のステップをさらに含む。
【0101】
S401において、第2のプロセスは、グラフィックスプロセッサが返信した実行結果を、実行結果に対応する第1のメモリ内の第1のプロセスに対応する第2のメッセージ・キューに送信し、ここで、第1のメモリは、第1のプロセスと第2のプロセスとの共有メモリであり、第2のメッセージ・キューは、第1のプロセスと1対1に対応する。
【0102】
例示的に、ステップS401は、図1のステップS103の後に実行されてもよい。本実施例において、第2のプロセスは、グラフィックスプロセッサが返信した実行結果を受信した後、第2のプロセスは、メッセージ・キューを設定する方式で、実行結果を第1のプロセスに送信してもよい。具体的には、第1のプロセスと第2のプロセスとの共有の第1のメモリに、複数の第2のメッセージ・キューが設定され、第2のメッセージ・キューと第1のプロセスとは1対1に対応する。第2のプロセスは、グラフィックスプロセッサが返信した実行結果を取得した後、当該実行結果を当該実行結果に対応する第1のプロセスに対応する第2のメッセージ・キューに送信する。各第1のプロセスがその対応する実行要求を有し、各実行要求がその対応する実行結果を有することが理解されるべきである。
【0103】
一例において、第2のプロセスが取得した実行結果には、第1のプロセスの識別子が含まれ、第2のプロセスは、実行要求に含まれる第1のプロセスの識別子に基づいて、第1のプロセスに対応する第2のメッセージ・キューを決定することができ、その後、第2のプロセスは、実行結果を第2のメッセージ・キューに送信することができる。
【0104】
列挙として、図9は、本願の実施例にて提供される第3の応用シーン模式図である。図において、1つの第1のプロセスは、1つの第1のメッセージ・キューと1つの第2のメッセージ・キューとに対応し、第1のメッセージ・キューは、第1のプロセスが第2のプロセスを送信する実行要求を格納するために用いられ、第2のメッセージ・キューは、第2のプロセスが当該第1のプロセスに返信する実行結果を格納するために用いられる。図9に示すように、第1のプロセス1は、第1のメッセージ・キュー1と第2のメッセージ・キュー1とに対応する。第1のプロセス2は、第1のメッセージ・キュー2と第2のメッセージ・キュー2とに対応する。
【0105】
S402において、第2のプロセスは、第2のメッセージ・キューに対応する第2のセマフォ・パラメータを調整し、第2のセマフォ・パラメータは、第2のメッセージ・キューにおける読み取り可能な実行結果の数を特徴付けるために用いられる。
【0106】
例示的に、第2のプロセスは、第2のメッセージ・キューに対応する第2のセマフォ・パラメータを調整することで、第2のメッセージ・キュー内で実行結果を取得するように第1のプロセスに通知することができ、ここで、第2のセマフォ・パラメータは、現在の第2のメッセージ・キューにおける読み取り可能な実行結果の数を特徴付けるために用いられる。
【0107】
S403において、第1のプロセスは、調整された第2のセマフォ・パラメータに基づいて、第2のメッセージ・キューにおける実行結果を取得する。
【0108】
例示的に、第1のプロセスは、第2のセマフォ・パラメータが第1のプロセスにより調整されることを監視した後、この時第1のプロセスは、実行要求を第2のメッセージ・キューから取得する。
【0109】
一例において、第1のプロセスは、複数の第1のスレッドを含み、第1のスレッドは、第1のスレッド識別子と1対1に対応し、つまり、各第1のスレッドは、その対応する第1のスレッド識別子を有する。実行結果は、第1のスレッド識別子を有し、第1のプロセスは、調整された第2のセマフォ・パラメータにより、第2のメッセージ・キューにおける各第1のスレッドの第1のスレッド識別子に対応する実行結果を複数の第1のスレッドがそれぞれ取得するように、第1のプロセスにおける複数の第1のスレッドをウェイクアップさせる。即ち、第1のスレッドは、第1のプロセスにおいてグラフィックスプロセッサの呼び出しを要求するための要求スレッドである。
【0110】
例示的に、本例において、第1のプロセスは、複数の第1のスレッドを含み、ここで、各第1のスレッドには、第1のスレッド識別子が対応して設定され、即ち、第1のスレッドと第1のスレッド識別子とは1対1に対応する。また、実行結果に第1のスレッド識別子を有し、この時、ステップS403を実行する時、第2のメッセージ・キューにおける各第1のスレッドの第1のスレッド識別子に対応する実行結果を複数の第1のスレッドがそれぞれ取得するように、第1のプロセスは、第2のセマフォ・パラメータに基づいて、第1のプロセスにおける複数の第1のスレッドをウェイクアップさせる。
【0111】
図10は、本願の実施例にて提供される第4の応用シーン模式図である。図10に示すように、図10の第1のプロセスは、複数の第1のスレッド(図において、第1のスレッドnで示され、ここで、nは正の整数である)を含む。第1のプロセスの第1のスレッドは、呼び出し要求に応答し、第1のプロセスに対応する第1のメッセージ・キューにより実行要求を第2のプロセスに送信することができ、且つ、第2のプロセスは、実行要求に応答し、グラフィックスプロセッサが返信した実行結果を取得した後、第2のプロセスは、実行結果を当該第1のプロセスに対応する第2のメッセージ・キューに送信する。且つ、第2のプロセスは、第2のメッセージ・キューの第2のセマフォ・パラメータを調整した後、当該第2のメッセージ・キューに対応する複数の第1のスレッドがウェイクアップされ、その後、複数の第1のスレッドは、それぞれの第1のスレッド番号に対応する実行結果を第2のメッセージ・キューからそれぞれ取得する。
【0112】
一例において、第1のプロセスが、調整された第2のセマフォ・パラメータにより、第2のメッセージ・キューにおける実行結果を取得することは、具体的には、前記第1のプロセスが、調整された第2のセマフォ・パラメータ及び予め設定された第1のスレッド識別子とコンテナとの間の対応関係により、第2のメッセージ・キューにおける実行結果を、実行結果における第1のスレッド識別子に対応するコンテナ内に記憶し、コンテナが、リンク・テーブル形式の記憶構造であり、第1のスレッドが第1のスレッドの第1のスレッド識別子に対応する実行結果を対応するコンテナから取得するように、第1のプロセスが、コンテナに対応する第1のスレッドをウェイクアップさせる方式で実現される。
【0113】
例示的に、複数の第1のスレッドがウェイクアップされた後、第2のメッセージ・キューは同時に1つの第1のスレッドからのみアクセス可能であるため、複数の第1のスレッドは、第2のメッセージ・キューのロックを競合すればこそ、第2のメッセージ・キューのアクセスを実現することができ、且つ、第2のメッセージ・キューにデータを入れ出す時、取り入れ順に従って順次取り出す必要がある。このため、第1のプロセスにおける第1のスレッドが第2のメッセージ・キューからデータを取り出した結果が遅くなりやすい。上記技術的課題を解決するために、本例において、第2のメッセージ・キューに対応するコンテナがさらに設定される。
【0114】
第2のプロセスは、実行結果を第2のメッセージ・キューに記憶し、第2のメッセージ・キューの第2のセマフォ・パラメータを調整した後、第1のプロセスは、調整された第2のセマフォ・パラメータ及び予め設定された第1のスレッド識別子とコンテナとの間の対応関係に基づいて、第2のメッセージ・キューにおける実行結果を、実行結果における第1のスレッド識別子に対応するコンテナに記憶し、ここで、コンテナは、リンク・テーブル形式の記憶構造である。つまり、第1のプロセスは、第2のメッセージ・キューから取り出した実行要求を、当該実行要求内の第1のスレッド識別子に対応するコンテナに記憶することができる。複数の実行要求をコンテナに記憶する必要がある時、複数の実行要求がリンク・テーブル形式でコンテナに記憶することができる。その後、第1のプロセスは、第1のスレッドがその同一の第1のスレッド識別子を有する実行結果をコンテナから取得するように、コンテナと第1のスレッド識別子との間の対応関係に基づいて、対応する第1のスレッドをウェイクアップさせる。
【0115】
なお、本実施例において、コンテナの数は、複数であってもよく、つまり、本開示のコンテナは、複数のコンテナであってもよい。例えば、1つの第2のメッセージ・キューには、複数のコンテナが対応して設定されてもよい。且つ、1つのコンテナは、複数の第1のスレッド識別子に対応することができる。列挙として、第1のプロセスには9つの第1のスレッドが含まれ、それぞれ数字1~9で各第1のスレッドに対応する第1のスレッド識別子を識別し、且つ、当該第1のプロセスには、さらに3つのコンテナが対応して設定され、ここで、第1のコンテナは、第1のスレッド識別子が1~3の実行結果を記憶することができ、第2のコンテナは、第1のスレッド識別子が4~6の実行結果を記憶することができ、第3のコンテナは、第1のスレッド識別子が7~9の実行結果を記憶することができる。別の例において、第1のスレッド識別子とコンテナとの間の対応関係は、ハッシュ方式を用いてもよいが、ここで具体的に限定されない。
【0116】
本実施例において、コンテナを設定して実行要求を記憶する方式で、複数の第1のスレッドが同一の第2のメッセージ・キューを競合する場合に生じるリソース・オーバーヘッドを回避することができ、且つ、コンテナにリンク・テーブル形式の記憶構造を採用することで、第1のスレッドがコンテナに実行結果を取得する時、記憶順に従って順次抽出する必要がなく、実行結果取得の効率を向上させることができる。
【0117】
いくつかの実施例において、図11は、本願の実施例にて提供される第1のプロセスと第2のプロセスとの通信接続の確立方法のフロー模式図である。図1のステップS101の前に、当該方法は、以下のステップをさらに含む。
【0118】
S501において、第2のプロセスは、グラフィックスプロセッサに対応する第2のスレッドを第2のプロセス内に作成する。
【0119】
例示的に、本実施例において、第1のプロセスが実行要求を第2のプロセスに送信する前に、第1のプロセスと第2のプロセスとは、通信接続を確立する必要がある。通信接続を確立する時、まず第2のスレッドを第2のプロセス内に作成し、ここで、第2のスレッドは、グラフィックスプロセッサのプログラミング・インタフェースへの呼び出しを実現するために用いられる。また、第2のスレッドの数は、グラフィックスプロセッサの数に応じて決定されてもよく、例えば、1つの第2のスレッドが1つのグラフィックスプロセッサに対応するように設定されてもよい。
【0120】
S502において、第1のプロセスは、第2のプロセスとの通信接続の確立を特徴付ける、第1のプロセスに対応する接続要求を第2のプロセスに送信する。
【0121】
例示的に、中央プロセッサに第1のプロセスが作成される度に、第1のプロセスは、第2のプロセスとの接続確立を要求するための接続要求を第2のプロセスに送信する。なお、本実施例において、第1のプロセスと第2のプロセスとの間の通信方式をwebsocketの通信方式としてもよいが、この通信方式に限定されない。
【0122】
S503において、第2のプロセスは、第1のプロセスに対応する接続要求に応答し、第1のプロセスに対応する第3のスレッドを第2のプロセス内に作成し、第3のスレッドは、その対応する第1のプロセスが送信した実行要求を取得するために用いられる。
【0123】
例示的に、第2のプロセスは、第1のプロセスが送信した接続要求を受信し、第1のプロセスとの通信接続を確立した後、第3のスレッドを第2のプロセス内に作成し、ここで、当該第3のスレッドは、その対応する第1のプロセスが送信した実行要求を受信するために用いられることができ、即ち、第3のスレッドは、第1のプロセスが送信した実行要求を受信するための受信スレッドである。例えば、第3のスレッドは、その対応する第1のプロセスの第1のメッセージ・キューにおける実行要求をリスンするために用いられることができる。
【0124】
一例として、第2のプロセスが複数のグラフィックスプロセッサに対応する場合、実行要求は、呼び出す必要があるグラフィックスプロセッサの識別子をさらに含む。その後、第3のスレッドは、実行要求を取得した後、実行要求に含まれるグラフィックスプロセッサの識別子に基づいて、当該実行要求を当該グラフィックスプロセッサに対応する第2のスレッドに送信する。その後、第2のスレッドは、第3のスレッドが送信した実行要求に応答し、グラフィックスプロセッサを呼び出し、即ち、第2のスレッドは、第3のスレッドが送信した実行要求を解析して処理するための処理スレッドである。
【0125】
一例において、第1のプロセスは、グラフィックスプロセッサ内のカーネルを呼び出す必要がある時、必要なカーネルパラメータも実行要求に書き込む。
【0126】
一例において、第2のプロセスと第1のプロセスとの通信接続を確立した後、第2のプロセスは、当該第1のプロセスの占有するメモリ、占有するグラフィックスプロセッサのリソースなどの第1のプロセスの実行中のログ・データをさらに記録する。
【0127】
列挙として、図12は、本願の実施例にて提供される第5の応用シーン模式図である。図において、2つのグラフィックスプロセッサ(図において、グラフィックスプロセッサ1及びグラフィックスプロセッサ2で示す)を含み、各グラフィックスプロセッサに対して、グラフィックスプロセッサと1対1に対応する第2のスレッド(図において、グラフィックスプロセッサ1が第2のスレッド1に対応し、グラフィックスプロセッサ2が第2のスレッド2に対応する)を第2のプロセスに設定する。且つ、第2のプロセスには、第1のプロセスと1対1に対応する第3のスレッドがさらに設定され、第3のスレッドは、第1のプロセスが送信した実行要求を取得した後、当該実行要求を呼び出す必要があるグラフィックスプロセッサに対応する第2のスレッドに送信し、その後、第2のスレッドによりグラフィックスプロセッサへの呼び出しを実現することができる。第1のプロセス1がグラフィックスプロセッサ1を呼び出す必要がある場合、第1のプロセス1は、第1のメッセージ・キュー1により、実行要求を第1のプロセス1に対応する第3のスレッド1に送信し、その後、第3のスレッド1は、受信した実行要求がグラフィックスプロセッサ1を呼び出す必要があると決定した場合、第2のスレッド1が実行要求に基づいてグラフィックスプロセッサ1への呼び出しを完了させるように、実行要求を第2のスレッド1に送信する。
【0128】
本実施例において、第2のプロセスにおいて、第1のプロセスと1対1に対応する第3のスレッドを第2のプロセスに設定することで、第1のプロセスが送信した実行要求を受信した後、第3のスレッドが、実行要求を、当該実行要求で特徴付ける呼び出す必要があるグラフィックスプロセッサに対応する第2のスレッドに送信し、その後、第2のスレッドが実行要求で特徴付ける呼び出す必要があるグラフィックスプロセッサを呼び出し、グラフィックスプロセッサのリソース利用率をさらに向上させる。
【0129】
いくつかの実施例において、図13は、本願の実施例にて提供される第2のプロセスがグラフィックスプロセッサを呼び出す方法のフロー模式図である。図13に示すように、プログラミング・インタフェースが呼び出し関数識別子を有する時、ステップS103を実行する時に、以下の方式で実現することができる。
【0130】
S1031において、プログラミング・インタフェースに対応する呼び出し関数識別子が同期関数識別子に属することに応答し、第2のプロセスは、置換ライブラリにより、プログラミング・インタフェースの呼び出し関数識別子に対応する置換コードを呼び出し、置換コードは、呼び出し関数識別子に対応するプログラミング・インタフェースの同期機能コードを非同期機能コードに置換するために用いられ、置換ライブラリは、複数の置換コードを含む。
【0131】
例示的に、実際の応用において、グラフィックスプロセッサのプログラミング・インタフェースは、同期タイプと非同期タイプとにさらに分割することができる。ここで、同期タイプのプログラミング・インタフェースは、グラフィックスプロセッサが今回のタスクを実行し終えてからこそ、中央プロセッサにおけるプロセスがグラフィックスプロセッサを再度呼び出す。非同期タイプのプログラミング・インタフェースに対して、グラフィックスプロセッサが今回のタスクを完了することなく、グラフィックスプロセッサを再度呼び出すように中央プロセッサにおけるプロセスに通知することができる。
【0132】
列挙として、非同期タイプのプログラミング・インタフェースは、グラフィックスプロセッサによるコンピューティング・タスクと、残りの機器のグラフィックスプロセッサからのデータコピー・タスクとを同時に実行することを可能にする。図14は、本願の実施例にて提供されるグラフィックスプロセッサの動作のフロー模式図である。図において、横軸は、時間を示す。現在、コピー・タスク1、コンピューティング・タスク2、及びコピー・タスク3が必要である場合、グラフィックスプロセッサにおいて実行する必要がある。プログラミング・インタフェースの呼び出しが同期タイプのプログラミング・インタフェースである場合、1つのタスクの実行が終了してからこそ、次のタスクを実行可能にする必要があり、図に示すように、3つのタスクは、グラフィックスプロセッサにおいて時間順に従って順次実行される。
【0133】
呼び出したグラフィックスプロセッサのインタフェースが非同期タイプのインタフェースである場合、グラフィックスプロセッサにおいて、これら3つのタスクの各タスクをいずれも3つのサブタスクに分割することができ、例えば、コピー・タスク1をコピー・サブタスク11と、コピー・サブタスク12と、コピー・サブタスク13とに分割し、コンピューティング・タスク2をコンピューティング・サブタスク21と、コンピューティング・サブタスク22と、コンピューティング・サブタスク23とに分割し、コピー・タスク3をコピー・サブタスク31と、コピー・サブタスク32と、コピー・サブタスク33とに分割する。その後、これら3つのタスクに含まれるサブタスクが交互に実行されてもよい。例えば、図において、コピー・サブタスク11、コンピューティング・サブタスク21、コピー・サブタスク31は、時系列に従って実行し、コピー・サブタスク12、コンピューティング・サブタスク22、コピー・サブタスク32は、時系列に従って実行し、コピー・サブタスク13、コンピューティング・サブタスク23、コピー・サブタスク33は、時系列に従って実行する。且つ、コンピューティング・サブタスク21の実行と同時に、グラフィックスプロセッサは、コピー・サブタスク12を同時に実行することもでき、コピー・サブタスク31の実行と同時に、グラフィックスプロセッサは、コンピューティング・サブタスク22とコピー・サブタスク13とを同時に実行することもでき、コピー・サブタスク32の実行と同時に、グラフィックスプロセッサは、さらにコンピューティング・サブタスク23を同時に実行することができる。非同期タイプのインタフェースと、同期タイプのインタフェースとの採用によるタスクの実行にかかる時間を比較することで、非同期タイプのインタフェースの採用によるタスクの実行にかかる時間を低減し、グラフィックスプロセッサの使用効率を向上させることが発見される。
【0134】
このため、第2のプロセスが呼び出しているプログラミング・インタフェースは、同期タイプのインタフェースである時、グラフィックスプロセッサが実行結果を返信しないうちに、第2のプロセスは、ブロック状態となる。第2のプロセスは、既に受信した第1のプロセスが送信した残りの実行要求を継続して実行できるように確保してグラフィックスプロセッサの使用効率を向上させるために、本実施例におけるプログラミング・インタフェースは、呼び出し関数識別子を有し、中央プロセッサに、プログラミング・インタフェースの呼び出し関数識別子と1対1に対応する複数の置換コードを含む置換ライブラリを予め設定してもよい。
【0135】
第2のプロセスは、第1のプロセスが送信した実行要求を受信する時、実行要求において呼び出しが指示されたプログラミング・インタフェースに対応する呼び出し関数識別子が、同期関数識別子であるか否かを決定する。第2のプロセスは、受信した実行要求におけるプログラミング・インタフェースの呼び出し関数識別子が同期関数識別子であると決定した場合、第2のプロセスは、設定された置換ライブラリにより、置換ライブラリにおいて、当該プログラミング・インタフェースの呼び出し関数識別子に対応する置換コードをルックアップし、ここで、当該置換コードは、呼び出す必要があるプログラミング・インタフェースの同期機能コードを非同期機能コードに置換することができ、さらに第2のプロセスが最終的に実際に呼び出すプログラミング・インタフェースを、非同期機能を有するインタフェースにする。
【0136】
なお、置換ライブラリにおける非同期機能コードを設定する時、同期関数識別子を有する全てのプログラミング・インタフェースにいずれも対応する非同期機能コードを設定してもよいし、同期関数識別子を有するプログラミング・インタフェースの一部に対応する非同期機能コードを対応して設定してもよいように設定してもよい。
【0137】
実際の応用において、中央プロセッサにおける第1のプロセスはグラフィックスプロセッサにデータをコピーする必要がある場合、非同期コピーのためにコピーする必要があるデータはページロックメモリに記憶され、非同期コピーの過程でデータが存在するページが置き換えないように確保する。そのため、コピーされたデータが記憶されるメモリがページロックメモリでない場合、同期コピーしか行うことができず、その場合、第2のプロセスは、呼び出されるプログラミング・インタフェースの呼び出し関数識別子が同期関数識別子に属すると決定したとしても、さらにコピーする必要があるデータが存在するメモリのタイプを判断し、メモリのタイプがページロックメモリである場合、置換ライブラリにおける置換コードに直接基づいてグラフィックスプロセッサへの呼び出しを実現することができる。メモリのタイプがページロックメモリでない場合、元のプログラミング・インタフェースに対応するコードを依然として実行し、即ち、上記置換プロセスを実行しない。
【0138】
S1032において、第2のプロセスは、第1のプロセスに対応するプログラミング・インタフェースの置換コードにより、グラフィックスプロセッサを呼び出し、且つグラフィックスプロセッサが返信した非同期通知を受信し、非同期通知は、第1のプロセスが送信した実行要求を継続して実行するように第2のプロセスに指示するために用いられる。
【0139】
例示的に、第2のプロセスは、第1のプロセスに対応するプログラミング・インタフェースの置換コードを取得した後、当該置換コードに基づいてグラフィックスプロセッサを呼び出し、且つ第2のプロセスは、グラフィックスプロセッサを呼び出した後、グラフィックスプロセッサが返信した非同期通知を受信し、さらに第2のプロセスが非同期通知を受信した後、実行要求の受信を継続して処理する。
【0140】
本実施例において、第2のプロセスが実行要求に応答する時、第2のプロセスが呼び出すプログラミング・インタフェースが同期タイプのインタフェースである時、第2のプロセスがブロックされ、既に受信した他の実行要求を継続して実行できないことを回避するために、第2のプロセスがプログラミング・インタフェースを実際に呼び出す時、実際に実行するのは、当該プログラミング・インタフェースに対応する置換ライブラリにおける置換コードであり、さらに置換コードを実行することで、第2のプロセスが最終的に呼び出すプログラミング・インタフェースは、非同期機能を有するプログラミング・インタフェースのコード機能である。且つ、その後、第2のプロセスが残りの実行要求を継続して実行することができ、さらに第2のプロセスがブロックされることによるグラフィックスプロセッサの利用率が低いという問題を低減するように、第2のプロセスは、グラフィックスプロセッサが返信した非同期通知を受信する。
【0141】
図15は、本願の実施例にて提供される電子機器の構造の模式図であり、図15に示すように、当該電子機器は、
グラフィックスプロセッサ(図示せず)と、中央プロセッサ291とを含み、電子機器は、メモリ(memory)292をさらに含み、通信インタフェース(Communication Interface)293とバス294とをさらに含んでもよい。ここで、中央プロセッサ291、メモリ292、通信インタフェース293は、バス294を介して相互間の通信を可能とする。通信インタフェース293は、情報伝送に用いられることができる。中央プロセッサ291は、上記実施例の方法を実行するように、メモリ294内の論理命令を呼び出すことができる。
【0142】
また、上記メモリ292内の論理命令は、ソフトウェア機能ユニットの形で実現され、独立した製品として販売又は使用される時、1つのコンピュータ読み取り可能な記憶媒体に記憶されてもよい。
【0143】
メモリ292は、コンピュータ読み取り可能な記憶媒体として、ソフトウェアプログラム、コンピュータ実行可能プログラム、本願の実施例における方法に対応するプログラム命令/モジュールを記憶するために用いられることができる。中央プロセッサ291は、メモリ292に記憶されたソフトウェアプログラム、命令、及びモジュールを実行することで、機能応用及びデータ処理を実行し、即ち、上記方法の実施例における方法を実現する。
【0144】
メモリ292は、オペレーティングシステム、少なくとも1つの機能に必要なアプリケーションを記憶することができる記憶プログラム領域と、端末機器の使用に応じて作成されたデータなどを記憶することができる記憶データ領域とを含んでもよい。また、メモリ292は、高速ランダムアクセスメモリを含んでもよいし、不揮発性メモリをさらに含んでもよい。
【0145】
本願は、上記実施例のいずれかにて提供される方法を実現するための中央プロセッサを提供する。
【0146】
本願は、上記本願にて提供される中央プロセッサと、グラフィックスプロセッサとを含む制御チップを提供する。
【0147】
本願は、上記本願にて提供される制御チップが設定される車両を提供する。
【0148】
本願は、プロセッサにより実行される時、上記実施例のいずれかにて提供される方法を実現するために用いられるコンピュータ実行命令が記憶されるコンピュータ読み取り可能な記憶媒体を提供する。
【0149】
本願は、プロセッサにより実行される時、実施例のいずれかにて提供される方法を実現するコンピュータプログラムを含むコンピュータプログラム製品を提供する。
【0150】
当業者が本明細書を考慮し及び本明細書に開示された発明を実践した後、本願の他の実施手段を容易に想到する。本願は、本願の一般原理に従い、本願に開示されていない本技術分野における通常の知識又は従来の技術的手段を含む、本願の任意の変形、用途、又は適応的な変化を包含することが意図される。本明細書及び実施例は、単に例示的なものとしてみなされ、本願の真の範囲及び精神は、添付の特許請求の範囲により示される。
【0151】
本願は、上記で記述され、図面に示された正確な構造に限定されず、その範囲から逸脱することなく、様々な修正及び変化がなされることが理解すべきである。本願の範囲は、添付の特許請求の範囲によりのみ限定される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15