(57)【要約】  実施形態は、コンピューティングデバイス上でのタスクシグナリングのためのコンピューティングデバイス、システム、および方法を含む。実行のクリティカルパス上での初期スレッドによるタスクの実行は、初期スレッドにより実行されるタスクと並列に実行され得る初期スレッドによる少なくとも1つの並列タスクを作成するために中断され得る。少なくとも1つの並列タスクの作成を示す中継スレッドへの初期信号は、初期スレッドにより送信され得る。少なくとも1つの並列タスクの取得の前に、初期スレッドによるタスクの実行が再開し得る。
2018536917.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上でのタスクシグナリングの方法であって、
実行のクリティカルパス上での初期スレッドによるタスクの実行を中断するステップと、
前記初期スレッドにより実行される前記タスクと並列に実行され得る前記初期スレッドによる少なくとも1つの並列タスクを作成するステップと、
前記少なくとも1つの並列タスクの作成を示す初期信号を前記初期スレッドにより中継スレッドに送信するステップと、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するステップとを備える、方法。
【請求項２】
前記中継スレッドにより前記初期信号を受信するステップと、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するステップとをさらに備える、請求項1に記載の方法。
【請求項３】
前記初期信号が直接の初期信号であり、前記中継スレッドにより前記初期信号を受信するステップが、前記初期スレッドとの接続を介して前記直接の初期信号を受信するステップを備える、請求項2に記載の方法。
【請求項４】
前記初期信号が間接的な初期信号であり、
前記少なくとも1つの並列タスクの前記作成を示すメモリデバイスの位置におけるデータを修正するステップをさらに備え、前記中継スレッドにより前記初期信号を受信するステップが、前記メモリデバイスの前記位置から前記修正されたデータを取り出すステップを備える、請求項2に記載の方法。
【請求項５】
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップをさらに備える、請求項2に記載の方法。
【請求項６】
前記少なくとも1つの作業スレッドにより前記中継信号を受信するステップと、
前記少なくとも1つの作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記少なくとも1つの作業スレッドをアクティブ状態に変更するステップと、
前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを実行するステップとをさらに備える、請求項5に記載の方法。
【請求項７】
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するステップと、
前記中継スレッドによって、前記別の並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するステップとをさらに備える、請求項2に記載の方法。
【請求項８】
前記中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するステップとをさらに備える、請求項1に記載の方法。
【請求項９】
互いに通信可能に接続される複数のプロセッサコアを備え、前記複数のプロセッサコアが、初期スレッドを実行するように構成される第1のプロセッサコアと、中継スレッドを実行するように構成される第2のプロセッサコアと、作業スレッドを実行するように構成される第3のプロセッサコアとを含み、前記第1のプロセッサコアが動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作が、
実行のクリティカルパス上での前記初期スレッドによるタスクの実行を中断するステップと、
前記初期スレッドにより実行される前記タスクと並列に実行され得る前記初期スレッドによる少なくとも1つの並列タスクを作成するステップと、
前記少なくとも1つの並列タスクの作成を示す初期信号を前記初期スレッドにより前記中継スレッドに送信するステップと、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するステップと
を備える、コンピューティングデバイス。
【請求項１０】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作が、
前記中継スレッドにより前記初期信号を受信するステップと、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するステップとを備える、請求項9に記載のコンピューティングデバイス。
【請求項１１】
前記初期信号が直接の初期信号であり、前記第2のプロセッサコアが、前記中継スレッドにより前記初期信号を受信するステップが前記初期スレッドを実行する前記第1のプロセッサコアとの接続を介して前記直接の初期信号を受信するステップを備えるように、動作を実行するようにプロセッサ実行可能命令を用いて構成される、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記第1のプロセッサコアおよび前記第2のプロセッサコアに通信可能に接続するメモリデバイスをさらに備え、
前記初期信号が間接的な初期信号であり、
前記第1のプロセッサコアが、前記少なくとも1つの並列タスクの前記作成を示す前記メモリデバイスの位置においてデータを修正するステップをさらに備える動作を実行するようにプロセッサ実行可能命令を用いて構成され、
前記第2のプロセッサコアが、前記中継スレッドにより前記初期信号を受信するステップが前記メモリデバイスの前記位置から前記修正されたデータを取り出すステップを備えるように、動作を実行するようにプロセッサ実行可能命令を用いて構成される、請求項10に記載のコンピューティングデバイス。
【請求項１３】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作がさらに、
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップを備える、請求項10に記載のコンピューティングデバイス。
【請求項１４】
前記第3のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作が、
前記作業スレッドにより前記中継信号を受信するステップと、
前記作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記作業スレッドをアクティブ状態に変更するステップと、
前記作業スレッドにより前記少なくとも1つの並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記作業スレッドにより前記少なくとも1つの並列タスクを実行するステップとを備える、請求項13に記載のコンピューティングデバイス。
【請求項１５】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作がさらに、
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するステップと、
前記中継スレッドによって、前記別の並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するステップとを備える、請求項10に記載のコンピューティングデバイス。
【請求項１６】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作がさらに、
前記中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するステップとを備える、請求項9に記載のコンピューティングデバイス。
【請求項１７】
実行のクリティカルパス上での初期スレッドによるタスクの実行を中断するための手段と、
前記初期スレッドにより実行される前記タスクと並列に実行され得る前記初期スレッドによる少なくとも1つの並列タスクを作成するための手段と、
前記少なくとも1つの並列タスクの作成を示す初期信号を前記初期スレッドにより中継スレッドに送信するための手段と、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するための手段とを備える、コンピューティングデバイス。
【請求項１８】
前記中継スレッドにより前記初期信号を受信するための手段と、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するための手段とをさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項１９】
前記初期信号が直接の初期信号であり、
前記中継スレッドにより前記初期信号を受信するための手段が、前記初期スレッドとの接続を介して前記直接の初期信号を受信するための手段を備える、請求項18に記載のコンピューティングデバイス。
【請求項２０】
前記初期信号が間接的な初期信号であり、
前記コンピューティングデバイスが、前記少なくとも1つの並列タスクの前記作成を示すメモリデバイスの位置におけるデータを修正するための手段をさらに備え、前記中継スレッドによる前記初期信号を受信するための手段が、前記メモリデバイスの前記位置から前記修正されたデータを取り出すための手段を備える、請求項18に記載のコンピューティングデバイス。
【請求項２１】
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するための手段と、
前記少なくとも1つの作業スレッドにより前記中継信号を受信するための手段と、
前記少なくとも1つの作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記少なくとも1つの作業スレッドをアクティブ状態に変更するための手段と、
前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを取得するための手段と、
前記初期スレッドによる前記タスクの実行と並列に、前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを実行するための手段とをさらに備える、請求項18に記載のコンピューティングデバイス。
【請求項２２】
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するための手段と、
前記中継スレッドによって、前記別の並列タスクを取得するための手段と、
前記初期スレッドによる前記タスクの実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するための手段とをさらに備える、請求項18に記載のコンピューティングデバイス。
【請求項２３】
前記中継スレッドの状態変更閾値を超えたかどうかを決定するための手段と、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するための手段とをさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項２４】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記動作が、
実行のクリティカルパス上での初期スレッドによるタスクの実行を中断するステップと、
前記初期スレッドにより実行される前記タスクと並列に実行され得る前記初期スレッドによる少なくとも1つの並列タスクを作成するステップと、
前記少なくとも1つの並列タスクの作成を示す初期信号を前記初期スレッドにより中継スレッドに送信するステップと、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するステップと
を備える、非一時的プロセッサ可読記憶媒体。
【請求項２５】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記中継スレッドにより前記初期信号を受信するステップと、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するステップと
を備える、請求項24に記載の非一時的プロセッサ可読記憶媒体。
【請求項２６】
前記初期信号が直接の初期信号であり、
前記記憶されたプロセッサ実行可能命令が、前記中継スレッドにより前記初期信号を受信するステップが前記初期スレッドとの接続を介して前記直接の初期信号を受信するステップを備えるように、前記プロセッサに動作を実行させるように構成される、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２７】
前記初期信号が間接的な初期信号であり、
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記少なくとも1つの並列タスクの前記作成を示すメモリデバイスの位置におけるデータを修正するステップを備え、前記中継スレッドによる前記初期信号を受信するステップが、前記メモリデバイスの前記位置から前記修正されたデータを取り出すステップを備える、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２８】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップと、
前記少なくとも1つの作業スレッドにより前記中継信号を受信するステップと、
前記少なくとも1つの作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記少なくとも1つの作業スレッドをアクティブ状態に変更するステップと、
前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを実行するステップと
を備える、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２９】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するステップと、
前記中継スレッドによって、前記別の並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するステップと
を備える、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項３０】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するステップと
を備える、請求項24に記載の非一時的プロセッサ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行のクリティカルパスから離れたタスクシグナリングに関する。
【背景技術】
【０００２】
応答性がよく、高性能で、電力効率の高いアプリケーションを作ることは、満足のいくユーザ体験をもたらすのに極めて重要である。性能および電力効率を向上させるために、プログラムの並列セクションは、1つまたは複数のコンピューティングコア上で実行される1つまたは複数のスレッドによって、中央処理装置(CPU)上で、グラフィクス処理装置(GPU)上で、または他の並列ハードウェア上で実行され得る。通常、「メインスレッド」と呼ばれる1つのスレッドが、並列セクションに入り、ヘルパータスクを作成し、並列セクションの実行を助けるように他のスレッドに通知する。
【０００３】
タスク作成は通常は高価ではないが、他のスレッドに通知することは、オペレーティングシステム呼出しを伴うことが多いので、相対的に非常に高価であり得る。たとえば、トップティアのクアッドコアのスマートフォンでは、状態変数を待ち続けるスレッドをシグナリングするためのレイテンシは、40マイクロ秒(約90,000CPUサイクル)にもなり得る。コードのいくつかの並列セクションの各々は、実行するのに40マイクロ秒もかからないことがあり、そのような高いシグナリングコストを並列実行に対して受け入れられないものにする。実行のクリティカルパス上でのシグナリングの間、並列セクションの実行は、シグナリングが完了するまで、実行のクリティカルパスの上でも、シグナリングにより開始される別のスレッドの上でも開始しない。したがって、並列化は、実行のクリティカルパス上のコードの元のセクションを速くするのではなく、実行のクリティカルパス上での実行を2倍遅くする。このレイテンシの一部は、他のスレッドがあるタスクを実行のクリティカルパス上でのタスクと並列に実行するときに回復され得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
様々な実施形態の方法および装置は、コンピューティングデバイス上でのタスクシグナリングのための回路および方法を提供する。様々な実施形態は、実行のクリティカルパス上の初期スレッドによるタスクの実行を中断するステップと、初期スレッドにより実行されるタスクと並列に実行され得る初期スレッドによる少なくとも1つの並列タスクを作成するステップと、少なくとも1つの並列タスクの作成を示す初期信号を初期スレッドにより中継スレッドに送信するステップと、少なくとも1つの並列タスクの取得の前に初期スレッドによるタスクの実行を再開するステップとを含み得る。
【０００５】
いくつかの実施形態はさらに、中継スレッドにより初期信号を受信するステップと、中継スレッドが待機状態にあるときに初期信号を受信したことに応答して中継スレッドをアクティブ状態に変更するステップとを含み得る。
【０００６】
いくつかの実施形態では、初期信号は直接の初期信号であることがあり、中継スレッドにより初期信号を受信するステップは、初期スレッドとの接続を介して直接の初期信号を受信するステップを含み得る。
【０００７】
いくつかの実施形態では、初期信号は間接的な初期信号であることがあり、実施形態はさらに、少なくとも1つの並列タスクの作成を示すメモリデバイスの位置におけるデータを修正するステップを含むことがあり、中継スレッドにより初期信号を受信するステップは、メモリデバイスのその位置から修正されたデータを取り出すステップを含むことがある。
【０００８】
いくつかの実施形態はさらに、少なくとも1つの並列タスクの作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップを含み得る。
【０００９】
いくつかの実施形態はさらに、少なくとも1つの作業スレッドにより中継信号を受信するステップと、少なくとも1つの作業スレッドが待機状態にあるときに中継信号を受信したことに応答して、少なくとも1つの作業スレッドをアクティブ状態に変更するステップと、少なくとも1つの作業スレッドにより少なくとも1つの並列タスクを取得するステップと、初期スレッドによるタスクの実行と並列に少なくとも1つの作業スレッドにより少なくとも1つの並列タスクを実行するステップとを含み得る。
【００１０】
いくつかの実施形態はさらに、別の並列タスクが残っているかどうかを中継スレッドにより決定するステップと、中継スレッドにより別の並列タスクを取得するステップと、初期スレッドによるタスクの実行と並列に中継スレッドにより別の並列タスクを実行するステップとを含み得る。
【００１１】
いくつかの実施形態はさらに、中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、中継スレッドの状態変更閾値を超えたと決定したことに応答して、中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの待機状態からより低いレベルの待機状態へ変更するステップとを含み得る。
【００１２】
様々な実施形態は、タスクシグナリングのために構成されるコンピューティングデバイスを含み得る。コンピューティングデバイスは、互いに通信可能に接続される複数のプロセッサコアを含むことがあり、複数のプロセッサコアは、初期スレッドを実行するように構成される第1のプロセッサコアと、中継スレッドを実行するように構成される第2のプロセッサコアと、作業スレッドを実行するように構成される第3のプロセッサコアとを含み、プロセッサコアは、上で説明された1つまたは複数の実施形態の方法の動作を実行するように構成される。
【００１３】
様々な実施形態は、上で説明された態様の方法のうちの1つまたは複数の機能を実行するための手段を有する、タスクシグナリングのために構成されたコンピューティングデバイスを含み得る。
【００１４】
様々な実施形態は、上で説明された方法の動作をコンピューティングデバイスのプロセッサに実行させるように構成された、プロセッサ実行可能命令を記憶している、非一時的プロセッサ可読記憶媒体を含み得る。
【００１５】
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、様々な実施形態の例示的な実施形態を示し、上で与えられた一般的な説明および下で与えられる発明を実施するための形態とともに、特許請求の範囲の特徴を説明するのに役立つ。
【図面の簡単な説明】
【００１６】
【図１】ある実施形態を実装するのに適したコンピューティングデバイスを示す構成要素ブロック図である。
【図２】ある実施形態を実装するのに適した例示的なマルチコアプロセッサを示す構成要素ブロック図である。
【図３】ある実施形態による、直接の初期シグナリングを用いた、実行のクリティカルパスから離れたタスクシグナリングの例を示すプロセスフローシグナリング図である。
【図４】ある実施形態による、間接的な初期シグナリングを用いた、実行のクリティカルパスから離れたタスクシグナリングの例を示すプロセスフローシグナリング図である。
【図５】ある実施形態による、実行のクリティカルパスから離れたタスクシグナリングを実施するために使用されるスレッドの状態進行を示す状態図である。
【図６】実行のクリティカルパスから離れたタスクシグナリングにおける初期シグナリングのためのある実施形態の方法を示すプロセスフロー図である。
【図７】実行のクリティカルパスから離れたタスクシグナリングにおける中継シグナリングのためのある実施形態の方法を示すプロセスフロー図である。
【図８】実行のクリティカルパスから離れたタスクシグナリングにおけるタスク実行のためのある実施形態の方法を示すプロセスフロー図である。
【図９】様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す構成要素ブロック図である。
【図１０】様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す構成要素ブロック図である。
【図１１】様々な実施形態とともに使用するのに適した例示的なサーバを示す構成要素ブロック図である。
【発明を実施するための形態】
【００１７】
様々な実施形態が、添付の図面を参照して詳細に説明される。可能な場合はいつでも、同一のまたは同様の部分を指すために、図面全体を通して同一の参照番号が使用される。特定の例および実施態様に対してなされる参照は、説明が目的であり、特許請求の範囲を限定することを意図していない。
【００１８】
「コンピューティングデバイス」および「モバイルコンピューティングデバイス」という用語は、携帯電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、コンバーチブルラップトップ/タブレット(2-in-1コンピュータ)、スマートブック、ウルトラブック、ネットブロック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、モバイルゲームコンソール、ワイヤレスゲームコントローラ、ならびに、メモリおよびマルチコアプログラマブルプロセッサを含む同様のパーソナル電子デバイスのうちのいずれか1つまたはすべてを指すために本明細書において互換的に使用される。様々な実施形態は、限られたメモリおよびバッテリーリソースを有するスマートフォンなどのモバイルコンピューティングデバイスに特に有用であるが、本実施形態は一般に、複数のメモリデバイスおよび限られた電力バジェットを実装する任意の電子デバイスにおいて有用であり、プロセッサの電力消費を低減することは、モバイルコンピューティングデバイスのバッテリー動作時間を延ばすことができる。「コンピューティングデバイス」という用語はさらに、パーソナルコンピュータ、デスクトップコンピュータ、オールインワンコンピュータ、ワークステーション、スーパーコンピュータ、メインフレームコンピュータ、組み込みコンピュータ、サーバ、ホームシアターコンピュータ、およびゲームコンソールを含む、固定式のコンピューティングデバイスを指し得る。
【００１９】
実施形態は、実行のクリティカルパス上でのシグナリング負荷を減らし、専用スレッドによるシグナリングを実施することによって、デバイス性能を改善するための方法を実施する、方法、システム、およびデバイスを含む。実施形態は、初期スレッドによる専用中継スレッドへの実行のための並列タスクのシグナリングと、中継スレッドによる1つまたは複数の作業スレッドへの実行のための並列タスクのシグナリングとを含む、ハイブリッドシグナリング方式のための方法、システム、およびデバイスを含む。
【００２０】
デバイス上で実行される外部プロセスは、外部プロセスと並列に実行され得る並列セクションを含み得る。並列セクションは、外部プロセスと並列に実行され得る任意のプロセスを含み得る。説明を簡単にするために、並列セクションは、ネストされたループという限定しない例を使用して本明細書において説明される。ネストされたループは、内部プロセスの様々な実行のための複数の実行を伴い得る。外部プロセスのネストされたループを実行するのを助けるために、外部プロセスのための実行のクリティカルパス上での初期スレッドは、異なるプロセッサまたはプロセッサコア上で初期スレッドとして実行されるスレッドなどの、他の作業フレッドにより実行すべき並列タスクを作成する。
【００２１】
初期スレッドは、並列タスクが作業スレッドによる実行のために作成されることを、中継スレッドにシグナリングし得る。あるスレッドによる実行のための並列タスクの作成をそのスレッドに通知するために、初期スレッドによりそのスレッドにシグナリングすること(たとえば、そのスレッドに直接初期シグナリングすること)は、実行のクリティカルパスにおけるメインスレッドによるタスクの実行を中断する。ある実施形態では、中継スレッドは、初期スレッドからの信号(たとえば、中継スレッドへの直接の初期信号、または中継スレッドにより監視されるメモリの中のブール値の設定)をアクティブに確認または待機し得る。
【００２２】
中継スレッドへの初期スレッドによる信号は、作業スレッドまたは中継スレッド自体などの、初期スレッド以外のスレッドによる実行のための並列タスクの作成を中継スレッドに通知するように構成される、中継スレッドへの信号を含み得る。中継スレッドへの初期信号による信号は、中継スレッドへの直接の初期信号を含むことがあり、これは、アイドルスレッドまたは非アクティブスレッドからの中継スレッドをウェークアップすることがある。中継スレッドへの初期スレッドによる信号は、並列タスクが作成されることを示す、レジスタの中のブーリアンフラグなどの値を、メモリの中のある位置に設定することを含むことがあり、この場合、中継スレッドは、並列タスクが作成されることを示す値についてメモリの中のその位置を定期的に確認し得る。
【００２３】
いずれの実施形態でも、作成された並列タスクの並列処理を開始するように中継スレッドにシグナリングすることしか、初期スレッドにとって必要ではない。したがって、初期スレッドは、他の作業スレッドにシグナリングしなくてもよく、これにより、並列タスクが作成されることをシグナリングするために初期スレッドにより費やされる時間およびリソースの量を減らす。中継スレッドに信号を送信した後で、初期スレッドは、作業スレッドにより多くの信号を送信しなければならないことのオーバーヘッドを想定することなく、または様々な実施形態では、作成された並列タスクが作業スレッドもしくは中継スレッドにより取得されるのを待機しなければならないことのオーバーヘッドを想定することなく、実行のクリティカルパス上で自身のタスクを実行することに戻る。
【００２４】
ある実施形態では、初期スレッドは、複数の中継スレッドによりアクセス可能なメモリの中の位置に値(たとえば、ブール値)を書き込むことによって、または、通知信号を各中継スレッドに直接シグナリングすることによって、複数の中継スレッドにシグナリングし得る。複数の中継スレッドの数は、複数の作業スレッドの数以下であり得る。中継スレッドおよび作業スレッドの数、ならびに中継スレッドへの作業スレッドのセットの割当ては、性能および/または電力の要件に基づいて構成されることがあり、各プロセスに対して構成可能であることがある。
【００２５】
初期スレッドから信号を受信したことに応答して、中継スレッドは、中継スレッドによる信号を待機する間、アクティブ状態、アイドル状態、または非アクティブ状態にあるプロセッサもしくはプロセッサコアに割り当てられ得る作業スレッドのセットをシグナリングし得る。中継スレッドによる信号は、作業スレッドの1つまたは複数に、ウェークアップさせ、並列タスクを取り出させ、並列タスクを実行させ得る。作業スレッドのシグナリングは、信号を受信するために、または信号を作業スレッドのセットにブロードキャストするために、作業スレッドまたは中継スレッドのセット内の特定の作業スレッドまたは中継スレッドを指定することができる、オペレーティングシステム呼出しを通じて実施され得る。ある実施形態では、指定されたシグナリングされる作業スレッドに割り当てられるプロセッサまたはプロセッサコアは、並列タスクを実行するために事前に割り当てられ得る。ある実施形態では、信号をブロードキャストすることは、並列タスクを実行するために割り当てられるべき作業スレッドに割り当てられる複数のプロセッサまたはプロセッサコアの間で競争状態を作り出し得る。
【００２６】
図1は、様々な実施形態とともに使用するのに適したリモートコンピューティングデバイス50と通信中のコンピューティングデバイス10を含むシステムを示す。コンピューティングデバイス10は、プロセッサ14と、メモリ16と、通信インターフェース18と、ストレージメモリインターフェース20とを伴う、システムオンチップ(SoC)12を含み得る。コンピューティングデバイスは、有線モデムまたはワイヤレスモデムなどの通信構成要素22、ストレージメモリ24、ワイヤレスネットワーク30へのワイヤレス接続32を確立するためのアンテナ26、および/または、インターネット40への有線接続44に接続するためのネットワークインターフェース28をさらに含み得る。プロセッサ14は、様々なハードウェアコアのいずれか、たとえばいくつかのプロセッサコアを含み得る。
【００２７】
「システムオンチップ」(SoC)という用語は、通常、限定はしないが、ハードウェアコア、メモリ、および通信インターフェースを含む相互接続された電子回路のセットを指すために本明細書において使用される。ハードウェアコアは、汎用プロセッサ、中央処理装置(CPU)、デジタル信号プロセッサ(DSP)、グラフィクス処理装置(GPU)、加速処理装置(APU)、補助プロセッサ、シングルコアプロセッサ、およびマルチコアプロセッサなどの様々な異なるタイプのプロセッサを含み得る。ハードウェアコアはさらに、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、他のプログラマブル論理デバイス、個別ゲート論理、トランジスタ論理、性能監視ハードウェア、ウォッチドッグハードウェア、および時間基準などの、他のハードウェアおよびハードウェアの組合せを具現化し得る。集積回路は、集積回路の構成要素がシリコンなどの単体の半導体材料上に存在するように構成され得る。SoC12は、1つまたは複数のプロセッサ14を含み得る。コンピューティングデバイス10は、2つ以上のSoC12を含み、それによって、プロセッサ14およびプロセッサコアの数を増やすことができる。コンピューティングデバイス10はまた、SoC12と関連付けられないプロセッサ14を含み得る。個々のプロセッサ14は、図2を参照して以下で説明されるようなマルチコアプロセッサであり得る。プロセッサ14は各々、コンピューティングデバイス10の他のプロセッサ14と同じであっても異なっていてもよい特定の目的のために構成され得る。同じまたは異なる構成のプロセッサ14およびプロセッサコアのうちの1つまたは複数は、一緒にグループ化され得る。プロセッサ14またはプロセッサコアのグループは、マルチプロセッサクラスタと呼ばれ得る。
【００２８】
SoC12のメモリ16は、プロセッサ14によるアクセスのためにデータおよびプロセッサ実行可能コードを記憶するように構成された、揮発性または不揮発性のメモリであり得る。コンピューティングデバイス10および/またはSoC12は、様々な目的のために構成された1つまたは複数のメモリ16を含み得る。一実施形態では、1つまたは複数のメモリ16は、ランダムアクセスメモリ(RAM)もしくはメインメモリ、またはキャッシュメモリなどの、揮発性メモリを含み得る。これらのメモリ16は、不揮発性メモリから要求され、様々な要因に基づく今後のアクセスを予期して不揮発性メモリからメモリ16にロードされる、データセンサもしくはサブシステムから受信される限られた量のデータおよび/またはプロセッサ実行可能コード命令、ならびに/あるいは、プロセッサ14によって生成され、不揮発性メモリには記憶されずに今後の迅速なアクセスのために一時的に記憶される中間処理データおよび/またはプロセッサ実行可能コード命令を、一時的に保持するように構成され得る。
【００２９】
メモリ16は、プロセッサ14のうちの1つまたは複数によるアクセスのために、別のメモリ16またはストレージメモリ24などの、別のメモリデバイスからメモリ16にロードされるデータおよびプロセッサ実行可能コードを、少なくとも一時的に記憶するように構成され得る。メモリ16にロードされたデータまたはプロセッサ実行可能コードは、プロセッサ14による機能の実行に応答してロードされ得る。機能の実行に応答してデータまたはプロセッサ実行可能コードをメモリ16にロードすることは、要求されたデータまたはプロセッサ実行可能コードがメモリ16の中にないことが原因で不成功またはミスであるメモリ16へのメモリアクセス要求から生じ得る。ミスに応答して、要求されたデータまたはプロセッサ実行可能コードを他のメモリ16またはストレージメモリ24からメモリデバイス16にロードするために、別のメモリ16またはストレージメモリ24へのメモリアクセス要求が行われ得る。機能の実行に応答してデータまたはプロセッサ実行可能コードをメモリ16にロードすることは、別のメモリ16またはストレージメモリ24へのメモリアクセス要求から生じることがあり、データまたはプロセッサ実行可能コードは、後のアクセスのためにメモリ16にロードされ得る。
【００３０】
通信インターフェース18、通信構成要素22、アンテナ26、および/またはネットワークインターフェース28は、コンピューティングデバイス10がワイヤレス接続32を介してワイヤレスネットワーク30上で、かつ/または有線ネットワーク44上でリモートコンピューティングデバイス50と通信することが可能になるように、調和して動作し得る。コンピューティングデバイス10がリモートコンピューティングデバイス50とデータを交換できるようにするためのインターネット40への接続をコンピューティングデバイス10に与えるために、ワイヤレスネットワーク30は、たとえば、ワイヤレス通信のために使用される高周波スペクトルを含む様々なワイヤレス通信技術を使用して実装され得る。
【００３１】
ストレージメモリインターフェース20およびストレージメモリ24は、コンピューティングデバイス10が不揮発性記憶媒体上にデータとプロセッサ実行可能コードとを記憶することが可能になるように、調和して動作し得る。ストレージメモリ24は、ストレージメモリ24がプロセッサ14のうちの1つまたは複数によるアクセスのためのデータまたはプロセッサ実行可能コードを記憶し得るメモリ16の実施形態とほとんど同じように構成され得る。不揮発性であるストレージメモリ24は、コンピューティングデバイス10の電源が切断された後でも情報を保持し得る。電源が再び投入され、コンピューティングデバイス10が再起動すると、コンピューティングデバイス10がストレージメモリ24上に記憶された情報を利用できるようになる。ストレージメモリインターフェース20は、ストレージデバイス24へのアクセスを制御し、プロセッサ14がストレージメモリ24からデータを読み取り、ストレージメモリ24にデータを書き込むことを可能にし得る。
【００３２】
コンピューティングデバイス10の構成要素の一部またはすべては、それでも必要な機能を果たしながら、異なるように構成され、かつ/または組み合わされ得る。その上、コンピューティングデバイス10は、構成要素の各々のうちの1つに限定されなくてよく、各構成要素の複数のインスタンスがコンピューティングデバイス10の様々な構成の中に含まれてよい。
【００３３】
図2は、ある実施形態を実装するのに適したマルチコアプロセッサ14を示す。マルチコアプロセッサ14は、複数の同種または異種のプロセッサコア200、201、202、203を有し得る。単一のプロセッサ14のプロセッサコア200、201、202、203が同じ目的のために構成され、同じまたは同様の性能特性を有し得るという点で、プロセッサコア200、201、202、203は同種であり得る。たとえば、プロセッサ14は汎用プロセッサであってもよく、プロセッサコア200、201、202、203は同種の汎用プロセッサコアであってもよい。代替的に、プロセッサ14はグラフィクス処理装置またはデジタル信号プロセッサであってもよく、プロセッサコア200、201、202、203はそれぞれ、同種のグラフィクスプロセッサコアまたはデジタル信号プロセッサコアであってもよい。参照しやすいように、「プロセッサ」および「プロセッサコア」という用語は、本明細書で互換的に使用されることがある。
【００３４】
単一のプロセッサ14のプロセッサコア200、201、202、203が異なる目的のために構成され、かつ/または異なる性能特性を有し得るという点で、プロセッサコア200、201、202、203は異種であり得る。そのような異種プロセッサコアの異種性は、異なる命令セットアーキテクチャ、パイプライン、動作周波数などを含み得る。そのような異種のプロセッサコアの例は、より低速で低電力のプロセッサコアがより強力で電力を大量に消費するプロセッサコアと結合され得る「big.LITTLE」アーキテクチャとして知られているものを含み得る。同様の実施形態では、SoC12は、いくつかの同種または異種プロセッサ14を含み得る。
【００３５】
図2に示される例では、マルチコアプロセッサ14は、4つのプロセッサコア200、201、202、203(すなわち、プロセッサコア0、プロセッサコア1、プロセッサコア2、およびプロセッサコア3)を含む。説明を簡単にするために、本明細書の例では、図2に示される4つのプロセッサコア200、201、202、203を参照し得る。しかしながら、図2に示され、本明細書において説明される4つのプロセッサコア200、201、202、203は単に例として提供され、決して様々な実施形態を4コアプロセッサシステムに限定するものではない。コンピューティングデバイス10、SoC12、またはマルチコアプロセッサ14は、図示され本明細書において説明される4つのプロセッサコア200、201、202、203よりも少数またはより多数のプロセッサコアを個々にまたは組合せで含み得る。
【００３６】
図3は、ある実施形態による、直接の初期シグナリングを用いた、実行のクリティカルパスから離れたタスクシグナリングの例を示す。様々な実施形態では、初期スレッド300、中継スレッド302a〜302b、および作業スレッド304a〜304cは、マルチコアプロセッサの異なるプロセッサコア上で、マルチスレッドプロセッサ上で、または様々な構成の様々なプロセッサにわたって実装され得る。
【００３７】
初期スレッド300は、プログラムの実行のためのクリティカルパス上でプログラムのタスク306aを実行し得る。タスクは、プログラムのプロセスを実行するためのものであり得る。プロセスは、ループなどの並列セクションを含むことがあり、このループに対して、プロセスは外部プロセスになることがあり、ループの反復は内部プロセスの少なくとも1回の実行を含む。内部プロセスは、外部プロセスならびに内側プロセスの反復と並列に実行され得るように、構成され得る。たとえば、初期スレッド300は、1つまたは複数の他のスレッド(たとえば、作業スレッド304a〜304cまたは中継スレッド302a〜302b)が内側プロセスの反復を実行する間、外側プロセスを実行し得る。
【００３８】
ループに遭遇すると、初期スレッド300は、タスク306aの実行を中断して、内側ループの反復を分割し、内側ループを実行するための並列タスク308を作成し得る。作成される並列タスク当たりの反復の数および並列タスクの数は、並列タスクを実行するためのレイテンシの要件、並列タスクを実行するための電力またはリソース(たとえば、プロセッサ、プロセッサコア、メモリ、帯域幅、中継スレッド302a〜302b、および作業スレッド304a〜304c)の要件、並列タスクを実行するためのリソースの可用性、およびプログラミングを含む、様々な要因によって決定され得る。並列タスクは、内側プロセスの同じ数または異なる数の反復を用いて構成され得る。作成される並列タスクの数は、作業スレッド304a〜304cおよび/または中継スレッド302a〜302bの数に等しいことがあり、それより多いことがあり、またはそれより少ないことがある。
【００３９】
初期スレッド300は、直接の初期信号310a、310bを中継スレッド302a〜302bの少なくとも1つに送信して、中継スレッド302a〜302bをウェークアップし、かつ/または並列タスクの作成を中継スレッド302a〜302bに通知することができ、初期スレッド300はタスク306bを実行することに戻ることができる。様々な実施形態では、中継スレッド302a〜302bは各々、アクティブ状態または待機状態(たとえば、アイドル状態および非アクティブ状態)を含む様々な状態のうちの1つにあり得る。
【００４０】
中継スレッド302a〜302bの状態は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、およびプログラミングを含む、様々な要因によって決定され得る。たとえば、並列タスクの実行のレイテンシは、中継スレッド302a〜302bを非アクティブ状態またはアイドル状態からアクティブ状態へ移すのにかかる時間により影響され得るので、より低いレイテンシ要件は、より多数の中継スレッド302a〜302bをアクティブにすることから利益を得ることができ、中程度のレイテンシ要件に対しては、より多数の中継スレッド302a〜302bをアイドルにすることで十分であることがあり、より高いレイテンシ要件に対しては、より多数の中継スレッド302a〜302bを非アクティブにすることで十分であることがある。他の例では、中継スレッド302a〜302bをアクティブ状態またはアイドル状態に保つために必要な電力が原因で、より低い電力要件は、より多数の中継スレッド302a〜302bを非アクティブにすることから利益を得ることができ、中程度の電力要件に対しては、より多数の中継スレッド302a〜302bをアイドルにすることで十分であることがあり、より高い電力要件に対しては、より多数の中継スレッド302a〜302bをアクティブにすることで十分であることがある。直接の初期信号を受信する中継スレッド302a〜302bの状態に応じて、中継スレッド302a〜302bによる応答は変化し得る。
【００４１】
図3に示される例では、中継スレッド302aはアクティブ状態にあることがあり、中継スレッド302bはアイドル状態または非アクティブ状態にあることがある。初期スレッド300から直接の初期信号を受信したことに応答して、中継スレッド302aは、中継信号312a〜312c(たとえば、312a)を作業スレッド304a〜304cの少なくとも1つ(たとえば、304a)に送信し得る。
【００４２】
初期スレッド300から直接の初期信号を受信したことに応答して、中継スレッド302bは、作業スレッド304a〜304cの少なくとも1つをウェークアップし(314)、作業スレッド304a〜304cの少なくとも1つに中継信号312b、312cを送信し得る。中継スレッド302a〜302bは、中継信号を作業スレッド304a〜304cに送信して、作業スレッド304a〜304cをウェークアップし、かつ/または並列タスクの作成を作業スレッド304a〜304cに通知し得る。中継スレッド302a〜302bと同様に、様々な実施形態では、作業スレッド304a〜304cは各々、アクティブ状態、アイドル状態、および非アクティブ状態を含む、様々な状態のうちの1つであり得る。
【００４３】
作業スレッド304a〜304cの状態は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、およびプログラミングを含む、様々な要因によって決定され得る。たとえば、並列タスクの実行のレイテンシは、作業スレッド304a〜304cを非アクティブ状態またはアイドル状態からアクティブ状態へ移すのにかかる時間により影響され得るので、より低いレイテンシ要件は、より多数の作業スレッド304a〜304cをアクティブにすることから利益を得ることができ、中程度のレイテンシ要件に対しては、より多数の作業スレッド304a〜304cをアイドルにすることで十分であることがあり、より高いレイテンシ要件に対しては、より多数の作業スレッド304a〜304cを非アクティブにすることで十分であることがある。他の例では、作業スレッド304a〜304cをアクティブ状態またはアイドル状態に保つために必要な電力が原因で、より低い電力要件は、より多数の作業スレッド304a〜304cを非アクティブにすることから利益を得ることができ、中程度の電力要件に対しては、より多数の作業スレッド304a〜304cをアイドルにすることで十分であることがあり、より高い電力要件に対しては、より多数の作業スレッド304a〜304cをアクティブにすることで十分であることがある。中継信号を受信する作業スレッド304a〜304cの状態に応じて、作業スレッド304a〜304cによる応答は変化し得る。
【００４４】
図3に示される例では、作業スレッド304aはアクティブ状態にあることがあり、作業スレッド304bはアイドル状態または非アクティブ状態にあることがあり、作業スレッド304cはアクティブ状態にあることがある。中継スレッド302aから中継信号を受信したことに応答して、作業スレッド304aは、並列タスクを取得し並列タスクを実行し得る(316a)。中継スレッド302bから中継信号を受信したことに応答して、作業スレッド304bは、ウェークアップし(318)、並列タスクを取得して実行し得る(316b)。中継スレッド302bから中継信号を受信したことに応答して、作業スレッド304cは、並列タスクを取得し並列タスクを実行し得る(316c)。並列タスクを取得して実行する間、作業スレッド304a〜304cは作業状態に入り得る。様々な実施形態では、中継スレッド302a〜302bのいくつかはまた、少なくとも1つの中継スレッド302a〜302bを、初期スレッド300からの追加の直接の初期信号を受信することのために利用可能であり得るようにアクティブ状態、アイドル状態、または非アクティブ状態のままにしながら、作業状態へと入る並列タスクを取得し実行することを試み得る。
【００４５】
様々な実施形態では、中継スレッド302a〜302bおよび作業スレッド304a〜304cは作業状態にあることがあり、この状態において、中継スレッド302a〜302bおよび作業スレッド304a〜304cはタスクを実行していることがあり、初期スレッド300からの直接の初期信号または中継スレッド302a〜302bからの中継信号を、受信せず、もしくは受け入れないことがある。作業状態の間に実行されるタスクを完了すると、中継スレッド302a〜302bおよび作業スレッド〜304a〜304cは、並列タスクを取得することを試みることがあり、またはアクティブ状態、アイドル状態、もしくは非アクティブ状態に変化することがある。中継スレッド302a〜302bおよび作業スレッド304a〜304cが作業状態から変化する先の状態は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、プログラミング、および並列タスクの可用性を含む、様々な要因によって決定され得る。
【００４６】
図4は、ある実施形態による、間接的な初期シグナリングを用いた、実行のクリティカルパスから離れたタスクシグナリングの例を示す。図3に示される例を参照した説明は、以下の差を伴って、図4に示される例にも当てはまる。初期スレッド300と中継スレッド302a〜302bの間での直接の初期シグナリングではなく、初期スレッド300は、信号代理(「rep.signal」)400の値の変化を始めることによって、中継スレッド302a〜302bに間接的にシグナリングし得る。信号代理400は、中継スレッド302a〜302bからアクセスでき代表的な信号の変化を検出できる、任意のハードウェアデバイスを含み得る。限定しない例では、信号代理400は、並列タスクの作成または欠如を示し得る、メモリデバイス(たとえば、キャッシュメモリ、ランダムアクセスメモリ、レジスタ、または他のソリッドステート揮発性メモリ)のある位置に書き込まれるブーリアンフラグを含み得る。初期スレッド300は、修正信号402を信号代理400に送信して、並列タスクの作成を示し得る。
【００４７】
中継スレッド302a〜302bの状態とは無関係に、中継スレッドは定期的に、並列タスクの作成の指示について、信号代理400に確認することができる(404a〜404e)。たとえば、アクティブ状態の中継スレッド302aは、並列タスクの作成の指示を検出するまで、並列タスクの作成の指示について信号代理400に繰り返し確認することができる(404a〜404c)。並列タスクの作成の指示を検出したことに応答して、中継スレッド302aは、初期スレッド300から直接の初期信号を受信した後、図3に示される例を参照して説明される方式で進行し得る。アイドル状態または非アクティブ状態の中継スレッド302bは、並列タスクの作成の指示を検出するまで、繰り返し、信号代理400をウェークアップし(406a、406b)、並列タスクの作成の指示について信号代理400に確認することができる(404d、404e)。様々な実施形態では、アイドル状態の中継スレッド302bは、非アクティブ状態にある中継スレッドよりも頻繁にウェークアップし(406a、406b)、確認する(404d、404e)ことができる。並列タスクの作成の指示を検出したことに応答して、中継スレッド302bは、初期スレッド300から直接の初期信号を受信してウェークアップした後、図3に示される例を参照して説明される方式で進行し得る。
【００４８】
図5は、ある実施形態による、実行のクリティカルパスから離れたタスクシグナリングを実施するために使用されるスレッドの状態進行500を示す。様々な実施形態では、状態進行500は、初期スレッド、中継スレッド、および作業スレッドを含む任意のスレッドに当てはまり得る。決定ブロック502において、スレッドは、実行すべき並列タスクを取得したかどうかを決定し得る。
【００４９】
実行すべきタスクを取得したと決定したことに応答して(すなわち、決定502=「Yes」)、スレッドは作業状態504に入り、タスクを実行し、タスクを完了したことに応答して決定ブロック502において別のタスクが取得されるかどうかを決定することに戻り得る。様々な実施形態では、作業状態504の間に取得されたタスクを実行する初期スレッドは、ループなどの並列セクションに遭遇し、スポーン状態506に入って、並列タスクを作成し、並列タスクの作成を中継スレッドに通知するために直接の初期信号508と間接的な初期信号508のいずれかを送信し得る。並列タスクの作成と中継スレッドのシグナリングが完了すると、初期スレッドは作業状態504に戻り得る。
【００５０】
実行すべきタスクを取得していないと決定したことに応答して(すなわち、決定502=「No」)、スレッドは、決定ブロック510において、アクティブ状態512に入るかどうかを決定し得る。アクティブ状態に入るかどうかの決定は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、プログラミング、および並列タスクの可用性を含む、様々な要因によって決定され得る。
【００５１】
アクティブ状態512に入ると決定したことに応答して(すなわち、決定ブロック510=「Yes」)、スレッドは、並列タスクの作成を示す直接のまたは間接的な初期信号508について確認するアクティブ状態512に入り、そこにとどまり得る。直接のまたは間接的な初期信号508を受信したことに応答して、スレッドは、信号状態514に入り、待機状態518a〜518cにおいて中継信号516a〜516cを他のスレッドに送信し得る。信号状態514におけるスレッドは、決定ブロック502において、それが実行すべき並列タスクを取得したかどうかを決定し得る。
【００５２】
アクティブ状態512に入らないと決定したことに応答して(すなわち、決定ブロック510=「No」)、スレッドは、ある待機状態518a〜518c(たとえば、可変のレベルのアイドル状態または非アクティブ状態)に入り、中継信号516a〜516cを受信するまで、または、より低い待機状態518a〜518cへの変更をトリガする状態変更閾値を超えるまで、そこにとどまり得る。
【００５３】
中継信号516a〜516cを受信したことに応答して、待機状態518a〜518cにおけるスレッドは各々、決定ブロック502において、それが実行すべき並列タスクを取得したかどうかを決定し得る。様々な実施形態では、より低い待機状態518a〜518cへの変更をトリガする状態変更閾値は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、プログラミング、並列タスクの可用性、および時間に対応する様々な閾値を含み得る。待機状態に入るスレッドは、たとえばこれらの要因に基づいて、任意の待機状態518a〜518cのうちの1つに直接入り得る。ある実施形態では、スレッドは、最高の待機状態である(すなわち、待機状態518a〜518cのうちで、そこからアクティブ状態または作業状態へ切り替えるレイテンシが最低である)作業状態518aに入り得る。
【００５４】
状態変更閾値を超えたことに応答して、スレッドは次に低い待機状態518b(すなわち、最高の待機状態518aと比較してアクティブ状態または作業状態へ切り替えるレイテンシが高い)に入り得る。待機状態レベルのこの切り下げは、最低の待機状態518c(すなわち、待機状態518a〜518cのうちで、そこからアクティブ状態または作業状態へ切り替えるレイテンシが最高である)に達するまで、別の状態変更閾値を超えるたびに継続し得る。
【００５５】
図6は、実行のクリティカルパスから離れたタスクシグナリングにおける初期シグナリングのためのある実施形態の方法600を示す。方法600は、ソフトウェア、および/または、プロセッサなどの汎用ハードウェアまたは専用ハードウェア使用して、コンピューティングデバイスにおいて実行され得る。
【００５６】
ブロック602において、コンピューティングデバイスは、初期スレッドを使用してプログラムのプロセスのタスクを実行し得る。ブロック604において、コンピューティングデバイスは、関数の実行の間に、ループなどの並列セクションに遭遇し得る。プロセスはループを含むことがあり、このループに対して、プロセスは外部プロセスになり、ループの反復は内部プロセスの少なくとも1回の実行を含む。内部プロセスは、外部プロセスならびに内側プロセスの反復と並列に実行され得るように、構成され得る。たとえば、初期スレッドは、1つまたは複数の他のスレッド(たとえば、作業スレッドまたは中継スレッド)が内側プロセスの反復を実行する間、外側プロセスを実行し得る。
【００５７】
ブロック606において、コンピューティングデバイスは、タスクの実行を中断し得る。ブロック608において、コンピューティングデバイスは、内側ループを実行するための並列タスクを作成し得る。並列タスクは、並列タスクのすべてが一緒に内側ループの反復のすべてを含むように構成され得るが、各並列タスクが内側ループの反復を同じ回数実行するように構成される必要はない。
【００５８】
ブロック610において、コンピューティングデバイスは初期信号を送信し得る。様々な実施形態では、コンピューティングデバイスの構成に応じて、初期信号は直接の初期信号か間接的な初期信号のいずれかであり得る。直接の初期信号は、共有もしくは共通バスまたはネットワークオンチップなどのコンピューティングデバイス内の通信ネットワークを介して、あるいはプロセッサまたはプロセッサコアを接続する専用の直接シグナリングの線またはワイヤを介して、コンピューティングデバイスのプロセッサまたはプロセッサコアの間でコンピューティングデバイスによって送信され得る。直接の初期信号は、初期スレッドを実行するプロセッサまたはプロセッサコアから、中継スレッドを実行するプロセッサまたはプロセッサコアに送信され得る。様々な実施形態では、アクティブ状態または待機状態にあるすべての中継スレッドのグループが、任意の初期スレッドから直接の初期信号を受信するために利用可能であり得る。様々な実施形態では、コンピューティングデバイスのすべての中継スレッドの集合より小さい中継スレッドの集合が、特定の初期スレッドから直接の初期信号を受信するように指定され得る。様々な実施形態では、初期スレッドは、初期スレッドと関連付けられない中継スレッドにより無視され得る直接の初期信号をブロードキャストするように、または直接の初期信号を関連する中継スレッドに送信するように構成され得る。
【００５９】
本明細書において論じられるように、中継スレッドは、アクティブ状態および待機状態(たとえば、アイドル状態および非アクティブ状態)を含む、様々な実行状態にあり得る。直接の初期信号は、待機状態にある中継スレッドがウェークアップするのをトリガし、初期スレッド以外のスレッドによる実行のために並列タスクが作成されたことを中継スレッドに示すように構成され得る。
【００６０】
間接的な初期信号は、初期スレッドを実行するコンピューティングデバイスのプロセッサまたはプロセッサコアとメモリデバイス(たとえば、キャッシュメモリ、ランダムアクセスメモリ、レジスタ、他のソリッドステート揮発性メモリ)との間で、共有もしくは共有バスまたはネットワークオンチップなどのコンピューティングデバイス内の通信ネットワークを介してコンピューティングデバイスにより送信され得る。間接的な初期信号は、メモリデバイスが並列タスクの作成または欠如を示すことができるように、メモリデバイスを修正するように構成され得る。たとえば、メモリデバイスの中の指定された位置が、作成される並列タスクがあるかどうかを決定するために、少なくとも1つの中継スレッドによってアクセス可能であり得る。間接的な初期信号は、そのメモリ位置に記憶されているデータの変更を、並列タスクが作成されたことをその変更がリレースレッドに示せるように、トリガすることができる。様々な例は、メモリ位置に書き込まれるブーリアンフラグを含むことがあり、このブーリアンフラグは、並列タスクの欠如または並列タスクの作成のいずれかを表す2つの値を有する。他の例では、ブーリアンフラグの値は、並列タスクの欠如も作成も特に表さないことがあり、むしろ、ブーリアンフラグ値の変化が並列タスクの作成を示すことがある。様々な実施形態では、中継スレッドは、間接的な初期信号がメモリデバイスに送信されたかどうかを確認するために、少なくとも一時的にアクティブ状態にある必要があり得る。
【００６１】
ブロック612において、コンピューティングデバイスは、中断されたタスクの実行を再開し得る。
【００６２】
図7は、実行のクリティカルパスから離れたタスクシグナリングにおける中継シグナリングのためのある実施形態の方法700を示す。方法700は、ソフトウェア、および/または、プロセッサなどの汎用ハードウェアまたは専用ハードウェア使用して、コンピューティングデバイスにおいて実行され得る。
【００６３】
ブロック702において、コンピューティングデバイスは、初期スレッドからの直接のまたは間接的な初期信号を待機し得る。中継スレッドの状態とは無関係に、直接のまたは間接的な初期信号についての確認と確認の間には、それが直接のまたは間接的な初期信号についての行われた確認への返答を中継スレッドが待機している時間の間であっても、少なくとも一瞬の待機があり得る。
【００６４】
任意選択のブロック704において、コンピューティングデバイスは、直接のまたは間接的な初期信号を確認し得る。様々な実施形態では、中継スレッドは、アクティブ状態からの直接のまたは間接的な初期信号を確認し得る。中継スレッドは持続的にアクティブ状態にあることがあり、または、直接のもしくは間接的な初期信号を確認するために待機状態(たとえば、アイドル状態または非アクティブ状態)とアクティブ状態との間で遷移することがある。様々な実施形態では、確認はリソースを消費し得るので、中継スレッドは、待機状態にあるとき、直接のまたは間接的な初期信号の確認をスキップし得る。本明細書において論じられるように、中継スレッドは、間接的な初期信号を検出するためにメモリデバイスの指定された位置を確認し得る。
【００６５】
方法700の様々なブロックと同時に(たとえば、ブロック702および任意選択のブロック704のうちの1つまたは複数と同時に)、任意選択の決定ブロック706において、コンピューティングデバイスは、状態変更閾値を超えたかどうかを決定し得る。様々な実施形態では、状態変更閾値は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、プログラミング、並列タスクの可用性、および時間に対応する様々な閾値を含み得る。
【００６６】
状態変更閾値を超えないと決定したことに応答して(すなわち、任意選択の決定ブロック706=「No」)、コンピューティングデバイスは、ブロック702において、初期スレッドからの直接のまたは間接的な初期信号を待機することに戻り得る。
【００６７】
状態変更閾値を超えると決定したことに応答して(すなわち、任意選択の決定ブロック706=「No」)、コンピューティングデバイスは、任意選択のブロック722において、中継スレッドの状態を変更し得る。様々な実施形態では、中継スレッドは、アクティブ状態から待機状態(たとえば、アイドル状態または非アクティブ状態)のいくつかのレベルのうちの1つへとダウングレードされ、あるレベルの待機状態からより低いレベルの待機状態へとダウングレードされ、あるレベルの待機状態からより高いレベルの待機状態へとアップグレードされ、またはあるレベルの待機状態からアクティブ状態へとアップグレードされ得る。
【００６８】
ブロック702において、コンピューティングデバイスは、初期スレッドからの直接のまたは間接的な初期信号を待機し得る。ブロック708において、コンピューティングデバイスは、初期スレッドからの直接のまたは間接的な初期信号を受信し得る。様々な実施形態では、直接の初期信号を受信することは、コンピューティングデバイス内の通信ネットワークを介して初期スレッドから信号を受信することを含み得る。
【００６９】
様々な実施形態では、間接的な初期信号を受信することは、任意選択のブロック704において、間接的な初期信号についての確認の間に、並列タスクの作成を示すデータをメモリデバイスの指定された位置から取り出すことを含み得る。様々な実施形態では、中継スレッドは、中継スレッドと関連付けられない初期スレッドから直接のまたは間接的な初期信号を受信することができ、直接のまたは間接的な初期信号を無視することができる。
【００７０】
任意選択のブロック710において、コンピューティングデバイスは待機状態から中継スレッドをウェークアップし得る。任意選択のブロック710は、アクティブ状態にある中継スレッドに対して実施されないことがある。
【００７１】
ブロック712において、コンピューティングデバイスは、中継信号を少なくとも1つの作業スレッドに送信し得る。図6を参照して論じられた初期スレッドの様々な実施形態と同様に、アクティブ状態または待機状態にあるすべての作業スレッドのグループが、任意の中継スレッドから中継信号を受信するのに利用可能であり得る。様々な実施形態では、コンピューティングデバイスのすべての作業スレッドの集合より小さい作業スレッドの集合が、特定の中継スレッドから中継信号を受信するように指定され得る。
【００７２】
様々な実施形態では、中継スレッドは、中継スレッドと関連付けられない作業スレッドにより無視され得る中継信号をブロードキャストするように、または中継信号を関連する作業スレッドに送信するように構成され得る。作業スレッドは、アクティブ状態および待機状態(たとえば、アイドル状態および非アクティブ状態)を含む、様々な実行状態にあり得る。中継信号は、待機状態にある作業スレッドがウェークアップするのをトリガし、初期スレッド以外のスレッドによる実行のために並列タスクが作成されたことを作業スレッドに示すように構成され得る。
【００７３】
作業スレッドをシグナリングするためのシグナリングオーバーヘッドは、初期スレッドが自身で作成した並列タスクの取得を待機する必要なく自身のタスクを実行することに戻れるように、初期スレッドではなく中継スレッドにより吸収される。
【００７４】
任意選択のブロック714において、コンピューティングデバイスは、並列タスクを取得するために少なくとも1つの作業スレッドを待機し得る。この待機のオーバーヘッドは、初期スレッドが自身で作成した並列タスクの取得を待機する必要なく自身のタスクを実行することに戻れるように、初期スレッドではなく中継スレッドにより吸収される。
【００７５】
任意選択の決定ブロック716において、コンピューティングデバイスは、任意の並列タスクが残っているかどうかを決定し得る。並列タスクが残っていると決定したことに応答して(すなわち、任意選択の決定ブロック716=「Yes」)、コンピューティングデバイスは、任意選択のブロック718において、中継スレッドに対する残りの並列タスクを取得し得る。様々な実施形態では、中継スレッドは並列タスクを実行するのを助け得る。しかしながら、任意の後続の並列タスクのための中継シグナリングを扱うのに利用できる十分な中継スレッドがあるように、どれだけの中継スレッドが並列タスクを実行できるかに関しての制限があり得る。様々な実施形態では、中継スレッドが並列タスクの実行を終える前に並列タスクの実行を終える作業スレッドが、中継スレッドの欠乏を埋め合わせるために中継スレッドとして再び割り当てられることがある。同様に、過剰な中継スレッドにより、中継スレッドが作業スレッドとして再び割り当てられるようになり得る。
【００７６】
任意選択のブロック720において、コンピューティングデバイスは、中継スレッドを使用して、取得された並列タスクを実行し得る。取得された並列タスクの実行を完了すると、コンピューティングデバイスは、任意選択の決定ブロック716において、並列タスクが残っているかどうかを決定することに戻り得る。並列タスクが残っていないと決定したことに応答して(すなわち、任意選択の決定ブロック716=「No」)、コンピューティングデバイスは、ブロック702において、初期スレッドからの直接のまたは間接的な初期信号を待機することに戻り得る。
【００７７】
図8は、実行のクリティカルパスから離れたタスクシグナリングにおけるタスク実行のためのある実施形態の方法800を示す。方法800は、ソフトウェア、および/または、プロセッサなどの汎用ハードウェアまたは専用ハードウェア使用して、コンピューティングデバイスにおいて実行され得る。
【００７８】
ブロック802において、コンピューティングデバイスは、中継スレッドからの中継信号を待機し得る。作業スレッドの状態とは無関係に、中継信号についての確認と確認の間には、それが中継信号についての行われた確認への返答を作業スレッドが待機している時間の間であっても、少なくとも一瞬の待機があり得る。
【００７９】
任意選択のブロック804において、コンピューティングデバイスは、中継信号を確認し得る。様々な実施形態では、作業スレッドは、アクティブ状態からの中継信号を確認し得る。作業スレッドは持続的にアクティブ状態にあることがあり、または、中継信号を確認するために待機状態(たとえば、アイドル状態または非アクティブ状態)とアクティブ状態との間で遷移することがある。様々な実施形態では、確認はリソースを消費し得るので、作業スレッドは、待機状態にあるとき、中継信号の確認をスキップし得る。
【００８０】
方法800の様々なブロックと同時に(たとえば、ブロック802および任意選択のブロック804のうちの1つまたは複数と同時に)、任意選択の決定ブロック806において、コンピューティングデバイスは、状態変更閾値を超えたかどうかを決定し得る。様々な実施形態では、状態変更閾値は、並列タスクを実行するためのレイテンシ、電力、またはリソースの要件、電力またはリソースの可用性、プログラミング、並列タスクの可用性、および時間に対応する様々な閾値を含み得る。
【００８１】
状態変更閾値を超えないと決定したことに応答して(すなわち、任意選択の決定ブロック806=「No」)、コンピューティングデバイスは、ブロック802において、中継スレッドからの中継信号を待機することに戻り得る。
【００８２】
状態変更閾値を超えると決定したことに応答して(すなわち、任意選択の決定ブロック806=「Yes」)、コンピューティングデバイスは、任意選択のブロック818において、作業スレッドの状態を変更し得る。様々な実施形態では、作業スレッドは、アクティブ状態から待機状態(たとえば、アイドル状態または非アクティブ状態)のいくつかのレベルのうちの1つへとダウングレードされ、あるレベルの待機状態からより低いレベルの待機状態へとダウングレードされ、あるレベルの待機状態からより高いレベルの待機状態へとアップグレードされ、またはあるレベルの待機状態からアクティブ状態へとアップグレードされ得る。
【００８３】
ブロック802において、コンピューティングデバイスは、中継スレッドからの中継信号を待機し得る。ブロック808において、コンピューティングデバイスは、中継スレッドからの中継信号を受信し得る。様々な実施形態では、中継信号を受信することは、コンピューティングデバイス内の通信ネットワークを介して中継スレッドから信号を受信することを含み得る。様々な実施形態では、作業スレッドは、作業スレッドと関連付けられない中継スレッドから中継信号を受信することができ、中継信号を無視することができる。
【００８４】
任意選択のブロック810において、コンピューティングデバイスは待機状態から作業スレッドをウェークアップし得る。任意選択のブロック810は、アクティブ状態にある作業スレッドに対して実施されないことがある。
【００８５】
ブロック812において、コンピューティングデバイスは、作業スレッドのための並列タスクを取得し得る。ブロック814において、コンピューティングデバイスは、作業スレッドを使用して、取得された並列タスクを実行し得る。
【００８６】
取得された並列タスクの実行を完了すると、決定ブロック816において、コンピューティングデバイスは、並列タスクが残っているかどうかを決定し得る。並列タスクが残っていると決定したことに応答して(すなわち、決定ブロック816=「Yes」)、コンピューティングデバイスは、ブロック812において、作業スレッドに対する残りの並列タスクを取得し得る。並列タスクが残っていないと決定したことに応答して(すなわち、決定ブロック816=「No」)、コンピューティングデバイスは、ブロック802において、中継スレッドからの中継信号を待機することに戻り得る。
【００８７】
(図1〜図8を参照して上で論じられた実施形態を含むが、それらに限定されない)様々な実施形態は、図9に示される様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを含み得る多種多様なコンピューティングデバイスにおいて実装され得る。モバイルコンピューティングデバイス900は、タッチスクリーンコントローラ904と内部メモリ906とに結合されたプロセッサ902を含み得る。プロセッサ902は、全般的な処理タスクまたは特定の処理タスクのために指定された1つまたは複数のマルチコア集積回路であり得る。内部メモリ906は、揮発性メモリまたは不揮発性メモリであってよく、セキュアメモリおよび/もしくは暗号化されたメモリ、または非セキュアメモリおよび/もしくは暗号化されないメモリ、あるいはその任意の組合せであってよい。活用され得るメモリタイプの例は、限定はしないが、DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM、および埋め込みダイナミックランダムアクセスメモリ(DRAM)を含む。タッチスクリーンコントローラ904およびプロセッサ902は、抵抗感知タッチスクリーン、静電容量感知タッチスクリーン、赤外線感知タッチスクリーンなどのタッチスクリーンパネル912にも結合され得る。加えて、コンピューティングデバイス900のディスプレイは、タッチスクリーン能力を有する必要がない。
【００８８】
モバイルコンピューティングデバイス900は、互いにおよび/またはプロセッサ902に結合された、通信を送信および受信するための1つまたは複数の無線信号トランシーバ908(たとえば、Peanut、Bluetooth(登録商標)、ZigBee、Wi-Fi、RF無線)と、アンテナ910とを有し得る。トランシーバ908およびアンテナ910は、様々なワイヤレス伝送プロトコルスタックおよびインターフェースを実装するために、上述された回路とともに使用され得る。モバイルコンピューティングデバイス900は、セルラーネットワークを介する通信を可能にし、かつプロセッサに結合されたセルラーネットワークワイヤレスモデムチップ916を含み得る。
【００８９】
モバイルコンピューティングデバイス900は、プロセッサ902に結合された周辺デバイス接続インターフェース918を含み得る。周辺デバイス接続インターフェース918は、1つのタイプの接続を受け入れるように単独で構成されてよく、またはUSB、FireWire、Thunderbolt、もしくはPCIeなどの一般または独自の様々なタイプの物理接続および通信接続を受け入れるように構成されてよい。周辺デバイス接続インターフェース918はまた、同様に構成された周辺デバイス接続ポート(図示せず)に結合されてもよい。
【００９０】
モバイルコンピューティングデバイス900はまた、オーディオ出力を生成するためのスピーカー914を含み得る。モバイルコンピューティングデバイス900はまた、本明細書において論じられる構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築されたハウジング920を含み得る。モバイルコンピューティングデバイス900は、使い捨てバッテリーまたは充電式バッテリーなどの、プロセッサ902に結合された電源922を含み得る。充電式バッテリーはまた、モバイルコンピューティングデバイス900の外部にある電源から充電電流を受け取るために周辺デバイス接続ポートに結合され得る。モバイルコンピューティングデバイス900はまた、ユーザ入力を受け取るための物理ボタン924を含み得る。モバイルコンピューティングデバイス900は、モバイルコンピューティングデバイス900をオンオフするための電源ボタン926を含み得る。
【００９１】
(図1〜図8を参照して上で論じられた実施形態を含むが、それらに限定されない)様々な実施形態は、図10に示されるラップトップコンピュータ1000などの、様々なコンピューティングデバイスを含み得る多種多様なコンピューティングシステムにおいて実装され得る。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして働くタッチパッドのタッチ面1017を含み、したがって、タッチスクリーンディスプレイを装備した上で説明されたコンピューティングデバイス上で実装されるものと同様のドラッグジェスチャ、スクロールジェスチャ、およびフリックジェスチャを受け取ることができる。ラップトップコンピュータ1000は通常、揮発性メモリ1012、およびフラッシュメモリのディスクドライブ1013などの大容量不揮発性メモリに結合されたプロセッサ1011を含む。加えて、コンピュータ1000は、プロセッサ1011に結合されたワイヤレスデータリンクおよび/または携帯電話トランシーバ1016に接続され得る、電磁放射を送受信するための1つまたは複数のアンテナ1008を有し得る。コンピュータ1000は、プロセッサ1011に結合されたフロッピー(登録商標)ディスクドライブ1014およびコンパクトディスク(CD)ドライブ1015も含み得る。ノートブック構成では、コンピュータのハウジングは、すべてがプロセッサ1011に結合された、タッチパッド1017、キーボード1018、およびディスプレイ1019を含む。コンピューティングデバイスの他の構成は、よく知られているように、(たとえば、ユニバーサルシリアルバス(USB)入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含むことがあり、それらはまた、様々な実施形態とともに使用されることがある。
【００９２】
(限定はしないが、図1〜図8を参照して上で説明された実施形態を含む)様々な実施形態は、サーバキャッシュメモリの中にデータを圧縮するための様々な市販のサーバのうちのいずれかを含み得る多種多様なコンピューティングシステムにおいて実装され得る。例示的なサーバ1100が、図11に示されている。そのようなサーバ1100は通常、揮発性メモリ1102と、ディスクドライブ1104などの大容量不揮発性メモリとに結合された、1つまたは複数のマルチコアプロセッサアセンブリ1101を含む。図11に示されるように、マルチコアプロセッサアセンブリ1101は、それらをアセンブリのラックに挿入することによって、サーバ1100に追加され得る。サーバ1100は、プロセッサ1101に結合された、フロッピー(登録商標)ディスク(disk)ドライブ、コンパクトディスク(disc)(CD)またはDVDディスク(disc)ドライブ1106も含み得る。サーバ1100はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話網、ならびに/またはセルラーデータネットワーク(たとえば、CDMA、TDMA、GSM(登録商標)、PCS、3G、4G、LTE、もしくは任意の他のタイプのセルラーデータネットワーク)などの、ネットワーク1105とのネットワークインターフェース接続を確立するための、マルチコアプロセッサアセンブリ1101に結合されたネットワークアクセスポート1103を含み得る。
【００９３】
様々な実施形態の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「プログラムコード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaScript(登録商標)、Visual Basic、Structured Query Language(たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語または様々な他のプログラミング言語で記述され得る。本出願において使用される、コンピュータ可読記憶媒体上に記憶されたプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である(オブジェクトコードなどの)機械語コードを指し得る。
【００９４】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供されており、様々な実施形態の動作が提示された順序で実行されなければならないことを要求または暗示するものではない。当業者によって理解されるように、上述の実施形態における動作の順序は、任意の順序で実行され得る。「その後」、「次いで」、「次に」などの語は、動作の順序を限定するものではなく、これらの語は単に、方法の説明を通じて読者を導くために使用される。さらに、たとえば、冠詞「a」、「an」、または「the」を使用する単数形でのクレーム要素へのいかなる言及も、要素を単数形に限定するものとして解釈されるべきではない。
【００９５】
様々な実施形態に関して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、および動作が、上では全般にそれらの機能に関して説明された。そのような機能がハードウェアまたはソフトウェアのどちらで実装されるかは、具体的な適用例と、システム全体に課せられる設計制約とに依存する。当業者は、説明された機能を具体的な適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、特許請求の範囲からの逸脱を引き起こすものとして解釈されるべきではない。
【００９６】
本明細書において開示される実施形態に関連して説明された様々な例示的な論理、論理ブロック、モジュール、および回路を実施するのに使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくはたのプログラム可能論理デバイス、ディスクリートゲート論理もしくはトランジスタ論理、ディスクリートハードウェア構成要素、または本明細書において説明される機能を実行するように設計されたそれらの任意の組合せを用いて実装されまたは実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。代替的に、いくつかの動作または方法は、所与の機能に固有の回路機構によって実行され得る。
【００９７】
1つまたは複数の実施形態では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体上に記憶され得る。本明細書において開示される方法またはアルゴリズムの動作は、非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体上に存在し得るプロセッサ実行可能ソフトウェアモジュールにおいて具現化され得る。非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る任意の記憶媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読またはプロセッサ可読媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用され、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。本明細書において使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)、およびBlu-Rayレイディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生するが、ディスク(disc)は、レーザを用いて光学的にデータを再生する。上記の組合せも、非一時的コンピュータ可読およびプロセッサ可読媒体の範囲に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的プロセッサ可読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せまたはセットとして存在してもよい。
【００９８】
開示される実施形態の前述の説明は、任意の当業者が特許請求の範囲を製作または使用することを可能にするために提供される。これらの実施形態への様々な修正が当業者には容易に明らかになり、本明細書において定義される一般原理は、特許請求の範囲から逸脱することなく他の実施形態に適用されてもよい。したがって、本開示は、本明細書において示される実施形態に限定されるものではなく、以下の特許請求の範囲ならびに本明細書において開示された原理および新規の特徴に一致する最大の範囲を与えられるべきである。
【符号の説明】
【００９９】
10  コンピューティングデバイス
12  SoC
14  プロセッサ
16  メモリ
18  通信インターフェース
20  ストレージメモリインターフェース
22  通信構成要素
24  ストレージメモリ
26  アンテナ
28  ネットワークインターフェース
30  ワイヤレスネットワーク
32  ワイヤレス接続
40  インターネット
44  有線接続
50  リモートコンピューティングデバイス
200  プロセッサコア0
201  プロセッサコア1
202  プロセッサコア2
203  プロセッサコア3
300  初期スレッド
302  中継スレッド
304  作業スレッド
306  タスク
308  並列タスク
310  直接の初期信号
312  中継信号
316  並列タスク
400  信号代理
402  修正信号
500  状態進行
502  決定ブロック
504  作業状態
506  スポーン状態
508  初期信号
510  決定ブロック
512  アクティブ状態
514  信号状態
516  中継信号
518  待機状態
600  方法
700  方法
800  方法
900  モバイルコンピューティングデバイス
902  プロセッサ
904  タッチスクリーンコントローラ
906  内部メモリ
908  トランシーバ
910  アンテナ
912  タッチスクリーンパネル
914  スピーカー
916  セルラーネットワークワイヤレスモデムチップ
918  周辺デバイス接続インターフェース
920  ハウジング
922  電源
924  物理ボタン
926  電源ボタン
1000  ラップトップコンピュータ
1008  アンテナ
1011  プロセッサ
1012  揮発性メモリ
1013  ディスクドライブ
1015  CDドライブ
1016  トランシーバ
1017  タッチパッドタッチ面
1018  キーボード
1019  ディスプレイ
1100  サーバ
1101  マルチコアプロセッサアセンブリ
1102  揮発性メモリ
1103  ネットワークアクセスポート
1104  ディスクドライブ
1105  ネットワーク
1106  CDまたはDVDディスクドライブ
【図１】
2018536917.tif 000003
【図２】
2018536917.tif 000004
【図３】
2018536917.tif 000005
【図４】
2018536917.tif 000006
【図５】
2018536917.tif 000007
【図６】
2018536917.tif 000008
【図７】
2018536917.tif 000009
【図８】
2018536917.tif 000010
【図９】
2018536917.tif 000011
【図１０】
2018536917.tif 000012
【図１１】
2018536917.tif 000013
【手続補正書】
【提出日】平成30年4月17日(2018.4.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上でのタスクシグナリングの方法であって、
実行のクリティカルパス上での初期スレッドによるタスクの実行を中断するステップと、
前記初期スレッドによって、前記初期スレッドにより実行される前記タスクと並列に実行され得る少なくとも1つの並列タスクを作成するステップと、
前記少なくとも1つの並列タスクが作成されることを示す初期信号を前記初期スレッドにより中継スレッドに送信するステップと、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するステップとを備える、方法。
【請求項２】
前記中継スレッドにより前記初期信号を受信するステップと、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するステップとをさらに備える、請求項1に記載の方法。
【請求項３】
前記初期信号が直接の初期信号であり、前記中継スレッドにより前記初期信号を受信するステップが、前記初期スレッドとの接続を介して前記直接の初期信号を受信するステップを備える、請求項2に記載の方法。
【請求項４】
前記初期信号が間接的な初期信号であり、
前記少なくとも1つの並列タスクの前記作成を示すメモリデバイスの位置におけるデータを修正するステップをさらに備え、前記中継スレッドにより前記初期信号を受信するステップが、前記メモリデバイスの前記位置から前記修正されたデータを取り出すステップを備える、請求項2に記載の方法。
【請求項５】
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップをさらに備える、請求項2に記載の方法。
【請求項６】
前記少なくとも1つの作業スレッドにより前記中継信号を受信するステップと、
前記少なくとも1つの作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記少なくとも1つの作業スレッドをアクティブ状態に変更するステップと、
前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを実行するステップとをさらに備える、請求項5に記載の方法。
【請求項７】
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するステップと、
前記中継スレッドによって、前記別の並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するステップとをさらに備える、請求項2に記載の方法。
【請求項８】
前記中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するステップとをさらに備える、請求項1に記載の方法。
【請求項９】
互いに通信可能に接続される複数のプロセッサコアを備え、前記複数のプロセッサコアが、初期スレッドを実行するように構成される第1のプロセッサコアと、中継スレッドを実行するように構成される第2のプロセッサコアと、作業スレッドを実行するように構成される第3のプロセッサコアとを含み、前記第1のプロセッサコアが動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作が、
実行のクリティカルパス上での前記初期スレッドによるタスクの実行を中断するステップと、
前記初期スレッドによって、前記初期スレッドにより実行される前記タスクと並列に実行され得る少なくとも1つの並列タスクを作成するステップと、
前記少なくとも1つの並列タスクが作成されることを示す初期信号を前記初期スレッドにより前記中継スレッドに送信するステップと、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するステップと
を備える、コンピューティングデバイス。
【請求項１０】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作が、
前記中継スレッドにより前記初期信号を受信するステップと、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するステップとを備える、請求項9に記載のコンピューティングデバイス。
【請求項１１】
前記初期信号が直接の初期信号であり、前記第2のプロセッサコアが、前記中継スレッドにより前記初期信号を受信するステップが前記初期スレッドを実行する前記第1のプロセッサコアとの接続を介して前記直接の初期信号を受信するステップを備えるように、動作を実行するようにプロセッサ実行可能命令を用いて構成される、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記第1のプロセッサコアおよび前記第2のプロセッサコアに通信可能に接続するメモリデバイスをさらに備え、
前記初期信号が間接的な初期信号であり、
前記第1のプロセッサコアが、前記少なくとも1つの並列タスクの前記作成を示す前記メモリデバイスの位置においてデータを修正するステップをさらに備える動作を実行するようにプロセッサ実行可能命令を用いて構成され、
前記第2のプロセッサコアが、前記中継スレッドにより前記初期信号を受信するステップが前記メモリデバイスの前記位置から前記修正されたデータを取り出すステップを備えるように、動作を実行するようにプロセッサ実行可能命令を用いて構成される、請求項10に記載のコンピューティングデバイス。
【請求項１３】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作がさらに、
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップを備える、請求項10に記載のコンピューティングデバイス。
【請求項１４】
前記第3のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作が、
前記作業スレッドにより前記中継信号を受信するステップと、
前記作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記作業スレッドをアクティブ状態に変更するステップと、
前記作業スレッドにより前記少なくとも1つの並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記作業スレッドにより前記少なくとも1つの並列タスクを実行するステップとを備える、請求項13に記載のコンピューティングデバイス。
【請求項１５】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作がさらに、
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するステップと、
前記中継スレッドによって、前記別の並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するステップとを備える、請求項10に記載のコンピューティングデバイス。
【請求項１６】
前記第2のプロセッサコアが、動作を実行するようにプロセッサ実行可能命令を用いて構成され、前記動作がさらに、
前記中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するステップとを備える、請求項9に記載のコンピューティングデバイス。
【請求項１７】
実行のクリティカルパス上での初期スレッドによるタスクの実行を中断するための手段と、
前記初期スレッドによって、前記初期スレッドにより実行される前記タスクと並列に実行され得る少なくとも1つの並列タスクを作成するための手段と、
前記少なくとも1つの並列タスクが作成されることを示す初期信号を前記初期スレッドにより中継スレッドに送信するための手段と、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するための手段とを備える、コンピューティングデバイス。
【請求項１８】
前記中継スレッドにより前記初期信号を受信するための手段と、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するための手段とをさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項１９】
前記初期信号が直接の初期信号であり、
前記中継スレッドにより前記初期信号を受信するための手段が、前記初期スレッドとの接続を介して前記直接の初期信号を受信するための手段を備える、請求項18に記載のコンピューティングデバイス。
【請求項２０】
前記初期信号が間接的な初期信号であり、
前記コンピューティングデバイスが、前記少なくとも1つの並列タスクの前記作成を示すメモリデバイスの位置におけるデータを修正するための手段をさらに備え、前記中継スレッドによる前記初期信号を受信するための手段が、前記メモリデバイスの前記位置から前記修正されたデータを取り出すための手段を備える、請求項18に記載のコンピューティングデバイス。
【請求項２１】
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するための手段と、
前記少なくとも1つの作業スレッドにより前記中継信号を受信するための手段と、
前記少なくとも1つの作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記少なくとも1つの作業スレッドをアクティブ状態に変更するための手段と、
前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを取得するための手段と、
前記初期スレッドによる前記タスクの実行と並列に、前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを実行するための手段とをさらに備える、請求項18に記載のコンピューティングデバイス。
【請求項２２】
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するための手段と、
前記中継スレッドによって、前記別の並列タスクを取得するための手段と、
前記初期スレッドによる前記タスクの実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するための手段とをさらに備える、請求項18に記載のコンピューティングデバイス。
【請求項２３】
前記中継スレッドの状態変更閾値を超えたかどうかを決定するための手段と、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するための手段とをさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項２４】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記動作が、
実行のクリティカルパス上での初期スレッドによるタスクの実行を中断するステップと、
前記初期スレッドによって、前記初期スレッドにより実行される前記タスクと並列に実行され得る少なくとも1つの並列タスクを作成するステップと、
前記少なくとも1つの並列タスクが作成されることを示す初期信号を前記初期スレッドにより中継スレッドに送信するステップと、
前記少なくとも1つの並列タスクの取得の前に前記初期スレッドによる前記タスクの実行を再開するステップと
を備える、非一時的プロセッサ可読記憶媒体。
【請求項２５】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記中継スレッドにより前記初期信号を受信するステップと、
前記中継スレッドが待機状態にあるときに前記初期信号を受信したことに応答して、前記中継スレッドをアクティブ状態に変更するステップと
を備える、請求項24に記載の非一時的プロセッサ可読記憶媒体。
【請求項２６】
前記初期信号が直接の初期信号であり、
前記記憶されたプロセッサ実行可能命令が、前記中継スレッドにより前記初期信号を受信するステップが前記初期スレッドとの接続を介して前記直接の初期信号を受信するステップを備えるように、前記プロセッサに動作を実行させるように構成される、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２７】
前記初期信号が間接的な初期信号であり、
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記少なくとも1つの並列タスクの前記作成を示すメモリデバイスの位置におけるデータを修正するステップを備え、前記中継スレッドによる前記初期信号を受信するステップが、前記メモリデバイスの前記位置から前記修正されたデータを取り出すステップを備える、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２８】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記少なくとも1つの並列タスクの前記作成を示す中継信号を少なくとも1つの作業スレッドに送信するステップと、
前記少なくとも1つの作業スレッドにより前記中継信号を受信するステップと、
前記少なくとも1つの作業スレッドが待機状態にあるときに前記中継信号を受信したことに応答して、前記少なくとも1つの作業スレッドをアクティブ状態に変更するステップと、
前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記少なくとも1つの作業スレッドにより前記少なくとも1つの並列タスクを実行するステップと
を備える、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２９】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記中継スレッドによって、別の並列タスクが残っているかどうかを決定するステップと、
前記中継スレッドによって、前記別の並列タスクを取得するステップと、
前記初期スレッドによる前記タスクの前記実行と並列に、前記中継スレッドにより前記別の並列タスクを実行するステップと
を備える、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項３０】
前記記憶されたプロセッサ実行可能命令が、前記プロセッサに動作を実行させるように構成され、前記動作がさらに、
前記中継スレッドの状態変更閾値を超えたかどうかを決定するステップと、
前記中継スレッドの前記状態変更閾値を超えたと決定したことに応答して、前記中継スレッドの状態を、アクティブ状態から待機状態へ、またはあるレベルの前記待機状態からより低いレベルの前記待機状態へ変更するステップと
を備える、請求項24に記載の非一時的プロセッサ可読記憶媒体。
【国際調査報告】
2018536917.tif 000014
2018536917.tif 000015