KR20140001953A - 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 방법 - Google Patents

상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 방법 Download PDF

Info

Publication number
KR20140001953A
KR20140001953A KR1020137015664A KR20137015664A KR20140001953A KR 20140001953 A KR20140001953 A KR 20140001953A KR 1020137015664 A KR1020137015664 A KR 1020137015664A KR 20137015664 A KR20137015664 A KR 20137015664A KR 20140001953 A KR20140001953 A KR 20140001953A
Authority
KR
South Korea
Prior art keywords
code
symbol
instruction
debug information
stage
Prior art date
Application number
KR1020137015664A
Other languages
English (en)
Inventor
아미트 쿠마르 아가왈
트래비스 폴 도쉘
폴 메이비
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20140001953A publication Critical patent/KR20140001953A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하기 위한 방법, 시스템 및 컴퓨터 프로그램 제품에 관한 것이다. 본 발명의 실시예는 코드 생성 처리에서 복수의 상이한 컴파일 스테이지로부터의 디버그 정보를 단일 세트의 디버그 정보로 융합한다. 단일 세트의 디버그 정보는 제 1 컴파일 스테이지에 입력된 명령어 및 심볼(예를 들면, 소스 코드)을 최종 컴파일 스테이지로부터 출력된 명령어 및 심볼(예를 들면, 기계 코드)로 직접 맵핑한다.

Description

