(57)【要約】本発明は、異なるコンパイラステージからのデバッグ情報を融合する方法、システム、およびコンピュータプログラム製品に及ぶ。本発明の実施形態は、コード生成プロセスでの複数の異なるコンパイルステージからの本発明デバッグ情報を、単一のデバッグ情報のセットとして融合する。単一のデバッグ情報のセットは、最初のコンパイルステージに入力される命令およびシンボル（例えば、ソースコード）と、最後のコンパイルステージから出力される命令およびシンボル（例えば、機械コード）との間を直接的にマッピングする。
2014503902.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサおよびシステムメモリを含むコンピュータシステム上で、異なるコンパイルステージで生成されたデバッグ情報を組み合わせる方法であって、前記コンピュータシステムは、ソースコードを実行可能コードにコンパイルするマルチステージコンパイラも含み、前記マルチステージコンパイラは、少なくとも第１のコンパイルステージおよび第２のコンパイルステージを含む複数のコンパイルステージを有し、前記複数のコンパイルステージにおける各コンパイルステージは、コードフォーマット間で変わり、かつ実行可能コードをソースコードから生成することに進むように構成され、前記方法は、
第１のデバッグ情報および第２のデバッグ情報を、統合された第３のデバッグ情報に融合する動作であって、
前記第１のデバッグ情報は、第１のフォーマットの第１のコードを第２の異なるフォーマットの第２のコードに翻訳する前記第１のコンパイルステージで生成され、前記第１のデバッグ情報は、前記第１のコードにおける各命令を、前記第２のコードにおける対応する命令にマッピングし、かつ前記第１のコードにおける各シンボルを、前記第２のコードにおける対応するシンボルにマッピングし、
前記第２のデバッグ情報が、前記第２のコードを第３の異なるフォーマットの第３のコードに翻訳する前記第２のコンパイルステージで生成され、前記第２のデバッグ情報は、前記第２のコードにおける各命令を、前記第３のコードにおける対応する命令にマッピングし、かつ前記第２のコードにおける各シンボルを、前記第３のコードにおける対応するシンボルにマッピングし、
前記統合された第３のデバッグ情報は、前記第１の命令を前記第３の命令に直接的にマッピングし、かつ前記第１のシンボルを前記第３のシンボルに直接的にマッピングし、前記第１のデバッグ情報および前記第２のデバッグ情報を融合し、前記第１のデバッグ情報および前記第２のデバッグ情報を融合することは、前記第１のコードにおける各命令およびシンボルのために、
前記第１のデバッグ情報を使用して、前記第１のコードにおける命令またはシンボルに対応する前記第２のコードにおける命令またはシンボルを識別する動作と、
前記第２のデバッグ情報を使用して、前記第２のコードにおける前記識別した命令またはシンボルに対応する前記第３のコードにおける命令またはシンボルを識別する動作と、
前記第１のコードにおける前記命令またはシンボルを前記第３のコードにおける前記識別した対応する命令またはシンボルに直接的にマッピングする動作と、
前記第１のコードにおける前記命令またはシンボルの、前記第３のコードにおける前記命令またはシンボルへの直接的マッピングを、前記統合された第３のデバッグ情報に格納する動作と
を含む、融合する動作
を備えたことを特徴とする方法。
【請求項２】
前記第１のデバッグ情報および前記第２のデバッグ情報を統合された第３のデバッグ情報に融合する前記動作は、Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ＋＋（ＤＰＣ＋＋）ソースコードにおける命令位置およびシンボルと、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｅｒ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）ソースコードにおける命令位置およびシンボルとの間でマッピングする第１のデバッグ情報、ならびにＨＬＳＬソースコードにおける命令位置およびシンボルと、ＨＬＳＬバイトコードにおけるアドレスおよびレジスタ名との間でマッピングする第２のデバッグ情報を、前記ＤＰＣ＋＋ソースコードにおける位置およびシンボルと、前記ＨＬＳＬバイトコード内のアドレスおよびレジスタ名との間をマッピングする統合された第３のデバッグ情報に融合する動作を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第１のコンパイルステージは、Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ＋＋（ＤＰＣ＋＋）ソースコードを、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｅｒ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）ソースコードに翻訳するように構成されることを特徴とする請求項１に記載の方法。
【請求項４】
前記第２のコンパイルステージは、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｅｒ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）ソースコードを、ＨＬＳＬバイトコードに翻訳するように構成されることを特徴とする請求項１に記載の方法。
【請求項５】
前記第１のデバッグ情報、前記第２のデバッグ情報、および前記統合された第３のデバッグ情報が、プログラムデータベース（ＰＤＢ）レコードとして格納されることを特徴とする請求項１に記載の方法。
【請求項６】
統合された第３のデバッグ情報を使用して、前記第１のコードのデバッギングを支援する動作をさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
コンピュータシステムで使用するコンピュータプログラム製品であって、前記コンピュータシステムは、ソースコードを実行可能コードにコンパイルするマルチステージコンパイラを含み、前記マルチステージコンパイラは、少なくとも第１のコンパイルステージおよび第２のコンパイルステージを含む複数のコンパイルステージを有し、前記複数のコンパイルステージにおける各コンパイルステージは、コードフォーマット間で変わり、かつ実行可能コードをソースコードから生成することに進むように構成され、前記コンピュータプログラム製品は、異なるコンパイルステージで生成されるデバッグ情報を組み合わせる方法を実装し、前記コンピュータプログラム製品は、プロセッサで実行されると前記コンピュータシステムに前記方法を実行させるコンピュータ実行可能命令を格納する１つまたは複数のコンピュータ記憶装置を備え、前記方法は、
第１のデバッグ情報および第２のデバッグ情報を統合された第３のデバッグ情報に融合するステップであって、
前記第１のデバッグ情報は、第１のフォーマットの第１のコードを第２の異なるフォーマットの第２のコードに翻訳する前記第１のコンパイルステージで生成され、前記第１のデバッグ情報は、前記第１のコード内の各命令を、前記第２のコード内の対応する命令にマッピングし、かつ前記第１のコード内の各シンボルを、前記第２のコード内の対応するシンボルにマッピングし、
前記第２のデバッグ情報は、前記第２のコードを第３の異なるフォーマットの第３のコードに翻訳する前記第２のコンパイルステージで生成され、前記第２のデバッグ情報は、前記第２のコード内の各命令を、前記第３のコード内の対応する命令にマッピングし、かつ前記第２のコード内の各シンボルを、前記第３のコード内の対応するシンボルにマッピングし、
前記統合された第３のデバッグ情報は、前記第１の命令を前記第３の命令に直接的にマッピングし、かつ前記第１のシンボルを前記第３のシンボルに直接的にマッピングし、前記第１のデバッグ情報および前記第２のデバッグ情報を融合し、前記第１のデバッグ情報および前記第２のデバッグ情報を融合することは、前記第１のコードにおける各命令およびシンボルのために、
前記第１のデバッグ情報を使用して、前記第１のコードにおける命令またはシンボルに対応する前記第２のコードにおける命令またはシンボルを識別する動作と、
前記第２のデバッグ情報を使用して、前記第２のコードにおける識別した命令またはシンボルに対応する前記第３のコードにおける命令またはシンボルを識別する動作と、
前記第１のコードにおける前記命令またはシンボルを前記第３のコードにおける識別した対応する命令またはシンボルに直接的にマッピングする動作と、
前記第１のコードにおける前記命令またはシンボルの、前記第３のコードにおける前記命令またはシンボルへの直接的マッピングを、前記統合された第３のデバッグ情報に格納する動作と
を含む、融合するステップ
を含むことを特徴とするコンピュータプログラム製品。
【請求項８】
１つまたは複数のプロセッサおよびシステムメモリを含むコンピュータシステムで、異なるコンパイルステージで生成されたデバッグ情報を組み合わせる方法であって、前記コンピュータシステムは、ソースコードを実行可能コードにコンパイルするマルチステージコンパイラも含み、前記マルチステージコンパイラは、複数のコンパイルステージを有し、前記複数のコンパイルステージにおける各コンパイルステージは、コードフォーマット間で変わり、かつ実行可能コードをソースコードから生成することに進むように構成され、前記方法は、
第１のコンパイルステージで、
第１のコードにアクセスする動作であって、前記第１のコードは、第１のフォーマットの第１の命令および第１のシンボルを含む、アクセスする動作と、
前記第１のコードを第２のコードに翻訳する動作であって、前記翻訳する動作は、
前記第１の命令および第１のシンボルを、第２のフォーマットの対応する第２の命令および第２のシンボルに変換する動作であって、前記第２のフォーマットは前記第１のフォーマットとは異なる、変換する動作と、
第１のデバッグ情報を生成する動作であって、前記第１のデバッグ情報は、前記第１の命令における各命令を、前記第２の命令における対応する命令にマッピングし、かつ前記第１のシンボルにおける各シンボルを、前記第２のシンボルにおける対応するシンボルにマッピングする、生成する動作と
を含む、翻訳する動作と、
第２のコンパイルステージで、
前記第２のコードにアクセスする動作と、
前記第２のコードを第３のコードに翻訳する動作であって、前記翻訳する動作は、
前記第２の命令および第２のシンボルを、第３のフォーマットの対応する第３の命令および第３のシンボルに変換する動作であって、前記第３のフォーマットは、前記第１のフォーマットおよび前記第２のフォーマットとは異なる、翻訳する動作と、
第２のデバッグ情報を生成する動作であって、前記第２のデバッグ情報は、前記第２の命令における各命令を、前記第３の命令における対応する命令にマッピングし、かつ前記第２のシンボルにおける各シンボルを、前記第３のシンボルにおける対応するシンボルにマッピングする、生成する動作と
を含む、翻訳する動作と、
前記第１のデバッグ情報および前記第２のデバッグ情報を統合された第３のデバッグ情報に融合する動作であって、前記統合された第３のデバッグ情報は、前記第１の命令を前記第３の命令に直接的にマッピングし、かつ前記第１のシンボルを前記第３のシンボルに直接的にマッピングし、前記融合する動作は、前記第１の命令および前記第１のシンボルの各々のために、
前記第１のデバッグ情報内から、前記第１の命令または第１のシンボルに対応する第２の命令または第２のシンボルを識別する動作と、
前記第２のデバッグ情報内から、前記識別した第２の命令または第２のシンボルに対応する第３の命令または第３のシンボルを識別する動作と、
前記第１の命令または第１のシンボルを、前記識別した対応する第３の命令または第３のシンボルに直接的にマッピングする動作と
前記第１の命令または第１のシンボルの、前記識別した対応する第３の命令または第３のシンボルへのマッピングを、前記統合された第３のデバッグ情報に格納する動作と
を含む、融合する動作と
を備えたことを特徴とする方法。
【請求項９】
前記第２の命令および前記第２のシンボルを、第３のフォーマットの対応する第３の命令および第３のシンボルに変換する前記動作は、前記第２の命令および第２のシンボルを、画像処理装置（「ＧＰＵ」）上で実行可能なコードに変換する動作を含むことを特徴とする請求項８に記載の方法。
【請求項１０】
前記第１のデバッグ情報および前記第２のデバッグ情報を前記統合された第３のデバッグ情報として融合する前記動作は、Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ＋＋（ＤＰＣ＋＋）ソースコードにおける命令位置およびシンボルと、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｅｒ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）ソースコードにおける命令位置およびシンボルとの間でマッピングする第１のデバッグ情報、ならびにＨＬＳＬソースコードにおける命令位置およびシンボルと、ＨＬＳＬバイトコードにおけるアドレスおよびレジスタ名との間でマッピングする第２のデバッグ情報を、前記ＤＰＣ＋＋ソースコードにおける位置およびシンボルと、前記ＨＬＳＬバイトコードにおけるアドレスおよびレジスタとの間でマッピングする第３のデバッグ情報に融合する動作を含むことを特徴とする請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異なるコンパイラステージからのデバッグ情報の融合に関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連技術は、社会の多くの面に影響を及ぼす。実際に、情報を処理するコンピュータシステムの能力は、私たちが生活し、働く方法を一変させた。現在、コンピュータシステムは一般に、コンピュータシステムの出現の前には手作業で実施されたタスク（例えば、ワードプロセッシング、スケジューリング、会計など）のホストを実施する。より最近では、コンピュータシステムが互いに、および他の電子装置に結合され、コンピュータシステムおよび他の電子装置がそれを介して電子データを転送することができるワイヤードコンピュータネットワークとワイヤレスコンピュータネットワークの両方が形成されている。したがって、多くのコンピューティングタスクの実施が、いくつかの異なるコンピュータシステムおよび／またはいくつかの異なるコンピューティング環境にわたって分散する。
【０００３】
コンピューティングタスクを実施するソフトウェアアプリケーションを開発するために、開発者は通常、ソフトウェアアプリケーションの所望の機能を表現する（例えば、Ｃ＋＋、Ｖｉｓｕａｌ  Ｂａｓｉｃなどの）ソースコードを書く。次いで、ソースコードを実行可能コードにコンパイルする（または実行時に交互に解釈する）ことができる。ソースコードコンパイル中に、コンパイラは、ソースコード命令を、コンピュータシステム上で直接的に実行可能な機械語命令（例えば、ｘ８６命令）に変換する。実行可能コードは、コンピュータシステム上で実行され、所望の機能が実施される。多くのコンパイラは、所望の機能からの逸脱を引き起こすソースプログラム内の欠陥の位置を開発者が特定し、修正するのを助けることができるデバッグ情報も出力する。
【０００４】
いくつかの環境では、ソースコードを実行可能コードにコンパイルするために単一ステージコンパイラが使用される。例えば、Ｃ＋＋コンパイラは、Ｃ＋＋ソースコードを、パーソナルコンピュータのプロセッサ上で実行することのできる実行可能コードに直接的にコンパイルすることができる。別の環境では、ソースコードを実行可能コードにコンパイルするためにマルチステージコンパイラが使用される。マルチステージコンパイラは、いくつかの異なるコンパイルステージを含むことができる。各コンパイルステージは、何らかの翻訳、変換などを実施して、受け取ったソースコードの（例えば、特定のプロセッサを対象とする）機械語命令へのコンパイルに進むことができる。
【０００５】
より特定の環境では、中央処理装置（「ＣＰＵ」）と並列にグラフィカルプロセッサユニット（「ＧＰＵ」）を利用して所望の機能を実施するようにＤａｔａ  Ｐａｒａｌｌｅｌ  Ｃ＋＋（「ＤＰＣ＋＋」）ソースコードが開発される。すなわち、あるソースコードがＣＰＵを対象とするように書かれ、別のソースコードがＧＰＵを対象とするように書かれる。ＧＰＵを対象とするソースコードでは、Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ＋＋（「ＤＰＣ＋＋」）ソースコードをＨｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｅｒ  Ｌａｎｇｕａｇｅ（「ＨＬＳＬ」）バイトコード（これはＧＰＵ上で実行可能である）にコンパイルするのにマルチステージコンパイラが使用される。第１のコンパイルステージは、ＤＰＣ＋＋ソースコードをＨＬＳＬソースコードに翻訳する。次いで、第２のコンパイルステージは、ＨＬＳＬソースコードを、ＧＰＵ上で実行されるＨＬＳＬバイトコードに変換する。マルチステージコンパイラの使用により、ＤＰＣ＋＋開発者が、ＨＬＳＬの知識を持たずにＧＰＵ用のコードを開発することが可能となる。
【０００６】
マルチステージコンパイラが使用されるとき、各コンパイルステージは通常、入力フォーマットの命令およびシンボルと、出力フォーマットの命令およびシンボルとの間のデバッグ情報マッピングを出力する。例えば、第１のコンパイルステージは、ソースコード命令およびシンボルと、中間コード（例えば、第２のソースコード、中間言語コードなど）命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。第２のコンパイルステージは、中間コード命令およびシンボルと、実行可能コード命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。前の例に戻ると、第１のコンパイルステージは、ＤＰＣ＋＋ソースコード命令およびシンボルと、ＨＬＳＬソースコード命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。第２のコンパイルステージは、ＨＬＳＬソースコード命令およびシンボルと、ＨＬＳＬバイトコード命令およびシンボルとの間のデバッグ情報マッピングを出力することができる。
【０００７】
したがって、マルチステージコンパイラを使用してコンパイルされるアプリケーションをデバッグするために、開発者は、各コンパイルステージからのデバッグ情報のセットを利用して、ソースコード命令またはシンボルを実行可能コード命令またはシンボルにマッピングしなければならない。複数のデバッグ情報のセットを処理することはリソース集約的であり、コンパイルステージの数が増加するにつれてリソース使用量が増大する。
【発明の概要】
【０００８】
本発明は、異なるコンパイラステージからのデバッグ情報を融合する方法、システム、およびコンピュータプログラム製品に及ぶ。第１のコンパイルステージが第１のコードにアクセスする。第１のコードは、第１のフォーマットの第１の命令および第１のシンボルを含む。第１のコードが第２のコードに翻訳される。第１のコードを翻訳することは、第１の命令および第１のシンボルを、第２のフォーマットの対応する第２の命令および第２のシンボルに変換することを含む。第２のフォーマットは第１のフォーマットとは異なる。第１のコードを翻訳することはまた、第１のデバッグ情報を生成することをも含む。第１のデバッグ情報は、第１の命令内の各命令を、第２の命令内の対応する命令にマッピングし、第１のシンボル内の各シンボルを、第２のシンボル内の対応するシンボルにマッピングする。
【０００９】
第２のコンパイルステージが第２のコードにアクセスする。第２のコードが第３のコードに翻訳される。第２のコードを翻訳することは、第２の命令および第２のシンボルを、第３のフォーマットの対応する第３の命令および第３のシンボルに変換することを含む。第３のフォーマットは、第１のフォーマットおよび第２のフォーマットとは異なる。第２のコードを翻訳することはまた、第２のデバッグ情報を生成することをも含む。第２のデバッグ情報は、第２の命令内の各命令を、第３の命令内の対応する命令にマッピングし、第２のシンボル内の各シンボルを、第３のシンボル内の対応するシンボルにマッピングする。
【００１０】
第１のデバッグ情報および第２のデバッグ情報は、統合された第３のデバッグ情報に融合される。統合された第３のデバッグ情報は、第１の命令を第３の命令に直接的にマッピングし、第１のシンボルを第３のシンボルに直接的にマッピングする。第１の命令および第１のシンボルのそれぞれについて、第１の命令または第１のシンボルに対応する第２の命令または第２のシンボルが、第１のデバッグ情報内から識別される。識別された第２の命令または第２のシンボルに対応する第３の命令または第３のシンボルが、第２のデバッグ情報内から識別される。第１の命令または第１のシンボルが、識別された対応する第３の命令または第３のシンボルに直接的にマッピングされる。第１の命令または第１のシンボルの、識別された対応する第３の命令または第３のシンボルへのマッピングが、統合された第３のデバッグ情報に格納される。
【００１１】
この概要は、以下の詳細な説明でさらに説明する概念の抜粋を簡略化した形で紹介するために与えたものである。この概要は、特許請求される主題の主要な特徴または不可欠な特徴を特定するためのものではなく、特許請求される主題の範囲を決定する助けとして使用するためのものでもない。
【００１２】
以下の説明で本発明の追加の特徴および利点を述べ、本発明の追加の特徴および利点は、部分的には、説明から明らかとなり、または本発明の実施によって知ることができる。本発明の特徴および利点は、添付の特許請求の範囲で具体的に指摘される機器および組合せによって実現し、得ることができる。本発明のこれらおよび他の特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかとなり、または以下で述べる本発明の実施によって知ることができる。
【図面の簡単な説明】
【００１３】
本発明の上述および他の利点および特徴を得ることのできる方法を説明するために、上記で簡潔に説明した本発明のより具体的な説明を、添付の図面に図示する本発明の特定の実施形態を参照することによって行う。こうした図面は本発明の典型的な実施形態を示すに過ぎず、したがってその範囲の限定とみなすべきではないことを理解して、添付の図面の使用を通じて本発明をさらに具体的かつ詳細に説明する。
【図１】異なるコンパイラステージからのデバッグ情報を融合することを容易にする例示的コンピュータアーキテクチャを示す図である。
【図２】異なるコンパイラステージからのデバッグ情報を融合することを容易にする別の例示的コンピュータアーキテクチャを示す図である。
【図３Ａ】異なるコンパイラステージからのデバッグ情報を融合する例示的方法の流れ図である。
【図３Ｂ】異なるコンパイラステージからのデバッグ情報を融合する例示的方法の流れ図である。
【図３Ｃ】異なるコンパイラステージからのデバッグ情報を融合する例示的方法の流れ図である。
【発明を実施するための形態】
【００１４】
本発明は、異なるコンパイラステージからのデバッグ情報を融合する方法、システム、およびコンピュータプログラム製品に及ぶ。第１のコンパイルステージが第１のコードにアクセスする。第１のコードは、第１のフォーマットの第１の命令および第１のシンボルを含む。第１のコードが第２のコードに翻訳される。第１のコードを翻訳することは、第１の命令および第１のシンボルを、第２のフォーマットの対応する第２の命令および第２のシンボルに変換することを含む。第２のフォーマットは第１のフォーマットとは異なる。第１のコードを翻訳することはまた、第１のデバッグ情報を生成することをも含む。第１のデバッグ情報は、第１の命令内の各命令を、第２の命令内の対応する命令にマッピングし、第１のシンボル内の各シンボルを、第２のシンボル内の対応するシンボルにマッピングする。
【００１５】
第２のコンパイルステージが第２のコードにアクセスする。第２のコードが第３のコードに翻訳される。第２のコードを翻訳することは、第２の命令および第２のシンボルを、第３のフォーマットの対応する第３の命令および第３のシンボルに変換することを含む。第３のフォーマットは、第１のフォーマットおよび第２のフォーマットとは異なる。第２のコードを翻訳することはまた、第２のデバッグ情報を生成することをも含む。第２のデバッグ情報は、第２の命令内の各命令を、第３の命令内の対応する命令にマッピングし、第２のシンボル内の各シンボルを、第３のシンボル内の対応するシンボルにマッピングする。
【００１６】
第１のデバッグ情報および第２のデバッグ情報は、統合された第３のデバッグ情報に融合される。統合された第３のデバッグ情報は、第１の命令を第３の命令に直接的にマッピングし、第１のシンボルを第３のシンボルに直接的にマッピングする。第１の命令および第１のシンボルのそれぞれについて、第１の命令または第１のシンボルに対応する第２の命令または第２のシンボルが、第１のデバッグ情報内から識別される。識別された第２の命令または第２のシンボルに対応する第３の命令または第３のシンボルが、第２のデバッグ情報内から識別される。第１の命令または第１のシンボルが、識別された対応する第３の命令または第３のシンボルに直接的にマッピングされる。第１の命令または第１のシンボルの、識別された対応する第３の命令または第３のシンボルへのマッピングが、統合された第３のデバッグ情報に格納される。
【００１７】
以下でより詳細に論じるように、本発明の実施形態は、例えば１つまたは複数のプロセッサやシステムメモリなどのコンピュータハードウェアを含む専用または汎用コンピュータを備え、または使用する。本発明の範囲内の実施形態はまた、コンピュータ実行可能命令および／またはデータ構造を搬送または格納する物理的コンピュータ可読媒体および他のコンピュータ可読媒体をも含むことができる。そのようなコンピュータ可読媒体は、汎用または専用コンピュータシステムでアクセスすることのできる任意の入手可能な媒体でよい。コンピュータ実行可能命令を格納するコンピュータ可読媒体は、コンピュータ記憶媒体（装置）である。コンピュータ実行可能命令を搬送するコンピュータ可読媒体は、伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は、コンピュータ記憶媒体（装置）および伝送媒体という少なくとも２つのはっきり異なる種類のコンピュータ可読媒体を備えることができる。
【００１８】
コンピュータ記憶媒体（装置）は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、ＤＶＤ、または他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気記憶装置、フラッシュドライブ、サムドライブ、あるいはコンピュータ実行可能命令またはデータ構造の形態の所望のプログラムコード手段を格納するのに使用することができ、汎用または専用コンピュータでアクセスすることのできる任意の他の媒体を含む。
【００１９】
「ネットワーク」は、コンピュータシステムおよび／またはモジュールおよび／または他の電子装置間での電子データの移送を可能にする１つまたは複数のデータリンクと定義される。ネットワークまたは別の通信接続（ハードワイヤード、ワイヤレス、あるいはハードワイヤードまたはワイヤレスの組合せ）を介して情報がコンピュータに転送または提供されるとき、コンピュータは適切に、接続を伝送媒体とみなす。伝送媒体は、コンピュータ実行可能命令またはデータ構造の形態の所望のプログラムコード手段を搬送するのに使用することができ、汎用または専用コンピュータでアクセスすることのできるネットワークおよび／またはデータリンクを含むことができる。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【００２０】
さらに、様々なコンピュータシステム構成要素への到達時に、コンピュータ実行可能命令またはデータ構造の形態のプログラムコード手段を伝送手段からコンピュータ記憶媒体（装置）に（または逆も同様である）自動的に転送することができる。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造をネットワークインターフェースモジュール（例えば「ＮＩＣ」）内のＲＡＭにバッファリングし、次いでコンピュータシステムＲＡＭおよび／またはコンピュータシステムのより揮発性の低いコンピュータ記憶媒体（装置）に最終的に転送することができる。したがって、伝送媒体も利用する（さらには、主に利用する）コンピュータシステム構成要素にコンピュータ記憶媒体（装置）を含めることができることを理解されたい。
【００２１】
コンピュータ実行可能命令は、例えば、プロセッサで実行されたときに、汎用コンピュータ、専用コンピュータ、または専用処理装置に一定の機能または機能のグループを実施させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間フォーマット命令、さらにはソースコードでよい。構造的特徴および／または方法的動作に特有の言い回しで主題を説明したが、添付の特許請求の範囲で定義される主題は、前述の特徴または上述の動作に必ずしも限定されないことを理解されたい。むしろ、記載の特徴および動作は、特許請求の範囲を実施する例示的形態として開示される。
【００２２】
パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラム可能な消費者向け電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ページャ、ルータ、交換機などを含む多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境で本発明を実施できることを当業者は理解されよう。ネットワークを通じて（ハードワイヤードデータリンク、ワイヤレスデータリンク、あるいはハードワイヤードデータリンクとワイヤレスデータリンクの組合せによって）リンクされるローカルコンピュータシステムとリモートコンピュータシステムがどちらもタスクを実施する分散システム環境で本発明を実施することもできる。分散システム環境では、ローカルメモリ記憶装置とリモートメモリ記憶装置のどちらにもプログラムモジュールを配置することができる。
【００２３】
いくつかの実施形態では、中央演算処理装置（「ＣＰＵ」）と並列にグラフィカルプロセッサユニット（「ＧＰＵ」）を利用して所望の機能を実施するようにソースコードが開発される。すなわち、あるソースコードがＣＰＵを対象とするように書かれ、別のソースコードがＧＰＵを対象とするように書かれる。ＧＰＵを対象とするソースコードについて、マルチステージコンパイラを使用して、ソースコードをＧＰＵ上で実行可能なコードにコンパイルすることができる。
【００２４】
一般に、本発明の実施形態は、コード生成プロセスでの複数の異なるコンパイルステージからのデバッグ情報を単一のデバッグ情報のセットに融合する。単一のデバッグ情報のセットは、最初のコンパイルステージに入力される命令およびシンボル（例えば、ソースコード）と、最後のコンパイルステージから出力される命令およびシンボル（例えば、機械コード）との間を直接的にマッピングする。
【００２５】
まず図２を参照すると、図２は、異なるコンパイラステージからのデバッグ情報を融合することを容易にする例示的コンピュータアーキテクチャ２００を示す。コンピュータアーキテクチャ２００は、マルチステージコンパイラ２０１およびデバッグ情報マッパ２０６を含む。マルチステージコンパイラ２０１は、コンパイラステージ２０２、２０３、２０４などを含む複数のコンパイラステージを含む。省略記号２０５は、マルチステートコンパイラ２０１が１つまたは複数の追加のコンパイラステージを含むことができることを表す。図示する構成要素のそれぞれは、例えばローカルエリアネットワーク（「ＬＡＮ」）、広域ネットワーク（「ＷＡＮ」）、さらにはインターネットなどのネットワークを介して互いに接続することができる（またはネットワークの一部である）。したがって、図示する構成要素のそれぞれ、ならびに任意の他の接続されたコンピュータシステムおよびその構成要素は、ネットワークを介してメッセージ関連データおよび交換メッセージ関連データ（例えば、インターネットプロトコル（「ＩＰ」）データグラム、および伝送制御プロトコル（「ＴＣＰ」）、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）、簡易メール転送プロトコル（「ＳＭＴＰ」）などのＩＰデータグラムを利用する他の上位層プロトコル）を作成することができる。
【００２６】
（ほぼ任意のプログラミング言語の）ソースコード２１１を入力としてマルチステージコンパイラ２０１に与えることができる。コンパイラステージ２０２はソースコード２１１を受信することができる。コンパイラステージ２０２は、ソースコード２１１の翻訳、変換、コンパイルなどの１つまたは複数を実施して、中間コード２１２を生成することができる。翻訳、変換、コンパイルなどの一部として、コンパイルステージ２０２はデバッグ情報２２１も生成することができる。デバッグ情報２２１は、ソースコード２１１内の命令およびシンボルと、中間コード２１２内の命令およびシンボルとの間をマッピングする。
【００２７】
コンパイラステージ２０３は中間コード２１２を受信することができる。コンパイラステージ２０３は、中間コード２１２の翻訳、変換、コンパイルなどの１つまたは複数を実施して、中間コード２１２を生成することができる。翻訳、変換、コンパイルなどの一部として、コンパイルステージ２０３はデバッグ情報２２２も生成することができる。デバッグ情報２２２は、中間コード２１２内の命令およびシンボルと、中間コード２１３内の命令およびシンボルとをマッピングする。
【００２８】
コンパイラステージ２０４は中間コード２１３を受信することができる。コンパイラステージ２０４は、中間コード２１３の翻訳、変換、コンパイルなどの１つまたは複数を実施して、別のコードを生成することができる（例えば、実行可能コード２１４または次のコンパイラステージに渡される別の中間コード）。翻訳、変換、コンパイルなどの一部として、コンパイルステージ２０４はデバッグ情報２２３も生成することができる。デバッグ情報２２３は、中間コード２１３内の命令およびシンボルと、別のコード内の命令およびシンボルとの間をマッピングする。別のコードが実行可能コード２１４であるとき、デバッグ情報２２３は、中間コード２１３内の命令およびシンボルと、実行可能コード２１４内の命令およびシンボルとの間をマッピングする。
【００２９】
追加のコンパイラステージがマルチステージコンパイラ２０１内に含まれるとき、追加のコンパイラステージは、例えばデバッグ情報２２４などのデバッグ情報も生成することができる。
【００３０】
デバッグ情報マッパ２０６は、マルチステージコンパイラ２０１のコンパイル状態で生成されたデバッグ情報を受信することができる。例えば、デバッグ情報マッパ２０６は、デバッグ情報２２１、２２２、２２３、２２４（存在するとき）などを受信することができる。デバッグ情報マッパ２０６は、２２１、２２２、２２３、２２４（存在するとき）などを統合されたデバッグ情報２２６に融合することができる。統合されたデバッグ情報２２６は、ソースコード２１１命令と実行可能コード２１４命令との間を直接的にマッピングし、ソースコード２１１シンボルと実行可能コード２１４シンボルとの間を直接的にマッピングする。したがって、統合されたデバッグ情報２２６を使用するとき、ソースコード２１１をより効率的にデバッグすることができる。
【００３１】
次に図１を参照すると、図１は、異なるコンパイラステージからのデバッグ情報を融合することを容易にする例示的コンピュータアーキテクチャ１００を示す。図示するように、コンピュータアーキテクチャ１００は、マルチステージコンパイラ１０１およびデバッグ情報マッパ１０６を含む。マルチステージコンパイラ１０１は、コンパイラステージ１０２およびコンパイラステージ１０３をさらに含む。一般には、マルチステージコンパイラ１０１は、入力ソースコードを受信し、入力ソースコードを実行可能コードにコンパイルすることができる。コンパイル中に、コンパイラステージ１０２および１０３のそれぞれは、デバッグ情報を生成することができる。
【００３２】
図３Ａ−Ｃに、異なるコンパイラステージからのデバッグ情報を融合する例示的方法３００の流れ図を示す。コンピュータアーキテクチャ１００の構成要素およびデータに関して方法３００を説明する。
【００３３】
第１のコンパイルステージでは、方法３００は、第１のコードにアクセスする動作を含み、第１のコードは、第１のフォーマットの第１の命令および第１のシンボルを含む（動作３０１）。例えば、コンパイラステージ１０２はソースコード１１１にアクセスすることができる。ソースコード１１１は、第１のフォーマット（例えば、Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ＋＋（「ＤＰＣ＋＋」））の第１の命令および第１のシンボルを含むことができる。
【００３４】
方法３００は、第１のコードを第２のコードに翻訳する動作を含む（動作３０２）。例えば、コンパイラステージ１０２は、ソースコード１１１を中間コード１１２に翻訳することができる。動作３０２は、第１の命令および第１のシンボルを、第２のフォーマットの対応する第２の命令および第２のシンボルに変換する動作を含み、第２のフォーマットは第１のフォーマットとは異なる（動作３０３）。例えば、コンパイラステージ１０２は、ソースコード１１１内の命令およびシンボルを、中間コード１１２内の対応する命令およびシンボルに変換することができる。中間コード１１２のフォーマット（例えば、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｅｒ  Ｌａｎｇｕａｇｅ（「ＨＬＳＬ」）ソースコード）は、ソースコード１１１の構成（例えば、ＤＰＣ＋＋）とは異なる可能性がある。
【００３５】
動作３０２は、第１のデバッグ情報を生成する動作を含み、第１のデバッグ情報は、第１の命令内の各命令を、第２の命令内の対応する命令にマッピングし、第１のシンボル内の各シンボルを、第２のシンボル内の対応するシンボルにマッピングする（動作３０４）。例えば、コンパイラステージ１０２はデバッグ情報１２１を生成することができる。デバッグ情報１２１は、ソースコード１１１内の各命令を、中間コード１１２内の対応する命令にマッピングする。例えば、命令マッピング１３１は、ソースコード１１１の行７を中間コード１１２の行１２にマッピングする。デバッグ情報１２１はまた、ソースコード１１１内の各シンボルを中間コード１１２内の対応するシンボルにマッピングする。例えば、シンボルマッピング１３２は、ソースコード１１１のシンボルｘを、中間コード１１２のシンボル「ｖａｒ＿５」にマッピングする。
【００３６】
第２のコンパイルステージでは、方法３００は、第２のコードにアクセスする動作を含む（動作３０５）。例えば、コンパイラステージ１０３は中間コード１１２（例えば、ＨＬＳＬソースコード）にアクセスすることができる。
【００３７】
方法３００は、第２のコードを第３のコードに翻訳する動作を含む（動作３０６）。例えば、コンパイラステージ１０３は、中間コード１１２を実行可能コード１１３に翻訳することができる。動作３０６は、第２の命令および第２のシンボルを、第３のフォーマットの対応する第３の命令および第３のシンボルに変換する動作を含み、第３のフォーマットは第１のフォーマットおよび第２のフォーマットとは異なる（動作３０７）。例えば、コンパイラステージ１０３は、中間コード１１２内の命令およびシンボルを、実行可能コード１１３内の対応する命令およびシンボルに変換することができる。実行可能コード１１３のフォーマット（例えば、ＨＬＳＬバイトコード）は、ソースコード１１１（例えば、ＤＰＣ＋＋）および中間コード１１２（例えば、ＨＬＳＬソースコード）のフォーマットとは異なる可能性がある。
【００３８】
動作３０６は、第２のデバッグ情報を生成する動作を含み、第２のデバッグ情報は、第２の命令内の各命令を、第３の命令内の対応する命令にマッピングし、第２のシンボル内の各シンボルを、第３のシンボル内の対応するシンボルにマッピングする（動作３０８）。例えば、コンパイラステージ１０３は、統合されたデバッグ情報１２２を生成することができる。統合されたデバッグ情報１２２は、中間コード１１２内の各命令を、実行可能コード１１３内の対応する命令にマッピングする。例えば、命令マッピング１３３は、中間コード１１２の行１２を実行可能コード１１３の命令ｉｄ  ７にマッピングする。統合されたデバッグ情報１２３はまた、中間コード１１２内の各シンボルを、実行可能コード１１３内の対応するシンボルにマッピングする。例えば、シンボルマッピング１３４は、中間コード１１２のシンボルｖａｒ＿５を実行可能コード１１３のレジスタ＠ｒ３にマッピングする。
【００３９】
方法３００は、第１のデバッグ情報および第２のデバッグ情報を第３のデバッグ情報に融合する動作を含み、第３のデバッグ情報は、第１の命令を第３の命令に直接的にマッピングし、第１のシンボルを第３のシンボルに直接的にマッピングする（動作３０９）。例えば、デバッグマッパ１０６は、デバッグ情報１２１およびデバッグ情報１２２を統合されたデバッグ情報１２３に融合することができる。統合されたデバッグ情報１２３は、ソースコード１１１内の命令と、実行可能コード１１３内の命令との間を直接的にマッピングする。統合されたデバッグ情報１２３はまた、ソースコード１１１内のシンボルと、実行可能コード１１３内のシンボルとの間で直接的にマッピングする。
【００４０】
第１の命令および第１のシンボルのそれぞれについて、動作３０９は、第１のデバッグ情報内から、第１の命令または第１のシンボルに対応する第２の命令または第２のシンボルを識別する動作を含む（動作３１０）。例えば、デバッグマッパ１０６は、中間コード１１２の行１２がソースコード１１１の行７に対応することを識別することができる。同様に、デバッグマッパ１０６は、中間コード１１２のシンボルｖａｒ＿５がソースコード１１１のシンボルｘに対応することを識別することができる。
【００４１】
第１の命令および第１のシンボルのそれぞれについて、動作３０９は、第２のデバッグ情報内から、識別した第２の命令または第２のシンボルに対応する第３の命令または第３のシンボルを識別する動作を含む（動作３１１）。例えば、デバッグマッパ１０６は、実行可能コード１１３の命令ｉｄ  ７が中間コード１１２の行１２に対応することを識別することができる。同様に、デバッグマッパ１０６は、実行可能コード１３３のレジスタ＠ｒ３が中間コード１１２のシンボルｖａｒ＿５に対応することを識別することができる。
【００４２】
第１の命令および第１のシンボルのそれぞれについて、動作３０９は、第１の命令または第１のシンボルを、識別した対応する第３の命令または第３のシンボルに直接的にマッピングする動作を含む（動作３１２）。例えば、デバッグマッパ１０６は、命令マッピング１３６を構築して、ソースコード１１１の行７と実行可能コード１１３の命令ｉｄ  ７との間を直接的にマッピングすることができる。同様に、デバッグマッパは、シンボルマッピング１３７を構築して、ソースコード１１１のシンボルｘと、実行可能コード１１３のレジスタ＠ｒ３との間を直接的にマッピングすることができる。第１の命令および第１のシンボルのそれぞれについて、動作３０９は、第１の命令または第１のシンボルの、識別した対応する第３の命令または第３のシンボルへのマッピングを第３のデバッグ情報に格納する動作を含む（動作３１３）。例えば、デバッグマッパ１０６は、命令マッピング１３６およびシンボルマッピング１３７を、統合されたデバッグ情報１２３に格納することができる。
【００４３】
次いで、統合されたデバッグ情報１２３をデバッグモジュール（図示せず）で使用して、ソースコード１１１のデバッギングを支援することができる。
【００４４】
より具体的に、本発明のいくつかの実施形態は、ＤＰＣ＋＋コードを、画像処理装置（「ＧＰＵ」）で実行されるＨＬＳＬバイトコードにコンパイルすることに関する。第１のコンパイルステージが、すべての各ＤＰＣ＋＋  ｆｏｒａｌｌコールサイトに対応する平坦化されたＨＬＳＬソースレベル計算シェーダ（ｆｌａｔｔｅｎｅｄ  ＨＬＳＬ  ｓｏｕｒｃｅ  ｌｅｖｅｌ  ｃｏｍｐｕｔｅｒ  ｓｈａｄｅｒ）を生成する。第２のコンパイルステージが、ＨＬＳＬコンパイラを起動して、生成したＨＬＳＬソースレベル計算シェーダに対応するＨＬＳＬバイトコードを生成する。その後で、ｆｏｒａｌｌコールサイトで各カーネル呼出しについて生成したバイトコードが、コンパイラが生成したＰＥ（ｐｏｒｔａｂｌｅ  ｅｘｅｃｕｔａｂｌｅ）実行可能ファイルのテキストセグメント内に格納される。
【００４５】
各コンパイルステージで、シンボリックマッピングのセットが生成される。シンボリックマッピングは、そのコンパイルステージの一部として実施された翻訳を表す。第１のコンパイルステージは、ＤＰＣ＋＋ソースシンボルと、生成したＨＬＳＬソースコードシンボルとの間のマッピングを定義する。第２のコンパイルステージは、ＨＬＳＬソースコードシンボルと、最終的なＨＬＳＬバイトコード内の対応する位置（バイトコードアドレス、レジスタ）との間のマッピングを定義する。
【００４６】
デバッグ効率およびメモリフットプリントの削減を促進するために、以下の理由で、ＤＰＣ＋＋ソースシンボルと最終的なＨＬＳＬバイトコードとの間の直接的マッピングを与える単一の記録のセットにシンボリックデバッグ情報を融合することができる。単一のマッピングのセットは、コンパイラが、（ＰＥ実行可能ファイルに格納される）ＨＬＳＬバイトコードブロブから中間ＨＬＳＬ−バイトコードシンボリックマッピング情報（ｉｎｔｅｒｍｅｄｉａｔｅ  ＨＬＳＬ  ｔｏ  ｂｙｔｅｃｏｄｅ  ｓｙｍｂｏｌｉｃ  ｍａｐｐｉｎｇ  ｉｎｆｏｒｍａｔｉｏｎ）を取り除くことを可能にし、したがって実行可能ファイルのメモリフットプリントが削減される。さらに、単一のシンボリックデバッグ情報記録のセットは、（ＤＰＣ＋＋ソースからＨＬＳＬソースへのマッピングと、その後に続くＨＬＳＬソース−バイトコードマッピングの２レベルマッピング、およびその逆の代わりに）ソースシンボルおよび位置とＨＬＳＬバイトコードアドレスおよびレジスタとの間の直接的マッピングを可能にすることにより、ＧＰＵデバッガでのＤＰＣ＋＋シンボル分解の単純化と促進をどちらも行う。
【００４７】
例えば、第１のコンパイラステージを使用して、例示的ＤＰＣ＋＋コード
void int_add_kernel(...)
{
...
c=a+b; // 行１１
}
を、例示的ＨＬＳＬソースコード
void hlsl_int_add_kernel(...)
{
...
var_2=var_1+var_0; // 行２４
}
に翻訳することができる。
【００４８】
その後で、第２のコンパイラステージが、例示的ＨＬＳＬソースコードを例示的ＨＬＳＬバイトコードにコンパイルする。
@r2=@r1+@r0 // 命令索引５
【００４９】
コンパイラバックエンドでＨＬＳＬソースコードを生成するとき、コードタプルおよびシンボルからＨＬＳＬソース位置およびシンボル名へのマッピングを、例えばプログラムデータベース（ＰＤＢ）記録などの何らかの内部データ構造に格納することができる。例えば、第１のコンパイラステージは、ＤＰＣ＋＋ソースコード命令およびシンボルをＨＬＳＬソースコード命令およびシンボルにマッピングする第１の内部データ構造を生成することができる。
DPC++ "line 11"->HLSL "line 24"
DPC++ symbol"a"->HLSL symbol "var_0"
DPC++ symbol"b"->HLSL symbol "var l"
DPC++ symbol"c"->HLSL symbol "var_2"
【００５０】
その後で、第２のコンパイラステージは、ＨＬＳＬソースコード命令およびシンボルをＨＬＳＬバイトコードにマッピングする第２の内部データ構造を生成することができる。
HLSL "line 24"->Bytecode "instruction id 5"
HLSL symbol"var_0"->Bytecode register "@r0"
HLSL symbol"var_l"->Bytecode register "@r1"
HLSL symbol"var_2"->Bytecode register "@r2"
【００５１】
リーダ構成要素を実装して、第２の内部データ構造を読み取り、ＨＬＳＬソース位置およびシンボルをバイトコードアドレスおよびレジスタに分解することができる。次に、第１の内部データ構造を使用して、ＤＰＣ＋＋ソース位置およびシンボルとＨＬＳＬバイトコードアドレスおよびレジスタ名との間の直接的マッピングを生成する。直接的マッピングを、例えばＰＤＢ記録の形などで第３の内部データ構造に格納することができる。
DPC++ "line 11"->Bytecode "instruction id 5"
DPC++ symbol"a"->Bytecode register"@r0"
DPC++ symbol"b"->Bytecode register"@r1"
DPC++ symbol"c"->Bytecode register"@r2"
【００５２】
本発明の精神または不可欠な特徴から逸脱することなく他の特定の形態で本発明を実施することができる。記載の実施形態は、すべての点で、限定的なものではなく、例示的なものとみなされるべきである。したがって、本発明の範囲は、上記の説明ではなく添付の特許請求の範囲によって示される。特許請求の範囲と等価な意味および範囲の中にあるすべての変更は、その範囲内に包含されるべきである。
【図１】
2014503902.tif 000003
【図２】
2014503902.tif 000004
【図３Ａ】
2014503902.tif 000005
【図３Ｂ】
2014503902.tif 000006
【図３Ｃ】
2014503902.tif 000007
【国際調査報告】
2014503902.tif 000008
2014503902.tif 000009