(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024169341
(43)【公開日】2024-12-05
(54)【発明の名称】システムオンチップに基づくタスクスケジューリング方法、システムオンチップ、および電子機器
(51)【国際特許分類】
G06F 9/50 20060101AFI20241128BHJP
【FI】
G06F9/50 120A
【審査請求】有
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2024078461
(22)【出願日】2024-05-14
(31)【優先権主張番号】202310594269.6
(32)【優先日】2023-05-24
(33)【優先権主張国・地域又は機関】CN
(31)【優先権主張番号】202310780260.4
(32)【優先日】2023-06-28
(33)【優先権主張国・地域又は機関】CN
(71)【出願人】
【識別番号】522378775
【氏名又は名称】北京地平▲線▼信息技▲術▼有限公司
(74)【代理人】
【識別番号】100105924
【弁理士】
【氏名又は名称】森下 賢樹
(72)【発明者】
【氏名】ジャンビン フー
(72)【発明者】
【氏名】ジャルー チュー
(72)【発明者】
【氏名】ルイリン ズオ
(72)【発明者】
【氏名】ユアン ウー
(72)【発明者】
【氏名】ヂェン パン
(72)【発明者】
【氏名】チョン シャン
(72)【発明者】
【氏名】ユー ヤオ
(72)【発明者】
【氏名】ホンミン ユー
(57)【要約】
【課題】本開示は、システムオンチップ(SoC)に基づくタスクスケジューリング方法、システムオンチップおよび電子機器に関する。
【技術手段】この方法は、SoCにより実行される必要があるタスクセットとタスクセットにおける各タスク間の依存関係とを決定するステップと、タスクセットおよび依存関係に基づいて、SoCにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定するステップと、SoCにおける第1のタスクスケジューラにより、SoCの、第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに第1のスケジューリング情報を送信するステップと、第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングし、第1のアクセラレータにより第1のタスクを実行するステップと、を含む。
【選択図】
図3
【特許請求の範囲】
【請求項1】
システムオンチップにより実行される必要があるタスクセットと、前記タスクセットにおける各タスク間の依存関係と、を決定するステップと、
前記タスクセットおよび前記依存関係に基づいて、前記システムオンチップにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定するステップと、
前記システムオンチップにおける第1のタスクスケジューラにより、前記システムオンチップにおける、前記第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに前記第1のスケジューリング情報を送信するステップと、
前記第1のスケジューリング情報に基づいて、前記第2のタスクスケジューラにより前記第1のアクセラレータをスケジューリングし、前記第1のアクセラレータにより第1のタスクを実行するステップと、を含む、ことを特徴とするシステムオンチップに基づくタスクスケジューリング方法。
【請求項2】
前記タスクセットおよび前記依存関係に基づいて、前記システムオンチップにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定するステップは、
前記タスクセットから、前記第1のアクセラレータが実行可能な第1のタスクを決定するステップと、
前記依存関係に基づいて、前記タスクセットから、前記第1のタスクと依存関係がある関連タスクを決定するステップと、
前記第1のタスクおよび前記関連タスクに基づいて、前記第1のタスクの第1のスケジューリング情報を決定するステップと、を含む、ことを特徴とする請求項1に記載のシステムオンチップに基づくタスクスケジューリング方法。
【請求項3】
前記第1のスケジューリング情報に基づいて、前記第2のタスクスケジューラにより前記第1のアクセラレータをスケジューリングするステップは、
前記第1のスケジューリング情報に基づいて、前記第1のタスクがタスク実行条件を満たすと判定するステップと、
前記第2のタスクスケジューラにより前記第1のスケジューリング情報を解析して、前記第1のタスクの実行に必要な第1のコンフィグレーション情報を決定するステップと、
前記第1のコンフィグレーション情報に基づいて、前記第2のタスクスケジューラにより前記第1のアクセラレータをスケジューリングするステップと、を含む、ことを特徴とする請求項1に記載のシステムオンチップに基づくタスクスケジューリング方法。
【請求項4】
前記システムオンチップにおける、第2のアクセラレータをスケジューリングするための第3のタスクスケジューラにより、前記システムオンチップにおける前記第2のアクセラレータが実行可能な第2のタスクの第2のスケジューリング情報を決定するステップと、
前記第2のタスクスケジューラにより、前記第1のタスクの実行結果を決定するステップと、
前記第1のタスクの実行結果および前記第1のスケジューリング情報に基づいて、前記第2のタスクスケジューラにより前記第3のタスクスケジューラに第3のスケジューリング情報を送信するステップと、
前記第2のスケジューリング情報および前記第3のスケジューリング情報に基づいて、前記第3のタスクスケジューラにより前記第2のアクセラレータをスケジューリングし、前記第2のアクセラレータにより、前記第1のタスクの次のタスクである第2のタスクを実行するステップと、をさらに含む、ことを特徴とする請求項1~3のいずれか1項に記載のシステムオンチップに基づくタスクスケジューリング方法。
【請求項5】
前記第2のスケジューリング情報および前記第3のスケジューリング情報に基づいて、前記第3のタスクスケジューラにより前記第2のアクセラレータをスケジューリングするステップは、
前記第2のスケジューリング情報に基づいて、前記第3のタスクスケジューラにより前記第2のタスクと依存関係がある先行タスクを決定するステップと、
前記第3のスケジューリング情報に基づいて、前記先行タスクの実行結果を決定するステップと、
前記先行タスクの実行結果および前記第2のスケジューリング情報に基づいて、前記第3のタスクスケジューラにより前記第2のアクセラレータをスケジューリングするステップと、を含む、ことを特徴とする請求項4に記載のシステムオンチップに基づくタスクスケジューリング方法。
【請求項6】
前記先行タスクの実行結果および前記第2のスケジューリング情報に基づいて、前記第3のタスクスケジューラにより前記第2のアクセラレータをスケジューリングするステップは、
前記第3のタスクスケジューラにより前記第2のスケジューリング情報を解析して、前記第2のタスクの実行に必要な第2のコンフィグレーション情報を決定するステップと、
前記先行タスクの実行結果および前記第2のコンフィグレーション情報に基づいて、前記第3のタスクスケジューラにより前記第2のアクセラレータをスケジューリングするステップと、を含む、ことを特徴とする請求項5に記載のシステムオンチップに基づくタスクスケジューリング方法。
【請求項7】
前記第1のタスクスケジューラにより、前記システムオンチップにおけるプロセッサにより実行される必要がある第3のタスクの第4のスケジューリング情報を決定するステップと、
前記第2のタスクスケジューラにより、前記第1のタスクの実行結果を決定するステップと、
前記第1のタスクの実行結果および前記第1のスケジューリング情報に基づいて、前記第2のタスクスケジューラにより前記第1のタスクスケジューラに第5のスケジューリング情報を送信するステップと、
前記第4のスケジューリング情報および前記第5のスケジューリング情報に基づいて、前記第1のタスクスケジューラにより前記プロセッサをスケジューリングし、前記プロセッサにより前記第3のタスクを実行するステップと、さらにを含む、ことを特徴とする請求項1~3のいずれか1項に記載のシステムオンチップに基づくタスクスケジューリング方法。
【請求項8】
プロセッサと、第1のアクセラレータと、第1のタスクスケジューラと、第2のタスクスケジューラと、を備え、前記プロセッサは、前記第1のタスクスケジューラを介して前記第2のタスクスケジューラに結合され、前記第2のタスクスケジューラは、前記第1のアクセラレータに結合され、
前記プロセッサは、システムオンチップにより実行される必要があるタスクセットと前記タスクセットにおける各タスク間の依存関係とを決定し、前記タスクセットおよび前記依存関係に基づいて、前記第1のアクセラレータが実行可能な第1のタスクの初期スケジューリング情報を決定するために使用され、
前記第1のタスクスケジューラは、前記初期スケジューリング情報に基づいて、前記第1のタスクの第1のスケジューリング情報を決定し、前記第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに第1のスケジューリング情報を送信するために使用され、
前記第2のタスクスケジューラは、前記第1のタスクスケジューラに基づいて、前記第1のアクセラレータをスケジューリングするために使用され、
前記第1のアクセラレータは、前記第1のタスクを実行するために使用される、ことを特徴とするシステムオンチップ。
【請求項9】
第2のアクセラレータと、前記第2のアクセラレータをスケジューリングするための第3のタスクスケジューラと、をさらに備え、前記第1のタスクスケジューラは、前記第3のタスクスケジューラを介して前記第2のアクセラレータに結合され、
前記第3のタスクスケジューラは、前記第2のアクセラレータが実行可能な第2のタスクの第2のスケジューリング情報を決定するために使用され、
前記第2のタスクスケジューラは、前記第1のタスクの実行結果を決定し、前記第1のタスクの実行結果および前記第1のスケジューリング情報に基づいて、前記第3のタスクスケジューラに第3のスケジューリング情報を送信するためにも使用され、
前記第3のタスクスケジューラは、前記第2のスケジューリング情報および前記第3のスケジューリング情報に基づいて、前記第2のアクセラレータをスケジューリングするためにも使用され、
前記第2のアクセラレータは、前記第1のタスクの次のタスクである前記第2のタスクを実行するために使用される、ことを特徴とする請求項8に記載のシステムオンチップ。
【請求項10】
請求項1に記載のシステムオンチップに基づくタスクスケジューリング方法を実行するためのコンピュータープログラムが記憶される、ことを特徴とするコンピュータ可読記憶媒体。
【請求項11】
プロセッサと、
前記プロセッサが実行可能な命令を記憶するためのメモリと、備え、
前記プロセッサは、前記メモリから前記命令を読み取って実行することにより、請求項1に記載のシステムオンチップに基づくタスクスケジューリング方法を実現する、ことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、2023年05月24日に出願された出願番号が202310594269.6である中国専利出願と2023年06月28日に出願された出願番号が202310780260.4である中国専利出願との優先権を主張し、その内容の全てが参照により本明細書に組み込まれる。
【0002】
本開示は、コンピュータの技術分野に関し、特に、システムオンチップに基づくタスクスケジューリング方法、システムオンチップ、コンピュータ可読記憶媒体および電子機器に関する。
【背景技術】
【0003】
インテリジェントドライブでは、アプリケーションがますます複雑になるにつれて、データとタスクのスケジューリングの粒度はますます小さくなり、タスクの高効率かつ低遅延のスケジューリングに対する要求がますます強くなる。関連技術において、中央処理ユニット(Central Processing Unit、CPU)がソフトウェアによりタスクをスケジューリングして実行するが、タスクの高効率かつ低遅延のスケジューリング要件を満たすことができなかった。
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術的課題を解決するために、本開示は、プロセッサがハードウェアスケジューリングによりアクセラレータをスケジューリングしてタスクを実行させることができ、ハードウェアスケジューリングの速度がソフトウェアスケジューリングの速度よりも速いため、ハードウェアスケジューリングを使用することで、タスクスケジューリングの効率を向上させ、タスクスケジューリングの遅延を減少させ、タスクスケジューリングのリアルタイム性を確保することができ、タスクが高効率かつ低遅延で実行されることを確保することができるシステムオンチップ(System on a chip、SoC)に基づくタスクスケジューリング方法、SoC、コンピュータ可読記憶媒体および電子機器を提供する。
【課題を解決するための手段】
【0005】
本開示の第1の態様は、システムオンチップに基づくタスクスケジューリング方法を提供し、このタスクスケジューリング方法は、前記システムオンチップにより実行される必要があるタスクセットと、前記タスクセットにおける各タスク間の依存関係と、を決定するステップと、前記タスクセットおよび前記依存関係に基づいて、前記システムオンチップにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定するステップと、前記システムオンチップにおける第1のタスクスケジューラにより、前記システムオンチップにおける、前記第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに前記第1のスケジューリング情報を送信するステップと、前記第1のスケジューリング情報に基づいて、前記第2のタスクスケジューラにより前記第1のアクセラレータをスケジューリングし、前記第1のアクセラレータにより第1のタスクを実行するステップと、を含む。
【0006】
本開示の第2の態様は、システムオンチップを提供し、このシステムオンチップは、プロセッサと、第1のアクセラレータと、第1のタスクスケジューラと、第2のタスクスケジューラと、を備え、前記プロセッサは、前記第1のタスクスケジューラを介して前記第2のタスクスケジューラに結合され、前記第2のタスクスケジューラは、前記第1のアクセラレータに結合され、前記プロセッサは、前記システムオンチップにより実行される必要があるタスクセットと前記タスクセットにおける各タスク間の依存関係とを決定し、前記タスクセットおよび前記依存関係に基づいて、前記第1のアクセラレータが実行可能な第1のタスクの初期スケジューリング情報を決定するために使用され、前記第1のタスクスケジューラは、前記初期スケジューリング情報に基づいて、第1のタスクの第1のスケジューリング情報を決定し、前記第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに第1のスケジューリング情報を送信するために使用され、前記第2のタスクスケジューラは、前記第1のスケジューリング情報に基づいて、前記第1のアクセラレータをスケジューリングするために使用され、前記第1のアクセラレータは、前記第1のタスクを実行するために使用される。
【0007】
本開示の第3の態様は、コンピュータ可読記憶媒体を提供し、この記憶媒体には、上記のいずれか1つのシステムオンチップに基づくタスクスケジューリング方法を実行するためのコンピュータプログラムが記憶される。
【0008】
本開示の第4の態様は、電子機器を提供し、この電子機器は、プロセッサと、前記プロセッサが実行可能な命令が記憶されるメモリと、を備え、前記プロセッサは、前記メモリから前記命令を読み取って実行することにより、上記のいずれか1つのシステムオンチップに基づくタスクスケジューリング方法を実現するために使用される。
【0009】
本開示の第5の態様は、コンピュータプログラム製品を提供し、このコンピュータプログラム製品における命令がプロセッサにより実行されると、本開示の上記のいずれか1つのシステムオンチップに基づくタスクスケジューリング方法が実行される。
【発明の効果】
【0010】
本開示は、システムオンチップにおける第1のタスクスケジューラによりシステムオンチップにおける第2のタスクスケジューラをスケジューリングし、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングして第1のタスクを実行し、第1のタスクスケジューラおよび第2のタスクスケジューラによりタスクスケジューリングを実行することにより、プロセッサは、ハードウェアにより第1のタスクスケジューラをスケジューリングしてタスクを実行することを実現する。これにより、タスクスケジューリングの効率を向上させ、タスクスケジューリングの遅延を減少させ、タスクスケジューリングのリアルタイム性を確保することができるので、タスクが高効率かつ低遅延に実行されることを確保することができる。さらに、タスクセットにおける各タスクを実行するプロセスにおいて、ハードウェアスケジューラによりアクセラレータを直接スケジューリングしてタスクを実行し、プロセッサがメインプログラムを中断する必要がないため、プロセッサが割り込みによって中断される頻度を減少させ、システムの処理能力を向上させることができる。
【図面の簡単な説明】
【0011】
【
図1】本開示の1つの例示的な実施例に係るシステムオンチップの構造概略図である。
【
図2】本開示の別の例示的な実施例に係るシステムオンチップの構造概略図である。
【
図3】本開示の1つの例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。
【
図4】本開示の1つの例示的なタスクセットにおける各タスク間の依存関係の概略図である。
【
図5】本開示の別の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。
【
図6】本開示の他の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。
【
図7】本開示の1つの例示的な実施例に係るデータパケットの構成構造概略図である。
【
図8】本開示の他の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。
【
図9】本開示の他の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。
【
図10】本開示の他の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。
【
図11】本開示の1つの例示的な実施例に係るシステムオンチップの構造概略図である。
【
図12】本開示の他の例示的な実施例に係るシステムオンチップの構造概略図である。
【
図13】本開示の1つの例示的な実施例に係る第1のタスクスケジューラの構造概略図である。
【
図14】本開示の1つの例示的な実施例に係る第2のタスクスケジューラの構造概略図である。
【
図15】本開示の1つの例示的な実施例に係る第3のタスクスケジューラの構造概略図である。
【
図16】本開示の他の例示的な実施例に係る第1のタスクスケジューラの構造概略図である。
【
図17】本開示の実施例に係る電子機器の構造図である。
【発明を実施するための形態】
【0012】
以下、本開示を説明するために、図面を参照しながら本開示の実施例を詳細に説明する。説明される実施例は、本開示のすべての実施例ではなく、本開示の実施例の一部にすぎず、本開示は、例示的な実施例に限定を受けない。
【0013】
これらの実施例に説明される部品およびステップの相対的な配置、数式、および数値は、特別な説明がないがきり、本開示の範囲を限定するものではない。
【0014】
(出願の概要)
インテリジェントドライブの安全性を確保するために、インテリジェントドライブ支援システムチップは、低遅延のタスクスケジューリングと高速の割り込み処理との要件を満たす必要がある。さまざまな特定の機能を実現可能なハードウェアアクセラレータを使用して特定のタスクを実行し、異なるハードウェアアクセラレータは、データを並行処理することができるので、CPUよりも優れる処理能力及び低い遅延を有する。関連技術において、システムオンチップ(System on a chip、SoC)におけるハードウェアアクセラレータは、通常、CPUによりソフトウェア方式で管理およびスケジューリングされる。ハードウェアアクセラレータをスケジューリングして特定のタスクを実行する必要がある場合、CPUにより処理されているメインプログラムが中断されて、CPUが現在の状態を保存してから割り込みサービスに入り、ソフトウェアスケジューリング方式でハードウェアアクセラレータをスケジューリングしてタスクを実行させる。タスクの実行が完了した後、CPUは、前の処理を再開し、中断されたメインプログラムの処理を続行する。タスクが多い場合、タスクのリアルタイムスケジューリングを確保し、長い待ち時間を回避するために、通常、CPUのコア数を増加することで並行機能を向上させることができ、マルチコアの並行スケジューリングに基づいて、タスクスケジューリングのリアルタイム性を確保して、タスクスケジューリングの効率を向上させ、タスクスケジューリングの遅延を減少させる。
【0015】
しかしながら、チップが実現する機能がますます多くなるにつれて、タスクスケジューリングの粒度はますます小さくなり、実行必要があるタスクの数はますます増加されている。関連技術において、CPUがソフトウェアによりアクセラレータをスケジューリングしてタスクを実行させるスケジューリング方法では、遅延は、CPUのコア数が増加されるにつれて安定的になる傾向があるので、より低い遅延を実現することができない。これは、スケジューリングするたびに、CPUが現在の状態の保存と前の処理の再開とを実行する必要があり、現在の状態の保存及び前の処理の再開には、一定の時間がかかることがあり、スケジューリング中にキューに入れる必要がない場合でも、タスクの実行に数百マイクロ秒がかかるためである。したがって、関連技術において、ソフトウェアによりアクセラレータをスケジューリングしてタスクを実行させるスケジューリング方法では、CPUのコア数が増加したとしても、遅延を百マイクロ秒以下に減少することができず、インテリジェントドライブなどのリアルタイム要件が高い特別なシナリオに一定の影響を与える。また、関連技術において、ソフトウェアによりアクセラレータをスケジューリングしてタスクを実行させるスケジューリング方法では、タスクの数が増加するにつれて、CPUがアクセラレータをスケジューリングするたびに割り込みによって中断されるため、頻繁な割り込みはシステムの処理能力に影響を与える。
【0016】
タスクスケジューリングの低効率および高遅延の課題を解決するために、本開示の実施例は、SoCに基づくタスクスケジューリング方法を提供し、該当方法は、CPUとハードウェアアクセラレータとの間にハードウェアにるタスクスケジューラを複数設けて、ハードウェアスケジューリングの方式でハードウェアアクセラレータをスケジューリングしてタスクを実行させることを実現することができ、スケジューリングの遅延をナノ秒レベルまで減少させ、高効率かつ低遅延のタスクスケジューリングを実現し、タスクスケジューリングのリアルタイム性を確保することができる。さらに、タスクスケジューラを使用してハードウェアアクセラレータをスケジューリングして各タスクを実行させるプロセスにおいて、複数のタスクスケジューラの間で直接スケジューリングし、CPUがメインプログラムを中断する必要がないため、CPUが割り込みによって中断される頻度を減少させ、間接的にシステムの処理能力を向上させる。
【0017】
(例示的なシステム)
図1は、本開示の1つの例示的な実施例に係るシステムオンチップの構造概略図である。
図1に示すように、システムオンチップ(SoC)10は、プロセッサ101と、第1のタスクスケジューラ102と、第2のタスクスケジューラ103と、第1のアクセラレータ104と、スケジューリングバス105と、メモリ106と、を備える。ここで、メモリ106と、プロセッサ101と、第1のタスクスケジューラ102と、第2のタスクスケジューラ103と、第1のアクセラレータ104とは、順次に結合(coupling)される。
図1に示すように、第1のタスクスケジューラ102と第2のタスクスケジューラ103とは、専用のスケジューリングバス105を介して結合されることができる。
【0018】
プロセッサ101は、CPUであることができ、SoC10により実行される必要があるタスクセットおよびタスクセットにおける各タスク間の依存関係を決定し、タスクセットおよび依存関係に基づいて、第1のタスクの初期ジューリング情報を決定するために使用され、該当第1のタスクは、第1のアクセラレータ104が実行可能なタスクである。いくつかの例示において、第1のタスクは、タスクセットにおける任意のタスクであり、タスクセットおよびタスクセットにおける各タスク間の依存関係は、コンパイラにより事前にコンパイルされ、メモリに記憶されることができる。タスクセットを実行する必要がある場合、プロセッサ101は、メモリから読み取る。
【0019】
例示的に、SoC10は、1つまたは複数の第2のタスクスケジューラ103を備えることができる。SoC10が複数の第2のタスクスケジューラ103を備えた場合、複数の第2のタスクスケジューラ103における各第2のタスクスケジューラ103は、それぞれ1つの第1のアクセラレータ104をスケジューリングする。本開示の実施例では、SoC10が備えた第2のタスクスケジューラ103および第1のアクセラレータ104の数は限定しない。
図1および
図2は、SoC10が1つの第2のタスクスケジューラ103と1つの第1のアクセラレータ104とを備えることを例として示す。
【0020】
第1のタスクスケジューラ102は、スケジューリング機能を有する。この第1のタスクスケジューラ102は、他のタスクスケジューラをスケジューリングすることができる。本開示の実施例において、この第1のタスクスケジューラ102は、初期スケジューリング情報に基づいて、第1のタスクの第1のスケジューリング情報を決定し、第1のスケジューリング情報に基づいて、第2のタスクスケジューラ103をスケジューリングするために使用される。
【0021】
第2のタスクスケジューラ103は、スケジューリング機能を有する。この第2のタスクスケジューラ103は、ハードウェアアクセラレータが特定のタスクを実行するように、ハードウェアアクセラレータをスケジューリングすることができる。本開示の実施例において、この第2のタスクスケジューラ103は、第1のタスクスケジューラ102からの第1のスケジューリング情報を受信し、第1のスケジューリング情報に基づいて、第1のアクセラレータ104をスケジューリングするために使用される。
【0022】
第1のアクセラレータ104は、人工知能(Artificial Intelligence、AI)アクセラレータやニューラルネットワークプロセッサ(Intelligent Processing Unit、IPU)などであることができ、第1のアクセラレータ104には、テンソルプロセッシングユニット(Tensor Processing Unit、TPU)などのような各種の特定のコンピューティング機能を実現可能なハードウェアアクセラレーションユニットが含まれることができる。本開示の実施例において、第1のアクセラレータ104は、第2のタスクスケジューラ103のスケジューリングに応じて、第1のタスクを実行するために使用される。
【0023】
図2は、本開示の別の例示的な実施例に係るSoCの構造概略図である。
図2に示すように、
図1に示したSoC10に加えて、SoC10は、第3のタスクスケジューラ205と、第2のアクセラレータ206と、をさらに備える。ここで、第3のタスクスケジューラ205は、第1のタスクスケジューラ102と第2のタスクスケジューラ103と第2のアクセラレータ206とにそれぞれ結合される。いくつかの実施例において、第1のタスクスケジューラ102と第2のタスクスケジューラ205と第3のタスクスケジューラ205とは、専用のスケジューリングバス105を介して結合されることができる。
【0024】
プロセッサ101は、タスクセットおよび依存関係に基づいて、第2のタスクの初期スケジューリング情報を決定するためにも使用され、この第2のタスクは、第2のアクセラレータ206が実行可能なタスクである。
【0025】
第1のタスクスケジューラ102は、第2のタスクの初期スケジューリング情報に基づいて、第2のタスクの第2のスケジューリング情報を決定し、第3のタスクスケジューラ205に第2のスケジューリング情報を送信するために使用される。例示的に、この第2のタスクは、タスクセットにおいて第1のタスクと依存関係を有するタスクであり、例えば、第2のタスクは、第1のタスクの後続タスクであり、すなわち、第2のタスクの実行は、第1のタスクの実行結果に依存する必要がある。
【0026】
第2のタスクスケジューラ103は、第1のタスクの実行結果を決定し、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第3のスケジューリング情報を生成し、第3のタスクスケジューラ205に第3のスケジューリング情報を送信するためにも使用される。
【0027】
第3のタスクスケジューラ205は、第1のタスクスケジューラ102からの第2のスケジューリング情報及び第2のタスクスケジューラ103からの第3のスケジューリング情報を受信し、第2のスケジューリング情報および第3のスケジューリング情報に基づいて、第2のアクセラレータ206をスケジューリングするためにも使用される。
【0028】
第2のアクセラレータ206は、第3のタスクスケジューラ205のスケジューリングに応じて、第2のタスクを実行するために使用される。
【0029】
例示的に、SoC10は、1つまたは複数の第3のタスクスケジューラ205を備えることができる。SoC10が複数の第3のタスクスケジューラ205を備えた場合、複数の第3のタスクスケジューラ205における各第3のタスクスケジューラ205は、それぞれ1つの第2のアクセラレータ206をスケジューリングする。本開示の実施例では、SoC10が備えた第3のタスクスケジューラ205および第2のアクセラレータ206の数は限定しない。
図2は、SoC10が1つの第3のタスクスケジューラ205と1つの第2のアクセラレータ206とを備えることを例として示す。
【0030】
また、本開示の実施例では、SoC10の具体的な構造を限定せず、SoC10が備える部品は、
図1および
図2に示す部品よりも多くても少なくてもよい。例えば、SoC10は、コンフィグレーションバスや入出力インターフェースなどの構成要素をさらに備えることができる。
【0031】
(例示的な方法)
図3は、本開示の1つの例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートである。本開示の実施例に係るタスクスケジューリング方法は、
図1に示すSoC10に適用されることができ、
図3に示すように、この方法は、ステップ301からステップ305を含む。
【0032】
ステップ301では、SoCにより実行される必要があるタスクセットと、タスクセットにおける各タスク間の依存関係と、を決定する。
【0033】
本開示の実施例において、タスクセットにおける各タスクは、画像処理タスク、音声処理タスクやデータ演算タスクを含むことができるが、これらに限定されない。依存関係は、タスクセットにおける各タスクの実行シーケンスを表す。タスクセットおよびタスクセットにおける各タスク間の依存関係は、コンパイラにより事前にコンパイルされ、SoCにおけるメモリに記憶されることができる。例示的に、各タスク間の依存関係は、シーケンスやリンクなどの方式でメモリに記憶されることができる。タスクセットにおける各タスクを実行する必要がある場合、SoCにおけるプロセッサは、メモリから各タスクと各タスク間の依存関係とを読み取る。
【0034】
例示的に、
図4は、本開示の1つの例示的なタスクセットにおける各タスク間の依存関係の概略図であり、
図4に示すように、タスク1とタスク2およびタスク3との間には、依存関係があり、タスク2とタスク1、タスク4およびタスク5との間には、依存関係があり、タスク3とタスク1およびタスク4との間には、依存関係があり、タスク4とタスク2、タスク3およびタスク6との間には、依存関係があり、タスク5とタスク2およびタスク6との間には、依存関係があり、タスク6とタスク4およびタスク5との間には、依存関係がある。タスクスケジューリングのプロセスにおいて、タスク1の処理が完了した後にはタスク2とタスク3とがトリガされ、タスク2の処理が完了した後にはタスク4とタスク5とがトリガされ、タスク3の処理が完了した後にはタスク4がトリガされ、タスク4の処理が完了した後にはタスク6がトリガされ、タスク5の処理が完了した後にはタスク6がトリガされる。ここで、タスク4は、タスク2とタスク3との2つのトリガ条件を同時に満たすときのみに実行が開始され、タスク6は、タスク4とタスク5との2つのトリガ条件を同時に満たすときのみに実行が開始される。
【0035】
ステップ302では、タスクセットおよび依存関係に基づいて、SoCにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定する。
【0036】
SoCにおけるアクセラレータは、特定のタスクを実行可能なハードウェアモジュールである。本開示の実施例において、第1のタスクは、タスクセットにおける、アクセラレータにより実行される必要があるタスクである。プロセッサは、タスクセットを取得した後、まず、タスクセットからアクセラレータにより実行される第1のタスクを決定し、第1のタスクの実行に使用されるアクセラレータは、第1のアクセラレータであり、次に、依存関係に基づいて、第1のタスクの初期スケジューリング情報を決定し、初期スケジューリング情報に基づいて、第1のタスクスケジューラをスケジューリングする。第1のタスクスケジューラは、初期スケジューリング情報に基づいて、第1のタスクの第1のスケジューリング情報を決定する。
【0037】
第1のタスクは、第1のアクセラレータが実行可能なタスクであり、画像処理タスク、音声処理タスクやデータ演算タスクを含むが、これらに限定されない。第1のタスクに対応する第1のアクセラレータは、画像処理アクセラレータ、音声処理アクセラレータやデータ演算アクセラレータを含むことができるが、これらに限定されない。第1のタスクが画像処理タスクである場合、第1のアクセラレータは、画像処理タスクを実行可能なアクセラレータであり、第1のタスクがデータ演算タスクである場合、第1のアクセラレータは、データ演算タスクを実行可能なアクセラレータである。
【0038】
図4に示すように、タスクセットに{タスク1、タスク2、タスク3、タスク4、タスク5、タスク6}が含まれることを例とすると、タスク1、タスク2、タスク4、タスク5およびタスク6は、SoCにおける各アクセラレータが実行可能なタスクであり得り、タスク3は、アクセラレータにより実行不可であり、プロセッサにより実行される必要がある特別なタスクである。例えば、SoCにおけるすべてのアクセラレータがある特殊形式の画像を処理することができない場合、CPUによりタスク3を実行して、該当特殊形式の画像を処理する必要がある。
【0039】
実現の場合、今回実行される必要がある第1のタスクの第1のスケジューリング情報を決定し、タスクセットにおける他の第1のタスクが実行される時に、他の第1のタスクの第1のスケジューリング情報をリアルタイムに決定してもよく、タスクセットにおけるすべての第1のタスクの第1のスケジューリング情報を統括的に決定し、ある第1のタスクが実行される時に、複数回の決定を行う必要なく、以前に決定された該当第1のタスクの第1のスケジューリング情報をそのまま利用してもよい。例えば、第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定する場合、今回実行待ちの第1のタスク(例えば、タスク1)の第1のスケジューリング情報のみを決定してもよく、各実行待ちの第1のタスク(タスク1、タスク2、タスク4、タスク5およびタスク6を含む)の第1のスケジューリング情報を全て決定してもよい。
【0040】
本開示の実施例において、第1のタスクに関する依存関係に基づいて、該当第1のタスクの第1のスケジューリング情報を決定することができる。該当依存関係には、依存と被依存とが含まれ、第1のタスクを実行するために依存する必要があるタスクは、第1のタスクの先行タスクと呼ばれ、第1のタスクの実行に依存される必要があるタスクは、第1のタスクの後続タスクと呼ばれる。第1のタスクの第1のスケジューリング情報には、少なくとも第1のタスクの先行タスクと第1のタスクの後続タスクとが含まれる。第1のタスクの実行が、タスクセットにおける他のタスクに依存しない場合、該当第1のタスクの先行タスクは、空であり、nullと記する。この場合、第1のタスクは、プロセッサが実行するメインプログラムによりスケジューリングされて開始されるものである。タスクセットにおける他のタスクが、第1のタスクに依存されない場合、該当第1のタスクの後続タスクは、空であり、null記とする。この場合、第1のタスクの実行が完了した後、プロセッサが実行するメインプログラムに戻る。
【0041】
例えば、
図4に示すタスクセットにおけるタスク1の第1のスケジューリング情報には、{null}と{タスク2、タスク3}とが含まれることができ、タスク2の第1のスケジューリング情報には、{タスク1}と{タスク4、タスク5}とが含まれることができ、タスク6の第1のスケジューリング情報には、{タスク4、タスク5}と{null}とが含まれることができる。上記の第1のスケジューリング情報において、1番目のセットには、第1のタスクのすべての先行タスクが含まれ(先行タスクが空である場合、nullと記する)、2番目のセットには、第1のタスクのすべての後続タスクが含まれる(後続タスクが空である場合、nullと記する)。
【0042】
ステップ303では、SoCにおける第1のタスクスケジューラにより、SoCにおける、第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに第1のスケジューリング情報を送信する。
【0043】
第1のタスクスケジューラは、第1のタスクの第1のスケジューリング情報を決定した後、SoCにおけるスケジューリングバスを介して第1のスケジューリング情報を第2のタスクスケジューラに送信することができる。該当第1のタスクスケジューラは、SoCにおける、第2のタスクスケジューラをスケジューリングするためのハードウェアスケジューラであり、該当第2のタスクスケジューラは、SoCにおける、第1のアクセラレータをスケジューリングするためのハードウェアスケジューラであり、該当第1のアクセラレータは、第1のタスクを実行可能なアクセラレータである。本開示の実施例において、スケジューリングバスを介して結合される第1のタスクスケジューラと第2のタスクスケジューラとの間では、ハードウェアスケジューリングを直接実行することができる。
【0044】
ステップ304では、第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングする。
【0045】
第2のタスクスケジューラは、第1のスケジューリング情報を受信した後、該当第1のスケジューリング情報に基づいて、第1のアクセラレータをスケジューリングする。スケジューリングする時に、第1のタスクの先行タスクが空である場合、第2のタスクスケジューラは、第1のスケジューリング情報に基づいて第1のアクセラレータを直接スケジューリングし、第1のタスクの先行タスクが空でない場合、第2のタスクスケジューラは、第1のタスクの先行タスクの実行結果を取得し、第1のスケジューリング情報および第1のタスクの先行タスクの実行結果に基づいて、第1のアクセラレータをスケジューリングする必要がある。
【0046】
タスク1がアクセラレータ1により実行され、タスク2がアクセラレータ2により実行されることを例とすると、第1のタスクがタスク1である場合、第2のタスクスケジューラは、タスク1の第1のスケジューリング情報に基づいてアクセラレータ1をスケジューリングし、第1のタスクがタスク2である場合、第2のタスクスケジューラは、タスク1の第1のスケジューリング情報に基づいて、タスク1の実行結果を決定し、タスク1の実行結果およびタスク2の第1のスケジューリング情報に基づいて、アクセラレータ2をスケジューリングする。
【0047】
本開示の実施例において、第1のタスクスケジューラおよび第2のタスクスケジューラは、SoCに設けられた、スケジューリング機能を実現可能なハードウェアモジュールである。タスクスケジューリングを実行する場合、まず、プロセッサにより第1のタスクスケジューラをスケジューリングし、次に、第1のタスクスケジューラにより第2のタスクスケジューラをスケジューリングし、最後に、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングすることで、プロセッサがハードウェアで第1のアクセラレータをスケジューリングすることを実現する。
【0048】
ステップ305では、第1のアクセラレータにより第1のタスクを実行する。
【0049】
第1のアクセラレータは、第2のタスクスケジューラにより決定されたコンフィグレーション情報に基づいて、メモリから第1のタスクの実行に必要な演算データを読み取って演算して、第1のタスクの実行結果を得る。いくつかの例示において、第1のアクセラレータは、該当第1のタスクの実行を完了した後、第2のタスクスケジューラが第1のタスクの実行結果に基づいて次の実行待ちの第1のタスクのスケジューリングおよび実行プロセスを実行するように、該当第1のタスクの実行結果を第2のタスクスケジューラに発送することができる。
【0050】
本開示の実施例に係るタスクスケジューリング方法によれば、プロセッサは、第1のタスクスケジューラおよび第2のタスクスケジューラにより第1のアクセラレータをスケジューリングして第1のタスクを実行させ、第1のタスクスケジューラおよび第2のタスクスケジューラは、SoCに設けられた、スケジューリング機能を実現可能なハードウェアモジュールであり、プロセッサは、ハードウェアによりタスクスケジューリングを実行する。これにより、タスクスケジューリングの効率を向上させ、タスクスケジューリングの遅延を減少させ、タスクスケジューリングのリアルタイム性を確保することができるので、タスクが高効率かつ低遅延に実行されることを確保する。そして、第1のタスクスケジューラと第2のタスクスケジューラとの間では、直接スケジューリングすることができ、スケジューリング中、プロセッサが処理中のメインプログラムを中断する必要がないため、プロセッサが割り込みによって中断される頻度を減少させ、間接的にシステムの処理能力を向上させることができる。
【0051】
いくつかの例示において、上記の
図3に示す実施例における、「タスクセットおよび依存関係に基づいて、SoCにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定する」ステップ302は、
図5に示すステップ3021からステップ3023により実現されることができる。
【0052】
ステップ3021では、タスクセットから、第1のアクセラレータが実行可能な第1のタスクを決定する。
【0053】
プロセッサは、まず、タスクセットから、SoCにおけるアクセラレータが実行可能なタスクを選択し、これらのタスクを第1のタスクとし、第1のアクセラレータにより各第1のタスクを実行する。
【0054】
例えば、
図4に示すタスクセットにおいて、タスク1、タスク2、タスク4、タスク5およびタスク6は、SoCにおけるアクセラレータが実行可能なタスクである場合、タスク1、タスク2、タスク4、タスク5およびタスク6は、いずれも第1のタスクである。
【0055】
ステップ3022では、依存関係に基づいて、タスクセットから、第1のタスクと依存関係がある関連タスクを決定する。
【0056】
プロセッサは、依存関係に基づいて、タスクセットに含まれている各タスクから、第1のタスクと依存関係があるタスクを、第1のタスクの関連タスクとして選択する。第1のタスクの関連タスクには、第1のタスクの先行タスクと、第1のタスクの後続タスクと、が含まれる。
【0057】
図4のタスクセットに示すように、タスク1の先行タスクが空であり、タスク1の後続タスクにタスク2とタスク3とが含まれるので、タスクセットにおける、タスク1と依存関係がある関連タスクには、タスク2とタスク3とが含まれ、別の例として、タスク4の先行タスクには、タスク2とタスク3とが含まれ、タスク4の後続タスクには、タスク6が含まれるので、タスクセットにおける、タスク4と依存関係がある関連タスクには、タスク2、タスク3およびタスク6が含まれる。
【0058】
ステップ3023では、第1のタスクおよび関連タスクに基づいて、第1のタスクの第1のスケジューリング情報を決定する。
【0059】
第1のタスクの第1のスケジューリング情報には、少なくとも第1のタスクの先行タスクと第1のタスクの後続タスクとが含まれる。該当第1のスケジューリング情報は、第1のタスクがタスク実行条件(トリガ条件とも呼ばれる)を満たすかどうかを判定するために使用されることができ、第1のタスクの後続タスクを決定して、これらの後続タスクに基づいて、第1のタスクの実行結果を対応するタスクスケジューラに送信する必要があると判定するためにも使用されることができる。
【0060】
第1のタスクがタスク1であることを例とすると、タスク1と依存関係があるタスクには、タスク2とタスク3とが含まれ、タスク1の第1のスケジューリング情報には、{null}と{タスク2、タスク3}とが含まれることができる。タスク1の第1のスケジューリング情報に基づいて、タスク1の先行タスクが空であると決定し、タスク1がタスク実行条件を満たすと直接判定する。タスク1の実行が完了した後、タスク1の第1のスケジューリング情報に基づいて、タスク1の実行結果をタスク2に対応するタスクスケジューラとタスク3に対応するタスクスケジューラとに送信する必要があると判定する。
【0061】
また、第1のタスクがタスク4であることを例とすると、タスク4と依存関係があるタスクには、タスク2、タスク3およびタスク6が含まれ、タスク4の第1のスケジューリング情報には、{タスク2、タスク3}と{タスク6}とが含まれることができる。タスク4の第1のスケジューリング情報に基づいて、タスク4の先行タスクにタスク2とタスク3とが含まれると決定し、タスク2の実行結果とタスク3の実行結果とを受信したか否かを判定し、タスク2とタスク3との実行結果を受信した場合、タスク4がタスク実行条件を満たすと判定する。タスク4の実行が完了した後、タスク4の第1のスケジューリング情報に基づいて、タスク4の実行結果をタスク6に対応するタスクスケジューラに送信する必要があると判定する。
【0062】
本開示の実施例において、タスクスケジューラは、第1のスケジューリング情報に基づいて、第1のタスクがトリガ条件を満たすか否かを判定し、第1のタスクの実行結果を対応する次のタスクスケジューラに送信する必要があると判定する。第1のスケジューリング情報でタスクスケジューラ間の直接スケジューリングを実現することにより、プロセッサが中断される頻度を減少させ、間接的にシステムの処理能力を向上させることができる。
【0063】
いくつかの実施例において、
図6に示すように、上記
図3に示す実施例における、「第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングする」ステップ304は、ステップ3041からステップ3043を含むことができる。
【0064】
ステップ3041では、第1のスケジューリング情報に基づいて、第1のタスクがタスク実行条件を満たすと判定する。
【0065】
第2のタスクスケジューラは、第1のタスクスケジューラからの第1のスケジューリング情報を受信した場合、第1のスケジューリング情報に基づいて、第1のタスクが実行をトリガすることができるかどうかを判定し、第1のスケジューリング情報に基づいて第1のタスクの先行タスクがいずれも実行されたと判定した場合、または、第1のスケジューリング情報に基づいて第1のタスクの先行タスクが空であると判定した場合、第1のタスクがタスク実行条件を満たすと判定し、ステップ3042に進み、第1のタスクの実行をトリガする。そうでない場合、第1のタスクがタスク実行条件を満たしないと判定する。
【0066】
ステップ3042では、第2のタスクスケジューラにより第1のスケジューリング情報を解析して、第1のタスクの実行に必要な第1のコンフィグレーション情報を決定する。
【0067】
第1のタスクの第1のスケジューリング情報には、第1のタスクの先行タスクと第1のタスクの後続タスクとに加えて、第1のタスクの実行に必要な情報がさらに含まれる。第2のタスクスケジューラは、第1のスケジューリング情報を受信した後、それを解析して、第1のタスクの実行に必要なパラメータおよびタスクタイプを取得し、タスクタイプに基づいて、第1のタスクの実行に必要なパラメータをコンフィグレーションして、第1のコンフィグレーション情報を取得する。
【0068】
いくつかの例示において、第1のタスクスケジューラは、データパケットの形式で第1のスケジューリング情報を送信することができる。
図7は、本開示の1つの例示的な実施例に係るデータパケットの構成構造概略図であり、
図7に示すように、第1のスケジューリング情報に対応するデータパケットは、ヘッダ部とデータ部とを含む。ヘッダ部には、長さ、ソース、ターゲット、タスクタイプおよび関連タスクが含まれ、データ部には、タスク番号、静的パラメータ、動的パラメータおよびデータフローパラメータが含まれる。第2のタスクスケジューラは、タスクタイプ、静的パラメータおよび動的パラメータに基づいて、第1のコンフィグレーション情報を決定する。
【0069】
第1のスケジューリング情報に対応するデータパケットのヘッダ部において、長さは、データパケット全体のデータ長であり、ソースは、第1のタスクスケジューラのアドレスであり、ターゲットは、第2のタスクスケジューラのアドレスであり、ソースとターゲットとは、それぞれ第1のスケジューリング情報の送信者と受信者とを示し、タスクタイプは、実行される必要があるタスクのタイプを示し、第1のコンフィグレーション情報の初期化に使用され、関連タスクには、先行タスクと後続タスクとが含まれる。第1のスケジューリング情報に対応するデータパケットのデータ部において、タスク番号は、タスクセットにおけるタスクの番号であり、静的パラメータは、タスクの実行に必要な静的演算データのメモリアドレスであり、動的パラメータは、タスクの実行に必要な動的演算データのメモリアドレスタスクであり、データフローパラメータは、タイムスタンプなどの、タスクに対応する関連データフロー情報であり、例えば、マルチフレーム画像を処理する場合、このタイムスタンプに基づいて、今回処理されるのが何番目フレームの画像であるかを判定することができる。
【0070】
ステップ3043では、第1のコンフィグレーション情報に基づいて、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングする。
【0071】
第1のアクセラレータは、第2のタスクスケジューラからの第1のコンフィグレーション情報を受信し、この第1のコンフィグレーション情報に基づいて演算を実行し、第1のアクセラレータが第1のタスクを実行して得た実行結果である演算結果を出力する。例示的に、第1のコンフィグレーション情報には、第1のタスクの実行に必要な演算データのメモリにおけるメモリアドレスが含まれることができ、第1のアクセラレータは、第1のコンフィグレーション情報に含まれているメモリアドレスに基づいてメモリから演算データを読み取り、演算を実行して演算データ結果を取得する。
【0072】
いくつかの例示において、SoCにおける第2のタスクスケジューラの数は、1つであってもよく、この1つの第2のタスクスケジューラにより各第1のタスクに対応する第1のアクセラレータをスケジューリングして各第1のタスクを実行させる。第2のタスクスケジューラの数は、複数であってもよく、複数の第2のタスクスケジューラの間で直接スケジューリングすることができ、異なるタスクスケジューラを使用して各タスクに対応するアクセラレータをスケジューリングする。以下、2つの第2のタスクスケジューラを例として説明する。区別のために、そのうちの第2のタスクスケジューラを第3のタスクスケジューラと呼び、第3のタスクスケジューラによりスケジューリングされるアクセラレータを第2のアクセラレータと呼び、第2のアクセラレータにより実行されるタスクを第2のタスクと呼ぶ。
図8は、本開示の他の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートであり、本開示の実施例に係るタスクスケジューリング方法は、
図2に示すSoC10に適用されることができ、
図8に示すように、この方法は、以下のステップ801からステップ810を含む。
【0073】
ステップ801では、SoCにより実行される必要があるタスクセットと、タスクセットにおける各タスク間の依存関係と、を決定する。
【0074】
SoCにおけるプロセッサにより処理されるメインプログラムがタスクセットにおける各タスクを実行する必要がある場合、プロセッサは、SoCにおけるメモリから各タスクと各タスク間の依存関係とを読み取る。メモリに記憶されるタスクセットおよびタスクセットにおける各タスク間の依存関係は、コンパイラにより事前にコンパイルされ、メモリに記憶されることができる。
【0075】
ステップ802では、タスクセットおよび依存関係に基づいて、SoCにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報およびSoCにおける第2のアクセラレータが実行可能な第2のタスクの第2のスケジューリング情報を決定する。
【0076】
いくつかの例示において、ステップ802における、タスクセットおよび依存関係に基づいて、SoCにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報を決定するステップの実現方法は、前述のステップ302を参照することができ、ここで説明を省略する。
【0077】
例示的に、上記第2のタスクは、第1のタスクの次のタスクであることができる。上記のタスクセットおよび依存関係に基づいて、第2のタスクの第2のスケジューリング情報を決定するステップの実現方法は、第1のスケジューリング情報を決定する方法と類似する。例えば、タスクセットおよび依存関係に基づいて、第2のタスクの第2のスケジューリング情報を決定するステップは、依存関係に基づいて、タスクセットから第2のタスクと依存関係がある関連タスクを決定するステップと、第2のタスクおよび第2のタスクの関連タスクに基づいて、第2のタスクの初期スケジューリング情報を決定するステップと、第2のタスクの初期スケジューリング情報に基づいて、第1のタスクスケジューラにより第2のタスクの第2のスケジューリング情報を決定するステップと、を含む。
【0078】
図4に示すように、プロセッサは、タスクセット{タスク1、タスク2、タスク3、タスク4、タスク5、タスク6}から、第1のタスクがタスク2であることを決定し、依存関係に基づいて、タスク2の関連タスクには、タスク1、タスク4およびタスク5が含まれることを決定し、タスク2の初期スケジューリング情報を決定する。該当タスク2の初期スケジューリング情報に対応するデータパケットにおいて、ソースは、プロセッサであり、ターゲットは、第1のタスクスケジューラであり、関連タスクには、{タスク1}と{タスク4、タスク5}とが含まれ、タスク番号は、タスク2であり、静的パラメータは、タスク2の実行に必要な静的演算データのメモリにおけるメモリアドレスである。プロセッサは、初期スケジューリング情報をコンフィグレーションバスに送信し、第1のタスクスケジューラは、タスク2の初期スケジューリング情報におけるターゲットが自身に合わせる(matching)と判定し、該当タスク2の初期スケジューリング情報を受信し、該当タスク2の初期スケジューリング情報に基づいてタスク2の第1のスケジューリング情報を生成する。該当タスク2の第1のスケジューリング情報に対応するデータパケットにおいて、ソースは、第1のタスクスケジューラであり、ターゲットは、第2のタスクスケジューラであり、関連タスクには、{タスク1}と{タスク4、タスク5}とが含まれ、タスク番号は、タスク2であり、静的パラメータは、タスク2の実行に必要な静的演算データのメモリにおけるメモリアドレスである。
【0079】
タスク2の関連タスクに基づいて、タスク2の次のタスクにタスク4とタスク5とが含まれることを決定し、依存関係に基づいて、タスク4の関連タスクに{タスク2、タスク3}と{タスク6}とが含まれることを決定し、タスク5の関連タスクに{タスク2}と{タスク6}とが含まれることを決定し、タスク4とタスク4の関連タスクとに基づいて、タスク4の初期スケジューリング情報を決定する。該当タスク4の初期スケジューリング情報に対応するデータパケットにおいて、ソースは、プロセッサであり、ターゲットは、第1のタスクスケジューラであり、関連タスクには、{タスク2、タスク3}と{タスク6}とが含まれ、タスク番号は、タスク4であり、静的パラメータは、タスク4の実行に必要な静的演算データのメモリにおけるメモリアドレスである。プロセッサは、初期スケジューリング情報をコンフィグレーションバスに送信し、第1のタスクスケジューラは、タスク4の初期スケジューリング情報におけるターゲットが自身に合わせると判定し、該当タスク4の初期スケジューリング情報を受信し、該当タスク4の初期スケジューリング情報に基づいてタスク4の第2のスケジューリング情報を生成する。該当タスク4の第2のスケジューリング情報に対応するデータパケットにおいて、ソースは、第1のタスクスケジューラであり、ターゲットは、第3のタスクスケジューラであり、関連タスクには、{タスク2、タスク3}と{タスク6}とが含まれ、タスク番号は、タスク4であり、静的パラメータは、タスク4の実行に必要な静的演算データのメモリにおけるメモリアドレスである。
【0080】
いくつかの実施例において、タスクセットにおいて第2のタスクに後続の他のタスクが含まれる場合、ステップ802において、タスクセットおよび依存関係に基づいて、該当他のタスクのスケジューリング情報を決定することもできる。
【0081】
ステップ803では、SoCにおける第1のタスクスケジューラにより、SoCにおける、第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに第1のスケジューリング情報を送信し、SoCにおける、第2のアクセラレータをスケジューリングするための第3のタスクスケジューラに第2のスケジューリング情報を送信する。
【0082】
ある実現形態において、第1のタスクスケジューラは、第1のスケジューリング情報および第2のスケジューリング情報を専用のスケジューリングバスに送信することができる。スケジューリングバスに結合される各タスクスケジューラは、各スケジューリング情報におけるターゲットに基づいて、各スケジューリング情報が自分に送信される情報であるか否かを判定する。スケジューリング情報におけるターゲットが自身に合わせる場合、該当スケジューリング情報を受信する。第2のタスクスケジューラは、第1のスケジューリング情報を受信し、第3のタスクスケジューラは、第2のスケジューリング情報を受信する。
【0083】
ステップ804では、第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングする。
【0084】
ステップ805では、第1のアクセラレータにより第1のタスクを実行する。
【0085】
本開示の実施例において、第1のタスクスケジューラおよび第2のタスクスケジューラは、SoCに設けられた、スケジューリング機能を実現可能なハードウェアモジュールであり、プロセッサは、第1のタスクスケジューラおよび第2のタスクスケジューラにより第1のアクセラレータをスケジューリングして、プロセッサがハードウェアによりアクセラレータをスケジューリングすることを実現する。
【0086】
ステップ806では、SoCにおける第3のタスクスケジューラにより、SoCにおける第2のアクセラレータが実行可能な第2のタスクの第2のスケジューリング情報を決定する。
【0087】
本開示の実施例において、第3のタスクスケジューラは、第2のアクセラレータをスケジューリングするために使用される。第3のタスクスケジューラは、第1のタスクスケジューラがスケジューリングバスにより送信される第2のスケジューリング情報を受信する。
【0088】
ステップ807では、第2のタスクスケジューラにより、第1のタスクの実行結果を決定する。
【0089】
第1のアクセラレータは、第1のタスクの実行を完了した後、第1のタスクの実行結果を第2のタスクスケジューラに送信する。
【0090】
ステップ808では、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第3のタスクスケジューラに第3のスケジューリング情報を送信する。
【0091】
第2のタスクスケジューラは、第1のスケジューリング情報における後続タスクに基づいて、第1のタスクの実行結果を第2のタスクに対応する第3のタスクスケジューラに送信する必要があると判定する。第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第3のタスクスケジューラに送信される第3のスケジューリング情報を生成する。該当第3のスケジューリング情報に対応するデータパケットにおいて、ソースは、第2のタスクスケジューラであり、ターゲットは、第3のタスクスケジューラであり、タスク番号は、タスク4であり、動的パラメータは、タスク4の実行に必要な動的演算データのメモリにおけるメモリアドレスであり、該当動的パラメータは、第1のタスクの実行結果である。
【0092】
ステップ809では、第2のスケジューリング情報および第3のスケジューリング情報に基づいて、第3のタスクスケジューラにより第2のアクセラレータをスケジューリングする。
【0093】
第3のタスクスケジューラは、第2のスケジューリング情報に基づいて、タスク4の実行に必要な静的パラメータおよびタスクタイプを決定し、第3のスケジューリング情報に基づいて、タスク4の実行に必要な動的パラメータを決定する。タスクタイプに基づいて、静的パラメータおよび動的パラメータをコンフィグレーションして、第2のタスクのコンフィグレーション情報を取得し、該当第2のタスクのコンフィグレーション情報に基づいて、第2のアクセラレータをスケジューリングして第2のタスクを実行させる。
【0094】
ステップ810では、第2のアクセラレータにより第2のタスクを実行する。
【0095】
本開示の実施例において、第2のタスクの実行が完了した後、タスクセットに第2のタスクに後続の他のタスクが含まれ、該当他のタスクがSoCにおけるアクセラレータにより実行可能なタスクである場合、上記ステップを参照して、タスクセットにおけるすべてのタスクの実行が完了するまで、該当他のタスクをスケジューリングして実行することができる。これにより、タスクセットにおける各タスクをスケジューリングして実行することを実現する。
【0096】
本開示の実施例に係るタスクスケジューリング方法によれば、第1のタスクスケジューラと、第2のタスクスケジューラと、第3のタスクスケジューラとは、SoCに設けられた、スケジューリング機能を実現可能なハードウェアモジュールであり、第1のタスクスケジューラは、第2のタスクスケジューラと第3のタスクスケジューラとをスケジューリングすることができ、第2のタスクスケジューラは、第1のアクセラレータと第3のタスクスケジューラをスケジューリングすることができ、第3のタスクスケジューラは、第2のアクセラレータをスケジューリングすることができる。プロセッサは、複数のタスクスケジューラにより、複数のアクセラレータに対するスケジューリングを実現する。これにより、タスクスケジューリングの効率を向上させ、タスクスケジューリングの遅延を減少させ、タスクスケジューリングのリアルタイム性を確保することができるので、タスクが高効率かつ低遅延に実行されることを確保する。さらに、タスクセットにおける各タスクを実行するプロセスにおいて、各タスクスケジューラの間ではスケジューリングを直接実行することができ、ハードウェアスケジューラによりアクセラレータを直接スケジューリングしてタスクを実行させることで、プロセッサが処理中のメインプログラムを中断する必要がないため、プロセッサが割り込みによって中断される頻度を減少させ、間接的にシステムの処理能力を向上させる。
【0097】
いくつかの実施例において、
図9に示すように、上記
図8に示す実施例における、「第2のスケジューリング情報および第3のスケジューリング情報に基づいて、第3のタスクスケジューラにより第2のアクセラレータをスケジューリングする」ステップ809は、以下のステップ8091~ステップ8093を含むことができる。
【0098】
ステップ8091では、第2のスケジューリング情報に基づいて、第3のタスクスケジューラにより第2のタスクと依存関係がある先行タスクを決定する。
【0099】
第2のタスクが
図4に示すタスクセットにおけるタスク4であることを例とすると、第2のタスクと依存関係がある先行タスクは、タスク4の先行タスクである。第3のタスクスケジューラは、タスク4の第2のスケジューリング情報に基づいて、タスク4の先行タスクにタスク2とタスク3とが含まれることを決定する。
【0100】
ステップ8092では、第3のスケジューリング情報に基づいて、先行タスクの実行結果を決定する。
【0101】
第3のタスクスケジューラは、スケジューリングバスから、ターゲットが第3のタスクスケジューラである第3のスケジューリング情報に対応するデータパケットを受信して解析し、第2のタスクの先行タスクの実行結果を取得する。ここで、受信した第3のスケジューリング情報の数は、第2のタスクの先行タスクの数と同じである。例えば、タスク4は、2つの先行タスクを有するので、2つの先行タスクに対応するタスクスケジューラからの第3のスケジューリング情報を受信する必要がある。ここで、第3のタスクスケジューラは、スケジューリングバスから、第2のタスクスケジューラにより送信された第3のスケジューリング情報を受信し、該当第3のスケジューリング情報には、タスク2の実行結果が含まれる。第3のタスクスケジューラは、スケジューリングバスから、第1のタスクスケジューラにより送信された第3のスケジューリング情報を受信し、該当第3のスケジューリング情報には、タスク3の実行結果が含まれる。
【0102】
第2のタスクの先行タスクにアクセラレータが実行可能なタスクのみが含まれる場合、第3のスケジューリング情報は、アクセラレータをスケジューリングするための第2のタスクスケジューラによりスケジューリングバスに送信されるものであり、この場合、第3のタスクスケジューラは、第2のタスクスケジューラによりスケジューリングされる。第2のタスクの先行タスクにアクセラレータが実行不可の特別なタスクしか含まれていない場合、第3のスケジューリング情報は、プロセッサをスケジューリングするための第1のタスクスケジューラによりスケジューリングバスに送信されるものであり、この場合、第3のタスクスケジューラは、第1のタスクスケジューラによりスケジューリングされる。第2のタスクの先行タスクにアクセラレータが実行可能なタスクとアクセラレータが実行不可の特別なタスクとが含まれる場合、第3のスケジューリング情報には、アクセラレータをスケジューリングするための第2のタスクスケジューラによりスケジューリングバスに送信される情報と、プロセッサをスケジューリングするための第1のタスクスケジューラによりスケジューリングバスに送信される情報とが含まれ、この場合、第3のタスクスケジューラは、第1のタスクスケジューラと第2のタスクスケジューラとによりスケジューリングされる。
【0103】
ステップ8093では、先行タスクの実行結果および第2のスケジューリング情報に基づいて、第3のタスクスケジューラにより第2のアクセラレータをスケジューリングする。
【0104】
第2のタスクのすべての先行タスクの実行結果と第2のスケジューリング情報とを取得すると、第2のタスクがタスク実行条件を満たすと判定する。そして、第3のタスクスケジューラにより第2のスケジューリング情報を解析して、第2のタスクの実行に必要な第2のコンフィグレーション情報を決定し、先行タスクの実行結果および第2のコンフィグレーション情報に基づいて、第3のタスクスケジューラにより第2のアクセラレータをスケジューリングする。
【0105】
第2のタスクの第2のスケジューリング情報には、第2のタスクの先行タスクと第2のタスクの後続タスクとに加えて、第2のタスクの実行に必要な情報が含まれる。第3のタスクスケジューラは、第1のタスクスケジューラからの第2のスケジューリング情報を受信した後、該当第2のスケジューリング情報を解析して、第2のタスクの実行に必要な第2のコンフィグレーション情報を取得し、該当第2のコンフィグレーション情報には、第2のタスクの実行に必要な静的演算データのメモリにおけるメモリアドレスが含まれることができ、該当静的演算データのメモリアドレスに基づいて、第2のタスクの静的演算データを読み取る。第2のタスクの先行タスクの実行結果は、該当第2のタスクの動的パラメータである。第3のタスクスケジューラは、第2のスケジューリング情報のタスクタイプ、静的パラメータおよび動的パラメータに基づいて、第2のタスクの実行に必要なコンフィグレーション情報を決定し、第2のアクセラレータをスケジューリングして第2のタスクを実行するために、第2のアクセラレータに該当コンフィグレーション情報を送信する。
【0106】
第2のアクセラレータは、第2のタスクの実行に必要なコンフィグレーション情報を受信した後、該当コンフィグレーション情報に基づいて演算を実行し、第2のアクセラレータが第2のタスクを実行して得た実行結果である演算結果を出力する。
【0107】
本開示の実施例に係るタスクスケジューリング方法によれば、第3のタスクスケジューラは、第2のスケジューリング情報および第3のスケジューリング情報に基づいて、第2のアクセラレータをスケジューリングして第2のタスク(すなわち、第1のタスクの次のタスク)を実行し、実行完了後、第2のタスクを新しい第1のタスクとして、上記のステップを繰り返して、タスクセットにおける各タスクをスケジュールして実行することを実現する。タスクセットにおける各タスクを実行するプロセスにおいて、複数のタスクスケジューラの間でスケジューリングすることにより、各アクセラレータをスケジューリングして各タスクを実行し、プロセッサがメインプログラムを中断する必要がないため、CPUが割り込みによって中断される頻度を減少させ、システムの処理能力を向上させることができる。
【0108】
第2のタスクスケジューラが第1のアクセラレータからの第1のタスクの実行結果を取得した後、第1のスケジューリング情報に基づいて、第1のタスクの後続タスクがプロセッサにより実行される必要がある特別なタスクであると判定した場合、第2のタスクスケジューラは、第1のタスクスケジューラをスケジューリングする必要があり、第1のスケジューリングは、プロセッサをスケジューリングして特別なタスクを実行する。上記実施例に基づいて、本開示の実施例は、さらに他のタスクスケジューリング方法を提供し、
図10は、本開示の他の例示的な実施例に係るタスクスケジューリング方法の概略的なフローチャートであり、
図10に示すように、この方法は、以下のステップ1001からステップ1010を含む。
【0109】
ステップ1001では、SoCにより実行される必要があるタスクセットと、タスクセットにおける各タスク間の依存関係と、を決定する。
【0110】
ステップ1002では、タスクセットおよび依存関係に基づいて、SoCにおける第1のアクセラレータが実行可能な第1のタスクの第1のスケジューリング情報及びSoCにおけるプロセッサにより実行される必要がある第3のタスクの第4のスケジューリング情報を決定する。
【0111】
第1のタスクが
図4に示すタスクセットにおけるタスク1であることを例とすると、第1のスケジューリング情報に対応するデータパケットにおいて、ソースは、第1のタスクスケジューラであり、ターゲットは、第2のタスクスケジューラであり、関連タスクには、{null}と{タスク2、タスク3}とが含まれ、タスク番号は、タスク1であり、静的パラメータには、タスク1の実行に必要な静的演算データのメモリにおけるメモリアドレスが含まれる。
【0112】
第3のタスクが
図4に示すタスクセットにおけるタスク3であることを例とすると、第4のスケジューリング情報に対応するデータパケットにおいて、ソースは、プロセッサであり、ターゲットは、第1のタスクスケジューラであり、関連タスクには、{タスク1}と{タスク4}とが含まれ、タスク番号は、タスク3であり、静的パラメータには、タスク3の実行に必要な静的演算データのメモリにおけるメモリアドレスが含まれる。
【0113】
ステップ1003では、第1のタスクスケジューラにより、SoCにおけるプロセッサにより実行される必要がある第3のタスクの第4のスケジューリング情報を決定する。
【0114】
第1のタスクスケジューラは、プロセッサがスケジューリングバスにより送信される第1のスケジューリング情報および第4のスケジューリング情報を受信する。
【0115】
ステップ1004では、SoCにおける第1のタスクスケジューラにより、SoCにおける、第1のアクセラレータをスケジューリングするための第2のタスクスケジューラに第1のスケジューリング情報を送信する。
【0116】
ステップ1005では、第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第1のアクセラレータをスケジューリングする。
【0117】
ステップ1006では、第1のアクセラレータにより第1のタスクを実行する。
【0118】
ステップ1007では、第2のタスクスケジューラにより第1のタスクの実行結果を決定する。
【0119】
ステップ1008では、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第2のタスクスケジューラにより第1のタスクスケジューラに第5のスケジューリング情報を送信する。
【0120】
第2のタスクスケジューラは、第1のスケジューリング情報に基づいて、第1のタスクの後続タスクがプロセッサにより実行される必要がある特別なタスクであると判定する。第1のアクセラレータからの第1のタスクの実行結果を取得した後、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第1のタスクスケジューラをスケジューリングするための第5のスケジューリング情報を生成する。
図4に示すタスクセットにおけるタスク3を例とすると、タスク1の後続タスクにおけるタスク3は、特別なタスクであり、第2のタスクスケジューラが生成した第5のスケジューリング情報に対応するデータパケットにおいて、ソースは、第2のタスクスケジューラであり、ターゲットは、第1のタスクスケジューラであり、タスク番号は、タスク3であり、動的パラメータには、タスク1の実行結果のメモリにおけるメモリアドレスが含まれる。
【0121】
ステップ1009では、第4のスケジューリング情報および第5のスケジューリング情報に基づいて、第1のタスクスケジューラによりプロセッサをスケジューリングする。
【0122】
第1のタスクスケジューラは、受信した第4のスケジューリング情報を解析して、タスク3のタスクタイプおよび静的パラメータを決定し、第1のタスクスケジューラは、受信した第5のスケジューリング情報を解析して、タスク3の静的パラメータを決定し、タスク3のタスクタイプ、静的パラメータおよび動的パラメータに基づいて、タスク3のコンフィグレーション情報を生成し、タスク3のコンフィグレーション情報に基づいて、プロセッサをスケジューリングしてタスク3を実行する。
【0123】
ステップ1010では、プロセッサにより第3のタスクを実行する。
【0124】
プロセッサは、第3のタスクを実行して第3のタスクの実行結果を取得した後、第3のタスクの実行結果を第1のタスクスケジューラに送信する。
【0125】
第1のタスクスケジューラは、第4のスケジューリング情報に基づいて、第3のタスクの後続タスクが第3のアクセラレータにより実行される必要がある第4のタスクであると判定する。プロセッサからの第3のタスクの実行結果を取得した後、第3のタスクの実行結果および第4のスケジューリング情報に基づいて、第4のタスクスケジューラをスケジューリングするための第6のスケジューリング情報を生成する。この後に実行されるステップは、ステップ1004からステップ1010と類似するため、ここで説明を省略する。
【0126】
本開示の実施例に係るタスクスケジューリング方法によれば、第1のタスクスケジューラは、他のタスクスケジューラをスケジューリングするだけでなく、プロセッサをスケジューリングしてアクセラレータが実行不可の特別なタスクを実行して、特別なタスクをスケジューリングして実行することを実現することもできる。第1のタスクスケジューラが他のタスクスケジューラをスケジューリングする場合、アクセラレータが実行可能なタスクをスケジューリングして実行し、第1のタスクスケジューラがプロセッサをスケジューリングする場合、アクセラレータが実行不可のタスクをスケジューリングして実行することにより、ハードウェアにより異なるタイプのタスクのスケジューリングを実現し、タスクスケジューリングの柔軟性(flexibility)を向上させることができる。
【0127】
(例示的な装置)
図11は、本開示の1つの例示的な実施例に係るSoCの構造概略図であり、
図11に示すように、SoC1100は、プロセッサ1101と、第1のアクセラレータ1104と、第1のタスクスケジューラ1102と、第2のタスクスケジューラ1103と、を備える。プロセッサ1101は、第1のタスクスケジューラ1102を介して第2のタスクスケジューラ1103に結合され、第2のタスクスケジューラ1103は、第1のアクセラレータ1104に結合される。
【0128】
ここで、プロセッサ1101は、SoC1100により実行される必要があるタスクセットおよびタスクセットにおける各タスク間の依存関係を決定し、タスクセットおよび依存関係に基づいて、第1のアクセラレータ1104が実行可能な第1のタスクの初期スケジューリング情報を決定するために使用される。
【0129】
第1のタスクスケジューラ1102は、初期スケジューリング情報に基づいて、第1のタスクの第1のスケジューリング情報を決定し、第1のアクセラレータ1104をスケジューリングするための第2のタスクスケジューラ1103に第1のスケジューリング情報を送信するために使用される。
【0130】
第2のタスクスケジューラ1103は、第1のスケジューリング情報に基づいて、第1のアクセラレータ1104をスケジューリングするために使用される。
【0131】
第1のアクセラレータ1104は、第1のタスクを実行するために使用される。
【0132】
いくつかの例示において、プロセッサ1101は、タスクセットから第1のアクセラレータ1104が実行可能な第1のタスクを決定し、依存関係に基づいて、タスクセットから第1のタスクと依存関係がある関連タスクを決定し、第1のタスクおよび関連タスクに基づいて、第1のタスクの初期スケジューリング情報を決定するためにも使用される。
【0133】
第1のタスクスケジューラ1102は、第1のタスクの初期スケジューリング情報に基づいて、第1のタスクの第1のスケジューリング情報を決定するためにも使用される。
【0134】
いくつかの例示において、第2のタスクスケジューラ1103は、第1のスケジューリング情報に基づいて、第1のタスクがタスク実行条件を満たすと判定し、第1のスケジューリング情報を解析して、第1のタスクの実行に必要な第1のコンフィグレーション情報を決定し、第1のコンフィグレーション情報に基づいて、第1のアクセラレータをスケジューリングするためにも使用される。
【0135】
図12は、本開示の他の例示的な実施例に係るSoCの構造概略図であり、
図12に示すように、
図11に示すSoC1100に加えて、該当SoC1100は、第2のアクセラレータ1106と、第2のアクセラレータ1106をスケジューリングするための第3のタスクスケジューラ1105と、をさらに備え、第1のタスクスケジューラ1102は、第3のタスクスケジューラ1105を介して第2のアクセラレータ1106に結合される。
【0136】
第3のタスクスケジューラ1105は、第2のアクセラレータ1106が実行可能な第2のタスクの第2のスケジューリング情報を決定するために使用される。
【0137】
第2のタスクスケジューラ1103は、第1のタスクの実行結果を決定し、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第3のタスクスケジューラ1105に第3のスケジューリング情報を送信するためにも使用される。
【0138】
第3のタスクスケジューラ1105は、第2のスケジューリング情報および第3のスケジューリング情報に基づいて、第2のアクセラレータ1106をスケジューリングするためにも使用される。
【0139】
第2のアクセラレータ1106は、第2のタスクを実行するために使用され、該当第2のタスクは、第1のタスクの次のタスクである。
【0140】
いくつかの例示において、第3のタスクスケジューラ1105は、第2のスケジューリング情報に基づいて、第2のタスクと依存関係がある先行タスクを決定し、第3のスケジューリング情報に基づいて、先行タスクの実行結果を決定し、先行タスクの実行結果および第2のスケジューリング情報に基づいて、第2のアクセラレータ1106をスケジューリングするためにも使用される。
【0141】
いくつかの実施例において、第3のタスクスケジューラ1105は、第2のスケジューリング情報を解析して、第2のタスクの実行に必要な第2のコンフィグレーション情報を決定し、先行タスクの実行結果および第2のコンフィグレーション情報に基づいて、第2のアクセラレータ1106をスケジューリングするためにも使用される。
【0142】
いくつかの実施例において、第1のタスクスケジューラ1102は、SoCにおけるプロセッサにより実行される必要がある第3のタスクの第4のスケジューリング情報を決定するためにも使用される。
【0143】
第2のタスクスケジューラ1103は、第1のタスクの実行結果を決定し、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、第1のタスクスケジューラ1102に第5のスケジューリング情報を送信するためにも使用される。
【0144】
第1のタスクスケジューラ1102は、第4のスケジューリング情報および第5のスケジューリング情報に基づいて、プロセッサ1101をスケジューリングするためにも使用される。
【0145】
プロセッサ1101は、第3のタスクを実行するためにも使用される。
【0146】
図13は、本開示の1つの例示的な実施例に係る第1のタスクスケジューラの構造概略図であり、
図13に示すように、第1のタスクスケジューラ1102は、タスク送信モジュール11021を備える。
【0147】
タスク送信モジュール11021は、プロセッサ1101とスケジューリングバスとにそれぞれ結合される。
図11に示すSoC1100において、タスク送信モジュール11021は、プロセッサ1101からの第1のタスクの初期スケジューリング情報を受信し、第1のタスクの初期スケジューリング情報に基づいて、第1のスケジューリング情報を決定し、スケジューリングバスを介して第1のスケジューリング情報を第2のタスクスケジューラ1103に送信するために使用される。
図12に示すSoC1200において、タスク送信モジュール11021は、プロセッサ1101からの第1のタスクの初期スケジューリング情報および第2のタスクの初期スケジューリング情報を受信し、第1のタスクの初期スケジューリング情報に基づいて、第1のスケジューリング情報を決定し、第2のタスクの初期スケジューリング情報に基づいて、第2のスケジューリング情報を決定し、スケジューリングバスを介して第1のスケジューリング情報を第2のタスクスケジューラ1103に送信し、第2のスケジューリング情報を第3のタスクスケジューラ1105に送信するために使用される。
【0148】
図14は、本開示の1つの例示的な実施例に係る第2のタスクスケジューラの構造概略図であり、
図14に示すように、第2のタスクスケジューラ1103は、順に結合されたタスク受信モジュール11031、事前条件(PreCondition)判定モジュール11032およびタスクトリガモジュール11033と、順に結合された割り込み応答モジュール11034、出力モジュール11035およびタスク送信モジュール11036と、を備える。タスク受信モジュール11031とタスク送信モジュール11036とは、いずれもスケジューリングバスに結合され、該当スケジューリングバスを介して他のタスクスケジューラ(
図14では、第3のタスクスケジューラ1105を例として示す)に結合される。タスクトリガモジュール11033と割り込み応答モジュール11034とは、いずれも第1のアクセラレータ1104に結合される。
【0149】
タスク受信モジュール11031は、スケジューリングバスから第1のスケジューリング情報を受信するために使用され、該当第1のスケジューリング情報は、
図13に示す第1のタスクスケジューラ1102におけるタスク送信モジュール11021からのスケジューリング情報である。
【0150】
事前条件判定モジュール11032は、第1のスケジューリング情報に基づいて、第1のタスクがタスク実行条件を満たすかどうかを判定するために使用され、第1のタスクがタスク実行条件を満たす場合、該当第1のタスクがトリガされることができる。ある実現形態において、第1のタスクがタスクセットにおける実行待ちの一番目のタスクである場合、該当第1のタスクは、依存関係がある先行タスクを有せず、第1のタスクがタスク実行条件を満たすと判定し、第1のタスクがタスクセットにおける実行待ちの一番目のタスクではない場合、該当第1のタスクは、依存関係がある先行タスクを有し、第1のタスクが依存する先行タスクがすべて実行されると、第1のタスクがタスク実行条件を満たすと判定する。
【0151】
タスクトリガモジュール11033は、タスク実行条件を満たす第1のタスクを第1のアクセラレータ1104に対応するコンフィグレーション情報に変換するために使用される。第1のアクセラレータ1104は、該当コンフィグレーション情報に基づいて、第1のタスクを実行する。ある実現形態において、タスクトリガモジュール11033は、第1のスケジューリング情報を解析して、第1のタスクの実行に必要な第1のコンフィグレーション情報を決定することができ、該当第1のコンフィグレーション情報は、第1のアクセラレータ1104に対応するコンフィグレーション情報である。
【0152】
割り込み応答モジュール11034は、第1のアクセラレータ1104の割り込みに対してローカル処理を行い、割り込みを処理結果に変換し、この処理結果を第1のタスクの実行結果とするために使用される。
【0153】
出力モジュール11035は、第1のタスクの実行結果および第1のスケジューリング情報に基づいて、下位タスクスケジューラをトリガするための第3のスケジューリング情報を生成するために使用される。
【0154】
タスク送信モジュール11036は、第3のスケジューリング情報をスケジューリングバスに送信するために使用される。
【0155】
図15は、本開示の1つの例示的な実施例に係る第3のタスクスケジューラの構造概略図であり、
図15に示すように、第3のタスクスケジューラ1105は、順に結合されたタスク受信モジュール11051、事前条件判定モジュール11052およびタスクトリガモジュール11053と、順に結合された割り込み応答モジュール11054、出力モジュール11055およびタスク送信モジュール11056と、を備える。タスク受信モジュール11051とタスク送信モジュール11056とは、いずれもスケジューリングバスに結合され、該当スケジューリングバスを介して他のタスクスケジューラ(
図15では、第4のタスクスケジューラ1107を例として示す)に結合される。タスクトリガモジュール11053と割り込み応答モジュール11054とは、いずれも第2のアクセラレータ1106に結合される。
【0156】
タスク受信モジュール11051は、スケジューリングバスから第2のスケジューリング情報および第3のスケジューリング情報を受信するために使用され、この第2のスケジューリング情報は、
図13に示す第1のタスクスケジューラ1102におけるタスク送信モジュール11021からのスケジューリング情報であり、この第3のスケジューリング情報は、
図14に示す第2のタスクスケジューラ1103におけるタスク送信モジュール11036からのスケジューリング情報である。
【0157】
事前条件判定モジュール11052は、第2のスケジューリング情報に基づいて、第2のタスクがタスク実行条件を満たすかどうかを判定するために使用され、第2のタスクがタスク実行条件を満たす場合、第2のタスクがトリガされることができる。ある実現形態において、第2のタスクが依存するすべての先行タスクの実行結果を受信した場合、第2のタスクが依存する先行タスクがいずれも実行されたと判定されると、第2のタスクがタスク実行条件を満たすと判定される。先行タスクの実行結果を受信したかどうかは、上位タスクスケジューラからのスケジューリング情報を解析することで判定することができる。例えば、第1のタスクの実行結果を含む第3のスケジューリング情報を受信した場合、第2のタスクが依存する第1のタスクが実行されたと判定され、第2のタスクが第1のタスクのみに依存する場合、第2のタスクが依存する先行タスクが実行されたと判定されることができ、第2のタスクが第1のタスク以外にも他のタスクに依存する場合、他のタスクの実行結果を含むスケジューリング情報を受信したかどうかをさらに判定する必要がある。
【0158】
タスクトリガモジュール11053は、タスク実行条件を満たす第2のタスクを第2のアクセラレータ1106に対応するコンフィグレーション情報に変換するために使用される。第2のアクセラレータ1106は、該当コンフィグレーション情報に基づいて、第2のタスクを実行する。ある実現形態において、タスクトリガモジュール11053は、第2のスケジューリング情報を解析して、第2のタスクの実行に必要な第2のコンフィグレーション情報を決定し、該当第2のコンフィグレーション情報と第2のタスクのすべての先行タスクの実行結果とを第2のアクセラレータ1106に対応するコンフィグレーション情報とすることができる。
【0159】
割り込み応答モジュール11054は、第2のアクセラレータ1106の割り込みに対してローカル処理し、割り込みを処理結果に変換し、この処理結果を第2のタスクの実行結果とするために使用される。
【0160】
出力モジュール11055は、第2のタスクの実行結果および第3のスケジューリング情報に基づいて、下位タスクスケジューラをトリガするための下位スケジューリング情報を生成するために使用される。いくつかの例示において、第2のタスクに依存する後続タスクがある場合、この下位スケジューリング情報は、下位タスクスケジューラをスケジューリングするために使用され、この下位タスクスケジューラは、下位アクセラレータをスケジューリングするためのタスクスケジューラであり、この下位アクセラレータは、第2のタスクの後続タスクを実行可能なアクセラレータである。また、第2のタスクの後続タスクは、1つであってもよく、複数であってもよい。第2のタスクに依存する後続タスクがない場合、この下位スケジューリング情報は、第1のタスクスケジューラ1102をスケジューリングするために使用され、第1のタスクスケジューラ1102は、第2タスクの実行結果をプロセッサ1101に送信することができる。
【0161】
タスク送信モジュール11056は、下位スケジューリング情報をスケジューリングバスに送信するために使用される。
【0162】
いくつかの例示において、タスクセット内にハードウェアアクセラレータにより実行不可であり、プロセッサ1101により実行される必要がある特別なタスク(以下、第3のタスクと呼ばれる)がある場合、第1のタスクスケジューラ1102は、プロセッサ1101をスケジューリングして第3のタスクを実行させるためにも使用される。
【0163】
図16は、本開示の他の例示的な実施例に係る第1のタスクスケジューラの構造概略図であり、
図16に示すように、第1のタスクスケジューラ1102は、タスク送信モジュール11021と、タスク受信モジュール11022と、事前条件判定モジュール11023と、割り込みトリガモジュール11024と、結果トリガモジュール11025と、出力モジュール11026と、を備える。タスク送信モジュール11021とタスク受信モジュール11022とは、スケジューリングバスに結合され、スケジューリングバスを介して他のタスクスケジューラ(
図16では、それぞれ第2のタスクスケジューラ1103と第3のタスクスケジューラ1105とを例として示す)に結合される。タスク送信モジュール11021と、割り込みトリガモジュール11024と、結果トリガモジュール11025とは、いずれもプロセッサ1101に結合される。
【0164】
タスク受信モジュール11022は、プロセッサ1101から第3のタスクの第5のスケジューリング情報を受信するために使用され、スケジューリングバスから第4のスケジューリング情報を受信するためにも使用され、この第4のスケジューリング情報は、第3のタスクが依存する先行タスクに対応するタスクスケジューラがスケジューリングバスに送信したスケジューリング情報である。
【0165】
事前条件判定モジュール11023は、第5のスケジューリング情報に基づいて、第3のタスクがタスク実行条件を満たすかどうかを判定するために使用され、第3のタスクが依存するすべての先行タスクが実行されて、第3のタスクがタスク実行条件を満たすと判定された場合、該当第3のタスクがトリガされることができる。
【0166】
割り込みトリガモジュール11024は、タスク実行条件を満たす第3のタスクをプロセッサ1101に対応する割り込みコンフィグレーション情報に変換するために使用される。プロセッサ1101は、割り込みコンフィグレーション情報に基づいて、第3のタスクを実行する。ある実現形態において、割り込みトリガモジュール11024は、第4のスケジューリング情報を解析して、第3のタスクの実行に必要な第3のコンフィグレーション情報を決定し、該当第3のコンフィグレーション情報と第3のタスクのすべての先行タスクの実行結果とをプロセッサ1101に対応する割り込みコンフィグレーション情報とすることができる。
【0167】
結果トリガモジュール11025は、プロセッサ1101からのトリガを受信し、プロセッサ1101により実行される第3のタスクの実行結果を取得するために使用される。
【0168】
出力モジュール11026は、第3のタスクの実行結果および第5のスケジューリング情報に基づいて、下位タスクスケジューラをトリガするための下位スケジューリング情報を生成するために使用される。
【0169】
タスク送信モジュール11021は、下位スケジューリング情報をスケジューリングバスに送信し、スケジューリングバスを介して下位スケジューリング情報を下位タスクスケジューラに送信するために使用される。
【0170】
以上の装置の例示的な実施例の説明は、上記方法の説明と類似し、方法の対応する例示的な実施例と同じ有益な効果を有する。本開示の装置の例示的な実施例に開示されていない技術的細部および対応する有益な技術的効果について、当業者は、本開示の方法の例示的な実施例の説明を参照すれば理解することができ、ここで説明を省略する。
【0171】
(例示的な電子機器)
図17は、本開示の1つ的な実施例に係る電子機器の構造図であり、電子機器1700は、少なくとも1つのプロセッサ1701及びメモリ1702を備える。
【0172】
プロセッサ1701は、中央処理ユニット(CPU)、またはデータ処理能力および/または命令実行能力を有する他の形式の処理ユニットであることができ、電子機器1700内の他のコンポーネントを制御して所望の機能を実行することができる。
【0173】
メモリ1702は、1つまたは複数のコンピュータプログラム製品を含むことがてき、前記コンピュータプログラム製品は、例えば揮発性メモリおよび/または不揮発性メモリなどの様々な形態のコンピュータ可読記憶媒体を含むことがてきる。揮発性メモリは、例えば、ランダムアクセスメモリ(RAM)および/またはキャッシュメモリ(cache)を含むことができる。不揮発性メモリは、例えば、読み取り専用メモリ(ROM)、ハードディスク、フラッシュメモリなどを含むことができる。コンピュータ可読記憶媒体は、1つまたは複数のコンピュータプログラム命令を記憶することができ、プロセッサ1701は、1つまたは複数のコンピュータプログラム命令を実行することで、上記の本開示の各実施例のタスクスケジューリング方法および/または他の所望の機能を実現することができる。
【0174】
1つの例示において、電子機器1700は、バスシステムおよび/または他の形式の接続機構(図示せず)を介して互いに接続される入力装置1703および出力装置1704をさらに備えることができる。
【0175】
該当入力装置1703は、例えば、キーボードやマウス等を含むことができる。
【0176】
該当出力装置1704は、様々な情報を外部に出力することができ、例えば、ディスプレイ、スピーカ、プリンタ、通信ネットワークおよびそれらが接続される遠隔出力デバイスとなどを含むことができる。
【0177】
簡略化のために、
図17においては、該当電子機器1700における本開示に関連するコンポーネントの一部のみを示し、バス、入出力インターフェースなどのコンポーネントは省略した。その他、具体的な応用条件に応じて、電子機器1700は、任意の適切なコンポーネントをさらに備えることができる。
【0178】
(例示的なコンピュータプログラム製品およびコンピュータ可読記憶媒体)
本開示の実施例は、上記の方法および機器に加えて、コンピュータプログラム命令を含むコンピュータプログラム製品を提供することができる。該当コンピュータプログラム命令がプロセッサにより実行されると、プロセッサに、上記「例示的な方法」の部分に記載の本開示の各実施例に係るSoCに基づくタスクスケジューリング方法のステップを実行させる。
【0179】
コンピュータプログラム製品は、1つまたは複数のプログラミング言語の任意の組み合わせで本開示の実施例の操作を実行するためのプログラムコードを作成することができ、前記プログラミング言語は、Java(登録商標)、C++などのオブジェクト指向プログラミング言語、および「C」言語または類似のプログラミング言語などの従来の手続き型プログラミング言語を含む。プログラムコードは、下記のように実行されることができ、すなわち、ユーザーコンピューティングデバイス上で全体的に実行されてもよいし、ユーザーデバイス上で部分的に実行されてもよいし、独立したソフトウェアパッケージとして実行されてもよいし、一部はユーザーコンピューティングデバイス上で実行され、別の一部はリモートコンピューティングデバイス上で実行されてもよいし、リモートコンピューティングデバイスあるいはサーバー上で全体的に実行されてもよい。
【0180】
また、本開示の実施例は、コンピュータプログラム命令が記憶されているコンピュータ可読記憶媒体をさらに提供することができる。該当コンピュータプログラム命令がプロセッサにより実行されると、プロセッサに、上記「例示的な方法」の部分に記載の本開示の各実施例に係るSoCに基づくタスクスケジューリング方法のステップを実行させる。
【0181】
コンピュータ可読記憶媒体として、1つまたは複数の可読媒体の任意の組み合わせを採用することができる。可読媒体は、可読信号媒体または可読記憶媒体であることができる。可読記憶媒体は、例えば、電気、磁気、光、電磁気、赤外線、または半導体のシステム、装置あるいはデバイス、またはそれらの任意の組み合わせを含むことがてきるが、これらに限定されない。可読記憶媒体のより具体的な例(非網羅的なリスト)としては、1つまたは複数の導線を有する電気的な接続、モバイルハードドライブ、ハードディスク、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、消去可能なプログラマブル読み取り専用メモリ(EPROMまたはフラッシュメモリ)、光ファイバ、コンパクトディスク読み取り専用メモリ(CD-ROM)、光記憶装置、磁気記憶装置、または上記の任意の適切な組み合わせが挙げられる。
【0182】
以上、具体的な実施例を参照しながら本開示の基本的原理を説明してきたが、本開示に言及される利点、長所、効果などは、例示的なものにすぎず、限定的なものではなく、これらの利点、長所、効果などは、本開示の各実施例が必ずしも有するものではない。また、上記開示の具体的な詳細は、例示的な作用及び理解しやすい作用に過ぎず、限定的なものではなく、上記詳細は、本開示を必ずしも上記具体的な詳細により実現されるように限定することではない
【0183】
当業者であれば、本願の精神及び範囲から逸脱することなく、本開示に対して様々な変更や変形を行うことができる。このように、本願のこれらの修正や変形が本開示の特許請求の範囲及びその均等的な技術範囲内に属する場合、本開示もこれらの修正や変形を含むことを意味する。