상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 방법{FUSING DEBUG INFORMATION FROM DIFFERENT COMPILER STAGES}
컴퓨터 시스템 및 연관 기술은 사회에 많은 영향을 주었다. 또한 정보를 처리하는 컴퓨터 시스템의 능력은 우리가 살아가고 일하는 방식을 바꾸어 놓았다. 현재 컴퓨터 시스템은 컴퓨터 시스템이 등장하기 이전 수작업으로 수행되던 주업무(host task)(예를 들면, 워드 프로세싱, 일정관리, 회계(accounting) 등)를 통상적으로 수행한다. 보다 최근에, 컴퓨터 시스템들은 서로 결합되고 또한 다른 전자 장치에 결합되어 유선 및 무선 컴퓨터 네트워크를 형성하고 이를 통해서 컴퓨터 시스템과 기타 전자 장치들은 전자 데이터를 전달할 수 있다. 따라서 많은 계산 업무(task) 작업(performance)이 수많은 상이한 컴퓨터 시스템 및/또는 수많은 상이한 컴퓨팅 환경에 걸쳐 분배된다.
계산 업무를 수행하기 위한 소프트웨어 애플리케이션을 개발하기 위해, 개발자는 통상적으로 C++, 비주얼 베이직(Visual Basic) 등의 형식으로 소스 코드를 작성하고 소스 코드는 소프트웨어 애플리케이션의 원하는 기능을 발휘한다. 이어서 소스 코드는 실행가능한 코드로 컴파일링될 수 있다(또는 대안적으로 실행 시에 해석될 수 있음). 소스 코드가 컴파일(compilation)되는 동안, 컴파일러는 소스 코드 명령어(instructions)를 기계 명령어(machine instructions)(예를 들면, x86 명령어)로 변환하는데, 이들 기계 명령어는 컴퓨터 시스템에서 직접적으로 실행가능하다. 실행가능한 코드가 컴퓨터 시스템에서 실행되어 원하는 기능이 구현된다. 많은 컴파일러는 또한 디버그 정보를 출력하는데, 디버그 정보는 원하는 기능으로부터 벗어난(deviation) 소스 프로그램 내에서의 결함(defect)을 개발자가 찾아내고 수정하는 데 도움을 줄 수 있다.
일부 환경에서, 단일(single) 스테이지 컴파일러는 소스 코드를 실행가능한 코드로 컴파일하는 데 사용된다. 예를 들면, C++ 컴파일러는 C++ 소스 코드를 퍼스널 컴퓨터의 프로세서에 실행될 수 있는 실행가능한 코드로 직접적으로 컴파일할 수 있다. 다른 환경에서, 다중(multi) 스테이지 컴파일러가 소스 코드를 실행가능한 코드로 컴파일하는 데 사용된다. 다중 스테이지 컴파일러는 여러 개의 상이한 컴파일 스테이지(compile stage)를 포함할 수 있다. 각각의 컴파일 스테이지는 수신된 소스 코드를 (특정 프로세서에 타겟팅된) 기계 명령어로 점차 컴파일하기 위해 약간의 번역(translation)과 변환(conversion) 등을 수행할 수 있다.
더 특정된 환경에서, 데이터 병렬 C++((Data Parallel C++: "DPC++") 소스 코드는 원하는 기능을 구현하기 위해 중앙 처리 장치("CPU")와 병렬로 그래픽 프로세서 유닛("GPU")을 이용하도록 개발된다. 즉, 일부 소스 코드는 CPU를 타겟팅 하여 작성되고, 다른 소스 코드는 GPU를 타겟팅하기 위해 작성된다. GPU를 타겟팅한 소스 코드에 있어서, 다중 스테이지 컴파일러는 데이터 병렬 C++("DPC++") 소스 코드를 GPU에서 실행가능한 하이 레벨 세이더 랭귀지(High Level Shader Language: "HLSL") 바이트코드로 컴파일하는 데 이용된다. 제 1 컴파일 스테이지는 DPC++ 소스 코드를 HLSL 소스 코드로 번역한다. 이어서 제 2 컴파일 스테이지는 HLSL 소스 코드를 GPU에서의 실행을 위한 HLSL 바이트코드로 변환시킨다. 다중 스테이지 컴파일러의 사용은 DPC++ 개발자가 HLSL 지식을 가지지 않고 GPU용 코드를 개발하도록 해준다.
다중 스테이지 컴파일러가 사용될 때, 각각의 컴파일 스테이지는 입력 포맷에서의 명령어(instructions) 및 심볼(symbols)과, 출력 포맷에서의 명령어와 심볼 사이를 맵핑하는 디버그 정보를 통상적으로 출력한다. 예를 들면, 제 1 컴파일 스테이지는 소스 코드 명령어 및 심볼과, 중간 코드(intermediate code)(예를 들면, 제 2 소스 코드, 중간 언어 코드 등) 명령어 및 심볼 사이를 맵핑하는 디버그 정보를 출력할 수 있다. 제 2 컴파일 스테이지는 중간 코드 명령어 및 심볼과, 실행가능한 코드 명령어 및 심볼 사이를 맵핑하는 디버그 정보를 출력할 수 있다. 이전 예로 되돌아가, 제 1 컴파일 스테이지는 DPC++ 소스 코드 명령어 및 심볼과, HLSL 소스 코드 명령어 및 심볼 사이를 맵핑하는 디버그 정보를 출력할 수 있다. 제 2 컴파일 스테이지는 HLSL 소스 코드 명령어 및 심볼과, HLSL 바이트코드 명령어와 심볼 사이를 맵핑하는 디버그 정보를 출력할 수 있다.
따라서, 다중 스테이지 컴파일러를 사용하여 컴파일되는 애플리케이션을 디버깅하기 위해서, 개발자는 소스 코드 명령어 또는 심볼을 실행가능한 코드 명령어 또는 심볼로 맵핑하기 위해 각각의 컴파일 스테이지로부터 디버그 정보의 세트를 활용해야만 한다. 여러 세트의 디버그 정보를 처리하는 것은 자원(resource) 집약적이고, 자원 이용도는 컴파일 스테이지가 증가하는 수만큼 증가된다.
본 발명은 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하기 위한 방법, 시스템 및 컴퓨터 프로그램 제품에 관한 것이다. 제 1 컴파일 스테이지는 제 1 코드를 액세스한다. 제 1 코드는 제 1 포맷의 제 1 명령어들과 제 1 심볼들을 포함한다. 제 1 코드는 제 2 코드로 번역된다. 제 1 코드를 번역하는 것은 제 1 명령어들과 제 1 심볼들을 제 2 포맷의 대응하는 제 2 명령어들과 제 2 심볼들로 변환하는 것을 포함한다. 제 2 포맷은 제 1 포맷과 상이하다. 제 1 코드를 번역하는 것은 또한 제 1 디버그 정보를 생성하는 것을 포함한다. 제 1 디버그 정보는 제 1 명령어들 내의 각각의 명령어를 제 2 명령어들 내의 대응하는 명령어로 맵핑하고 제 1 심볼들 내의 각각의 심볼을 제 2 심볼들 내의 대응하는 심볼로 맵핑한다.
제 2 컴파일 스테이지는 제 2 코드를 액세스한다. 제 2 코드는 제 3 코드로 번역된다. 제 2 코드를 번역하는 것은 제 2 명령어들과 제 2 심볼들을 제 3 포맷의 제 3 명령어들과 제 3 심볼들로 변환하는 것을 포함한다. 제 3 포맷은 제 1 포맷 그리고 제 2 포맷과 상이하다. 제 2 코드를 번역하는 것은 또한 제 2 디버그 정보를 생성하는 것을 포함한다. 제 2 디버그 정보는 제 2 명령어들 내의 각각의 명령어를 제 3 명령어들 내의 대응하는 명령어로 맵핑하고 제 2 심볼들 내의 각각의 심볼을 제 3 심볼들 내의 대응하는 심볼로 맵핑한다.
제 1 디버그 정보와 제 2 디버그 정보는 통합된 제 3 디버그 정보로 융합된다. 통합된 제 3 디버그 정보는 제 1 명령어들을 제 3 명령어들로 직접적으로 맵핑하고 제 1 심볼들을 제 3 심볼들로 직접적으로 맵핑한다. 제 1 명령어들과 제 1 심볼들 각각에 있어서, 제 1 명령어 또는 제 1 심볼에 대응하는 제 2 명령어 또는 제 2 심볼은 제 1 디버그 정보 내로부터 식별된다. 식별된 제 2 명령어 또는 제 2 심볼에 대응하는 제 3 명령어 또는 제 3 심볼은 제 2 디버그 정보 내로부터 식별된다. 제 1 명령어 또는 제 1 심볼은 식별된 대응하는 제 3 명령어 또는 제 3 심볼로 직접 맵핑된다. 제 1 명령어 또는 제 1 심볼로부터 식별된 대응하는 제 3 명령어 또는 제 3 심볼로의 맵핑은 통합된 제 3 디버그 정보에 저장된다.
전술한 요약된 설명은 본 발명의 개념을 단순화된 형태로 소개하기 위해 제공된 것으로 이하 발명을 실시하기 위한 구체적인 내용에서 더 상세히 기술하도록 한다. 전술한 요약된 설명은 특허청구범위의 청구 대상의 주된 특징 또는 핵심적 특징을 확인하기 위한 의도로 작성된 것은 아니며 청구 대상의 범위를 결정하는 데 보조적 수단으로서 의도된 것도 아니다.
본 발명의 추가적인 특징과 이점을 발명을 실시하기 위한 구체적인 내용에서 설명하고, 발명의 일부분은 그 설명을 통해 자명해지거나 또는 발명의 실시를 통해 이해될 수 있다. 본 발명의 특징 및 이점은 첨부된 특허청구범위에서 특정하게 지시된 수단과 그 조합들에 의해 구현되거나 얻어질 수 있다. 본 발명의 이런 특징을 포함한 다른 특징들도 이하의 설명과 첨부된 특허청구범위에 의해 보다 자명해지거나 이하에 설명한 바와 같은 본 발명의 실시에 의해 이해될 것이다.
본 발명에서 전술한 이점과 특징 또는 다른 이점과 특징이 얻어지는 방식을 설명하기 위해, 위에서 간략하게 기술한 본 발명을 첨부된 도면과 그 특정 실시예를 참조하여 보다 구체적으로 이하에 설명하도록 한다. 첨부된 도면은 본 발명의 통상적인 실시예를 예시하기 위한 것으로 본 발명이 이에 제한되는 것은 아니며, 이하 첨부된 도면을 이용하여 본 발명의 추가적인 특징과 세부내용을 설명하도록 한다.
도 1은 상이한 컴파일러 스테이지로부터 디버그 정보를 융합하는 것에 기여하는 예시적인 컴퓨터 구조(architecture)를 도시한 도면이고;
도 2는 상이한 컴파일러 스테이지로부터 디버그 정보를 융합하는 것에 기여하는 다른 예시적인 컴퓨터 구조를 도시한 도면이고;
도 3a 내지 도 3c는 상이한 컴파일러 스테이지로부터 디버그 정보를 융합하기 위한 예시적인 방법을 도시한 흐름도이다.
본 발명은 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하기 위한 방법, 시스템 및 컴퓨터 프로그램 제품에 관한 것이다. 제 1 컴파일 스테이지는 제 1 코드를 액세스한다. 제 1 코드는 제 1 포맷의 제 1 명령어들과 제 1 심볼들을 포함한다. 제 1 코드는 제 2 코드로 번역된다. 제 1 코드를 번역하는 것은 제 1 명령어들과 제 1 심볼들을 제 2 포맷의 대응하는 제 2 명령어들과 제 2 심볼들로 변환하는 것을 포함한다. 제 2 포맷은 제 1 포맷과 상이하다. 제 1 코드를 번역하는 것은 또한 제 1 디버그 정보를 생성하는 것을 포함한다. 제 1 디버그 정보는 제 1 명령어들 내의 각각의 명령어를 제 2 명령어들 내의 대응하는 명령어로 맵핑하고, 제 1 심볼들 내의 각각의 심볼을 제 2 심볼들 내의 대응하는 심볼로 맵핑한다.
제 2 컴파일 스테이지는 제 2 코드를 액세스한다. 제 2 코드는 제 3 코드로 번역된다. 제 2 코드를 번역하는 것은 제 2 명령어들과 제 2 심볼들을 제 3 포맷의 제 3 명령어들과 제 3 심볼들로 변환하는 것을 포함한다. 제 3 포맷은 제 1 포맷 그리고 제 2 포맷과 상이하다. 제 2 코드를 번역하는 것은 또한 제 2 디버그 정보를 생성하는 것을 포함한다. 제 2 디버그 정보는 제 2 명령어들 내의 각각의 명령어를 제 3 명령어들 내의 대응하는 명령어로 맵핑하고, 제 2 심볼들 내의 각각의 심볼을 제 3 심볼들 내의 대응하는 심볼로 맵핑한다.
제 1 디버그 정보와 제 2 디버그 정보는 통합된 제 3 디버그 정보로 융합된다. 통합된 제 3 디버그 정보는 제 1 명령어들을 제 3 명령어들로 직접적으로 맵핑하고, 제 1 심볼들을 제 3 심볼들로 직접적으로 맵핑한다. 제 1 명령어들과 제 1 심볼들 각각에 있어서, 제 1 명령어 또는 제 1 심볼에 대응하는 제 2 명령어 또는 제 2 심볼은 제 1 디버그 정보 내로부터 식별된다. 식별된 제 2 명령어 또는 제 2 심볼에 대응하는 제 3 명령어 또는 제 3 심볼은 제 2 디버그 정보 내로부터 식별된다. 제 1 명령어 또는 제 1 심볼은 식별된 대응하는 제 3 명령어 또는 제 3 심볼로 직접 맵핑된다. 제 1 명령어 또는 제 1 심볼로부터 식별된 대응하는 제 3 명령어 또는 제 3 심볼로의 맵핑은 통합된 제 3 디버그 정보에 저장된다.
본 발명의 실시예는 특정용도 또는 범용 컴퓨터를 포함하거나 이용하는데, 컴퓨터는 예를 들면 하나 이상의 프로세서와 시스템 메모리와 같은 컴퓨터 하드웨어를 포함하고, 이에 대해서는 후술하여 상세히 설명하도록 한다. 본 발명의 범위 내의 실시예는 또한 물리적 그리고 기타 컴퓨터 판독가능한 매체를 포함할 수 있으며, 이들 매체는 컴퓨터 실행가능한 명령어 및/또는 데이터 구조(data structure)를 운반하거나 저장한다. 이러한 컴퓨터 판독가능한 매체는 범용 또는 특수 목적 컴퓨터 시스템에 의해 액세스될 수 있다. 컴퓨터 판독가능한 명령어가 저장된 컴퓨터 판독가능 매체는 컴퓨터 저장(storage) 매체(장치)이다. 컴퓨터 실행가능한 명령어를 운반하는 컴퓨터 판독가능 매체는 전송(transmission) 매체이다. 따라서 본 발명의 실시예는 컴퓨터 저장 매체(장치)와 전송 매체의 적어도 2개의 완전히 상이한 종류의 컴퓨터 판독가능 매체를 포함할 수 있는데, 이는 예시적인 것으로 본 발명이 이에 제한되는 것은 아니다.
컴퓨터 저장 매체(장치)는 RAM, ROM, EEPROM, CD-ROM, DVD 또는 기타 광 디스크 스토리지, 자기 디스크 스토리지 또는 기타 자기 저장 장치, 플래시 장치, 썸 드라이브(thumb drive), 또는 원하는 프로그램 코드 수단을, 범용 또는 특수용도의 컴퓨터에 의해 액세스가능한 컴퓨터 실행가능한 명령어 또는 데이터 구조로 저장하는 데 이용될 수 있는 기타 매체를 포함한다.
"네트워크는" 컴퓨터 시스템 및/또는 모듈 및/또는 기타 전자 장치 사이에서 전자 데이터의 전송을 가능하게 하는 하나 이상의 데이터 링크로 규정된다. 정보가 컴퓨터에 네트워크 또는 다른 통신 접속(유선(hardwired), 무선 또는 유선과 무선의 조합 중 어느 하나)을 통해 컴퓨터로 전송되거나 제공될 때, 컴퓨터는 이 접속을 전송 매체로서 적절히 간주한다. 전송 매체는 원하는 프로그램 코드 수단을, 범용 또는 특수용도의 컴퓨터에 의해 액세스가능한 컴퓨터 실행가능한 명령어 또는 데이터 구조로 운송하는 데 이용될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 전술한 것의 조합 역시 본 발명에 따른 컴퓨터 판독가능한 매체의 범위에 포함된다.
또한, 다양한 컴퓨터 시스템 구성요소에 도달시에, 컴퓨터 실행가능한 명령어 또는 데이터 구조의 형태의 프로그램 코드 수단은 전송 매체로부터 컴퓨터 저장 매체(장치)로(또는 그 역으로) 자동적으로 전달될 수 있다. 예를 들면, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행가능한 명령어 또는 데이터 구조는 네트워크 인터페이스 모듈(예를 들면, "NIC") 내의 RAM 내에 버퍼링되고 이어서 최종적으로 컴퓨터 시스템의 RAM 및/또는 컴퓨터 시스템에서의 비휘발성 저장 매체(장치)로 전달된다. 따라서, 컴퓨터 저장 매체(장치)는 또한 전송 매체를 (주로) 이용하는 컴퓨터 시스템 구성요소에 포함될 수 있는 것으로 이해되어야 한다.
컴퓨터 실행가능한 명령어는, 예를 들면 프로세서에서 실행 시 범용 컴퓨터, 특수용도 컴퓨터 또는 특수용도 처리 장치로 하여금 특정한 기능 또는 기능의 그룹을 수행하도록 하는 명령어 및 데이터를 포함한다. 컴퓨터 실행가능한 명령어는 예를 들면 기계 언어 또는 소스 코드와 같은 2진(binaries), 중간 포맷 명령어일 수 있다. 기술적 요지가 구조적 특징 및/또는 방법론적인 액트(Acts)에 특정되어 설명된다 하더라도, 첨부된 특허 청구항에 규정된 기술 요지가 반드시 전술한 특징 또는 액트로 제한되지는 않음을 이해해야 한다. 그것보다 전술한 특징 및 액트는 청구항의 발명을 구현하기 위한 예시적인 형태로 설명된다.
당업자에게 본 발명이 퍼스널 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 메시지 프로세서, 핸드-헬드 장치, 다중 프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능한 소비자 전자 제품, 네트워크 PC, 미니 컴퓨터, 메인 프레임 컴퓨터, 이동 전화기, PDA, 페이저, 라우터, 스위치 등을 포함하는 많은 종류의 컴퓨터 시스템 구성을 지닌 네트워크 컴퓨팅 환경에서 실시될 수 있다는 것은 자명하다. 또한 본 발명은 태스크를 수행하는 로컬(local) 및 리모트(remote) 컴퓨터 시스템이 네트워크를 통하여 링크되는(유선 데이터 링크, 무선 데이터 링크, 유선과 무선 데이터 링크의 조합 중 하나) 이산 시스템(distributed system) 환경에서 실행될 수도 있다. 이산 시스템 환경에서 프로그램 모듈은 로컬 및 리모트 메모리 저장 장치 모두에 위치될 수 있다.
일부 실시예에서, 소스 코드는 바람직한 기능을 구현하기 위해 중앙 처리 유니트("CPU")와 병렬로 그래픽 프로세서 유니트("GPU")를 이용하기 위해 개발된다. 즉, 일부 소스 코드는 CPU를 타겟으로 작성되고 다른 소스 코드는 GPU를 타겟으로 작성된다. GPU를 타겟으로 한 소스 코드에 있어서, 다중 스테이지 컴파일러는 소스 코드를 GPU에서 실행가능한 코드로 컴파일하기 위해 이용될 수 있다.
일반적으로, 본 발명의 실시예는 코드 생성 처리에 있어서 복수의 상이한 컴파일 스테이지로부터의 디버그 정보를 디버그 정보의 단일 세트로 융합한다. 디버그 정보의 단일 세트는 제 1 컴퍼일 스테이지로 입력된 명령어 및 심볼(예를 들면, 소스 코드)과, 최종 컴파일 스테이지로부터 출력된 명령어 및 심볼(예를 들면, 기계 코드) 사이를 직접적으로 맵핑한다.
먼저 도 2를 참조하면, 도 2는 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합시키도록 기능하는 예시적인 컴퓨터 아키텍처(200)를 나타낸다. 컴퓨터 아키텍처(200)는 다중 스테이지 컴파일러(201)와 디버그 정보 맵퍼(206)를 포함한다. 다중 스테이지 컴파일러(201)는 컴파일러 스테이지(202, 203, 204 등)를 포함한 복수의 컴파일러 스테이지를 포함한다. 생략점(205)은 다중 스테이지 컴파일러(201)가 하나 이상의 추가적인 컴파일러 스테이지를 포함할 수 있음을 나타낸다. 각각의 도시된 구성요소는 예를 들면 근거리 영역 네트워크(LAN), 원거리 영역 네트워크(WAN), 심지어 인터넷과 같은 네트워크(또는 그 일부)를 통해 서로 연결될 수 있다. 따라서, 도시된 각각의 구성요소는 메시지 연계 데이터(message related data)를 생성하고, 네트워크를 통해 메시지 연계 데이터를 교환할 수 있다(예를 들면, 인터넷 프로토콜(IP) 데이터그램 및 IP 데이터그램을 이용하는 다른 상위층(higher layer) 프로토콜 - 예를 들면 전송 제어 프로토콜(TCP), 하이퍼텍스트 전송 프로토콜(HTTP), 단순 메일 전송 프로토콜(SMTP) 등).
소스 코드(211)(임의의 프로그래밍 언어로 가정됨)는, 다중 스테이지 컴파일러(201)로의 입력으로서 제공될 수 있다. 컴파일러 스테이지(202)는 소스 코드(211)를 수신할 수 있다. 컴파일러 스테이지(202)는 중간 코드(212)를 생성하기 위해 소스 코드(211)의 번역(translation), 변환(convert), 컴파일(compilation) 중 하나 이상을 수행할 수 있다. 번역, 변환, 컴파일 등의 일환으로서 컴파일러 스테이지(202)는 또한 디버그 정보(221)를 생성할 수 있다. 디버그 정보(221)는 소스 코드(211)에서의 명령어 및 심볼과, 중간 코드(212)에서의 명령어 및 코드 사이를 맵핑한다.
컴파일러 스테이지(203)는 중간 코드(212)를 수신할 수 있다. 컴파일러 스테이지(203)는 중간 코드(212)를 생성하기 위해 중간 코드(212)의 번역(translation), 변환(convert), 컴파일(compilation) 중 하나 이상을 수행할 수 있다. 번역, 변환, 컴파일 등의 일환으로서 컴파일러 스테이지(203)는 또한 디버그 정보(222)를 생성할 수 있다. 디버그 정보(222)는 중간 코드(213)에서의 명령어 및 심볼과, 중간 코드(214)에서의 명령어 및 코드 사이를 맵핑한다.
컴파일러 스테이지(204)는 중간 코드(213)를 수신할 수 있다. 컴파일러 스테이지(204)는 코드(예를 들면, 실행가능한 코드(214) 또는 다음 컴파일러 스테이지로 가기 위한 다른 중간 코드)를 더 생성하기 위해 중간 코드(213)의 번역(translation), 변환(convert), 컴파일(compilation) 중 하나 이상을 수행할 수 있다. 번역, 변환, 컴파일 등의 일환으로서 컴파일러 스테이지(204)는 또한 디버그 정보(223)를 생성할 수 있다. 디버그 정보(223)는 중간 코드(213)에서의 명령어 및 심볼과, 다른 코드에서의 명령어 및 심볼 사이를 맵핑한다. 상기 다른 코드가 실행가능한 코드(214)인 경우, 디버그 정보(223)는 중간 코드(213)에서의 명령어 및 심볼과, 실행가능한 코드(214)에서의 명령어 및 심볼 사이를 맵핑한다.
추가적 컴파일러 스테이지가 다중 스테이지 컴파일러(201)에 포함될 때, 이들 추가적인 컴파일러 스테이지는 또한 예를 들면 디버그 정보(224)와 같은 디버그 정보를 생성할 수 있다.
디버그 정보 맵퍼(mapper)(206)는 다중 스테이지 컴파일러(201)에서 생성된 디버그 정보를 수신할 수 있다. 예를 들면, 디버그 정보 맵퍼(206)는 디버그 정보(221, 222, 223, 224 등)를 수신할 수 있다(디버그 정보 존재 시). 디버그 정보 맵퍼(206)는 디버그 정보(221, 222, 223, 224 등)를 통합(consolidate) 디버그 정보(226)로 용융시킬 수 있다(디버그 정보 존재 시). 통합 디버그 정보(226)는 소스 코드(211) 명령어와 실행가능한 코드(214) 명령어 사이를 직접적으로 맵핑하고, 소스 코드(211) 심볼과 실행가능한 코드(214) 심볼 사이를 직접적으로 맵핑한다. 이와 같이, 소스 코드(11)는 통합 디버그 정보(226)를 이용할 경우 더욱 효율적으로 디버깅될 수 있다.
도 1을 참조하면, 도 1은 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 것을 용이하게 하기 위한 예시적인 컴퓨터 아키텍처(100)를 도시한 도면이다. 도시된 바와 같이, 컴퓨터 아키텍처(100)는 다중 스테이지 컴파일러(101)와 디버그 정보 맵퍼(106)를 포함한다. 다중 스테이지 컴파일러(101)는 컴파일러 스테이지(102)와 컴파일러 스테이지(103)를 더 포함한다. 일반적으로, 다중 스테이지 컴파일러(101)는 입력 소스 코드를 수신하고, 입력 소스 코드를 실행가능한 코드로 컴파일할 수 있다. 컴파일링 동안, 각각의 컴파일러 스테이지(102, 103)는 디버그 정보를 생성할 수 있다.
도 3a 내지 도 3c는 상이한 컴파일러 스테이지로부터의 디버그 정보를 윱합시키기 위한 방법(300)의 일례를 나타낸 흐름도이다. 방법(300)은 컴퓨터 아키텍처(100)의 구성요소와 데이터에 관해 설명될 것이다.
제 1 컴파일 스테이지에서, 방법(300)은 제 1 포맷의 제 1 명령어와 제 1 심볼을 포함하는 제 1 코드를 액세스하는 행위(act 또는 단계)를 포함한다(단계 301). 예를 들면, 컴파일러 스테이지(102)는 소스 코드(111)로 액세스할 수 있다. 소스 코드 (111)는 제 1 포맷(예를 들면, 데이터 병렬 C++(DPC++))의 제 1 명령어와 제 1 심볼을 포함할 수 있다.
방법(300)은 제 1 코드를 제 2 코드로 번역하는 행위(또는 단계)를 포함한다(단계 302). 예를 들면, 컴파일러 스테이지(102)는 소스 코드(111)를 중간 코드(112)로 번역할 수 있다. 단계(302)는 제 1 명령어 및 제 1 심볼을 제 2 포맷의 대응하는 제 2 명령어 및 제 2 심볼로 변환하는 단계를 포함하고, 제 2 포맷은 제 1 포맷과 상이하다(단계 303). 예를 들면, 컴파일러 스테이지(102)는 소스 코드(111)에서의 명령어와 심볼을 중간 코드(112)에서의 대응하는 명령어와 심볼로 변환할 수 있다. 중간 코드(112)의 포맷(예를 들면, 하이 레벨 세이더 랭귀지(High Level Shader Language:(HLSL) 소스 코드)는 소스 코드(111)(예를 들면, DPC++)의 포맷과 상이할 수 있다.
단계(302)는 제 1 디버그 정보를 생성하는 단계를 포함하고, 여기서 제 1 디버그 정보는 제 1 명령어들 내의 각각의 명령어를 제 2 명령어들 내의 대응하는 명령어로 맵핑하고, 제 1 심볼들 내의 각각의 심볼을 제 2 심볼 내의 대응하는 심볼로 맵핑한다(단계 304). 예를 들면, 컴파일러 스테이지(102)는 디버그 정보(121)를 생성할 수 있다. 디버그 정보(121)는 소스 코드(111)에서의 각각의 명령어를 중간 코드(112)에서의 대응하는 명령어로 맵핑한다. 예를 들면 명령어 맵핑(131)은 소스 코드(111)의 라인 7을 중간 코드(112)의 라인 12로 맵핑한다. 디버그 정보(121)는 또한 소스 코드(111)에서의 각각의 심볼을 중간 코드(112)에서의 대응하는 심볼로 맵핑한다. 예를 들면, 심볼 맵핑(132)은 소스 코드(111)의 심볼 x를 중간 코드(112)의 심볼 "var_5"로 맵핑한다.
제 2 컴파일 스테이지에서, 방법(300)은 제 2 코드로 액세스하는 단계를 포함한다(단계 305). 예를 들면, 컴파일러 스테이지(103)는 중간 코드(112)(예를 들면, HLSL 소스 코드)로 액세스할 수 있다.
방법(300)은 제 2 코드를 제 3 코드로 번역하는 단계를 포함한다. 예를 들면, 컴파일러 스테이지(103)는 중간 코드(112)를 실행가능한 코드(113)로 번역할 수 있다. 단계(306)는 제 2 명령어 및 제 2 심볼을 제 3 포맷의 대응하는 제 3 명령어 및 제 3 심볼로 변환하는 단계를 포함하고, 제 3 포맷은 제 1 포맷 및 제 2 포맷과 상이하다(단계 307). 예를 들면, 컴파일러 스테이지(103)는 중간 코드(112)에서의 명령어 및 심볼을 실행가능한 코드(113)에서의 대응하는 명령어 및 심볼로 변환할 수 있다. 실행가능한 코드(113)(예를 들면, HLSL 바이트코드)의 포맷은 소스 코드(111)(예를 들면, DPC++)와 중간 코드(112)(예를 들면, HLSL 소스 코드)의 포맷과 상이할 수 있다.
단계(306)는 제 2 디버그 정보를 생성하는 단계를 포함하고, 여기서 제 2 디버그 정보는 제 2 명령어들 내의 각각의 명령어를 제 3 명령어들 내의 대응하는 명령어로 맵핑하고, 제 2 심볼들 내의 각각의 심볼을 제 3 심볼들 내의 대응하는 심볼로 맵핑한다(단계 308). 예를 들면, 컴파일러 스테이지(103)는 통합 디버그 정보(123)를 생성할 수 있다. 통합 디버그 정보(123)는 중간 코드(112)에서의 각각의 명령어를 실행가능한 코드(113)에서의 대응하는 명령어로 맵핑한다. 예를 들면, 명령어 맵핑(133)은 중간 코드(112)의 라인 12를 실행가능한 코드(117)의 명령어 id 7로 맵핑한다. 통합 디버그 정보(123)는 또한 중간 코드(112)에서의 각각의 심볼을 실행가능한 코드(113)에서의 대응하는 심볼로 맵핑한다. 예를 들면, 심볼 맵핑(134)은 중간 코드의 심볼 var_5를 실행가능한 코드(113)의 레지스터 @r3로 맵핑한다.
방법(300)은 제 1 디버그 정보와 제 2 디버그 정보를 제 3 디버그 정보로 융합하는 단계를 포함하고, 여기서 제 3 디버그 정보는 제 1 명령어를 제 3 명령어로 직접적으로 맵핑하고, 제 1 심볼을 제 3 심볼로 직접적으로 맵핑한다(단계 309). 예를 들면, 디버그 맵퍼(106)는 디버그 정보(121)와 디버그 정보(122)를 통합 디버그 정보(123)로 융합시킬 수 있다. 통합 디버그 정보(123)는 소스 코드(111)에서의 명령어와 실행가능한 코드(113)에서의 명령어 사이를 직접적으로 맵핑한다. 통합 디버그 정보(123)는 또한 소스 코드(111)에서의 심볼과 실행가능한 코드(113)에서의 심볼 사이를 직접적으로 맵핑한다.
제 1 명령어와 제 1 심볼의 각각에 대해, 단계(309)는 제 1 디버그 정보 내로부터 제 1 명령어 또는 제 1 심볼에 대응하는 제 2 명령어 또는 제 2 심볼을 식별하는 단계(단계 310)를 포함한다. 예를 들면, 디버그 맵퍼(106)는 중간 코드(112)의 라인 12가 소스 코드(111)의 라인 7에 대응하는 것을 식별할 수 있다. 유사하게, 디버그 맵퍼(106)는 중간 코드(112)의 심볼 var_5가 소스 코드(111)의 심볼 x에 대응하는 것을 식별할 수 있다.
제 1 명령어와 제 1 심볼의 각각에 대해, 단계(309)는 제 2 디버그 정보 내로부터 제 2 명령어 또는 제 2 심볼에 대응하는 제 3 명령어 또는 제 3 심볼을 식별하는 단계(단계 311)를 포함한다. 예를 들면, 디버그 맵퍼(106)는 실행가능한 코드(113)의 명령어 id 7이 중간 코드(112)의 라인 12에 대응하는 것을 식별할 수 있다. 유사하게, 디버그 맵퍼(106)는 실행가능한 코드(113)의 레지스터 @r3가 중간 코드(112)의 심볼 var_5에 대응하는 것을 식별할 수 있다.
제 1 명령어와 제 1 심볼의 각각에 대해, 단계(309)는 제 1 명령어 또는 제 1 심볼을 식별된 대응하는 제 3 명령어 또는 제 3 심볼로 직접 맵핑하는 단계(단계 312)를 포함한다. 예를 들면, 디버그 맵퍼(106)는 소스 코드(111)의 라인 7과 실행가능한 코드(113)의 명령어 id 7 사이를 직접적으로 맵핑하기 위해 명령어 맵핑(136)을 공식화할 수 있다. 유사하게, 디버그 맵퍼(106)는 소스 코드(111)의 심볼 x와 실행가능한 코드(113)의 레지스터 @r3 사이를 직접적으로 맵핑하기 위해 심볼 맵핑(137)을 공식화할 수 있다. 제 1 명령어와 제 1 심볼의 각각에 대해, 단계(309)는 제 1 명령어 또는 제 1 심볼을 식별된 대응하는 제 3 명령어 또는 제 3 심볼의 맵핑을 제 3 디버그 정보에 저장하는 단계(단계 313)를 포함한다. 예를 들면, 디버그 맵퍼(106)는 통합 디버그 정보(123)에 명령어 맵핑(136)과 심볼 맵핑(137)을 저장할 수 있다.
통합 디버그 정보(123)는 소스 코드(111)의 디버깅을 돕기 위해 디버그 모듈(도시하지 않음)에 이용될 수 있다.
본 발명의 일부 실시예는 DPC++ 코드를 그래픽 처리 유니트(GPU)에서의 실행을 위한 HLSL 바이트코드로 컴파일하는 것에 보다 관련된다. 제 1 컴파일 스테이지는 모든 콜 사이트(call site)에서의 각각의 DPC++에 대응하는 압축된(flattened) HLSL 소스 레벨 컴퓨트 세이더를 생성한다. 제 2 컴파일 스테이지는 HLSL 컴파일러를 호출(invoke)하여, 생성된 HLSL 소스 레벨 컴퓨트 세이터에 대응하는 HLSL 바이트코드를 생성한다. 모든 콜 사이트에서의 각각의 커널 호출에 대해 생성된 바이트코드는 이후 컴파일러 생성 PE(portable executable) 실행가능한 텍스트 세그먼트 내에 저장된다.
각각의 컴파일 스테이지에서 한 세트의 심볼릭 맵핑이 생성된다. 심볼릭 맵핑은 컴파일 스테이지의 일부분으로서 수행된 번역을 나타낸다. 제 1 컴파일 스테이지는 DPC++ 소스 심볼과 생성된 HLSL 소스 코드 심볼 사이의 맵핑을 정의한다. 제 2 컴파일 스테이지는 HLSL 소스 코드 심볼과 최종 HLSL 바이트코드에서의 대응하는 위치(바이트코드 어드레스, 레지스터) 사이의 맵핑을 정의한다.
디버그 효율과 감소된 메모리 풋프린트에 기여하기 위해, 심볼릭 디버그 정보는 다음의 이유로 인해 DPC++ 소스 심볼과 최종 HLSL 바이트코드 사이의 직접 맵핑을 제공하는 단일 세트의 레코드(record)로 융합될 수 있다. 단일 세트의 맵핑은 컴파일러로 하여금 HLSL 바이트코드 블롭(blob)(PE 익스큐터블에 저장됨)으로부터 바이트코드 심볼릭 맵핑 정보에 대한 중간 HLSL을 스트립오프(strip off)하는 것을 허용하고, 실행가능한 메모리 풋프린트를 감소시킨다. 따라서, 단일 세트의 심볼릭 디버그 정보 레코드는 소스 심볼과 위치 그리고 HLSL 바이트코드 어드레스와 레지스터 명칭 사이의 직접 맵핑을 인에이블링하는 것에 의해 GPU 디버거에서 DPC++ 심볼 해결책을 단순화하고 신속히 처리한다(DPC++ 소스로부터 HLSL 소스까지 그리고 바이트코드 맵핑까지의 두 가지 레벨 맵핑을 대신함).
예를 들면, 제 1 컴파일러 스테이지는 예시적인 DPC++ 코드를 번역하는 데 이용될 수 있다.
Figure pct00001
into the example, HLSL source code:
Figure pct00002
이어서, 제 2 컴파일러 스테이지는 예시적으로 HLSL 소스 코드를 예시적인 HLSL 바이트코드로 컴파일한다 :
Figure pct00003
컴파일러 후단에서 HLSL 소스 코드를 생성할 때, 코드 튜플(tuple)과 심볼로부터 HLSL 소스 위치와 심볼 이름으로의 맵핑은 임의 내부 데이터 구조, 예를 들면 프로그램 데이터베이스(PDB) 레코드에 저장될 수 있다. 예를 들면, 제 1 컴파일러 스테이지는 DPC++ 소스 코드 명령어 및 심볼을 HLSL 소스 코드 명령어 및 심볼로 맵핑하는 제 1 내부 데이터 구조를 생성할 수 있다.
Figure pct00004
이어서, 제 2 컴파일러 스테이지는 HLSL 소스 코드 명령어 및 심볼을 HLSL 바이트코드로 맵핑하는 제 2 내부 데이터 구조를 생성할 수 있다.
Figure pct00005
리더기 구성요소는 제 2 내부 데이터 구조를 판독하고 바이트코드 어드레스 및 레지스터에 대한 HLSL 소스 위치와 심볼을 분해(resolve)하도록 구현될 수 있다. 다음으로, 제 1 내부 데이터 구조는 DPC++ 소스 위치와 심볼 그리고 HLSL 바이트코드 어드레스와 레지스터 명칭 사이의 직접 맵핑을 생성하는 데 사용된다. 직접 맵핑은 제 3 내부 데이터 구조, 예를 들면 PDB 레코드의 형태로 저장될 수 있다.
Figure pct00006
본 발명은 그 사상 또는 본질적인 특성을 벗어나지 않으면서 다른 특정 형식으로 구현될 수 있다. 전술한 실시예는 모든 관점에서 예시를 위한 것으로 본 발명이 이에 제한되는 것은 아니다. 따라서 본 발명의 범위는 전술한 설명에 의해 제한되지 않고 첨부된 특허 청구항에 의해 제한된다. 특허 청구항에 기재된 것과 등가의 수단 및 본 발명의 특허청구범위 내에 있는 모든 변경 및 변형은 본 발명의 범위 내에 포함된다.

Claims (10)

  1. 하나 이상의 프로세서 및 시스템 메모리를 포함하는 컴퓨터 시스템에서 상이한 컴파일 스테이지에서 생성된 디버그 정보를 결합하기 위한 방법에 있어서,
    상기 컴퓨터 시스템은 소스 코드를 실행가능한 코드로 컴파일하는 다중 스테이지 컴파일러를 포함하고, 상기 다중 스테이지 컴파일러는 적어도 제 1 컴파일 스테이지 및 제 2 컴파일 스테이지를 포함하는 복수의 컴파일 스테이지를 포함하고, 상기 복수의 컴파일 스테이지에서 각각의 컴파일 스테이지는 코드 포맷 사이를 변환하여 소스 코드로부터 실행가능한 코드를 생성하도록 구성되고,
    상기 방법은,
    제 1 디버그 정보 및 제 2 디버그 정보를 통합된 제 3 디버그 정보로 융합하는 단계를 포함하고,
    상기 제 1 디버그 정보는 제 1 포맷의 제 1 코드를 제 2 상이한 포맷의 제 2 코드로 번역하는 제 1 컴파일 스테이지에서 생성되고, 상기 제 1 디버그 정보는 상기 제 1 코드에서의 각각의 명령어를 상기 제 2 코드에서의 대응하는 명령어로 맵핑하고, 상기 제 1 코드에서의 각각의 심볼을 상기 제 2 코드에서의 대응하는 심볼로 맵핑하며,
    상기 제 2 디버그 정보는 상기 제 2 코드를 제 3 상이한 포맷의 제 3 코드로 번역하는 제 2 컴파일 스테이지에서 생성되고, 상기 제 2 디버그 정보는 제 상기 2 코드에서의 각각의 명령어를 상기 제 3 코드에서의 대응하는 명령어로 맵핑하고, 상기 제 2 코드에서의 각각의 심볼을 상기 제 3 코드에서의 대응하는 심볼로 맵핑하며,
    상기 통합된 제 3 디버그 정보는 상기 제 1 명령어를 상기 제 3 명령어로 직접 맵핑하고 상기 제 1 심볼을 상기 제 3 심볼로 직접 맵핑하며,
    상기 제 1 디버그 정보와 상기 제 2 디버그 정보를 융합하는 단계는 상기 제 1 코드에서의 각각의 명령어 및 심볼에 대해,
    상기 제 1 코드에서의 명령어 또는 심볼에 대응하는 상기 제 2 코드에서의 명령어 또는 심볼을 식별하기 위해 상기 제 1 디버그 정보를 이용하는 단계와,
    상기 제 2 코드에서의 식별된 명령어 또는 심볼에 대응하는 상기 제 3 코드에서의 명령어 또는 심볼을 식별하기 위해 상기 제 2 디버그 정보를 이용하는 단계와,
    상기 제 1 코드에서의 명령어 또는 심볼을 상기 제 3 코드에서의 상기 식별된 대응하는 명령어 또는 심볼로 직접 맵핑하는 단계와,
    상기 제 1 코드에서의 명령어 또는 심볼에서 상기 제 3 코드에서의 명령어 또는 심볼로의 직접 맵핑을 상기 통합된 제 3 디버그 정보에 저장하는 단계를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 제 1 디버그 정보와 상기 제 2 디버그 정보를 통합된 제 3 디버그 정보로 융합하는 단계는,
    데이터 병렬 C++(DPC++) 소스 코드에서의 명령어 위치 및 심볼과, 하이 레벨 세이더 랭귀지(High Level Shader Language(HLSL)) 소스 코드에서의 명령어 위치 및 심볼 사이를 맵핑하는 제 1 디버그 정보와, HLSL 소스 코드에서의 명령어 위치 및 심볼과, HLSL 바이트코드에서의 어드레스 및 레지스터 명칭 사이를 맵핑하는 제 2 디버그 정보를, DPC++ 소스 코드에서의 위치 및 심볼을 HLSL 바이트코드에서의 어드레스 및 레지스터 명칭 사이를 맵핑하는 통합된 제 3 디버그 정보로 융합하는 단계를 포함하는
    방법.
  3. 제 1 항에 있어서,
    상기 제 1 컴파일 스테이지는 데이터 병렬 C++(DPC++) 소스 코드를 하이 레벨 세이더 랭귀지(HLSL) 소스 코드로 번역하도록 구성된
    방법.
  4. 제 1 항에 있어서,
    상기 제 2 컴파일 스테이지는 하이 레벨 세이더 랭귀지(HLSL) 소스 코드를 HLSL 바이트코드로 번역하도록 구성된
    방법.
  5. 제 1 항에 있어서,
    상기 제 1 디버그 정보, 상기 제 2 디버그 정보 및 상기 통합된 제 3 디버그 정보는 프로그램 데이터베이스(PDB) 레코드로서 저장되는
    방법.
  6. 제 1 항에 있어서,
    상기 제 1 코드의 디버깅을 돕기 위해 통합된 제 3 디버그 정보를 이용하는 단계를 더 포함하는
    방법.
  7. 컴퓨터 시스템에서 사용하기 위한 컴퓨터 프로그램 제품에 있어서,
    상기 컴퓨터 시스템은 소스 코드를 실행가능한 코드로 컴파일하는 다중 스테이지 컴파일러를 포함하고, 상기 다중 스테이지 컴파일러는 적어도 제 1 컴파일 스테이지 및 제 2 컴파일 스테이지를 포함하는 복수의 컴파일 스테이지를 포함하고, 상기 복수의 컴파일 스테이지에서 각각의 컴파일 스테이지는 코드 포맷 사이를 변환하여 소스 코드로부터 실행가능한 코드를 생성하도록 구성되고,
    상기 컴퓨터 프로그램 제품은 상이한 컴파일 스테이지에서 생성된 디버그 정보를 결합하기 위한 방법을 구현하고, 상기 컴퓨터 프로그램 제품은 컴퓨터 실행가능한 명령어가 저장되는 하나 이상의 컴퓨터 저장 장치를 포함하고, 상기 컴퓨터 실행가능한 명령어는 프로세서에서 실행 시 컴퓨터 시스템으로 하여금 다음의 방법을 수행하도록 하며, 상기 방법은,
    제 1 디버그 정보 및 제 2 디버그 정보를 통합된 제 3 디버그 정보로 융합하는 단계를 포함하고,
    상기 제 1 디버그 정보는 제 1 포맷의 제 1 코드를 제 2 상이한 포맷의 제 2 코드로 번역하는 제 1 컴파일 스테이지에서 생성되고, 상기 제 1 디버그 정보는 상기 제 1 코드에서의 각각의 명령어를 상기 제 2 코드에서의 대응하는 명령어로 맵핑하고, 상기 제 1 코드에서의 각각의 심볼을 상기 제 2 코드에서의 대응하는 심볼로 맵핑하며,
    상기 제 2 디버그 정보는 상기 제 2 코드를 제 3 상이한 포맷의 제 3 코드로 번역하는 제 2 컴파일 스테이지에서 생성되고, 상기 제 2 디버그 정보는 상기 제 2 코드에서의 각각의 명령어를 상기 제 3 코드에서의 대응하는 명령어로 맵핑하고, 상기 제 2 코드에서의 각각의 심볼을 상기 제 3 코드에서의 대응하는 심볼로 맵핑하며,
    상기 통합된 제 3 디버그 정보는 상기 제 1 명령어를 상기 제 3 명령어로 직접 맵핑하고 상기 제 1 심볼을 상기 제 3 심볼로 직접 맵핑하며,
    상기 제 1 디버그 정보와 상기 제 2 디버그 정보를 융합하는 단계는 상기 제 1 코드에서의 각각의 명령어 및 심볼에 대해,
    상기 제 1 코드에서의 명령어 또는 심볼에 대응하는 상기 제 2 코드에서의 명령어 또는 심볼을 식별하기 위해 상기 제 1 디버그 정보를 이용하는 단계와,
    상기 제 2 코드에서의 식별된 명령어 또는 심볼에 대응하는 상기 제 3 코드에서의 명령어 또는 심볼을 식별하기 위해 상기 제 2 디버그 정보를 이용하는 단계와,
    상기 제 1 코드에서의 명령어 또는 심볼을 상기 제 3 코드에서의 식별된 대응하는 명령어 또는 심볼로 직접 맵핑하는 단계와,
    상기 제 1 코드에서의 명령어 또는 심볼에서 상기 제 3 코드에서의 명령어 또는 심볼로의 직접 맵핑을 통합된 제 3 디버그 정보에 저장하는 단계를 포함하는
    컴퓨터 프로그램 제품.
  8. 하나 이상의 프로세서 및 시스템 메모리를 포함하는 컴퓨터 시스템에서 상이한 컴파일 스테이지에서 생성된 디버그 정보를 결합하기 위한 방법에 있어서,
    상기 컴퓨터 시스템은 또한 소스 코드를 실행가능한 코드로 컴파일하는 다중 스테이지 컴파일러를 포함하고, 상기 다중 스테이지 컴파일러는 복수의 컴파일 스테이지를 포함하고, 상기 복수의 컴파일 스테이지의 각각의 컴파일 스테이지는 코드 포맷 사이를 변환하여 소스 코드로부터 실행가능한 코드를 생성하도록 구성되고,
    상기 방법은,
    제 1 컴파일 스테이지에서,
    제 1 코드를 액세스하는 단계- 상기 제 1 코드는 제 1 포맷의 제 1 명령어 및 제 1 심볼을 포함함 -와,
    상기 제 1 코드를 제 2 코드로 번역하는 단계로서,
    상기 제 1 명령어 및 상기 제 1 심볼을 제 2 포맷의 제 2 명령어 및 제 2 심볼로 변환하는 단계 - 상기 제 2 포맷은 상기 제 1 포맷과 상이함 - 와,
    제 1 디버그 정보를 생성하는 단계 - 상기 제 1 디버그 정보는 상기 제 1 명령어 내의 각각의 명령어를 상기 제 2 명령어 내의 대응하는 명령어로 맵핑하고 상기 제 1 심볼 내의 각각의 심볼을 상기 제 2 심볼 내의 대응하는 심볼로 맵핑함 - 를 포함하는 단계를 포함하고,
    제 2 컴파일 스테이지에서,
    상기 제 2 코드를 액세스하는 단계와,
    상기 제 2 코드를 제 3 코드로 번역하는 단계로서,
    상기 제 2 명령어 및 제 2 심볼을 제 3 포맷의 대응하는 제 3 명령어 및 제 3 심볼로 변환하는 단계 - 상기 제 3 포맷은 상기 제 1 포맷 및 제 2 포맷과 상이함 - 와,
    제 2 디버그 정보를 생성하는 단계 - 상기 제 2 디버그 정보는 상기 제 2 명령어 내의 각각의 명령어를 상기 제 3 명령어 내의 대응하는 명령어로 맵핑하고 상기 제 2 심볼 내의 각각의 심볼을 상기 제 3 심볼 내의 대응하는 심볼로 맵핑함 - 를 포함하는 단계와,
    상기 제 1 디버그 정보와 상기 제 2 디버그 정보를 통합된 제 3 디버그 정보로 융합하는 단계로서, 상기 통합된 제 3 디버그 정보는 상기 제 1 명령어를 상기 제 3 명령어로 직접 맵핑하고 상기 제 1 심볼을 상기 제 3 심볼로 직접 맵핑하고, 상기 제 1 명령어 및 상기 제 1 심볼의 각각에 대해서,
    상기 제 1 명령어 또는 제 1 심볼에 대응하는 제 2 명령어 또는 제 2 심볼을 상기 제 1 디버그 정보 내로부터 식별하는 단계와,
    상기 식별된 제 2 명령어 또는 제 2 심볼에 대응하는 제 3 명령어 또는 제 3 심볼을 상기 제 2 디버그 정보 내로부터 식별하는 단계와,
    상기 제 1 명령어 또는 제 1 심볼을 상기 식별된 대응하는 제 3 명령어 또는 제 3 심볼로 직접 맵핑하는 단계와,
    상기 제 1 명령어 또는 제 1 심볼에서 상기 식별된 대응하는 제 3 명령어 또는 제 3 심볼로의 맵핑을 통합된 제 3 디버그 정보에 저장하는 단계를 포함하는
    방법.
  9. 제 8 항에 있어서,
    상기 제 2 명령어 및 상기 제 2 심볼을 대응하는 제 3 포맷의 제 3 명령어 및 제 3 심볼로 변환하는 단계는 상기 제 2 명령어 및 제 2 심볼을 그래픽 프로세스 유닛(GPU)에서 실행가능한 코드로 변환하는 단계를 포함하는
    방법.
  10. 제 8 항에 있어서,
    상기 제 1 디버그 정보와 상기 제 2 디버그 정보를 통합된 제 3 디버그 정보로 융합하는 단계는,
    데이터 병렬 C++(DPC++) 소스 코드에서의 명령어 위치 및 심볼과, 하이 레벨 세이더 랭귀지(High Level Shader Language(HLSL)) 소스 코드에서의 명령어 위치 및 심볼 사이를 맵핑하는 제 1 디버그 정보와, HLSL 소스 코드에서의 명령어 위치 및 심볼과, HLSL 바이트코드에서의 어드레스 및 레지스터 명칭 사이를 맵핑하는 제 2 디버그 정보를, DPC++ 소스 코드에서의 위치 및 심볼을 HLSL 바이트코드에서의 어드레스 및 레지스터 명칭 사이를 맵핑하는 통합된 제 3 디버그 정보로 융합하는 단계를 포함하는
    방법.
KR1020137015664A 2010-12-17 2011-12-16 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 방법 KR20140001953A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/971,943 US20120159444A1 (en) 2010-12-17 2010-12-17 Fusing debug information from different compiler stages
US12/971,943 2010-12-17
PCT/US2011/065661 WO2012083266A2 (en) 2010-12-17 2011-12-16 Fusing debug information from different compiler stages

Publications (1)

Publication Number Publication Date
KR20140001953A true KR20140001953A (ko) 2014-01-07

Family

ID=46236216

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137015664A KR20140001953A (ko) 2010-12-17 2011-12-16 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 방법

Country Status (8)

Country Link
US (1) US20120159444A1 (ko)
EP (1) EP2652609A4 (ko)
JP (1) JP2014503902A (ko)
KR (1) KR20140001953A (ko)
CN (1) CN102637136B (ko)
CA (1) CA2821308A1 (ko)
HK (1) HK1172408A1 (ko)
WO (1) WO2012083266A2 (ko)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7350194B1 (en) * 2001-09-24 2008-03-25 Oracle Corporation Techniques for debugging computer programs involving multiple computing machines
US10169199B2 (en) 2008-06-10 2019-01-01 Microsoft Technology Licensing, Llc Automatic model-specific debugger extensions
TW201419140A (zh) * 2012-11-06 2014-05-16 Ind Tech Res Inst 可重新配置的指令編碼方法、執行方法及電子裝置
US20130290940A1 (en) * 2012-04-25 2013-10-31 Balaji Palanisamy Symbol-based merging of computer programs
RU2014152808A (ru) * 2012-05-25 2016-07-20 Конинклейке Филипс Н.В. Способ, система и устройство для защиты от обратного инжиниринга и/или вмешательства в программы
JP5891976B2 (ja) * 2012-07-03 2016-03-23 富士通株式会社 コンパイル実行・管理方法、装置、及びプログラム
KR102013582B1 (ko) * 2012-09-07 2019-08-23 삼성전자 주식회사 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
JP6036089B2 (ja) * 2012-09-25 2016-11-30 日本電気株式会社 データ遷移トレース装置、データ遷移トレース方法、及び、データ遷移トレースプログラム
US8839201B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Capturing test data associated with error conditions in software item testing
US8949794B2 (en) 2012-10-12 2015-02-03 Vmware, Inc. Binding a software item to a plain english control name
US9292416B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Software development kit testing
US10067858B2 (en) 2012-10-12 2018-09-04 Vmware, Inc. Cloud-based software testing
US8839202B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Test environment managed within tests
US9292422B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Scheduled software item testing
US9684587B2 (en) 2012-10-12 2017-06-20 Vmware, Inc. Test creation with execution
US10387294B2 (en) 2012-10-12 2019-08-20 Vmware, Inc. Altering a test
US9069902B2 (en) 2012-10-12 2015-06-30 Vmware, Inc. Software test automation
KR101598819B1 (ko) * 2013-12-02 2016-03-02 한국과학기술연구원 타겟 독립적인 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
KR101670726B1 (ko) * 2013-12-02 2016-10-31 한국과학기술연구원 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체
US9235388B2 (en) 2014-02-13 2016-01-12 Red Hat, Inc. Multi-dimensional, multi-configuration compilation phase output visualization technique
US9195567B1 (en) 2014-05-16 2015-11-24 International Business Machines Corporation Debugging data format conversion
US9317266B1 (en) * 2014-11-12 2016-04-19 Bank Of America Corporation Leveraging legacy applications for use with modern applications
US10048960B2 (en) * 2014-12-17 2018-08-14 Semmle Limited Identifying source code used to build executable files
RU2016137176A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Связывание преобразованного исходного кода с первоначальным исходным кодом с помощью метаданных
RU2016137177A (ru) 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Усовершенствованное преобразование исходного кода языка программирования
US10353802B2 (en) 2016-11-04 2019-07-16 International Business Machines Corporation Debugging a live streaming application
CN107656726A (zh) * 2017-10-10 2018-02-02 北京元比特科技有限责任公司 一种互联网信息及技术共享平台及方法
US11487520B2 (en) * 2017-12-01 2022-11-01 Cotiviti, Inc. Automatically generating reasoning graphs
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
US10936771B1 (en) * 2019-10-02 2021-03-02 Microsoft Technology Licensing, Llc Using a common fuse controller hardware design for different applications
CN111091612B (zh) * 2019-10-09 2023-06-02 武汉凌久微电子有限公司 一种抽象目标码架构的着色语言机器码生成方法及装置
CN114556289A (zh) * 2019-11-06 2022-05-27 英特尔公司 用于应用中的向量计算的多阶段自动编译
CN110865815A (zh) * 2019-11-12 2020-03-06 广州泳泳信息科技有限公司 一种shader语言多平台编译发布系统及方法
US20230297491A1 (en) * 2022-03-18 2023-09-21 Red Hat, Inc. Source-level debugging of intermediate code
CN116205783B (zh) * 2023-04-24 2023-08-18 芯瞳半导体技术(山东)有限公司 一种基于gpu着色器代码的调试方法、装置及存储介质

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03144832A (ja) * 1989-10-31 1991-06-20 Nec Corp プリコンパイラ言語プログラムのシンボリックデバッグ装置
JPH03240837A (ja) * 1990-02-19 1991-10-28 Nec Corp デバッグ情報生成装置
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
US5845121A (en) * 1995-10-06 1998-12-01 International Business Machines Corporation Expression evaluation in a multi-language debugger
US6091896A (en) * 1995-12-22 2000-07-18 Hewlett-Packard Company Debugging optimized code using data change points
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment
US5857093A (en) * 1996-09-20 1999-01-05 Allen-Bradley Company, Llc Cross-compiled simulation timing backannotation
US6449615B1 (en) * 1998-09-21 2002-09-10 Microsoft Corporation Method and system for maintaining the integrity of links in a computer network
US6785884B1 (en) * 1999-09-29 2004-08-31 Unisys Corporation Symbolic debug interface for register transfer simulator debugger
US6795963B1 (en) * 1999-11-12 2004-09-21 International Business Machines Corporation Method and system for optimizing systems with enhanced debugging information
US6966051B2 (en) * 2001-05-24 2005-11-15 International Business Machines Corporation Automatically generated symbol-based debug script executable by a debug program for software debugging
JP3612294B2 (ja) * 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
US7284242B2 (en) * 2003-01-06 2007-10-16 Xerox Corporation Program compiler with abstraction composer
US7146604B2 (en) * 2003-01-06 2006-12-05 Xerox Corporation Program operators for composing abstractions
US7299454B2 (en) * 2003-02-26 2007-11-20 Bea Systems, Inc. Method for multi-language debugging
US7634763B2 (en) * 2003-07-15 2009-12-15 Microsoft Corporation Extensible multi-language compilation
US7305376B2 (en) * 2003-10-23 2007-12-04 Microsoft Corporation Multiple language-dependent resources compacted into a single resource file
US7607123B2 (en) * 2004-09-21 2009-10-20 Hewlett-Packard Development Company, L.P. Systems and methods for validating debug information for optimized code
JP4822817B2 (ja) * 2005-11-22 2011-11-24 パナソニック株式会社 コンパイルシステム
US8819625B2 (en) * 2009-09-03 2014-08-26 International Business Machines Corporation Sharable development environment bookmarks for functional/data flow

Also Published As

Publication number Publication date
CN102637136B (zh) 2016-06-01
EP2652609A2 (en) 2013-10-23
WO2012083266A2 (en) 2012-06-21
CA2821308A1 (en) 2012-06-21
CN102637136A (zh) 2012-08-15
US20120159444A1 (en) 2012-06-21
EP2652609A4 (en) 2017-11-22
HK1172408A1 (zh) 2013-04-19
JP2014503902A (ja) 2014-02-13
WO2012083266A3 (en) 2013-01-17

Similar Documents

Publication Publication Date Title
KR20140001953A (ko) 상이한 컴파일러 스테이지로부터의 디버그 정보를 융합하는 방법
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
US8997066B2 (en) Emulating pointers
US8677322B2 (en) Debugging in a multiple address space environment
US8468507B2 (en) Binding executable code at runtime
CN109564540A (zh) 用于jit编译器的调试工具
US8539458B2 (en) Transforming addressing alignment during code generation
US8893100B2 (en) Return address optimisation for a dynamic code translator
CN103051711A (zh) 基于spice协议的嵌入式云终端系统的构建方法
Wallentowitz et al. Potential of webassembly for embedded systems
US9886251B2 (en) Optimized compiling of a template function
Ray An overview of webassembly for iot: Background, tools, state-of-the-art, challenges, and future directions
US20140068552A1 (en) Infrastructure for automatically generating boilerplate code using annotations and code-generators
CN109558121A (zh) 接口驱动程序的开发方法、装置、设备及存储介质
WO2019136014A1 (en) Reduced instructions to generate global variable addresses
Kilpeläinen Dynamic firmware updating of an embedded system
Nguyen Programming Language interoperability in cross-platform software development
EP4361796A1 (en) Language interoperation method and apparatus, storage medium, and program product
Nellaiyapen Practical WebAssembly: Explore the fundamentals of WebAssembly programming using Rust
US20190384742A1 (en) Systems and methods for facilitating interactions with remote memory spaces
Lavieri Mastering Java 11: Develop modular and secure Java applications using concurrency and advanced JDK libraries
CN117667157A (zh) 热更新方法和系统、客户端应用的更新方法、介质及设备
CN113721975A (zh) 文件构建方法及系统、装置、电子设备和存储介质
Larsen et al. INL High Level Language Microcontroller Implementa

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid