KR101669783B1 - 성능 및 정확도에 대한 멀티 스레드 소프트웨어 프로그램들의 레코딩된 실행들의 시각화 - Google Patents

성능 및 정확도에 대한 멀티 스레드 소프트웨어 프로그램들의 레코딩된 실행들의 시각화 Download PDF

Info

Publication number
KR101669783B1
KR101669783B1 KR1020157021009A KR20157021009A KR101669783B1 KR 101669783 B1 KR101669783 B1 KR 101669783B1 KR 1020157021009 A KR1020157021009 A KR 1020157021009A KR 20157021009 A KR20157021009 A KR 20157021009A KR 101669783 B1 KR101669783 B1 KR 101669783B1
Authority
KR
South Korea
Prior art keywords
execution
graphical representation
chunks
chunk
animated graphical
Prior art date
Application number
KR1020157021009A
Other languages
English (en)
Other versions
KR20150103262A (ko
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 KR20150103262A publication Critical patent/KR20150103262A/ko
Application granted granted Critical
Publication of KR101669783B1 publication Critical patent/KR101669783B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/323Visualisation of programs or trace data
    • 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
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/206Drawing of charts or graphs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/802D [Two Dimensional] animation, e.g. using sprites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3404Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Debugging And Monitoring (AREA)

Abstract

시스템은 멀티 스레드 소프트웨어 프로그램의 레코딩된 실행의 성능 및/또는 정확도 피처들을 그래픽으로 시각화한다. 이 시스템은 멀티 스레드 프로그램의 실행 중에 레코딩된 청크 기반 정보를 처리하고, 레코딩된 정보의 그래픽 시각화를 준비하며, 애니메이팅 방식으로 디스플레이 상에 그래픽 시각화를 디스플레이할 수 있다. 이 시스템은 뷰어가 애니메이팅된 그래픽 시각화의 디스플레이를 대화식으로 제어하는 것을 허용할 수 있다.

Description

성능 및 정확도에 대한 멀티 스레드 소프트웨어 프로그램들의 레코딩된 실행들의 시각화{VISUALIZING RECORDED EXECUTIONS OF MULTI-THREADED SOFTWARE PROGRAMS FOR PERFORMANCE AND CORRECTNESS}
멀티 코어 프로세서 기술의 출현으로, 병렬 프로그래밍이 유비쿼터스로 되고 있다. 그러나, 병렬 프로그램들의 비결정론적 속성으로 인해, 동일한 입력을 갖는 동일한 병렬 프로그램의 다수의 실행은 상이한 결과들을 생성할 수 있다.
메모리 레이스 레코딩(MRR: memory race recording) 기술들은 멀티 스레드 프로그램들의 실행이 레코딩될 수 있게 하며, 그에 따라 메모리 액세스들이 인터리빙되는 순서를 기록(logging)하게 된다. 레코딩들은 디버깅 목적들을 위해 리플레이될 수 있다. 리플레이될 때, 레코딩들은 오리지널 실행에 의해 획득된 것들과 동일한 결과들을 생성한다. 점대점 MRR 기술들은 개별 공유 메모리 명령어들의 레벨에서 메모리 액세스 인터리빙들을 추적하는 한편, 청크 기반 기술들은 (예를 들어, 충돌하는 원격 메모리 액세스로 인터리빙되지 않고) 원자적으로(atomically) 실행되는 메모리 연산들의 수를 관측함으로써 메모리 액세스 인터리빙들을 추적한다.
여기에 설명된 개념들은 첨부 도면들에서 제한이 아니라 예로서 예시되어 있다. 예시의 단순함 및 명료함을 위해, 도면들에 도시된 엘리먼트들은 반드시 일정 비율로 그려지지는 않는다. 적절한 것으로 고려되는 경우, 대응하거나 유사한 엘리먼트들을 나타내기 위해서 도면들 사이에 참조 라벨들이 반복되었다.
도 1은 멀티 스레드 소프트웨어 프로그램의 실행의 성능 및/또는 정확도 피처들을 시각화하기 위한 시스템의 적어도 하나의 실시예의 단순화된 블록도이다.
도 2는 도 1의 시각화 시스템의 적어도 하나의 실시예의 단순화된 블록도이다.
도 3은 도 2의 동적 리플레이 모듈의 적어도 하나의 실시예의 단순화된 블록도이다.
도 4는 멀티 스레드 소프트웨어 프로그램의 실행에 관한 로그 파일들의 단순화된 예시이다.
도 5는 멀티 스레드 소프트웨어 프로그램의 레코딩된 실행의 성능 및/또는 정확도 피처들을 시각화하기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 6은 시각화를 위해 레코딩된 소프트웨어 프로그램 실행 데이터를 준비하기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 7은 멀티 스레드 소프트웨어 프로그램의 레코딩된 실행의 시각화를 제어하기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 8은 멀티 스레드 소프트웨어 프로그램의 레코딩된 실행의 시각화를 그래픽으로 제시하기 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 9는 멀티 스레드 소프트웨어 프로그램의 레코딩된 실행의 그래픽 시각화의 적어도 하나의 실시예의 단순화된 예시이다.
도 10은 도 9의 그래픽 시각화의 "줌 아웃" 버전의 단순화된 예시이다.
도 11은 도 9의 그래픽 시각화의 "줌 인" 버전의 단순화된 예시이다.
본 개시물의 개념들은 다양한 수정물들 및 대안적인 형태들을 허용하지만, 그것의 특정 실시예들은 도면들에서 예로서 도시되어 있으며 본 명세서에서 상세하게 설명될 것이다. 그러나, 본 개시물의 개념들을 개시된 특정 형태들로 제한하려는 의도는 없으며, 이에 반해, 본 개시물 및 첨부 청구항들에 부합하는 모든 수정물들, 등가물들 및 대안물들을 커버하도록 의도된다는 것이 이해되어야 한다.
본 명세서에서 "일 실시예(one embodiment)", "실시예(an embodiment)", "예시적인 실시예(an illustrative embodiment)" 등에 대한 언급은, 설명된 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있지만, 모든 실시예는 반드시 그 특정 특징, 구조 또는 특성을 포함할 수도 있고 포함하지 않을 수도 있다는 것을 나타낸다. 또한, 이러한 구문들은 반드시 동일한 실시예를 언급하는 것은 아니다. 또한, 특정 특징, 구조 또는 특성이 실시예와 관련하여 설명될 때, 명시적으로 설명되든지 아니든지 간에, 이러한 특징, 구조 또는 특성을 다른 실시예들과 관련하여 실시하는 것은 관련 기술분야의 통상의 기술자의 지식 내에 있다고 제시된다.
개시된 실시예들은, 일부 경우에, 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있다. 또한, 개시된 실시예들은, 하나 이상의 프로세서에 의해 판독되고 실행될 수 있는 일시적인 또는 비일시적인 머신 판독가능(예를 들어, 컴퓨터 판독가능) 저장 매체에 의해 운반되거나 이러한 저장 매체 상에 저장되는 명령어들로서 구현될 수 있다. 머신 판독가능 저장 매체는 머신에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 저장 디바이스, 메커니즘 또는 다른 물리적 구조체(예를 들어, 휘발성 또는 비휘발성 메모리, 매체 디스크(media disc) 또는 다른 매체 디바이스(media device))로서 구현될 수 있다.
도면들에서, 일부 구조 또는 방법 피처들은 특정 배열들 및/또는 순서들(orderings)로 도시될 수 있다. 그러나, 이러한 특정 배열들 및/또는 순서들은 요구되지 않을 수 있다는 것이 인식되어야 한다. 오히려, 일부 실시예들에서, 이러한 피처들은 예시적인 도면들에 도시된 것과는 상이한 방식 및/또는 순서로 배열될 수 있다. 추가로, 특정 도면에서의 구조 또는 방법 피처의 포함은 이러한 피처가 모든 실시예에서 요구되는 것을 의미하지는 않으며, 일부 실시예들에서는 포함되지 않을 수도 있고 다른 피처들과 결합될 수도 있다.
이하, 도 1을 참조하면, 일부 실시예들에서, 멀티 스레드 소프트웨어 프로그램(126)의 실행을 시각화하기 위한 시스템(124)은 더 상세하게 후술되는 바와 같이 소프트웨어 프로그램(126)의 실행 중에 청크 기반 메모리 레이스 레코더(118)에 의해 발생되는 로그 파일들(130)에 기초하여 명령어 트레이스들(132)을 준비하고, 디스플레이(120) 상에서 프로그래머 또는 소프트웨어 분석자와 같은 뷰어에 대해 레코딩된 실행의 애니메이팅된 그래픽 표현(134)을 디스플레이한다. 애니메이팅된 그래픽 표현(134)은 소프트웨어 프로그램(126)의 레코딩된 실행의 성능 및 정확도 피처들을 강조하도록 배열되는 시각적 피처들, 예컨대 형상들 및 컬러들을 포함한다. 본 명세서에서 이용된 바와 같이, "강조(highlight)"라는 용어는 뷰어의 눈에서 성능 및 정확도 피처들에 대한 주의를 환기시키는 역할을 할 수 있는 시각적 피처들의 임의의 배열 또는 조합을 의미한다. 예를 들어, 일부 실시예들에서, 레코딩된 실행의 다수의 스레드의 시각적 피처들은 모두 동일한 콘텍스트에서 디스플레이된다. 이용 시에, 더 상세하게 후술되는 바와 같이, 시각화 시스템(124)은 예를 들어 하나 이상의 사용자 컨트롤(122)에 의해 행해진 뷰어로부터의 입력에 응답하여 애니메이팅된 그래픽 표현(134)의 디스플레이를 대화식으로 조정한다. 예를 들어, 일부 실시예들에서, 시스템(124)은, 뷰어가 배율을 증가 또는 감소시키는 것(예를 들어, "줌 인" 또는 "줌 아웃"), 애니메이션 속도를 증가 또는 감소시키는 것(예를 들어, "빨리 감기(fast forward)" 또는 "되감기(rewind)"), 또는 그래픽 표현(134)을 회전시키는 것을 허용하는 대화식 컨트롤들을 제공한다. 동일한 콘텍스트에서 모든 동시에 실행되는 스레드들의 실행을 그래픽으로 묘사함으로써, 시각화 시스템(124)은, 실행의 단순한 텍스트 표현(mere textual representation)으로부터 식별하는 것이 어렵거나 불가능할 성능 및/또는 정확도 피처들을 소프트웨어 개발자가 식별하는 것을 도울 수 있는 방식으로 다수의 스레드 사이의 상호작용들이 시각화될 수 있게 한다.
컴퓨팅 디바이스(100)는, 본 명세서에 설명된 기능들을 수행하며 애니메이팅된 그래픽 정보를 뷰어에게 디스플레이하기 위한 임의의 타입의 컴퓨팅 디바이스로서 구현될 수 있다. 도 1에는 하나의 컴퓨팅 디바이스가 도시되어 있지만, 시스템(124)은 다른 실시예들에서 다수의 컴퓨팅 디바이스(100)에 구현될 수 있다는 것이 인식되어야 한다. 예시적인 컴퓨팅 디바이스(100)는 프로세서(110), 메모리(112), 입/출력 서브시스템(114), 데이터 저장 디바이스(116), 메모리 레이스 레코더(118), 디스플레이(120), 사용자 컨트롤들(122), 시각화 시스템(124) 및 소프트웨어 프로그램(126)을 포함한다. 물론, 컴퓨팅 디바이스(100)는 다른 실시예들에서 컴퓨터(예를 들어, 다양한 입/출력 디바이스들)에서 일반적으로 발견되는 것들과 같은 다른 또는 부가적인 컴포넌트들을 포함할 수 있다. 추가로, 일부 실시예들에서, 예시적인 컴포넌트들 중 하나 이상은 다른 컴포넌트에 통합되거나 또는 다른 방식으로 다른 컴포넌트의 일부를 형성할 수 있다. 예를 들어, 메모리(112) 또는 그것의 부분들은 일부 실시예들에서 프로세서(110)에 통합될 수 있다.
프로세서(110)는, 현재 공지되거나 장래에 개발되며 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 타입의 프로세서로서 구현될 수 있다. 예를 들어, 프로세서는 싱글 또는 멀티 코어 프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 또는 다른 프로세서나 처리/제어 회로로서 구현될 수 있다. 유사하게, 메모리(112)는, 현재 공지되거나 장래에 개발되며 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 타입의 휘발성 또는 비휘발성 메모리나 데이터 저장소로서 구현될 수 있다. 동작 시에, 메모리(112)는 운영 체제, 애플리케이션, 프로그램, 라이브러리 및 드라이버와 같이 시스템(124)의 동작 중에 이용되는 다양한 데이터 및 소프트웨어를 저장할 수 있다. 메모리(112)는, 프로세서(110), 메모리(112) 및 컴퓨팅 디바이스(100)의 다른 컴포넌트들과의 입/출력 동작들을 용이하게 하는 회로 및/또는 컴포넌트들로서 구현될 수 있는 I/O 서브시스템(114)을 통해 프로세서(110)에 통신가능하게 연결된다. 예를 들어, I/O 서브시스템(114)은 메모리 제어기 허브들, 입/출력 제어 허브들, 펌웨어 디바이스들, 통신 링크들(즉, 점대점 링크들, 버스 링크들, 와이어들, 케이블들, 광 가이드들(light guides), 인쇄 회로 보드 트레이스들 등), 및/또는 입/출력 동작들을 용이하게 하는 다른 컴포넌트들 및 서브시스템들로서 구현되거나 또는 다른 방식으로 이들을 포함할 수 있다. 일부 실시예들에서, I/O 서브시스템(114)은 시스템 온 칩(SoC: system-on-a-chip)의 일부를 형성하고, 프로세서(110), 메모리(112) 및 컴퓨팅 디바이스(100)의 다른 컴포넌트들과 함께, 단일 집적 회로 칩 상에 통합될 수 있다.
데이터 저장소(116)는, 예를 들어 메모리 디바이스들 및 회로들, 메모리 카드들, 하드 디스크 드라이브들, 고체 상태 드라이브들 또는 다른 데이터 저장 디바이스들과 같이, 데이터의 단기 또는 장기 저장을 위해 구성된 임의의 타입의 디바이스 또는 디바이스들로서 구현될 수 있다. 예시적인 실시예에서, 시각화 시스템(124) 및/또는 메모리 레이스 레코더(118)는, 데이터 저장소(116)에서, MRR 로그 파일들(130), 명령어 트레이스들(132), 그래픽 표현(134), 그것의 부분들 및/또는 다른 정보를 포함하는 프로그램 실행 데이터(128)를 유지할 수 있다. 더 상세하게 후술되는 바와 같이, 로그 파일들(130) 및 명령어 트레이스들(132)은 그래픽 표현(134)을 생성하는데 이용될 수 있다. 프로그램 실행 데이터(128)의 부분들은 디스플레이(120) 상에 디스플레이할 수 있는 임의의 타입의 디지털 데이터로서 구현될 수 있다. 예를 들어, 프로그램 실행 데이터(128)의 부분들은 바이너리 코드, 머신 또는 어셈블리 레벨 코드, 텍스트, 그래픽스 및/또는 다른 타입의 콘텐츠로서 구현될 수 있다. 프로그램 실행 데이터(128)의 부분들은 디지털 파일들, 어레이들, 데이터베이스들, 테이블들 및/또는 다른 적합한 데이터 구조들로 저장될 수 있다.
메모리 레이스 레코더(118)는 청크 기반 방식으로 멀티 스레드 소프트웨어 프로그램의 실행을 레코딩하기 위한 임의의 적합한 타입의 시스템으로서 구현될 수 있다. 예를 들어, 메모리 레이스 레코더(118)는 하드웨어 또는 소프트웨어 시스템, 예를 들어 프로세서(110)의 아키텍처에서 구현된 하드웨어 시스템으로서 구현될 수 있다. 메모리 레이스 레코더(118)는 나중의 결정론적 리플레이를 위해 멀티 스레드 소프트웨어 프로그램(126)의 실행을 레코딩한다. 메모리 레이스 레코더(118)는, 레코딩된 실행이 리플레이될 때, 그것이 오리지널 실행 중에 레코딩되었던 것과 동일한 방식으로 재생되도록 구성된다. 이것을 행하기 위해서, 메모리 레이스 레코더(118)는 스레드들에 걸친 메모리 액세스 인터리빙들을 레코딩하여, 리플레이 중에, 이들 스레드들이 오리지널 실행에서와 동일한 방식으로 재동기화될 수 있게 한다. 메모리 레이스 레코더(118)는 메모리 액세스들이 인터리빙되는 순서를 기록한다.
위에 언급한 바와 같이, 메모리 레이스 레코더(118)는 청크 기반 접근법을 이용하여, 충돌하는 공유 메모리 종속성(conflicting shared memory dependency)의 개입 없이 실행될 수 있는 메모리 연산들의 수를 관측함으로써 메모리 액세스 인터리빙들을 추적한다. "청크"는 별개로(in isolation), 즉 다른 스레드로부터의 충돌하는 메모리 액세스들로 인터리빙되지 않고 실행되는 명령어들의 블록을 나타낸다. 다시 말하면, 청크는 다수의 스레드 사이의 충돌을 야기시키는 인접 캐시 일관성 요청들(adjacent cache coherence requests) 사이에 발생하는 공유 메모리 액세스들을 캡처한다. 공유 메모리는 예를 들어 다중 코어 프로세서에서 상이한 프로세서들 또는 프로세서 코어들에 의해 액세스될 수 있는 메모리(예를 들어, 랜덤 액세스 메모리 또는 RAM)를 지칭한다. 공유 메모리 시스템은 종종 캐시 메모리의 이용을 수반한다. 캐시 일관성은, 다른 프로세서들 또는 코어들에 의해 이용될 수 있는 정보로 캐시들 중 하나가 업데이트될 때마다 모든 프로세서들 또는 프로세서 코어들에 의해 이용되는 캐시 메모리를 업데이트할 필요성을 언급한다. 따라서, "충돌" 또는 "종속성"은, 예를 들어, 프로세서가 공유 메모리에 저장된 정보에 대한 액세스를 필요로 하지만 그것의 캐시가 다른 프로세서에 의해 공유 메모리에 기입된 데이터로 업데이트되는 것을 대기해야 하는 경우에 발생할 수 있다. 청크 기반 메모리 레이스 레코딩의 추가 논의는, 예를 들어, MICRO '09에서 제시된 Pokam 등의 Architecting a Chunk-based Memory Race Recorder in Modern CMPs(미국 계산기 학회(ACM: Association of Computing Machinery), 2009년 12월 12-16일)에서 확인될 수 있다.
컴퓨팅 디바이스(100)의 디스플레이(120)는 뷰어에게 정보가 디스플레이될 수 있는 임의의 하나 이상의 디스플레이 스크린으로서 구현될 수 있다. 디스플레이는, 예를 들어, 대화식 디스플레이(예를 들어, 터치 스크린), 액정 디스플레이(LCD), 발광 다이오드(LED) 디스플레이, CRT(cathode ray tube) 디스플레이, 플라즈마 디스플레이, 및/또는 현재 공지되거나 장래에 개발되는 다른 디스플레이 기술을 포함하는 임의의 적합한 디스플레이 기술로서 구현되거나 또는 다른 방식으로 이 기술을 이용할 수 있다. 도 1에는 단일 디스플레이(120)만이 도시되어 있지만, 컴퓨팅 디바이스(100)는 서로 순차적으로 또는 동시에 동일하거나 상이한 콘텐츠가 디스플레이될 수 있는 다수의 디스플레이 또는 디스플레이 스크린을 포함할 수 있다는 것이 인식되어야 한다.
사용자 컨트롤들(122)은, 예를 들어 그래픽 표현(134)의 디스플레이를 조정하도록 뷰어에 의해 활성화될 수 있는 임의의 하나 이상의 물리 또는 가상 컨트롤로서 구현될 수 있다. 사용자 컨트롤들(122)은, 예를 들어, 물리 또는 가상(예를 들어, 터치 스크린) 키들, 키보드 또는 키패드, 마우스, 물리 또는 가상 버튼들, 스위치들, 슬라이드들, 다이얼들 등뿐만 아니라 음성 또는 제스처 구동 컨트롤들과 같은 비촉각 컨트롤들을 비롯하여, 현재 공지되거나 장래에 개발되는 임의의 적합한 사용자 컨트롤 기술로서 구현될 수 있다.
소프트웨어 프로그램(126)은 메모리 레이스 레코더(118)에 의해 레코딩될 수 있는 실행을 갖는 임의의 타입의 멀티 스레드 또는 "병렬" 머신 실행가능한 소프트웨어 프로그램으로서 구현될 수 있다. 일반적으로, "멀티 스레드"라는 용어는, 다수의 스레드가 예를 들어 상이한 프로세서들 또는 코어들 상에서 독립적으로 실행되는 것을 허용하는 프로그래밍 기술을 이용하여 구현되는 소프트웨어 프로그램을 지칭하는 한편, "스레드"는 프로그래밍 명령어들의 작은 시퀀스를 지칭하며, 상이한 스레드들은 이용되는 동기화의 타입(예를 들어, 로크들(locks), 트랜잭션 메모리 또는 일부 다른 동기화 기술)에 상관없이 공유 메모리에 액세스할 수 있다. 예를 들어, 시각화 시스템(124)은 이용되는 동기화의 타입에 종속하여 공유 메모리 종속성 충돌들 및/또는 동기화 경합들을 시각화할 수 있다. 트랜잭션 메모리를 시각화하기 위한 시스템의 일례는 PACT '12에서 제시된 Gottschlich 등의 Visualizing Transactional Memory(미국 계산기 학회(ACM), 2012년 9월 19-23일)에 기재되어 있다.
이하, 도 2를 참조하면, 시각화 시스템(124)의 실시예(200)는 파서 모듈(210) 및 동적 리플레이 모듈(212)을 포함한다. 파서 모듈(210) 및 동적 리플레이 모듈(212)은 각각 예를 들어 머신 실행가능한 명령어들, 모듈들, 루틴들, 로직 유닛들 또는 하드웨어 유닛들이나 디바이스들로서 구현될 수 있다. 파서 모듈(210)은 MRR 로그 파일들(130)을 판독하고, 그것으로부터 소프트웨어 프로그램(126)의 오리지널 실행, 예를 들어 메모리 레이스 레코더(118)에 의해 레코딩된 실행에 대한 정보를 추출한다. 이러한 정보는 예를 들어 스레드들 모두에 걸친 청크들의 순서 및 각각의 청크에서의 프로그램 명령어들의 수를 포함할 수 있다. 도 4에 도시된 바와 같이, 로그 파일들(130)은 소프트웨어 프로그램(126)의 오리지널 실행 중에 발생한 순서로 공유 메모리 순서 종속성들을 포함할 수 있다. 예를 들어, 청크 기반 메모리 레이스 레코딩의 결과로서, 각각의 스레드에 대해 로그 파일(130)이 생성될 수 있다. 각각의 로그 파일은 그것의 대응하는 스레드에서 실행되는 청크들의 실행의 순서를 나타내며, 소프트웨어 프로그램(126)의 레코딩된 오리지널 실행 중에 스레드들 모두에 걸친 청크들 모두의 실행의 실제 순서를 나타내는 명령어 포인트들을 포함하거나 참조한다. 로그 파일들(130)로부터의 이 청크 순서 정보는 애니메이팅된 그래픽 표현(134)이 디스플레이될 때에 청크들의 실행의 오리지널 순서를 보존하는데 이용된다. 로그 파일들(130)은 통상적으로 바이너리 파일들이므로, 파서 모듈(210)은 그것으로부터 명령어 트레이스들(132)을 생성하는데, 이는 본질적으로 로그 파일들(130)로부터 추출된 정보의 인간 판독가능한 표현들이다.
명령어 트레이스들(132)은 동적 리플레이 모듈(212)에 대한 입력으로서 이용된다. 동적 리플레이 모듈(212)은, 애니메이팅된 그래픽 표현(134)을 생성하여 뷰어에게 대화식으로 제시하기 위해 디스플레이(120) 및 사용자 컨트롤들(122)과 인터페이싱한다. 이하, 도 3을 참조하면, 동적 리플레이 모듈(212)은, 실시간 제어기 모듈(310), 명령어 시뮬레이션 모듈(312), 그래픽 모델러(graphical modeler)(314) 및 사용자 입력 제어기(316)를 비롯하여, 다수의 머신 실행가능한 명령어들, 모듈들, 루틴들, 로직 유닛들 또는 하드웨어 유닛들이나 디바이스들로서 구현될 수 있다. 그래픽 모델러(314)는 초기에 그래픽 표현(134)을 생성하고, 그 이후에 뷰어로부터의 요청들에 응답하여 이 그래픽 표현을 (예를 들어, 오프라인으로) 리플레이한다.
실시간 제어기(310)는 그래픽 표현(134)의 애니메이팅된 디스플레이를 그것의 연관된 시각화 파라미터들(340)에 기초하여 제어한다. 시각화 파라미터들(340)은 예를 들어 재생 방향, 레이트, 배율 및/또는 배향(orientation)을 포함할 수 있다. 즉, 한번에 프로그램 실행 데이터 전부를 뷰잉하는 것보다는, 실시간 제어기(310)는 레코딩된 실행이 오리지널 실행의 속도 또는 레이트로 "실시간"으로 "재생"되는 것을 허용한다. 추가로, 실시간 제어기(310)는, 예를 들어, 관심 영역들에 더 많은 주의를 기울이게 재생 속도를 늦추거나 또는 관련이 없거나 보다 덜 중요한 영역들을 스킵하게 재생 속도를 높이도록 전개될 때 발생하는 이벤트들을 뷰어가 관측하는 것을 허용하기 위해서 오리지널 프로그램 실행을 리플레이하는 방향(예를 들어, 순방향 또는 역방향), 배율, 배향(예를 들어, 회전) 및/또는 레이트나 속도를 조정할 수 있다. 이와 같이, 실시간 제어기(310)는 애니메이팅된 그래픽 표현(134)의 제시에 있어서의 뷰어의 변경들에 대한 요청들을 처리하기 위해 사용자 입력 제어기(316)와 인터페이싱한다.
실시간 제어기(310)는, 사용자 입력 제어기(316)에 의해 수신된 입력에 응답하여 그래픽 표현(134)의 디스플레이를 제어하기 위해 그래픽 모델러(314)와 인터페이싱하고, 레코딩된 실행 중에 실행되는 명령어들에 대응하는 텍스트의 디스플레이를 제어하기 위해 명령어 시뮬레이션 모듈(312)과 인터페이싱한다. 사용자 입력 제어기(316)는 사용자 컨트롤들(122)의 활성화 또는 비활성화를 검출하고, 필요에 따라, 그들의 사용자 액션들을, 실시간 제어기(310) 및 그래픽 모델러(314)에 의해 실행될 수 있는 명령어들로 변환한다. 예를 들어, 뷰어가 디스플레이(120) 상의 "+" 그래픽 컨트롤을 탭핑하였다고 사용자 입력 제어기(316)가 검출하는 경우, 사용자 입력 제어기(316)는 재생의 속도를 증가시키도록 실시간 제어기(310)에 지시할 수 있다. 마찬가지로, 사용자가 확대경 아이콘을 탭핑하였거나 특정 제스처(예를 들어, 엄지 손가락과 검지 손가락을 서로로부터 떨어져 움직이는 것)를 행하였다고 사용자 입력 제어기(316)가 검출하는 경우, 사용자 입력 제어기(316)는 그래픽 표현(134)의 배율을 증가시키도록 그래픽 모델러(314)에 지시할 수 있다.
그래픽 모델러(314)는 애니메이션 로직 모듈(320) 및 그래픽스 렌더링 모듈(322)로서 구현될 수 있다. 애니메이션 로직 모듈(320)은 그래픽 표현(134)의 애니메이션을 제공하기 위해서 그래픽 표현(134)의 시각적 피처들이 제시되는 레이트(예를 들어, 리프레시 레이트)를 제어한다. 예를 들어, 일부 실시예들에서, 리프레시 레이트는 실시간으로 오리지널 실행을 시뮬레이팅하는 방식으로 그래픽 표현(134)을 제시하기 위해서 약 50 프레임/초 또는 다른 적합한 레이트의 범위에 있을 수 있다. 그래픽스 렌더링 모듈(322)은 초기에 명령어 트레이스들(132)에 의해 제공된 텍스트 정보에 기초하여 그래픽 표현(134)을 발현시키고, 사용자 입력 제어기(316)에 의해 때때로 조정되거나 업데이트될 수 있는 시각화 파라미터들에 따라 그래픽 표현(134)을 디스플레이한다. 그래픽스 렌더링 모듈(322)은 디스플레이(120) 상에 그래픽 표현(134)을 디스플레이하기 위해서 예를 들어 폴리곤 렌더링 기술들(polygon rendering techniques) 및/또는 다른 적합한 기술들을 적용할 수 있다.
멀티 스레드 소프트웨어 프로그램(126)의 레코딩된 오리지널 실행의 그래픽 표현(134)은 어레이, 컨테이너, 테이블, 해시 또는 이들의 조합이나 복수의 이러한 것과 같은 데이터 구조로 저장된다. 그래픽 표현(134)은, 오리지널 실행 중에 실행되는 스레드들(330), 스레드들(330) 각각에 의해 실행되는 청크들(332)과 이들이 실행된 순서, 청크들(332) 각각과 연관된 머신 실행가능 명령어들(334), (절대 또는 상대 값들일 수 있는) 명령어들(334) 각각과 연관된 실행 시간들(336), 스레드들(330), 청크들(332) 및 명령어들(334) 각각과 연관된 시각적 피처들(338), 및 그래픽 표현(134)과 연관된 시각화 파라미터들(340)에 관한 데이터를 포함한다. 시각적 피처들(338)은 예를 들어 상이한 스레드들(330)과 연관된 상이한 컬러들을 포함할 수 있다. 시각적 피처들(338)은 예를 들어 각각의 청크(332)와 연관되는 형상들과 같은 그래픽스를 또한 포함할 수 있다. 예를 들어, 주어진 청크(332)에 대해, 시각적 피처(338)는 청크(332)에서의 명령어들(334) 모두에 대한 전체 실행 시간 및/또는 청크(332)에서의 명령어들(334)의 수에 의해 정의될 수 있다. 도 9 내지 도 11의 예시적인 시각화들에서, 예를 들어, 시각적 피처들(338)은 직사각형 바들을 포함하는데, 각각의 바의 수직 높이는 (예를 들어, 바들이 원근(perspective) 또는 배율에 상관없이 시각적으로 보여질 수 있도록) 일정하다. 다른 실시예들에서, 바들의 수직 높이는 가변일 수 있다. 예를 들어, 수직 높이는 청크(332)에서의 명령어들의 수에 의해 또는 프로그램 실행의 일부 다른 동적 시그너처에 기초하여 정의될 수 있다. 각각의 바의 수평 길이는 청크(332)에서의 명령어들(334)의 전체 실행 시간에 의해 정의된다. 또한, 도 9 내지 도 11에서, 상이한 스레드들과 연관된 청크들은 상이한 컬러들로 디스플레이되며, 동일한 스레드와 연관된 모든 청크는 동일한 컬러로 디스플레이된다. 시각화 파라미터들(340)은 전술한 바와 같이 그래픽 표현(134)에 대한 리플레이 레이트 및 클록 시간, (시각화의 크기를 정규화하는데 이용될 수 있는) 레코딩된 프로그램 실행의 전체 크기, 및/또는 사용자 특정 파라미터들에 관한 데이터를 포함할 수 있다.
이하, 도 5를 참조하면, 실행가능한 명령어들, 모듈들 또는 루틴들로서 구현되며, 컴퓨팅 디바이스(100)에 의해, 예를 들어 시각화 시스템(124)에 의해 실행될 수 있는 방법(500)이 도시되어 있다. 예비적으로, 블록(510)에서, 메모리 레이스 레코더(118)와 관련하여 멀티 스레드 소프트웨어 프로그램(126)이 실행되어, 로그 파일들(130)을 발생시킨다. 블록(510)의 파선에 의해 표시된 바와 같이, 이 프로세스는 일부 실시예들에서 시각화 시스템(124)의 외부에서 행해질 수 있다. 블록(512)에서, 로그 파일들(130)을 파싱함으로써 명령어 트레이스들(132)이 생성된다. 블록(514)에서, 명령어 트레이스들(132)에 기초하여 소프트웨어 프로그램 실행의 그래픽 시각화(예를 들어, 그래픽 표현(134))이 생성된다. 블록(516)에서, 컴퓨팅 디바이스(100)는 (예를 들어, 사용자 입력 제어기(316)에 의해) 시각화를 리플레이하라는 요청이 수신되었는지를 판정한다. 요청이 수신되지 않은 경우에는, 컴퓨팅 디바이스(100)는 이러한 요청을 대기하거나 종료한다. 요청이 수신된 경우에는, 컴퓨팅 디바이스(100)는 블록(518)으로 진행하고, 여기서 (예를 들어, 사용자 입력에 의해 그리고/또는 그래픽 표현(134)에 액세스하는 것에 의해) 시각화 파라미터들(340)이 결정되고, 시각화가 디스플레이(120) 상에 리플레이된다. 블록(520)에서, 여전히 시각화를 리플레이하는 동안, 컴퓨팅 디바이스(100)는 (예를 들어, 사용자 입력 제어기(316)에 의해) 새로운 또는 변경된 시각화 파라미터가 수신되었는지를 판정한다. 새로운 또는 변경된 시각화 파라미터가 수신되지 않은 경우에는, 컴퓨팅 디바이스(100)는 계속해서 현재의 시각화 파라미터들을 이용하여 시각화를 리플레이하고, 계속해서 새로운 또는 변경된 파라미터를 대기한다. 새로운 또는 변경된 시각화 파라미터가 수신된 경우에는, 이 방법은 블록(522)으로 진행하고, 여기서 컴퓨팅 디바이스(100)는 블록(520)에서 획득되는 새로운 또는 변경된 시각화 파라미터들에 기초하여 시각화의 리플레이를 수정하고, 시각화의 끝에 도달하거나 또는 뷰어가 리플레이를 닫거나 종료할 때까지, 계속해서 새로운 또는 변경된 파라미터들을 이용하여 시각화를 리플레이한다.
이하, 도 6을 참조하면, 예를 들어 실행가능한 명령어들, 모듈들, 루틴들, 로직 유닛들 또는 하드웨어 유닛들이나 디바이스들로서 구현되며, 컴퓨팅 디바이스(100)에 의해, 예를 들어 파서 모듈(210)에 의해 실행될 수 있는 방법(600)이 도시되어 있다. 블록(610)에서, 컴퓨팅 디바이스(100)는 활성 스레드 추적기를 초기화한다. 활성 스레드 추적기는, 예를 들어 활성 스레드가 변경됨에 따라 변경되는 값을 갖는 포인터 또는 변수로서 구현될 수 있다. 활성 스레드 추적기는 현재의 청크와 연관되는 스레드를 추적한다. 유사하게, 현재의 스레드 추적기는 현재 판독되고 있는 명령어와 연관된 스레드를 추적한다. 예를 들어, 컴퓨팅 디바이스(100)가 명령어 트레이스(132)의 시작에서 첫번째 명령어를 현재 판독하고 있는 경우, 활성 스레드 추적기 및 현재의 스레드 추적기의 값들은 동일할 것이다. 다음에, 컴퓨팅 디바이스(100)가 첫번째 명령어와 동일한 스레드와 연관된 명령어를 판독하는 경우, 활성 스레드 추적기 및 현재의 스레드 추적기의 값들은 여전히 동일할 것이다. 그러나, 두번째 명령어가 첫번째 명령어와는 상이한 스레드와 연관되는 경우, 현재의 스레드 추적기의 값은 새로운 스레드를 반영하도록 변경될 것이다.
블록(612)에서, 컴퓨팅 디바이스(100)는 명령어 트레이스(132)로부터 다음 명령어를 판독한다. 블록(612)에서 판독된 명령어 라인은, 시각화 시스템(124)이 명령어의 텍스트 및 그래픽 시뮬레이션들을 생성할 필요가 있는 명령어에 대한 정보, 예를 들어, 명령어 타입, 연상 스트링(mnemonic string), 메모리 연산들 및 인수들을 포함한다. 컴퓨팅 디바이스(100)가 명령어 트레이스(132)에서의 최종 명령어를 판독한 경우에는(블록(614)), 블록(616)에서, 컴퓨팅 디바이스(100)는 활성 스레드들 어레이에 최종 청크(최종 명령어가 그것의 일부임)에 대한 정보를 부가한다. 활성 스레드들 어레이는 프로그램 실행의 시각화에 필요한 청크 기반 정보를 저장한다. 컴퓨팅 디바이스(100)가 파일의 끝에 도달하지 않은 경우에는, 블록(618)에서, 컴퓨팅 디바이스(100)는 현재 판독된 명령어 라인이 현재 활성 스레드 또는 새로운 스레드와 연관되는지를 확인하기 위해서 체크한다. 그렇게 하기 위해서, 컴퓨팅 디바이스(100)는 현재의 스레드 추적기의 값과 활성 스레드 추적기의 값을 비교할 수 있다. 현재 판독되고 있는 명령어 라인이 새로운 스레드와 연관되는 경우에는, 블록들(620 및 622)에서, 컴퓨팅 디바이스(100)는 활성 스레드들 어레이에 현재의 청크(예를 들어, 이전에 판독된 명령어가 속하는 청크)를 부가하고, 새로운 스레드에 필요한 대로 스레드들 컨테이너를 동적으로 리사이징하고, 새로운 스레드에 대한 컨테이너를 초기화하고, 새로운 스레드가 지금 활성 스레드임을 나타내기 위해 활성 스레드 추적기를 업데이트한다. 스레드들 컨테이너는 실행된 스레드들 전부에 대한 데이터를 유지하는 데이터 저장소이다. 스레드들 컨테이너의 동적 리사이징은 컴퓨팅 디바이스(100)가 다양한 크기들의 임의의 개수의 스레드를 사전에 그 정보를 알지 못하고 핸들링하는 것을 허용한다. 다시 말하면, 일부 실시예들에서, 컴퓨팅 디바이스(100)는, 얼마나 많은 스레드들이 레코딩된 프로그램 실행에 수반되는지 또는 그들의 크기들을 미리 알지 못하고, 명령어 트레이스들(132)을 줄인다(pare). 그 결과, 컴퓨팅 디바이스(100)는 단지 명령어 트레이스들(132)을 한번 판독할 필요가 있다.
현재의 명령어 라인이 이전에 판독된 명령어 라인과 동일한 스레드를 수반하든지 또는 새로운 스레드를 수반하든지 간에, 컴퓨팅 디바이스(100)는 경우에 따라 블록(618) 또는 블록(622)으로부터 블록(624)으로 진행한다. 블록(624)에서, 컴퓨팅 디바이스(100)는 명령어를 처리하여, 시각화에 필요한 명령어 정보를 준비한다. 블록(626)에서, 컴퓨팅 디바이스(100)는 명령어 타입을 설정하고, 명령어에 대한 시뮬레이팅된 실행 시간을 그것의 명령어 타입에 기초하여 결정한다. 예를 들어, "로드(load)" 명령어들은 "스토어(store)" 명령어들보다 2배 빠른 실행 시간을 갖는 것으로서 정의될 수 있다. 다른 타입의 명령어들은 동일하거나 유사한 실행 시간들을 가질 수 있다. 일부 실시예들에서, 명령어들의 실행 시간들은 전술한 바와 같이 시각적 피처들(338)의 길이 치수를 결정하는데 이용된다.
블록(628)에서, 컴퓨팅 디바이스(100)는 명령어 트레이스(132)로부터 판독된 명령어 라인에 기초하여 현재의 명령어에 대한 명령어 포인터 값을 설정한다. 일부 실시예들에서, 명령어 포인터 값은, 시각화 중에, 명령어 트레이스(132)의 명령어 라인과 연관되는 (예를 들어, 로그 파일(130)에서의) 실제 분해된(disassembled) 바이너리 코드를 뷰어가 다시 참조하는 것을 허용하는데 이용된다. 이것은 디버깅 목적을 위해 그리고/또는 다른 이유로 유용할 수 있다. 블록(630)에서, 컴퓨팅 디바이스(100)는 명령어 트레이스(132)에서 제공된 정보에 기초하여 현재의 명령어와 연관된 연상 스트링을 설정한다. 예를 들어, 로그 파일(130)은 현재의 명령어의 바이너리 표현을 포함할 수 있는 한편, 연상은 예를 들어 어셈블리 코드 또는 소스 코드에서 이용될 수 있는 바이너리 피연산자(예를 들어, "스토어", "로드", "점프" 등)의 인간 판독가능한 등가물이다. 연상은 변환 테이블 또는 표준 분해기 유틸리티(standard disassembler utility)를 이용함으로써 결정될 수 있는데, 이는 종종 컴퓨팅 디바이스(100) 상에 설치된 운영 체제를 구비한다. 현재의 명령어에 대한 전술한 정보 모두를 이용하여, 컴퓨팅 디바이스(100)는 현재의 청크에 대한 데이터 저장소 또는 컨테이너로 명령어 정보를 삽입하는 것을 진행한다. 위에 언급된 바와 같이, 시각화에 필요한 전술한 정보는 청크에 의해 배열된 다음, 청크 기반 정보는 스레드들 어레이에 저장되는데, 이는 시각화 프로세스(예를 들어, 동적 리플레이 모듈(212))에 대한 입력의 역할을 한다. 일부 실시예들에서, 스레드들 어레이는 그래픽 표현(134)의 일부로서 또는 그것에 저장될 수 있다.
이하, 도 7을 참조하면, 예를 들어 실행가능한 명령어들, 모듈들, 루틴들, 로직 유닛들 또는 하드웨어 유닛들이나 디바이스들로서 구현되며, 컴퓨팅 디바이스(100)에 의해, 예를 들어 실시간 제어기(310)에 의해 실행될 수 있는 방법(700)이 도시되어 있다. 블록(710)에서, 컴퓨팅 디바이스(100)는 멀티 스레드 소프트웨어 프로그램의 이전에 레코딩된 실행의 시각화(예를 들어, 그래픽 표현(134))을 플레이하라는 요청을 처리한다. 이러한 요청은 전술한 바와 같이 사용자 컨트롤들(122) 중 하나 이상에 의하여 뷰어에 의해 개시되고, 사용자 입력 제어기(316)에 의해 변환될 수 있다. 일부 실시예들에서, 이 요청은 전술한 바와 같이 재생 레이트, 재생 방향, 재생 배향 및/또는 다른 시각화 파라미터들을 포함할 수 있다. 블록(712)에서, 컴퓨팅 디바이스(100)는 시각화의 재생이 현재 일시중지되는지를 판정한다. 재생이 일시중지되는 경우에는, 블록(714)에서, 컴퓨팅 디바이스(100)는 시각화가 프로그램 실행 재생의 끝에 도달하였는지를 판정한다. 다시 말하면, 컴퓨팅 디바이스(100)는 레코딩된 실행 중에 실행되는 최종 명령어에 대한 시각적 피처들(338)이 디스플레이되고 있는지를 판정한다. 최종 명령어가 디스플레이되고 있는 경우에는, 블록(716)에서, 컴퓨팅 디바이스(100)는 시뮬레이팅된 클록 값 및 최종 클록 값을 리셋한다. 시뮬레이팅된 클록 값은 시각화의 전체 클록 시간, 즉 리플레이의 시작 이래 경과한 시간을 추적한다. 최종 클록 값은 실행 스트림에서 현재 디스플레이된 포인트의 클록 값, 예를 들어 오리지널 시뮬레이션 중에 명령어가 실행된 클록 시간을 추적한다. 뷰 입력들에 응답하여 이들 클록 값들을 추적하고 조정하는 것은 컴퓨팅 디바이스(100)가 인보크되는 횟수에 상관없이 프로그램 실행 중에 경과한 시간의 정확한 지각을 시스템(124)이 뷰어에게 제공하는 것을 허용한다. 실행 재생의 끝에 도달하지 않은 경우에는, 블록(718)에서, 최종 시각화 요청(예를 들어, 최종 뷰어 입력)부터의 경과 시간이 계산된다. 블록(720)에서, 컴퓨팅 디바이스(100)는 이 요청이 순방향 재생에 대한 것인지 또는 역방향 재생에 대한 것인지를 판정한다. 블록들(722 및 724)에서, 컴퓨팅 디바이스(100)는 시뮬레이팅된 클록을 그에 따라 조정한다(예를 들어, 클록 시간을 증가시키거나 감소시킨다). 시뮬레이팅된 클록은 클록 레이트 및 최종 시각화 요청 이래 경과한 시간의 양에 기초하여 조정된다. 클록 레이트는 전술한 바와 같이 뷰어에 의해 조정될 수 있는 시뮬레이션의 속도에 대응한다. 예를 들어, 일부 실시예들에서, 클록 레이트는 10x(현재의 클록 레이트의 10배)와 같이 한자릿수만큼 증가되거나 감소될 수 있다. 전술한 것에 의해, 컴퓨팅 디바이스(100)는, 선택된 재생 레이트 또는 배율에 상관없이 그리고 시각화가 일시중지되는지, 순방향으로 이동하는지 또는 역방향으로 이동하는지 간에, 시각화 중에 클록 시간의 정확한 묘사를 디스플레이하는 것을 목표로 한다.
이하, 도 8을 참조하면, 예를 들어 실행가능한 명령어들, 모듈들, 루틴들, 로직 유닛들 또는 하드웨어 유닛들이나 디바이스들로서 구현되며, 컴퓨팅 디바이스(100)에 의해, 예를 들어 그래픽 모델러(314) 및/또는 실시간 제어기(310)에 의해 실행될 수 있는 방법(800)이 도시되어 있다. 블록(810)에서, 컴퓨팅 디바이스(100)는 그래픽스 렌더링 프로세스가 이미 초기화되어 있는지를 판정한다. 초기화되어 있지 않은 경우, 블록(812)에서, 전체 시각화(예를 들어, 전체 레코딩된 프로그램 실행의 그래픽 표현(134))의 크기가 정규화되고, 개별 명령어들에 대해 폴리곤 크기들이 결정된다. 시각화 크기를 정규화하는 것은 레코딩된 소프트웨어 프로그램(126)의 전체 실행 시간에 상관없이 시스템(124)이 시각화를 디스플레이하는 것을 허용한다. 즉, 시각화 루틴은 시각적 피처들(338)의 전체 크기(예를 들어, 직사각형들의 길이)를 계산하고, 프로그램 실행이 얼마나 길든지 또는 짧든지, 요청되는 경우에 시스템(124)이 전체 시각화를 항상 디스플레이할 수 있도록 전체 실행 시간에 걸쳐 그것을 고르게 분할한다. 일부 실시예들에서, 이들 값들은 그래픽 표현(134)의 일부로서 또는 그것에 저장될 수 있다. 블록(814)에서, 컴퓨팅 디바이스(100)는 디스플레이(120) 상에서 각각의 스레드에 대한 디스플레이 동작을 수행하는데, 예를 들어 각각의 스레드에 할당된 컬러로 적용가능한 폴리곤을 드로잉한다. 이것을 행하기 위해서, 컴퓨팅 디바이스(100)는, 블록(816)에서, 각각의 청크와 관련하여 디스플레이할 클록 값을 계산하고, 블록(818)에서, 이 클록 값이 청크의 전부 또는 일부를 디스플레이할 시뮬레이팅된 클록 시간 미만인지를 판정한다. 다시 말하면, 컴퓨팅 디바이스(100)는 블록(820)에서 그것이 현재의 청크의 전부 또는 일부를 디스플레이할 수 있는지를 판정한다. 디스플레이할 수 없는 경우에는, 청크는 디스플레이되지 않는다. 그러나, 디스플레이할 수 있는 경우에는, 블록(820)에서, 컴퓨팅 디바이스(100)는 전술한 시각화 파라미터들에 따라 이용가능한 클록 시간을 고려하여 그것이 디스플레이할 수 있는 청크의 전부 또는 일부를 디스플레이한다. 예를 들어, 현재의 청크에서의 명령어들 모두가 현재의 시뮬레이팅된 클록 시간 미만인 클록 값을 갖는 경우, 전체 청크에 대한 시각적 피처들(338)이 디스플레이될 것이다. 그러나, 이러한 클록 시간이 시뮬레이팅된 클록 시간보다 큰 경우, 컴퓨팅 디바이스(100)는, 시뮬레이팅된 클록 시간에 도달할 때까지, 한번에 하나의 명령어에 대한 시각적 피처들(338)을 디스플레이한다. 블록(822)에서, 컴퓨팅 디바이스(100)는 필요에 따라 오버플로우 또는 언더플로우에 대해 시뮬레이팅된 클록을 재조정(realign)한다. 순방향 재생 실행이 실행에서 최종 명령어를 넘을 때에는 오버플로우에 도달하는 한편, 역방향 재생 시간이 실행에서 첫번째 명령어를 넘을 때에는 언더플로우에 도달한다.
이하, 도 9 내지 도 11을 참조하면, 예를 들어 디스플레이(120) 상에 디스플레이될 수 있는 멀티 스레드 소프트웨어 프로그램의 레코딩된 실행의 예시적인 시각화들이 도시되어 있다. 시각화(900)는 전술한 명령어 정보의 인간 판독가능한 버전을 포함하는 텍스트 명령어 시뮬레이션(910)을 도시한다. 텍스트 명령어 시뮬레이션(910)에서, 명령어 라인(918)은 그것이 시뮬레이션에서 현재 실행되고 있는 명령어임을 나타내기 위해 강조된다(예를 들어, 나머지 텍스트와는 상이한 컬러로 제시된다). 시각적 피처들(912, 914 및 916)은 일련의 직사각형 그래픽스로서 구현되고, 피처들(912, 914, 916) 각각의 컬러는 명령어들이 수행된 스레드를 나타낸다. 예를 들어, 피처(912)는 스레드 #1과의 연관성을 나타내는 녹색으로 제시될 수 있는 한편, 피처(914)는 스레드 #2와의 연관성을 나타내는 청색으로 제시될 수 있으며, 피처(916)는 스레드 #3과의 연관성을 나타내는 황색으로 제시될 수 있다. 일부 실시예들에서, 피처들(912, 914, 916) 각각의 수직 높이는 대응하는 스레드에 의해 실행되는 명령어들의 수에 의해 정의된다. 그래서, 예를 들어, 수직으로 더 높은 피처(912, 914, 916)는 수직으로 더 낮은 시각적 피처(912, 914, 916)보다 더 많은 수의 명령어들을 나타낼 수 있다. 다른 실시예들에서, 피처들(912, 914, 916)의 수직 높이는 다른 인자들에 기초하여 가변일 수도 있거나 또는 일정하게 유지될 수도 있다. 피처들(912, 914, 916) 각각의 수평 길이는 각각의 스레드에 의해 실행되는 명령어들의 전체 실행 시간을 나타낸다. 각각의 피처(912, 914, 916) 내의 짙은 영역의 존재는 충돌하는 종속성들을 갖는 어떠한 인터리빙 메모리 액세스들 없이 명령어들이 실행되는 것을 나타낸다. 그러므로, 시각적 피처들(912, 914, 916) 각각 내의 짙은 영역들 각각의 크기는 어떠한 동기화 또는 일관성 충돌 이슈들 없이 실행된 명령어들의 청크들을 나타낸다. 이와 같이, 짙은 영역들의 더 큰 블록들은 어떠한 공유 메모리 통신들 없이 실행된 프로그램 실행의 부분들 및 그에 따른 더 큰 효율을 나타내는 경향이 있다. 피처들(912, 914, 916)에서의 짙은 영역들의 많은 교호하는 더 작은 블록들의 영역들은 스레드들 사이의 공유 메모리 통신들을 나타내는데, 이는 이들 영역들에서의 최적화에 대한 필요성을 나타낼 수 있다. 예를 들어, 피처들(914 및 916)의 비교는 디스플레이된 기간 동안 이들 2개의 스레드들 사이의 다수의 공유 종속성을 나타낸다. 따라서, 시각화(900)는, 이들 명령어들에 의해 호출되는 실제 함수(예를 들어, 기저의 알고리즘)를 최적화하려고 하는 것에 포커싱하는 것보다는, 프로그래머가 이들 스레드들 사이의 공유 메모리 통신들을 감소시키는 방식들을 식별하거나 또는 분리된(disjoint) 공유 메모리 액세스를 생성하는 방식들을 발견하려고(예를 들어, 스레드들이 주어진 시점에 공유 메모리의 별개의 영역들에 액세스하게 하려고) 해야 한다고 제안한다. 다시 말하면, 모든 스레드들에 대한 피처들(912, 914, 916)을 동일한 콘텍스트에서(예를 들어, 오리지널 프로그램 실행 중에 이들이 발생한 것과 동일한 시간에) 디스플레이함으로써, 시각화(900)는 프로그램(126)의 실행 성능을 개선하도록 어드레싱될 수 있는 동기화 경합 이슈들을 드러낸다.
도 10은 뷰어가 뒤로 물러나(step back) 전체 프로그램 실행을 보며 자신의 주의를 집중시킬 관심 영역들을 찾는 것을 시스템(124)이 어떻게 허용하는지를 나타내는 도 9의 시각화의 "줌 아웃" 뷰(1000)의 예를 도시한다. 도 10에서, 일부 실시예들에서, 시각적 피처들(1010, 1012 및 1014)은 상이한 스레드들의 실행에 각각 대응하며, 상이한 컬러들을 이용하여 디스플레이된다. 박스(1016)는, 더 상세한 연구를 위해 줌 인하거나 포커싱할 뷰(1000)의 영역을 선택하기 위해서 뷰어에 의해 뷰(1000)에 걸쳐 움직일 수 있는 사용자 인터페이스 컨트롤을 도시한다. 뷰(1000)는 전술한 바와 같이 공유 메모리 종속성들 및 동기화 경합들을 포함하여 성능 및 정확도 피처들을 식별하는데 유용할 수 있다. 도 11은 도 10의 시각화의 박스(1016)의 "줌 인" 또는 확대 뷰(1100)의 예를 도시한다. 뷰(1100)는 하나의 컬러로 디스플레이되는 박스들로 공유 메모리 경합들의 영역들(예를 들어, 영역들(1112, 1114))을 강조하고, 상이한 컬러로 디스플레이되는 박스들로 공유 메모리 경합들이 비교적 없는 영역들(예를 들어, 영역들(1110, 1116, 1118))을 강조한다. 이러한 방식으로, 시스템(124)은 뷰어가 추가 연구를 위해 시각화의 특정 영역들을 신속하게 확인하고 선택하는 것을 도울 수 있다. 예를 들어, 뷰어는 박스들(1110, 1116, 1118)을 무시하지만 박스들(1112, 1114)에 대해서는 줌 인하도록 선택할 수 있다.
프로그래머가 프로그램(126)의 정확도를 분석하는 것을 지원하기 위해서, 시스템(124)은 전체 프로그램 실행의 시각화(예를 들어, 뷰(1000)) 또는 실행의 특정 세그먼트화된 부분의 시각화(예를 들어, 뷰(1100))를 프로그래머에게 제시할 수 있다. 어느 경우에도, 프로그래머는 전술한 바와 같이 시각화를 이용하여, 스레드들 사이의 공유 메모리 액세스들을 식별할 수 있다. 프로그램의 특정 세그먼트 동안 많은 청크들이 존재한다고 프로그래머가 인지하는 경우, 프로그래머는 예를 들어 전술한 명령어 포인터 정보 및/또는 프로그램 실행과 연관된 디버그 심볼들을 이용하여 이들 청크들과 연관된 프로그램 코드의 부분을 검토할 수 있다. 다음에, 프로그래머는, 이들 청크들이 스레드들 사이의 의도적인 인터리빙들을 나타내는지 또는 프로그램에 그 세그먼트에서의 특정 직렬화(serialization)가 결여되어 있는지를 판정할 수 있다(직렬화는 더 큰 직렬화된 청크들을 초래할 수 있음). 다시 말하면, 시스템(124)은, 공유 메모리 종속성 충돌들 및 동기화 경합들과 같은 성능 피처들을 식별하는 것에 부가하여, 의도된 인터리빙들 또는 그것의 결여가 올바르게 구현되었는지 또는 이러한 프로그래밍 기술들이 의도하지 않게 생략되었는지를 프로그래머가 판정하는 것을 도울 수 있다.
예들
본 명세서에 개시된 기술들의 예시적인 예들이 아래에 제공된다. 기술들의 실시예는 아래에 설명되는 예들 중 임의의 하나 이상 및 임의의 조합을 포함할 수 있다.
예 1은 컴퓨팅 디바이스 상에서의 멀티 스레드 소프트웨어 프로그램의 실행의 성능 및 정확도 피처들을 그래픽으로 디스플레이하기 위한 시각화 시스템을 포함한다. 시각화 시스템은 시각화를 위해 멀티 스레드 소프트웨어 프로그램의 실행 중에 레코딩된 프로그램 실행 데이터를 준비하기 위한 파서 모듈; 및 프로그램 실행 데이터의 애니메이팅된 그래픽 표현을 디스플레이하기 위한 그래픽 모델러를 포함하고, 애니메이팅된 그래픽 표현은 성능 및 정확도 피처들 중 하나 이상을 강조한다. 시각화 시스템은 디스플레이 상에서의 애니메이팅된 그래픽 표현의 디스플레이를 대화식으로 제어하기 위한 제어기 모듈을 또한 포함한다.
예 2는 예 1의 대상을 포함하는데, 여기서 파서 모듈은, 실행 중에 멀티 스레드 소프트웨어 프로그램에 의해 실행되는 명령어들 및 이들 명령어들이 실행된 스레드들에 관한 데이터를 포함하는 명령어 트레이스들을 준비한다.
예 3은 예 1 또는 예 2의 대상을 포함하는데, 여기서 파서 모듈은 멀티 스레드 소프트웨어 프로그램의 실행 중에 청크 기반 메모리 레이스 레코딩 시스템에 의해 발생되는 복수의 로그 파일로부터 프로그램 실행 데이터를 판독한다.
예 4는 예 1 내지 예 3 중 어느 하나의 대상을 포함하는데, 여기서 파서 모듈은 청크들에 따라 데이터를 배열하고, 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 동일한 스레드에 의해 실행되는 복수의 명령어를 나타낸다.
예 5는 예 4의 대상을 포함하는데, 여기서 그래픽 모델러는 복수의 시각적 피처를 디스플레이하고, 각각의 시각적 피처는 동일한 스레드와 연관된 청크들이 동일한 컬러를 이용하여 디스플레이되도록 각각의 청크를 나타내는 컬러를 포함한다.
예 6은 예 5의 대상을 포함하는데, 여기서 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 각각의 시각적 피처는 청크에서의 명령어들의 실행 시간들에 의해 정의된 크기를 갖는 형상을 포함한다.
예 7은 예 6의 대상을 포함하는데, 여기서 형상의 크기는 청크에서의 명령어들의 수에 의해 또한 정의된다.
예 8은 예 1 내지 예 7 중 어느 하나의 대상을 포함하는데, 여기서 그래픽 모델러는 프로그램의 전체 실행 시간에 기초하여 애니메이팅된 그래픽 표현의 크기를 정규화한다.
예 9는 예 1 내지 예 8 중 어느 하나의 대상을 포함하는데, 여기서 애니메이팅된 그래픽 표현은 멀티 스레드 소프트웨어 프로그램의 실행 중에 발생한 공유 메모리 종속성 충돌을 강조한다.
예 10은 예 1 내지 예 9 중 어느 하나의 대상을 포함하는데, 여기서 그래픽 모델러는 애니메이팅된 그래픽 표현의 오프라인 리플레이를 위해 애니메이팅된 그래픽 표현에 관한 데이터를 저장한다.
예 11은 예 10의 대상을 포함하는데, 여기서 제어기 모듈은 애니메이팅된 그래픽 표현의 오프라인 리플레이를 제어한다.
예 12는 예 1 내지 예 11 중 어느 하나의 대상을 포함하는데, 여기서 제어기 모듈은, 애니메이팅된 그래픽 표현의 디스플레이 중에, 애니메이팅된 그래픽 표현의 뷰어로부터 입력을 수신하고, 이 입력에 응답하여 애니메이팅된 그래픽 표현의 디스플레이를 조정한다.
예 13은 예 12의 대상을 포함하는데, 여기서 제어기 모듈은, 애니메이팅된 그래픽 표현의 디스플레이 중에, 뷰어의 입력에 응답하여, 애니메이팅된 그래픽 표현이 디스플레이되는 속도를 증가 및 감소시킨다.
예 14는 예 12 또는 예 13의 대상을 포함하는데, 여기서 제어기 모듈은, 애니메이팅된 그래픽 표현의 디스플레이 중에, 뷰어의 입력에 응답하여, 애니메이팅된 그래픽 표현의 디스플레이의 배율을 변경한다.
예 15는 예 12 내지 예 14 중 어느 하나의 대상을 포함하는데, 여기서 제어기 모듈은, 애니메이팅된 그래픽 표현의 디스플레이 중에, 뷰어의 입력에 응답하여, 애니메이팅된 그래픽 표현의 디스플레이를 회전시킨다.
예 16은 컴퓨팅 디바이스 상에서의 멀티 스레드 소프트웨어 프로그램의 실행의 성능 및 정확도 피처들을 그래픽으로 시각화하기 위한 방법을 포함한다. 이 방법은 멀티 스레드 소프트웨어 프로그램의 실행 중에 청크 기반 메모리 레이스 레코딩 시스템에 의해 레코딩된 프로그램 실행 데이터를 판독하는 단계; 그래픽 시각화를 위해 프로그램 실행 데이터를 준비하는 단계; 프로그램 실행 데이터의 애니메이팅된 그래픽 표현을 디스플레이하는 단계 - 애니메이팅된 그래픽 표현은 성능 및 정확도 피처들 중 하나 이상을 강조함 -; 및 하나 이상의 시각화 파라미터에 응답하여 애니메이팅된 그래픽 표현의 디스플레이를 제어하는 단계를 포함한다.
예 17은 예 16의 대상을 포함하는데, 여기서 이 방법은 청크들에 따라 데이터를 배열하는 단계를 포함하고, 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 동일한 스레드에 의해 실행되는 복수의 명령어를 나타낸다.
예 18은 예 17의 대상을 포함하는데, 여기서 이 방법은 청크들에 관한 복수의 시각적 피처를 디스플레이하는 단계를 포함하고, 각각의 시각적 피처는 동일한 스레드와 연관된 청크들이 동일한 컬러를 이용하여 디스플레이되도록 각각의 청크를 나타내는 컬러를 포함한다.
예 19는 예 18의 대상을 포함하는데, 여기서 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 각각의 청크는 다수의 명령어와 연관되며, 이 방법은, 청크에서의 명령어들의 실행 시간들에 의해 정의된 크기를 갖는 형상을 포함하도록 각각의 시각적 피처를 정의하는 단계를 포함한다.
예 20은 예 16 내지 예 19 중 어느 하나의 대상을 포함하는데, 여기서 이 방법은 프로그램 실행의 크기에 기초하여 애니메이팅된 그래픽 표현의 크기를 구성하는 단계를 포함한다.
예 21은 예 16 내지 예 20 중 어느 하나의 대상을 포함하는데, 여기서 이 방법은 멀티 스레드 소프트웨어 프로그램의 실행 중에 발생한 공유 메모리 종속성 충돌을 애니메이팅된 그래픽 표현에서 강조하는 단계를 포함한다.
예 22는 예 16 내지 예 21 중 어느 하나의 대상을 포함하는데, 여기서 이 방법은, 애니메이팅된 그래픽 표현의 디스플레이 중에, 애니메이팅된 그래픽 표현의 뷰어로부터 입력을 수신하고, 이 입력에 응답하여 애니메이팅된 그래픽 표현의 디스플레이를 조정하는 단계를 포함한다.
예 23은 컴퓨팅 디바이스를 포함하는데, 이 컴퓨팅 디바이스는 프로세서; 및 프로세서에 의해 실행될 때 컴퓨팅 디바이스가 예 16 내지 예 22 중 어느 하나의 방법을 수행하게 하는 복수의 명령어가 저장되어 있는 메모리를 포함한다.
예 24는 저장되어 있는 복수의 명령어를 포함하는 하나 이상의 머신 판독가능 저장 매체를 포함하고, 이들 명령어들은, 실행되는 것에 응답하여 컴퓨팅 디바이스가 예 16 내지 예 22 중 어느 하나의 방법을 수행하게 한다.
예 25는 컴퓨팅 디바이스 상에서의 멀티 스레드 소프트웨어 프로그램의 실행의 성능 및 정확도 피처들을 그래픽으로 시각화하기 위한 시스템을 포함한다. 이 시스템은 멀티 스레드 소프트웨어 프로그램의 실행 중에 청크 기반 메모리 레이스 레코딩 시스템에 의해 레코딩된 프로그램 실행 데이터를 판독하는 수단; 그래픽 시각화를 위해 프로그램 실행 데이터를 준비하는 수단; 프로그램 실행 데이터의 애니메이팅된 그래픽 표현을 디스플레이하는 수단 - 애니메이팅된 그래픽 표현은 성능 및 정확도 피처들 중 하나 이상을 강조함 -; 및 하나 이상의 시각화 파라미터에 응답하여 애니메이팅된 그래픽 표현의 디스플레이를 제어하는 수단을 포함한다.
예 26은 멀티 스레드 소프트웨어 프로그램의 오리지널 실행을 그래픽으로 시각화하기 위한 시각화 시스템용 동적 리플레이 모듈을 포함한다. 동적 리플레이 모듈은 멀티 스레드 소프트웨어 프로그램의 오리지널 실행 중에 레코딩된 프로그램 실행 데이터의 그래픽 표현의 디스플레이를 제어한다. 동적 리플레이 모듈은, 멀티 스레드 소프트웨어 프로그램의 오리지널 실행의 속도를 시뮬레이팅하기 위해 시각화 파라미터들에 따라 디스플레이 상에 프로그램 실행 데이터와 연관된 복수의 시각적 피처를 디스플레이하기 위한 그래픽 모델러를 포함한다. 시각적 피처들은 복수의 컬러를 포함하고, 각각의 컬러는, 오리지널 실행 중에 멀티 스레드 소프트웨어 프로그램의 명령어들이 실행된 상이한 스레드와 연관된다. 동적 리플레이 모듈은, 시각적 피처들의 디스플레이 중에, 디스플레이의 뷰어로부터 시각화 파라미터에 대한 요청된 변경을 수신하고; 요청된 변경에 응답하여, 이 변경에 따라 시각화 파라미터를 업데이트하고; 업데이트된 시각화 파라미터에 따라 시각적 피처들의 디스플레이를 업데이트하기 위해 그래픽 모델러와 통신하기 위한 제어기 모듈을 또한 포함한다.
예 27은 예 26의 대상을 포함하는데, 여기서 시각적 피처들은 청크들과 연관되고, 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 동일한 스레드에 의해 실행되는 복수의 명령어를 나타낸다.
예 28은 예 27의 대상을 포함하는데, 여기서 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 각각의 시각적 피처는 청크에서의 명령어들의 실행 시간들에 의해 정의된 크기를 갖는 형상을 포함한다.
예 29는 예 28의 대상을 포함하는데, 여기서 형상의 크기는 청크에서의 명령어들의 수에 의해 또한 정의된다.
예 30은 예 26 내지 예 29 중 어느 하나의 대상을 포함하는데, 여기서 시각적 피처들은 멀티 스레드 소프트웨어 프로그램의 오리지널 실행 중에 발생한 공유 메모리 종속성 충돌을 나타낸다.
예 31은 예 26 내지 예 30 중 어느 하나의 대상을 포함하는데, 여기서 제어기 모듈은, 요청된 변경에 응답하여, 시각적 피처들이 디스플레이되는 속도를 증가 및 감소시킨다.
예 32는 예 31의 대상을 포함하는데, 여기서 제어기 모듈은 요청된 변경에 응답하여 시각적 피처들의 디스플레이의 배율을 변경한다.
예 33은 멀티 스레드 소프트웨어 프로그램의 오리지널 실행 중에 레코딩된 프로그램 실행 데이터의 그래픽 표현의 디스플레이를 제어하기 위한 방법을 포함한다. 이 방법은, 소프트웨어 프로그램의 오리지널 실행의 속도를 시뮬레이팅하기 위해 시각화 파라미터들에 따라 디스플레이 상에 프로그램 실행 데이터의 복수의 시각적 피처를 디스플레이하는 단계를 포함하고, 시각적 피처들은 복수의 컬러를 포함하고, 각각의 컬러는, 오리지널 실행 중에 멀티 스레드 소프트웨어 프로그램의 명령어들이 실행된 상이한 스레드와 연관된다. 이 방법은, 시각적 피처들의 디스플레이 중에, 시각화 파라미터에 대한 요청된 변경을 수신하는 단계; 요청된 변경에 응답하여, 이 변경에 따라 시각화 파라미터를 업데이트하는 단계; 및 업데이트된 시각화 파라미터에 따라 시각적 피처들의 디스플레이를 업데이트하는 단계를 또한 포함한다.
예 34는 예 33의 대상을 포함하는데, 여기서 이 방법은 청크와 각각의 시각적 피처를 연관시키는 단계를 포함하고, 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 동일한 스레드에 의해 실행되는 복수의 명령어를 나타낸다.
예 35는 예 34의 대상을 포함하는데, 여기서 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 각각의 시각적 피처는 형상을 포함하고, 이 방법은 청크에서의 명령어들의 실행 시간들에 기초하여 형상의 크기를 정의하는 단계를 포함한다.
예 36은 예 35의 대상을 포함하는데, 여기서 이 방법은 청크에서의 명령어들의 수에 기초하여 형상의 크기를 정의하는 단계를 포함한다.
예 37은 예 33 내지 예 36 중 어느 하나의 대상을 포함하는데, 여기서 이 방법은, 요청된 변경에 응답하여, 시각적 피처들이 디스플레이되는 속도를 증가 및 감소시키는 단계를 포함한다.
예 38은 예 33 내지 예 37 중 어느 하나의 대상을 포함하는데, 여기서 이 방법은 요청된 변경에 응답하여 시각적 피처들의 디스플레이의 배율을 변경하는 단계를 포함한다.
예 39는 컴퓨팅 디바이스를 포함하는데, 이 컴퓨팅 디바이스는 프로세서; 및 프로세서에 의해 실행될 때 컴퓨팅 디바이스가 예 33 내지 예 38 중 어느 하나의 방법을 수행하게 하는 복수의 명령어가 저장되어 있는 메모리를 포함한다.
예 40은 저장되어 있는 복수의 명령어를 포함하는 하나 이상의 머신 판독가능 저장 매체를 포함하고, 이들 명령어들은, 실행되는 것에 응답하여 컴퓨팅 디바이스가 예 33 내지 예 38 중 어느 하나의 방법을 수행하게 한다.
예 41은 멀티 스레드 소프트웨어 프로그램의 오리지널 실행 중에 레코딩된 프로그램 실행 데이터의 그래픽 표현의 디스플레이를 제어하기 위한 시스템을 포함한다. 이 시스템은, 소프트웨어 프로그램의 오리지널 실행의 속도를 시뮬레이팅하기 위해 시각화 파라미터들에 따라 디스플레이 상에 프로그램 실행 데이터의 복수의 시각적 피처를 디스플레이하는 수단을 포함하고, 시각적 피처들은 복수의 컬러를 포함하고, 각각의 컬러는, 오리지널 실행 중에 멀티 스레드 소프트웨어 프로그램의 명령어들이 실행된 상이한 스레드와 연관된다. 이 시스템은, 시각적 피처들의 디스플레이 중에, 시각화 파라미터에 대한 요청된 변경을 수신하는 수단; 요청된 변경에 응답하여, 시각화 파라미터를 업데이트하는 수단; 및 업데이트된 시각화 파라미터에 따라 시각적 피처들의 디스플레이를 업데이트하는 수단을 또한 포함한다.

Claims (30)

  1. 복수의 스레드를 갖는 소프트웨어 프로그램의 실행의 성능 및 정확도 피처들을 그래픽으로 디스플레이하기 위한 컴퓨팅 디바이스로서,
    명령어 트레이스들을 생성하기 위해 상기 소프트웨어 프로그램의 실행 중에 청크 기반 메모리 레이스 레코딩 시스템(chunk-based memory race recording system)에 의해 레코딩된 프로그램 실행 데이터를 파싱하는(parse) 파서 모듈 - 상기 프로그램 실행 데이터는 상기 소프트웨어 프로그램의 청크들의 실행 순서를 표시하고, 상기 명령어 트레이스들은 상기 프로그램 실행 데이터의 적어도 일부의 인간 판독가능 표현들을 포함함 -;
    상기 명령어 트레이스들에 적어도 기초하여 상기 소프트웨어 프로그램의 실행의 애니메이팅된 그래픽 표현을 디스플레이하기 위한 그래픽 모델러(graphical modeler) - 상기 소프트웨어 프로그램의 상기 청크들의 상기 실행 순서의 표시를 제공하고 복수의 실행 시간의 각각의 실행 시간에서 상기 복수의 스레드 중 어느 스레드가 실행되었는지의 표시를 제공하기 위해, 상기 애니메이팅된 그래픽 표현은 상기 성능 및 정확도 피처들 중 하나 이상을 강조함 -; 및
    디스플레이 상에서의 상기 애니메이팅된 그래픽 표현의 디스플레이를 대화식으로 제어하기 위한 제어기 모듈
    을 포함하는 컴퓨팅 디바이스.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 복수의 스레드의 각각의 스레드는 복수의 청크를 포함하고, 조합된 복수의 청크는 상기 복수의 스레드의 복수의 청크 각각을 포함하고, 상기 파서 모듈은 상기 조합된 복수의 청크에 따라 상기 프로그램 실행 데이터를 배열하고, 상기 조합된 복수의 청크의 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 대응하는 스레드에 의해 실행되는 복수의 명령어를 나타내는 컴퓨팅 디바이스.
  5. 제4항에 있어서,
    상기 그래픽 모델러는 복수의 시각적 피처를 디스플레이하고, 각각의 시각적 피처는, 각각의 청크가 동일한 스레드와 연관된 모든 다른 청크에 대해 사용되는 동일한 컬러를 이용하여 디스플레이되도록, 복수의 청크 각각을 나타내는 컬러를 포함하는 컴퓨팅 디바이스.
  6. 제5항에 있어서,
    상기 조합된 복수의 청크의 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 상기 복수의 시각적 피처의 각각의 시각적 피처는 상기 연관된 청크에서의 명령어들의 실행 시간들에 의해 정의된 크기를 갖는 형상을 포함하는 컴퓨팅 디바이스.
  7. 제6항에 있어서,
    상기 형상의 크기는 상기 연관된 청크에서의 명령어들의 전체 수에 의해 또한 정의되는 컴퓨팅 디바이스.
  8. 제1항에 있어서,
    상기 그래픽 모델러는 상기 프로그램의 전체 실행 시간에 기초하여 상기 애니메이팅된 그래픽 표현의 크기를 정규화하는 컴퓨팅 디바이스.
  9. 제1항에 있어서,
    상기 애니메이팅된 그래픽 표현은 상기 소프트웨어 프로그램의 실행 중에 발생한 공유 메모리 종속성 충돌(shared memory dependency conflict)을 강조하는 컴퓨팅 디바이스.
  10. 제1항에 있어서,
    상기 그래픽 모델러는 상기 애니메이팅된 그래픽 표현의 오프라인 리플레이를 위해 상기 애니메이팅된 그래픽 표현에 관한 데이터를 저장하는 컴퓨팅 디바이스.
  11. 제10항에 있어서,
    상기 제어기 모듈은 상기 애니메이팅된 그래픽 표현의 오프라인 리플레이를 제어하는 컴퓨팅 디바이스.
  12. 제1항에 있어서,
    상기 제어기 모듈은, 상기 애니메이팅된 그래픽 표현의 디스플레이 중에, 상기 애니메이팅된 그래픽 표현의 뷰어로부터 입력을 수신하고 상기 입력에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이를 조정하는 컴퓨팅 디바이스.
  13. 제12항에 있어서,
    상기 제어기 모듈은, 상기 애니메이팅된 그래픽 표현의 디스플레이 중에, 상기 뷰어의 입력에 응답하여 상기 애니메이팅된 그래픽 표현이 디스플레이되는 속도를 증가 및 감소시키는 컴퓨팅 디바이스.
  14. 제12항에 있어서,
    상기 제어기 모듈은, 상기 애니메이팅된 그래픽 표현의 디스플레이 중에, 상기 뷰어의 입력에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이의 배율을 변경하는 컴퓨팅 디바이스.
  15. 제12항에 있어서,
    상기 제어기 모듈은, 상기 애니메이팅된 그래픽 표현의 디스플레이 중에, 상기 뷰어의 입력에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이를 회전시키는 컴퓨팅 디바이스.
  16. 컴퓨팅 디바이스 상에서의 복수의 스레드를 갖는 소프트웨어 프로그램의 실행의 성능 및 정확도 피처들을 그래픽으로 시각화하기 위한 방법으로서,
    (i) 상기 소프트웨어 프로그램의 실행 중에 청크 기반 메모리 레이스 레코딩 시스템에 의해 레코딩된 프로그램 실행 데이터를 판독하는 단계 - 상기 프로그램 실행 데이터는 상기 소프트웨어 프로그램의 청크들의 실행 순서를 표시함 -;
    (ii) 상기 프로그램 실행 데이터에 기초하여 명령어 트레이스들을 생성하는 단계 - 상기 명령어 트레이스들은 상기 프로그램 실행 데이터의 적어도 일부의 인간 판독가능 표현들을 포함함 -;
    (iii) 상기 명령어 트레이스들에 적어도 기초하여 상기 소프트웨어 프로그램의 실행의 애니메이팅된 그래픽 표현을 디스플레이하는 단계 - 상기 소프트웨어 프로그램의 상기 청크들의 상기 실행 순서의 표시를 제공하고 복수의 실행 시간의 각각의 실행 시간에서 상기 복수의 스레드 중 어느 스레드가 실행되었는지의 표시를 제공하기 위해, 상기 애니메이팅된 그래픽 표현은 상기 성능 및 정확도 피처들 중 하나 이상을 강조함 -; 및
    하나 이상의 시각화 파라미터에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이를 제어하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서,
    상기 복수의 스레드의 각각의 스레드는 복수의 청크를 갖고, 상기 방법은 상기 복수의 청크에 따라 상기 프로그램 실행 데이터를 배열하는 단계를 포함하고, 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 대응하는 스레드에 의해 실행되는 복수의 명령어를 나타내는 방법.
  18. 제17항에 있어서,
    상기 복수의 청크에 관한 복수의 시각적 피처를 디스플레이하는 단계를 포함하고, 각각의 시각적 피처는, 각각의 청크가 대응하는 복수의 청크의 모든 다른 청크에 대해 사용되는 동일한 컬러를 이용하여 디스플레이되도록, 각각의 청크를 나타내는 컬러를 포함하는 방법.
  19. 제18항에 있어서,
    상기 복수의 청크의 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 각각의 청크는 다수의 명령어와 연관되며, 상기 방법은, 상기 청크에서의 명령어들의 실행 시간들에 의해 정의된 크기를 갖는 형상을 포함하도록 상기 복수의 시각적 피처의 각각의 시각적 피처를 정의하는 단계를 포함하는 방법.
  20. 제16항에 있어서,
    상기 프로그램 실행의 크기에 기초하여 상기 애니메이팅된 그래픽 표현의 크기를 구성하는 단계를 포함하는 방법.
  21. 제16항에 있어서,
    상기 소프트웨어 프로그램의 실행 중에 발생한 공유 메모리 종속성 충돌을 상기 애니메이팅된 그래픽 표현에서 강조하는 단계를 포함하는 방법.
  22. 제16항에 있어서,
    상기 애니메이팅된 그래픽 표현의 디스플레이 중에, 상기 애니메이팅된 그래픽 표현의 뷰어로부터 입력을 수신하고 상기 입력에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이를 조정하는 단계를 포함하는 방법.
  23. 삭제
  24. 저장되어 있는 복수의 명령어를 포함하는 하나 이상의 비일시적 머신 판독가능 저장 매체로서,
    상기 명령어들은, 실행되는 것에 응답하여 컴퓨팅 디바이스가
    (i) 소프트웨어 프로그램의 실행 중에 청크 기반 메모리 레이스 레코딩 시스템에 의해 레코딩된 프로그램 실행 데이터를 판독하는 단계 - 상기 프로그램 실행 데이터는 상기 소프트웨어 프로그램의 청크들의 실행 순서를 표시함 -;
    (ii) 상기 프로그램 실행 데이터에 기초하여 명령어 트레이스들을 생성하는 단계 - 상기 명령어 트레이스들은 상기 프로그램 실행 데이터의 적어도 일부의 인간 판독가능 표현들을 포함함 -;
    (iii) 상기 명령어 트레이스들에 적어도 기초하여 상기 소프트웨어 프로그램의 실행의 애니메이팅된 그래픽 표현을 디스플레이하는 단계 - 상기 소프트웨어 프로그램의 상기 청크들의 상기 실행 순서의 표시를 제공하고 복수의 실행 시간의 각각의 실행 시간에서 상기 복수의 스레드 중 어느 스레드가 실행되었는지의 표시를 제공하기 위해, 상기 애니메이팅된 그래픽 표현은 성능 및 정확도 피처들 중 하나 이상을 강조함 -; 및
    하나 이상의 시각화 파라미터에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이를 제어하는 단계
    를 포함하는 방법을 수행하게 하는 하나 이상의 비일시적 머신 판독가능 저장 매체.
  25. 제24항에 있어서,
    상기 복수의 스레드의 각각의 스레드는 복수의 청크를 갖고, 상기 방법은 상기 복수의 청크에 따라 상기 프로그램 실행 데이터를 배열하는 단계를 포함하고, 각각의 청크는 충돌하는 메모리 액세스로 인터리빙되지 않고 대응하는 스레드에 의해 실행되는 복수의 명령어를 나타내는 하나 이상의 비일시적 머신 판독가능 저장 매체.
  26. 제25항에 있어서,
    상기 방법은 상기 복수의 청크에 관한 복수의 시각적 피처를 디스플레이하는 단계를 포함하고, 각각의 시각적 피처는, 각각의 청크가 대응하는 복수의 청크의 모든 다른 청크에 대해 사용되는 동일한 컬러를 이용하여 디스플레이되도록, 각각의 청크를 나타내는 컬러를 포함하는 하나 이상의 비일시적 머신 판독가능 저장 매체.
  27. 제26항에 있어서,
    상기 복수의 청크의 각각의 청크에서의 각각의 명령어는 실행 시간을 갖고, 각각의 청크는 다수의 명령어와 연관되며, 상기 방법은, 상기 청크에서의 명령어들의 실행 시간들에 의해 정의된 크기를 갖는 형상을 포함하도록 상기 복수의 시각적 피처의 각각의 시각적 피처를 정의하는 단계를 포함하는 하나 이상의 비일시적 머신 판독가능 저장 매체.
  28. 제24항에 있어서,
    상기 방법은 상기 프로그램 실행의 크기에 기초하여 상기 애니메이팅된 그래픽 표현의 크기를 구성하는 단계를 포함하는 하나 이상의 비일시적 머신 판독가능 저장 매체.
  29. 제24항에 있어서,
    상기 방법은 상기 소프트웨어 프로그램의 실행 중에 발생한 공유 메모리 종속성 충돌을 상기 애니메이팅된 그래픽 표현에서 강조하는 단계를 포함하는 하나 이상의 비일시적 머신 판독가능 저장 매체.
  30. 제24항에 있어서,
    상기 방법은 상기 애니메이팅된 그래픽 표현의 디스플레이 중에, 상기 애니메이팅된 그래픽 표현의 뷰어로부터 입력을 수신하고 상기 입력에 응답하여 상기 애니메이팅된 그래픽 표현의 디스플레이를 조정하는 단계를 포함하는 하나 이상의 비일시적 머신 판독가능 저장 매체.
KR1020157021009A 2013-03-13 2013-03-13 성능 및 정확도에 대한 멀티 스레드 소프트웨어 프로그램들의 레코딩된 실행들의 시각화 KR101669783B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/030745 WO2014142820A1 (en) 2013-03-13 2013-03-13 Visualizing recorded executions of multi-threaded software programs for performance and correctness

Publications (2)

Publication Number Publication Date
KR20150103262A KR20150103262A (ko) 2015-09-09
KR101669783B1 true KR101669783B1 (ko) 2016-11-09

Family

ID=51537242

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157021009A KR101669783B1 (ko) 2013-03-13 2013-03-13 성능 및 정확도에 대한 멀티 스레드 소프트웨어 프로그램들의 레코딩된 실행들의 시각화

Country Status (6)

Country Link
US (1) US20140366006A1 (ko)
EP (1) EP2972841B1 (ko)
JP (1) JP6132065B2 (ko)
KR (1) KR101669783B1 (ko)
CN (1) CN104969191B (ko)
WO (1) WO2014142820A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8732670B1 (en) * 2010-06-29 2014-05-20 Ca, Inc. Ensuring determinism during programmatic replay in a virtual machine
US9519568B2 (en) 2012-12-31 2016-12-13 Nvidia Corporation System and method for debugging an executing general-purpose computing on graphics processing units (GPGPU) application
US9471456B2 (en) * 2013-05-15 2016-10-18 Nvidia Corporation Interleaved instruction debugger
WO2015027403A1 (en) * 2013-08-28 2015-03-05 Hewlett-Packard Development Company, L.P. Testing multi-threaded applications
JP6102825B2 (ja) * 2014-05-30 2017-03-29 カシオ計算機株式会社 動画データ再生装置、動画データ再生方法及びプログラム
CN105186463B (zh) * 2015-08-31 2018-03-16 许继集团有限公司 一种防止智能变电站继电保护装置误操作的方法
US10042737B2 (en) * 2016-08-31 2018-08-07 Microsoft Technology Licensing, Llc Program tracing for time travel debugging and analysis
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US10489273B2 (en) 2016-10-20 2019-11-26 Microsoft Technology Licensing, Llc Reuse of a related thread's cache while recording a trace file of code execution
US10310963B2 (en) 2016-10-20 2019-06-04 Microsoft Technology Licensing, Llc Facilitating recording a trace file of code execution using index bits in a processor cache
US10310977B2 (en) 2016-10-20 2019-06-04 Microsoft Technology Licensing, Llc Facilitating recording a trace file of code execution using a processor cache
US10198341B2 (en) * 2016-12-21 2019-02-05 Microsoft Technology Licensing, Llc Parallel replay of executable code
US9965376B1 (en) * 2017-01-06 2018-05-08 Microsoft Technology Licensing, Llc Speculative replay of executable code
US10353801B2 (en) * 2017-02-28 2019-07-16 International Business Machines Corporation Abnormal timing breakpoints
US10318332B2 (en) 2017-04-01 2019-06-11 Microsoft Technology Licensing, Llc Virtual machine execution tracing
WO2018195030A1 (en) 2017-04-20 2018-10-25 Kateeva, Inc. Analysis of material layers on surfaces, and related systems and methods
US11113138B2 (en) 2018-01-02 2021-09-07 Carrier Corporation System and method for analyzing and responding to errors within a log file
US10649884B2 (en) 2018-02-08 2020-05-12 The Mitre Corporation Methods and system for constrained replay debugging with message communications
US10977075B2 (en) * 2019-04-10 2021-04-13 Mentor Graphics Corporation Performance profiling for a multithreaded processor
US11762858B2 (en) 2020-03-19 2023-09-19 The Mitre Corporation Systems and methods for analyzing distributed system data streams using declarative specification, detection, and evaluation of happened-before relationships

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060101413A1 (en) * 2004-08-12 2006-05-11 Ntt Docomo, Inc. Software operation monitoring apparatus and software operation monitoring method

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0792774B2 (ja) * 1989-01-17 1995-10-09 東京電力株式会社 複数プロセスの関係表示方式
JPH04337843A (ja) * 1991-05-15 1992-11-25 Hitachi Ltd プログラム動作表示方法
JPH07219807A (ja) * 1994-02-08 1995-08-18 Toshiba Corp プログラマブルコントローラシステム
US5872990A (en) * 1997-01-07 1999-02-16 International Business Machines Corporation Reordering of memory reference operations and conflict resolution via rollback in a multiprocessing environment
KR100248376B1 (ko) * 1997-10-28 2000-03-15 정선종 동적-비주얼 통합 병렬 디버깅 장치 및 디버깅 방법
US6230313B1 (en) * 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US6226787B1 (en) * 1999-01-25 2001-05-01 Hewlett-Packard Company Visualization method and system for dynamically displaying operations of a program
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
US6405326B1 (en) * 1999-06-08 2002-06-11 International Business Machines Corporation Limited Timing related bug detector method for detecting data races
US6854108B1 (en) * 2000-05-11 2005-02-08 International Business Machines Corporation Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors
US6817009B2 (en) * 2000-11-30 2004-11-09 Hewlett-Packard Development Company, L.P. Method and apparatus for verifying data local to a single thread
US7774172B1 (en) * 2003-12-10 2010-08-10 The Mathworks, Inc. Method for using a graphical debugging tool
US7458064B2 (en) * 2005-04-11 2008-11-25 Microsoft Corporation Methods and apparatus for generating a work item in a bug tracking system
US7698686B2 (en) * 2005-04-15 2010-04-13 Microsoft Corporation Method and apparatus for performance analysis on a software program
US10353797B2 (en) * 2006-12-29 2019-07-16 International Business Machines Corporation Using memory tracking data to inform a memory map tool
US20110004827A1 (en) * 2008-02-29 2011-01-06 The Regents Of The University Of California Scalable, Cross-Platform Method for Multi-Tile Display Systems
US8499287B2 (en) * 2008-06-23 2013-07-30 Microsoft Corporation Analysis of thread synchronization events
US8595702B2 (en) * 2009-03-13 2013-11-26 Microsoft Corporation Simultaneously displaying multiple call stacks in an interactive debugger
US8069446B2 (en) * 2009-04-03 2011-11-29 Microsoft Corporation Parallel programming and execution systems and techniques
US20110078666A1 (en) * 2009-05-26 2011-03-31 University Of California System and Method for Reproducing Device Program Execution
US8490062B2 (en) * 2009-08-17 2013-07-16 Siemens Corporation Automatic identification of execution phases in load tests
US8601442B2 (en) * 2009-09-30 2013-12-03 Microsoft Corporation Marker correlation of application constructs with visualizations
US8601444B2 (en) * 2009-10-27 2013-12-03 Microsoft Corporation Analysis and timeline visualization of thread activity
CN102053906A (zh) * 2009-10-30 2011-05-11 国际商业机器公司 用于收集程序运行时信息的系统和方法
JP2011243110A (ja) * 2010-05-20 2011-12-01 Renesas Electronics Corp 情報処理装置
US8527970B1 (en) * 2010-09-09 2013-09-03 The Boeing Company Methods and systems for mapping threads to processor cores
US8904128B2 (en) * 2011-06-08 2014-12-02 Hewlett-Packard Development Company, L.P. Processing a request to restore deduplicated data
US8935673B1 (en) * 2012-11-30 2015-01-13 Cadence Design Systems, Inc. System and method for debugging computer program based on execution history

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060101413A1 (en) * 2004-08-12 2006-05-11 Ntt Docomo, Inc. Software operation monitoring apparatus and software operation monitoring method

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
‘Architecting a Chunk-based Memory Race Recorder in Modern CMPs’, Gilles Pokam 외 2명, MICRO’09(2009.12)*

Also Published As

Publication number Publication date
WO2014142820A1 (en) 2014-09-18
EP2972841A4 (en) 2017-01-11
JP6132065B2 (ja) 2017-05-24
KR20150103262A (ko) 2015-09-09
EP2972841A1 (en) 2016-01-20
JP2016514318A (ja) 2016-05-19
CN104969191A (zh) 2015-10-07
EP2972841B1 (en) 2020-02-12
CN104969191B (zh) 2019-02-26
US20140366006A1 (en) 2014-12-11

Similar Documents

Publication Publication Date Title
KR101669783B1 (ko) 성능 및 정확도에 대한 멀티 스레드 소프트웨어 프로그램들의 레코딩된 실행들의 시각화
US9875009B2 (en) Hierarchically-organized control galleries
KR101862180B1 (ko) 스푸프 클록의 사용 및 미세 수준 주파수 제어를 통한 역 호환성
US7095416B1 (en) Facilitating performance analysis for processing
US8959442B2 (en) Memory allocation visualization for unmanaged languages
AU2015315608B2 (en) Layout engine
US9268875B2 (en) Extensible content focus mode
CN104995622A (zh) 用于图形函数的合成器支持
US20220152516A1 (en) Videogame telemetry data and game asset tracker for session recordings
US20210326179A1 (en) Progress visualization of computational job
US10387547B2 (en) Layout engine for creating a visual layout tree for a document
US10198784B2 (en) Capturing commands in a multi-engine graphics processing unit
JP5687603B2 (ja) プログラム変換装置、プログラム変換方法、および変換プログラム
US20170017621A1 (en) Detecting and animating a change in position of a visual layout node of a visual layout tree
US8539171B2 (en) Analysis and timeline visualization of storage channels
US20150091930A1 (en) Monitoring subject displaying device and method, and monitoring subject displaying computer program
Weninger et al. 5.2 Memory Cities
US10402478B2 (en) Linking visual layout nodes of a visual layout tree using positioning pointers
US11003833B2 (en) Adding visual description nodes to a visual description tree during layout
JP2023046299A (ja) コンピュータプログラム、システムおよび方法(ログファイル内のエラーに関連するコード文のブロックの視覚化の生成)
CN113888120A (zh) 考勤记录的输入方法、装置、存储介质及终端设备
Ocklind et al. CC Data Visualization Library: Visualizing large amounts of scientific data through interactive graph widgets on ordinary workstations

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant