KR101991680B1 - 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 - Google Patents
소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 Download PDFInfo
- Publication number
- KR101991680B1 KR101991680B1 KR1020120007383A KR20120007383A KR101991680B1 KR 101991680 B1 KR101991680 B1 KR 101991680B1 KR 1020120007383 A KR1020120007383 A KR 1020120007383A KR 20120007383 A KR20120007383 A KR 20120007383A KR 101991680 B1 KR101991680 B1 KR 101991680B1
- Authority
- KR
- South Korea
- Prior art keywords
- processor
- trigger
- execution
- predicate
- execution block
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
Abstract
소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치에 관한 것으로, 일 실시예에 따른 하드웨어 디버깅 장치는 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 장치에 있어서, 트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 프리디케이트 설정부 및 프로세서 재수행시 그 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성하는 프리디케이트 조기생성부를 포함할 수 있다. 본 실시예에 따르면, 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 커런시(currency) 문제를 해결하며 프로세서의 디버깅 기능을 향상시킬 수 있다.
Description
소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법과 관련된다.
프로세서에서 소프트웨어 파이프라인(software pipeline) 방법은 수행할 소프트웨어를 단계별로 나누어 파이프라인 형태로 수행하는 방법으로서 처리 성능을 크게 높일 수 있다. 그러나, 소프트웨어의 실행 순서를 중첩하여 실행하도록 함으로써 프로세서의 디버깅을 어렵게 한다. 이와 같이 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 중지점(breakpoint) 또는 감시점(watch point) 등의 트리거 신호가 발생하면 아직 실행되지 않아야 하는 코드가 이미 실행되거나 그 반대의 상황이 발생하게 된다. 이로 인해, 변수(variable) 값이 소스 프로그램의 동등한 지점과 일치하지 않는 커런시(currency) 문제가 발생하게 된다.
프로세서에서 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 커런시(currency) 문제를 해결하며, 프로세서의 디버깅 기능을 향상시킬 수 있는 디버깅 장치와 방법이 제시된다.
일 양상에 따르면, 하드웨어 디버깅 장치는 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 장치에 있어서, 트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 프리디케이트 설정부 및 프로세서 재수행시 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성하는 프리디케이트 조기생성부를 포함한다.
이때, 반복 카운트는 트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수일 수 있다.
또한, 실행 블록 차이는 트리거가 발생한 실행 블록과 프리디케이트가 조기에 생성되어야 하는 실행 블록의 차이일 수 있다.
또한, 반복 카운트 및 실행 블록 차이 정보는 프로그램의 컴파일 단계에서 생성되는 것일 수 있다.
또한, 소정의 실행 블록은 프로세서의 재수행시 현재의 반복 카운트가 트리거 반복 카운트보다 크거나 같은 실행 블록인 것일 수 있다.
추가적인 양상에 따르면, 하드웨어 디버깅 장치는 트리거 반복 카운트 값이 설정되면 트리거 발생시 중지된 프로세서를 재수행시키는 프로세서 재수행부를 더 포함할 수 있다.
이때, 프로세서 재수행부는 트리거가 발생하기 전에, 프로세서의 레지스터 파일 또는 타겟 메모리의 값을 백업할 수 있다.
또한, 프로세서 재수행부는 트리거 반복 카운트 값이 설정되면 백업된 레지스터 파일 또는 타겟 메모리의 값을 복원한 후 중지된 프로세서를 재수행시킬 수 있다.
일 양상에 따르면, 하드웨어 디버깅 방법은, 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 방법에 있어서, 트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 단계 및 프로세서 재수행시 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성하는 단계를 포함한다.
이때, 반복 카운트는 트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수일 수 있다.
또한, 실행 블록 차이는 트리거가 발생한 실행 블록과 프리디케이트가 조기에 생성되어야 하는 실행 블록의 차이일 수 있다.
또한, 반복 카운트 및 실행 블록 차이 정보는 프로그램의 컴파일 단계에서 생성될 수 있다.
또한, 소정의 실행 블록은 프로세서의 재수행시 현재의 반복 카운트가 트리거 반복 카운트보다 크거나 같은 실행 블록인 것일 수 있다.
추가적인 양상에 따르면, 트리거 반복 카운트 값이 설정되면 트리거 발생시 중지된 프로세서를 재수행시키는 단계를 더 포함할 수 있다.
이때, 프로세서를 재수행시키는 단계는 트리거가 발생하기 전에, 프로세서의 레지스터 파일 또는 타겟 메모리의 값을 백업하는 단계를 포함할 수 있다.
또한, 프로세서를 재수행시키는 단계는 트리거 반복 카운트 값이 설정되면 백업된 레지스터 파일 또는 타겟 메모리의 값을 복원하는 단계를 더 포함할 수 있다.
소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 트리거가 발생하면 프로세서를 재수행하여 프리디케이트를 미리 생성함으로써 커런시(currency) 문제를 해결하며, 프로세서의 디버깅 기능을 향상시킬 수 있다.
도 1은 일 실시예에 따른 하드웨어 디버깅 장치의 블록도이다.
도 2는 일 실시예에 따른 백업 버퍼가 포함된 프로세서의 예이다.
도 3a 내지 도 3c는 소프트웨어 파이프라인된 프로그램의 실행 절차를 설명하기 위한 예이다.
도 4는 일 실시예에 따른 하드웨어 디버깅 방법의 흐름도이다.
도 2는 일 실시예에 따른 백업 버퍼가 포함된 프로세서의 예이다.
도 3a 내지 도 3c는 소프트웨어 파이프라인된 프로그램의 실행 절차를 설명하기 위한 예이다.
도 4는 일 실시예에 따른 하드웨어 디버깅 방법의 흐름도이다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이하, 본 발명의 실시예들에 따른 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법을 도면들을 참고하여 자세히 설명하도록 한다.
도 1은 일 실시예에 따른 하드웨어 디버깅 장치의 블록도이다. 도 2는 일 실시예에 따른 백업 버퍼가 포함된 프로세서의 예이다. 본 실시예에 따른 하드웨어 디버깅 장치(100)는 프로세서(200)의 일부 구성이 될 수 있다. 또한, 그 프로세서(200)는 CGA(coarse-grained array) 기반의 재구성 가능 프로세서(reconfigurable processor)일 수 있다.
도 1을 참조하면, 하드웨어 디버깅 장치(100)는 프리디케이트 설정부(110), 프로세서 재수행부(120) 및 프리디케이트 조기생성부(130)를 포함한다.
프리디케이트 설정부(110)는 중지점(break point)이나 감시점(watch point) 등의 트리거(trigger)가 발생하면 반복 카운트(iter_cnt) 및 실행 블록 차이(exec_block_diff) 정보에 기초하여 트리거 반복 카운트(trig_iter_cnt) 값을 설정한다. 이때, 반복 카운트(iter_cnt)는 트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수를 의미한다. 또한, 실행 블록 차이(exec_block_diff)는 트리거가 발생한 실행 블록과 프리디케이트가 조기에 생성되어야 하는 실행 블록의 차이를 의미한다. 반복 카운트(iter_cnt)와 실행 블록 차이(exec_block_diff) 정보는 프로그램의 컴파일 단계에서 미리 생성될 수 있다.
한편, 트리거가 발생하면 프로세서는 중지하게 되는데 프로세서 재수행부(120)는 프리디케트 설정부(110)에 의해 트리거 반복 카운트(trig_iter_cnt)가 설정되면 프로세서를 리셋(reset)하고 처음부터 루프를 다시 수행시킨다. 이는, 루프의 특정 반복을 수행하는 도중 트리거가 발생하면 그 시점에서 각 실행 블록마다 수행 회수가 달라져 커런시(currency) 문제가 발생할 수 있으므로, 루프를 처음부터 재수행하고 조기에 프리디케이트를 생성하여 커런시 문제를 방지하기 위함이다.
도 2를 참조하면, 프로세서(200)는 레지스터 파일(210b), 다수의 기능 유닛(FU0 ~ FU3), 메모리 컨트롤러(220)를 포함할 수 있다. 또한, 별도의 레지스터 파일 복원 버퍼(210) 및 메모리 복원 버퍼(220a)를 더 포함할 수 있다.
프로세서가 수행되면 트리거가 발생하기 전까지 기능 유닛들(FU0 ~ FU3)에서 각종 연산이 수행되며 그 결과가 레지스터 파일(210b)에 반영되어 최초의 레지스터 값(live-in, live-inout value)들은 변경될 수 있다. 또한, 메모리 쓰기 연산(memory write operation)에 의해 메모리 컨트롤러(220b)가 대상 메모리의 값을 변경할 수 있다. 따라서, 트리거가 발생하여 정지된 프로세서(200)를 처음부터 다시 수행하기 위해서는 이와 같이 변경된 레지스터 파일(210b)의 레지스터 값이나 메모리의 값을 초기 상태로 복원해야 한다.
프로세서 재수행부(120)는 최초에 프로세서(200)가 수행되기 시작하면 레지스터 파일(210b)의 레지스터 값들을 레지스터 파일 복원 버퍼(210a)에 백업한다. 또한, 프로세서(200) 수행 도중 대상 메모리로 기록되는 원래의 메모리 값을 메모리 복원 버퍼(220a)에 백업한다.
프로세서 재수행부(120)는 트리거가 발생하여 프리디케이트 설정부(110)에 의해 트리거 반복 카운트(trig_iter_cnt)가 설정되면 레지스터 파일 복원 버퍼(210a)에 백업된 레지스터 값과 메모리 복원 버퍼(220a)에 백업되어 있는 원래의 메모리 값을 각각 레지스터 파일(210b)과 대상 메모리에 복원한다. 프로세서 재수행부(120)는 복원이 완료되면 트리거 발생시 중지된 프로세서(200)를 리셋하고 다시 재수행시킨다.
프리디케이트 조기생성부(130)는 프로세서 재수행시 트리거 반복 카운트(trig_iter_cnt) 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성한다. 즉, 프로세서가 루프를 재수행하여 현재의 반복 카운트가 설정된 트리거 반복 카운트(trig_iter_cnt)보다 크거나 같은 경우 미리 프리디케이트를 생성한다.
도 3a 내지 도 3c는 소프트웨어 파이프라인된 프로그램의 실행 절차를 설명하기 위한 예이다. 도 3a 내지 도 3c를 참조하여 본 실시예에 따른 하드웨어 디버깅 장치(100)의 절차를 좀 더 구체적으로 설명한다.
도 3a는 일반적인 소프트웨어 파이프라인된 프로그램의 실행 절차를 나타낸 것으로, 4개의 실행 블록(1~4)의 수행에 대해 6번의 반복(iteration)을 수행하는 소프트웨어를 스케쥴링한 것을 예시하였다. 또한, 에필로그는 프리디케이트 가딩을 통해 구현되어 있다. CGA 기반의 스케쥴러는 모듈로(modulo) 스케쥴링 기법을 사용하여 스케쥴링하기 때문에 루프의 프롤로그 또는 에필로그에서 비유효 연산(invalid operation)이 포함될 수 있다. 비유효 연산은 프리디케이트 가딩(guarding)을 통해 그 실행을 제어할 수 있다. 프리디케이트 가딩된 비유효 연산은 기능 유닛(FU0~FU4)에서 그 비유효 연산이 수행되더라도 그 결과는 레지스터 파일(210b)에 기록되지 않는다.
도 3b는 도 3a의 소프트웨어 파이프라인된 프로그램의 실행 중 트리거가 발생한 경우 일반적인 실행 절차를 나타낸 것이다. 도 3b는 3번째 반복(i=3)을 수행하는 도중 실행블록 2에서 트리거가 발생한 경우를 예시한 것이다. 도 3b에 예시된 바와 같이 반복 3의 실행블록 2에서 트리거가 발생하면 일반적인 디버깅 실행 절차에서는 4번째 반복의 실행블록 1까지 수행되어, 실행블록 1은 4번 수행되고 실행블록 4는 1번 수행되는 커런시 문제가 발생하게 된다.
도 3c는 도 3a의 소프트웨어 파이프라인된 프로그램의 실행 중 트리거가 발생한 경우 본 실시예에 따른 실행 절차를 나타낸 것이다. 도 3c를 참조하면, 반복 3(i=3)의 실행블록 2에서 트리거가 발생한 경우 프리디케이트를 조기에 생성하여 반복 4의 1번 실행블록의 수행을 가딩할 수 있다.
이와 같이, 4번째 반복이 수행되기 전에 프리디케이트를 조기에 생성하여 4번째 반복의 실행블록 1을 가딩하기 위해서는 프로세서(200)에서 루프를 처음부터 다시 재수행하는 작업이 필요하다. 따라서, 도 2에 도시된 바와 같이 프로세서(200)는 레지스터 파일 복원 버퍼(210a) 및 메모리 복원 버퍼(220a)를 포함할 수 있다. 또한, 프로세서 재수행부(120)는 트리거가 발생하기 전에 프로세서(200)가 수행을 시작하면 레지스터 파일(210b)의 레지스터 값을 레지스터 파일 복원 버퍼(210a)에 백업하고, 프로세서(200)가 수행하는 도중 메모리 컨트롤러(220b)에 의해 대상 메모리로 기록되는 원래의 메모리를 메모리 복원 버퍼(220a)에 백업한다.
프리디케이트 설정부(110)는 트리거가 발생하면 CGA 기반 프로세서(200)의 컴파일 단계에서 미리 생성되는 반복 카운트(iter_cnt)와 실행 블록 차이(exec_block_diff) 정보를 이용하여 트리거 반복 카운트(trig_iter_cnt)를 생성한다. 이때, 트리거 반복 카운트(trig_iter_cnt)는 아래의 수식에 의해 계산될 수 있다.
trig_iter_cnt= iter_cnt - exec_block_diff + 1
즉, 도 3c를 참조하면, 트리거가 3번째 반복을 수행하는 도중 2번 실행블록에서 발생하였으므로, 트리거 발생 시점의 반복 카운트(iter_cnt)는 3이다. 또한, 실행 블록 차이(exec_block_diff)는 트리거 발생 실행 블록이 2이고, 실제로 실행되지 않아야 하는 첫 번째 실행 블록 즉, 프리디케이트가 조기에 생성되어야 하는 실행 블록이 1이므로 실행 블록 차이(exec_block_diff)가 1이 되다. 따라서, 트리거 반복 카운트(trig_iter_cnt)는 위 수식에 의해 계산하면 3이 된다.
프로세서 재수행부(120)는 트리가 반복 카운트(trig_iter_cnt)가 설정되면 백업해 둔 레지스터 값과 메모리를 복원하고, 프로세서(200)를 리셋하여 재수행한다.
프로세서 조기생성부(130)는 프로세서(200)가 재수행되어 프로그램을 처음부터 수행하면 현재의 반복 카운트가 설정된 트리거 반복 카운트(trig_iter_cnt)보다 크거가 같은 실행 블록에 대해서 미리 프리디케이트를 생성하여 그 실행블록들에 대한 연산을 가딩한다. 즉, 프로세서가 반복을 재수행할 때 현재 반복 카운트가 4가 되면, 즉 4번째 반복을 시작할 때 1번 실행 블록에 대해 프리디케이트를 조기 생성한다. 따라서, 프로세서가 4번째 반복을 수행할 때 1번 실행블록에 대해서는 프리디케이트 가딩을 하게 된다.
이후, 5번째 반복(i=5)을 수행하면 4번 실행블록은 프리디케이트가 미리 생성되어 있지 않으므로 그 수행을 하게 된다. 다음, 실행블록 3은 동일 루프의 이전 반복(i=4)시 실행된 트리거가 발생한 2번 실행블록으로부터 프리디케이트 정보를 받아 프리디케이트 가딩된다. 그 다음, 실행블록 2는 동일 루프의 이전 반복(i=4)시 프리디케이트가 생성된 실행블록 1로부터 프리디케이트 정보를 받아 가딩된다.
프로세서(200)는 이와 같은 방식으로 에필로그까지 수행한 후 디버깅 상태로 진입한다.
도 4는 일 실시예에 따른 하드웨어 디버깅 방법의 흐름도이다. 도 4를 참조하여, 하드웨어 디버깅 방법을 설명한다.
먼저, 프로세서 재수행부(120)는 프로세서(200) 수행이 시작되면 레지스터 파일(210b)의 레지스터 값을 레지스터 파일 복원 버퍼(210a)에 백업하고, 프로세서(200)의 수행 도중 메모리 컨트롤러(220b)에 의해 대상 메모리에 기록될 때 원래의 메모리 값을 메모리 복원 버퍼(220a)에 백업한다(단계 310).
그 다음, 프리디케이트 설정부(110)는 중지점(break point) 또는 감시점(watch point) 등의 트리거(trigger)가 발생하면 반복 카운트(iter_cnt)와 실행 블록 차이(exec_block_diff) 정보를 이용하여 트리거 반복 카운트(trig_iter_cnt)를 계산한다. 이때, 반복 카운트(iter_cnt)와 실행 블록 차이(exec_block_diff) 정보는 프로그램의 컴파일 단계에서 생성될 수 있다. 도 3a 내지 도 3c를 참조하여 트리거 반복 카운트(trig_iter_cnt)를 생성하는 절차를 설명하였다.
그 다음, 트리거 반복 카운트(trig_iter_cnt)가 설정되면 프로세서 재수행부(120)는 레지스터 파일 복원 버퍼(210a) 및 메모리 복원 버퍼(220a)에 백업되어 있는 값들을 레지스터 파일(210b) 및 대상 메모리(220b)에 복원한다(단계 330)
그 다음, 백업된 값들의 복원이 완료되면 프로세서 재수행부(120)는 트리거 발생시 중지되 프로세서(200)를 리셋하고 재수행시킨다(단계 340).
마지막으로, 도 3a 내지 도 3c를 참조하여 전술한 바와 같이 프리디케이트 조기생성부(130)는 프로세서(200)가 재수행되어 현재 반복 카운트가 설정된 트리거 반복 카운트(trig_iter_cnt) 보다 크거나 같으면 그 반복(iteration) 이하의 실행 블록들에 대해서는 미리 프리디케이트를 생성하여 가딩되도록 한다(단계 350).
개시된 실시예에 따르면, 도 3b와 같이 루프의 특정 반복을 수행하는 도중 트리거가 발생하는 경우 그 시점에서 각 실행 블록마다 수행 회수가 달라져 발생하는 커런시(currency) 문제를 방지할 수 있다.
한편, 본 발명의 실시 예들은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현하는 것을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구의 범위에 의하여 나타내어지며, 특허청구의 범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
100: 하드웨어 디버깅 장치 110: 프리디케이트 설정부
120: 프로세서 재수행부 130: 프리디케이트 조기생성부
120: 프로세서 재수행부 130: 프리디케이트 조기생성부
Claims (16)
- 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 장치에 있어서,
트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하고, 상기 트리거 반복 카운트 값에 기초하여 연산의 수행 여부에 대한 비트를 포함하는 프리디케이트를 설정하는 프리디케이트 설정부; 및
프로세서 재수행시에서의 반복 카운트 및 상기 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 생성하는 프리디케이트 조기생성부;를 포함하는 하드웨어 디버깅 장치. - 제1항에 있어서, 상기 반복 카운트는,
트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수인 것인 하드웨어 디버깅 장치. - 제1항에 있어서, 상기 실행 블록 차이는,
트리거가 발생한 실행 블록과 상기 소정의 실행 블록의 차이인 것인 하드웨어 디버깅 장치. - 제1항에 있어서, 상기 반복 카운트 및 상기 실행 블록 차이 정보는,
상기 프로그램의 컴파일 단계에서 생성되는 것인 하드웨어 디버깅 장치. - 제1항에 있어서, 상기 소정의 실행 블록은,
프로세서의 재수행시에서의 반복 카운트가 상기 트리거 반복 카운트 값보다 크거나 같은 실행 블록인 것인 하드웨어 디버깅 장치. - 제1항에 있어서,
상기 트리거 반복 카운트 값이 설정되면 상기 트리거 발생시 중지된 프로세서를 재수행시키는 프로세서 재수행부;를 더 포함하는 하드웨어 디버깅 장치. - 제6항에 있어서, 상기 프로세서 재수행부는,
상기 트리거가 발생하기 전에, 상기 프로세서의 레지스터 파일 또는 타겟 메모리의 값을 백업하는 하드웨어 디버깅 장치. - 제7항에 있어서, 상기 프로세서 재수행부는,
상기 트리거 반복 카운트 값이 설정되면 상기 백업된 레지스터 파일 또는 타겟 메모리의 값을 복원한 후 상기 중지된 프로세서를 재수행시키는 하드웨어 디버깅 장치. - 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 방법에 있어서,
트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 단계;
상기 트리거 반복 카운트 값에 기초하여, 연산의 수행 여부에 대한 비트를 포함하는 프리디케이트를 설정하는 단계; 및
프로세서 재수행시에서의 반복 카운트 및 상기 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 생성하는 단계;를 포함하는 하드웨어 디버깅 방법. - 제9항에 있어서, 상기 반복 카운트는,
트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수인 것인 하드웨어 디버깅 방법. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020120007383A KR101991680B1 (ko) | 2012-01-25 | 2012-01-25 | 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 |
US13/734,526 US9542188B2 (en) | 2012-01-25 | 2013-01-04 | Hardware debugging apparatus and method for software pipelined program |
CN201310025976.XA CN103226511B (zh) | 2012-01-25 | 2013-01-22 | 用于软件流水程序的硬件调试设备和方法 |
JP2013009247A JP6097572B2 (ja) | 2012-01-25 | 2013-01-22 | ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020120007383A KR101991680B1 (ko) | 2012-01-25 | 2012-01-25 | 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130086489A KR20130086489A (ko) | 2013-08-02 |
KR101991680B1 true KR101991680B1 (ko) | 2019-06-21 |
Family
ID=48798215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120007383A KR101991680B1 (ko) | 2012-01-25 | 2012-01-25 | 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9542188B2 (ko) |
JP (1) | JP6097572B2 (ko) |
KR (1) | KR101991680B1 (ko) |
CN (1) | CN103226511B (ko) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003131902A (ja) | 2001-10-24 | 2003-05-09 | Toshiba Corp | ソフトウェアデバッガ、システムレベルデバッガ、デバッグ方法、及びデバッグプログラム |
JP2008269390A (ja) | 2007-04-23 | 2008-11-06 | Texas Instr Japan Ltd | プロセッサ |
US20090327674A1 (en) | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
JP2010541067A (ja) | 2007-09-28 | 2010-12-24 | フリースケール セミコンダクター インコーポレイテッド | デバッグイベントを監視するためのシステム及び方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60250440A (ja) | 1984-05-25 | 1985-12-11 | Fujitsu Ltd | リトライ制御方式 |
JPH0424836A (ja) | 1990-05-18 | 1992-01-28 | Fujitsu Ltd | マイクロプロセッサ |
US5564028A (en) * | 1994-01-11 | 1996-10-08 | Texas Instruments Incorporated | Pipelined data processing including instruction trace |
US6505296B2 (en) | 1997-10-13 | 2003-01-07 | Hewlett-Packard Company | Emulated branch effected by trampoline mechanism |
DE69837138T2 (de) | 1997-12-31 | 2007-08-16 | Texas Instruments Inc., Dallas | Unterbrechbare mehrfache Ausfuehrungseinheitverarbeitung waehrend mehrfacher Zuweisung von Register verwendenden Operationen |
US6892380B2 (en) | 1999-12-30 | 2005-05-10 | Texas Instruments Incorporated | Method for software pipelining of irregular conditional control loops |
EP1296226A2 (en) | 2001-01-31 | 2003-03-26 | Siroyan Limited | Processing program loops in a processor |
WO2005029318A2 (en) | 2003-09-19 | 2005-03-31 | University Of Delaware | Methods and products for processing loop nests |
US7543186B2 (en) | 2004-09-13 | 2009-06-02 | Sigmatel, Inc. | System and method for implementing software breakpoints |
US8170859B1 (en) * | 2006-04-28 | 2012-05-01 | Intel Corporation | Methods, apparatuses and computer program products for simulating arbitrary unmodified code |
US7383401B2 (en) * | 2006-06-05 | 2008-06-03 | Sun Microsystems, Inc. | Method and system for identifying multi-block indirect memory access chains |
EP2075696A3 (en) * | 2007-05-10 | 2010-01-27 | Texas Instruments Incorporated | Interrupt- related circuits, systems and processes |
US8549387B2 (en) * | 2010-11-04 | 2013-10-01 | Himax Media Solutions, Inc. | System and method of decoding LDPC code blocks |
-
2012
- 2012-01-25 KR KR1020120007383A patent/KR101991680B1/ko active IP Right Grant
-
2013
- 2013-01-04 US US13/734,526 patent/US9542188B2/en active Active
- 2013-01-22 JP JP2013009247A patent/JP6097572B2/ja active Active
- 2013-01-22 CN CN201310025976.XA patent/CN103226511B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003131902A (ja) | 2001-10-24 | 2003-05-09 | Toshiba Corp | ソフトウェアデバッガ、システムレベルデバッガ、デバッグ方法、及びデバッグプログラム |
JP2008269390A (ja) | 2007-04-23 | 2008-11-06 | Texas Instr Japan Ltd | プロセッサ |
JP2010541067A (ja) | 2007-09-28 | 2010-12-24 | フリースケール セミコンダクター インコーポレイテッド | デバッグイベントを監視するためのシステム及び方法 |
US20090327674A1 (en) | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
Also Published As
Publication number | Publication date |
---|---|
JP6097572B2 (ja) | 2017-03-15 |
US20130191620A1 (en) | 2013-07-25 |
CN103226511A (zh) | 2013-07-31 |
CN103226511B (zh) | 2017-08-04 |
US9542188B2 (en) | 2017-01-10 |
JP2013152716A (ja) | 2013-08-08 |
KR20130086489A (ko) | 2013-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hosek et al. | Safe software updates via multi-version execution | |
US8468501B2 (en) | Partial recording of a computer program execution for replay | |
Carzaniga et al. | Automatic recovery from runtime failures | |
US8667255B2 (en) | Measuring runtime coverage of architectural events of a microprocessor | |
Kestor et al. | Localized fault recovery for nested fork-join programs | |
EP2891981B1 (en) | Method and computing system allowing a method of injecting hardware faults into an executing application | |
Visan et al. | URDB: a universal reversible debugger based on decomposing debugging histories | |
US11113182B2 (en) | Reversible debugging in a runtime environment | |
KR101991680B1 (ko) | 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 | |
US20200310942A1 (en) | Collecting application state in a runtime environment for reversible debugging | |
Maghsoudloo et al. | Soft error detection technique in multi-threaded architectures using control-flow monitoring | |
JP6318214B2 (ja) | 汎用マイクロプロセッサを用いたplcのデバッグ方法 | |
US20140013312A1 (en) | Source level debugging apparatus and method for a reconfigurable processor | |
Sharif et al. | Repair: Control flow protection based on register pairing updates for sw-implemented hw fault tolerance | |
Huang et al. | RTailor: Parameterizing Soft Error Resilience for Mixed-Criticality Real-Time Systems | |
US10956304B2 (en) | Dynamic diagnostic code instrumentation over a historic program execution | |
EP3619612B1 (en) | Temporary de-optimization of target functions in a cloud debugger | |
Xu et al. | PartialRC: a partial recomputing method for efficient fault recovery on GPGPUs | |
Li et al. | Experience report: An application-specific checkpointing technique for minimizing checkpoint corruption | |
CN110727577A (zh) | 嵌入式系统软件中概率复现问题的调试方法、系统及介质 | |
Hoarau et al. | FAIL-MPI: How Fault-Tolerant Is Fault-Tolerant MPI? | |
Losada et al. | Extending an application-level checkpointing tool to provide fault tolerance support to OpenMP applications | |
Arya et al. | DMTCP: Bringing Checkpoint-Restart to Python. | |
Ma et al. | Replay Debugging of Real-Time Vxworks Applications | |
Laguna et al. | Optimal Placement of Retry-Based Fault Recovery Annotations in HPC Applications |
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 |