【手続補正書】
【提出日】平成29年9月14日(2017.9.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
カーネルを実行できるようにコンパイルする方法であって、
コンパイリングプロセッサ上で実行されるコンパイラによって、カーネルをコンパイルするステップと、
前記コンパイリングプロセッサ上で実行される前記コンパイラとドライバとからなるグループのうちの少なくとも一方によって、前記コンパイルされたカーネルのコードを実行するためのカーネル引数を生成するステップと、
前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記カーネル引数の第1のメモリ領域に対する第1のメモリ参照と前記カーネル引数の第2のメモリ領域に対する第2のメモリ参照とが同じメモリ領域を参照しているかどうかを判定するステップと、
前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記判定に基づいて前記第1のメモリ参照および前記第2のメモリ参照に関連するメタデータを生成するステップであって、前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の関係を示す、ステップと、
前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を対象としていないと判定したことに応答して、
前記コンパイリングプロセッサ上で実行される前記コンパイラによって、前記メタデータに基づいて前記カーネルを再コンパイルするステップと、
前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、ターゲットプロセッサに、前記再コンパイルされたカーネルを実行するよう命令するステップと
を含む、方法。
【請求項２】
前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定するステップは、前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのループコードセクションを判定するステップをさらに含み、
前記カーネルを再コンパイルするステップは、前記メタデータに基づいて前記ループコードセクションをアンローリングするステップと、前記アンローリングされたループコードセクションをコンパイルするステップとを含む、
請求項1に記載の方法。
【請求項３】
前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定するステップは、前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのコードセクションを判定するステップをさらに含み、
前記カーネルを再コンパイルするステップは、前記コードセクションの前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、前記メタデータに基づいて前記コードセクションのロード演算およびストア演算のうちの少なくとも一方を並べ替えるステップをさらに含む、
請求項1に記載の方法。
【請求項４】
前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定するステップは、前記コンパイリングプロセッサ上で実行される前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのコードセクションを判定するステップをさらに含み、
前記カーネルを再コンパイルするステップは、前記コードセクションの前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、前記メタデータに基づいて前記コードセクションの複数のスカラー命令を少なくとも1つのベクトル命令へとベクトル化するステップをさらに含む、
請求項1に記載の方法。
【請求項５】
前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の重複領域をさらに示す、請求項1に記載の方法。
【請求項６】
前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の重複のバイト数を含む、請求項5に記載の方法。
【請求項７】
前記メタデータは、前記メモリ重複領域の開始アドレスおよび前記メモリ重複領域の終了アドレスのうちの少なくとも一方を含む、請求項5に記載の方法。
【請求項８】
前記コンパイリングプロセッサは中央演算処理ユニット(CPU)を備え、前記ターゲットプロセッサはグラフィックス処理ユニット(GPU)を備える、請求項1に記載の方法。
【請求項９】
前記コンパイラは、Microsoft DirectComputeおよびOpenCLのうちの少なくとも一方を含む異種コンピューティングフレームワークを使用して前記カーネルを再コンパイルする、請求項1に記載の方法。
【請求項１０】
前記カーネル引数は、前記引数用に割り振られたメモリのバッファ領域を含む、請求項1に記載の方法。
【請求項１１】
メモリと、
コンパイリングプロセッサであって、
前記コンパイリングプロセッサのコンパイラによって、カーネルをコンパイルすることと、
前記コンパイリングプロセッサの前記コンパイラとドライバとからなるグループのうちの少なくとも一方によって、前記コンパイルされたカーネルのコードを実行するためのカーネル引数を生成することと、
前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記カーネル引数の第1のメモリ領域に対する第1のメモリ参照と前記カーネル引数の第2のメモリ領域に対する第2のメモリ参照とが同じメモリ領域を参照しているかどうかを判定することと、
前記コンパイリングプロセッサのコンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記判定に基づいて前記第1のメモリ参照および前記第2のメモリ参照に関連するメタデータを生成することであって、前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の関係を示す、生成することと、
前記コンパイリングプロセッサのコンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、
前記コンパイリングプロセッサの前記コンパイラによって、前記メタデータに基づいて前記カーネルを再コンパイルすることと、
前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、ターゲットプロセッサに、前記再コンパイルされたカーネルを実行するよう命令することと
を行うように構成される、コンパイリングプロセッサと
を備える、デバイス。
【請求項１２】
前記コンパイリングプロセッサは、前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定するために、前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのループコードセクションを判定するようにさらに構成され、
前記コンパイリングプロセッサは、前記カーネルを再コンパイルするために、前記メタデータに基づいて前記ループコードセクションをアンローリングし、かつ前記アンローリングされたループコードセクションをコンパイルするようにさらに構成される、
請求項11に記載のデバイス。
【請求項１３】
前記コンパイリングプロセッサは、前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定するために、前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのコードセクションを判定するようにさらに構成され、
前記コンパイリングプロセッサは、前記カーネルを再コンパイルするために、前記コードセクションの前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、前記メタデータに基づいて前記コードセクションのロード演算およびストア演算のうちの少なくとも一方を並べ替えるようにさらに構成される、
請求項11に記載のデバイス。
【請求項１４】
前記コンパイリングプロセッサは、前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定するために、前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのコードセクションを判定するようにさらに構成され、
前記コンパイリングプロセッサは、前記カーネルを再コンパイルするために、前記コードセクションの前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、前記メタデータに基づいて前記コードセクションの複数のスカラー命令を少なくとも1つのベクトル命令へとベクトル化するようにさらに構成される、
請求項11に記載のデバイス。
【請求項１５】
前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の重複領域を示す、請求項11に記載のデバイス。
【請求項１６】
前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の重複のバイト数を含む、請求項15に記載のデバイス。
【請求項１７】
前記メタデータは、前記メモリ重複領域の開始アドレスおよび前記メモリ重複領域の終了アドレスのうちの少なくとも一方を含む、請求項15に記載のデバイス。
【請求項１８】
前記コンパイリングプロセッサは中央演算処理ユニット(CPU)を備え、前記ターゲットプロセッサはグラフィックス処理ユニット(GPU)を備える、請求項11に記載のデバイス。
【請求項１９】
前記コンパイラは、Microsoft DirectComputeおよびOpenCLのうちの少なくとも一方を含む異種コンピューティングフレームワークを使用して前記カーネルを再コンパイルする、請求項11に記載のデバイス。
【請求項２０】
前記カーネル引数は、前記引数用に割り振られたメモリのバッファ領域を含む、請求項11に記載のデバイス。
【請求項２１】
記憶された命令を含む非一時的コンピュータ可読記憶媒体であって、前記命令は、実行されたときに、コンパイリングプロセッサに、
前記コンパイリングプロセッサのコンパイラによって、カーネルをコンパイルすることと、
前記コンパイリングプロセッサの前記コンパイラとドライバとからなるグループのうちの少なくとも一方によって、前記コンパイルされたカーネルのコードを実行するためのカーネル引数を生成することと、
前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記カーネル引数の第1のメモリ領域に対する第1のメモリ参照と前記カーネル引数の第2のメモリ領域に対する第2のメモリ参照とが同じメモリ領域を参照しているかどうかを判定することと、
前記コンパイリングプロセッサのコンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記判定に基づいて前記第1のメモリ参照および前記第2のメモリ参照に関連するメタデータを生成することであって、前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の関係を示す、生成することと、
前記コンパイリングプロセッサのコンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記カーネル引数の前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、
前記コンパイリングプロセッサの前記コンパイラによって、前記メタデータに基づいて前記カーネルを再コンパイルすることと、
前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、ターゲットプロセッサに、前記再コンパイルされたカーネルを実行するよう命令することと
を行わせる、非一時的コンピュータ可読記憶媒体。
【請求項２２】
前記コンパイリングプロセッサに、前記カーネル引数の前記第1のメモリ参照と前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定させる前記命令は、実行されたときに、前記コンパイリングプロセッサに、前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのループコードセクションを判定させる命令をさらに含み、
前記コンパイリングプロセッサに、前記カーネルを再コンパイルさせる前記命令は、実行されたときに、前記コンパイリングプロセッサに、前記メタデータに基づいて前記ループコードをアンローリングさせ、かつ前記アンローリングされたループコードセクションをコンパイルさせる命令をさらに含む、
請求項21に記載の非一時的コンピュータ可読記憶媒体。
【請求項２３】
前記コンパイリングプロセッサに、前記カーネル引数の前記第1のメモリ参照と前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定させる命令は、実行されたときに、前記コンパイリングプロセッサに、前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのコードセクションを判定させる命令をさらに含み、
前記コンパイリングプロセッサに、前記カーネルを再コンパイルさせる前記命令は、実行されたときに、前記コンパイリングプロセッサに、前記コードセクションの前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、前記メタデータに基づいて前記コードセクションのロード演算およびストア演算のうちの少なくとも一方を並べ替えさせる命令をさらに含む、
請求項21に記載の非一時的コンピュータ可読記憶媒体。
【請求項２４】
前記コンパイリングプロセッサに、前記カーネル引数の前記第1のメモリ参照と前記第2のメモリ参照が前記同じメモリ領域を参照しているかどうかを判定させる前記命令は、実行されたときに、前記コンパイリングプロセッサに、前記コンパイリングプロセッサの前記コンパイラと前記ドライバとからなる前記グループのうちの前記少なくとも一方によって、前記第1のメモリ参照および前記第2のメモリ参照を含む前記カーネルのコードセクションを判定させる命令をさらに含み、
前記コンパイリングプロセッサに、前記カーネルを再コンパイルさせる前記命令は、実行されたときに、前記コンパイリングプロセッサに、前記コードセクションの前記第1のメモリ参照および前記第2のメモリ参照が前記同じメモリ領域を参照していないと判定したことに応答して、前記メタデータに基づいて前記コードセクションの複数のスカラー命令を少なくとも1つのベクトル命令へとベクトル化させる命令をさらに含む、
請求項21に記載の非一時的コンピュータ可読記憶媒体。
【請求項２５】
前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の重複領域を示す、請求項21に記載の非一時的コンピュータ可読記憶媒体。
【請求項２６】
前記メタデータは、前記第1のメモリ領域と前記第2のメモリ領域との間の重複のバイト数を含む、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【請求項２７】
前記メタデータは、前記メモリ重複領域の開始アドレスおよび前記メモリ重複領域の終了アドレスのうちの少なくとも一方を含む、請求項25に記載の非一時的コンピュータ可読記憶媒体。
【請求項２８】
前記コンパイリングプロセッサは中央演算処理ユニット(CPU)を備え、前記ターゲットプロセッサはグラフィックス処理ユニット(GPU)を備える、請求項21に記載の非一時的コンピュータ可読記憶媒体。
【請求項２９】
前記コンパイラは、Microsoft DirectComputeおよびOpenCLのうちの少なくとも一方を含む異種コンピューティングフレームワークを使用して前記カーネルを再コンパイルする、請求項21に記載の非一時的コンピュータ可読記憶媒体。
【請求項３０】
前記カーネル引数は、前記引数用に割り振られたメモリのバッファ領域を含む、請求項21に記載の非一時的コンピュータ可読記憶媒体。