KR101991680B1 - 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 - Google Patents

소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 Download PDF

Info

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
Application number
KR1020120007383A
Other languages
English (en)
Other versions
KR20130086489A (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 삼성전자 주식회사
Priority to KR1020120007383A priority Critical patent/KR101991680B1/ko
Priority to US13/734,526 priority patent/US9542188B2/en
Priority to CN201310025976.XA priority patent/CN103226511B/zh
Priority to JP2013009247A priority patent/JP6097572B2/ja
Publication of KR20130086489A publication Critical patent/KR20130086489A/ko
Application granted granted Critical
Publication of KR101991680B1 publication Critical patent/KR101991680B1/ko

Links

Images

Classifications

    • 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, look ahead
    • 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/3636Software debugging by tracing the execution of the program
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • 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/3648Software debugging using additional hardware

Abstract

소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치에 관한 것으로, 일 실시예에 따른 하드웨어 디버깅 장치는 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 장치에 있어서, 트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 프리디케이트 설정부 및 프로세서 재수행시 그 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성하는 프리디케이트 조기생성부를 포함할 수 있다. 본 실시예에 따르면, 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 커런시(currency) 문제를 해결하며 프로세서의 디버깅 기능을 향상시킬 수 있다.

Description

소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법{HARDWARE DEBUGGING APPARATUS AND METHOD OF SOFTWARE PIPELINED PROGRAM}
소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법과 관련된다.
프로세서에서 소프트웨어 파이프라인(software pipeline) 방법은 수행할 소프트웨어를 단계별로 나누어 파이프라인 형태로 수행하는 방법으로서 처리 성능을 크게 높일 수 있다. 그러나, 소프트웨어의 실행 순서를 중첩하여 실행하도록 함으로써 프로세서의 디버깅을 어렵게 한다. 이와 같이 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 중지점(breakpoint) 또는 감시점(watch point) 등의 트리거 신호가 발생하면 아직 실행되지 않아야 하는 코드가 이미 실행되거나 그 반대의 상황이 발생하게 된다. 이로 인해, 변수(variable) 값이 소스 프로그램의 동등한 지점과 일치하지 않는 커런시(currency) 문제가 발생하게 된다.
프로세서에서 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 커런시(currency) 문제를 해결하며, 프로세서의 디버깅 기능을 향상시킬 수 있는 디버깅 장치와 방법이 제시된다.
일 양상에 따르면, 하드웨어 디버깅 장치는 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 장치에 있어서, 트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 프리디케이트 설정부 및 프로세서 재수행시 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성하는 프리디케이트 조기생성부를 포함한다.
이때, 반복 카운트는 트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수일 수 있다.
또한, 실행 블록 차이는 트리거가 발생한 실행 블록과 프리디케이트가 조기에 생성되어야 하는 실행 블록의 차이일 수 있다.
또한, 반복 카운트 및 실행 블록 차이 정보는 프로그램의 컴파일 단계에서 생성되는 것일 수 있다.
또한, 소정의 실행 블록은 프로세서의 재수행시 현재의 반복 카운트가 트리거 반복 카운트보다 크거나 같은 실행 블록인 것일 수 있다.
추가적인 양상에 따르면, 하드웨어 디버깅 장치는 트리거 반복 카운트 값이 설정되면 트리거 발생시 중지된 프로세서를 재수행시키는 프로세서 재수행부를 더 포함할 수 있다.
이때, 프로세서 재수행부는 트리거가 발생하기 전에, 프로세서의 레지스터 파일 또는 타겟 메모리의 값을 백업할 수 있다.
또한, 프로세서 재수행부는 트리거 반복 카운트 값이 설정되면 백업된 레지스터 파일 또는 타겟 메모리의 값을 복원한 후 중지된 프로세서를 재수행시킬 수 있다.
일 양상에 따르면, 하드웨어 디버깅 방법은, 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 방법에 있어서, 트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 단계 및 프로세서 재수행시 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 미리 생성하는 단계를 포함한다.
이때, 반복 카운트는 트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수일 수 있다.
또한, 실행 블록 차이는 트리거가 발생한 실행 블록과 프리디케이트가 조기에 생성되어야 하는 실행 블록의 차이일 수 있다.
또한, 반복 카운트 및 실행 블록 차이 정보는 프로그램의 컴파일 단계에서 생성될 수 있다.
또한, 소정의 실행 블록은 프로세서의 재수행시 현재의 반복 카운트가 트리거 반복 카운트보다 크거나 같은 실행 블록인 것일 수 있다.
추가적인 양상에 따르면, 트리거 반복 카운트 값이 설정되면 트리거 발생시 중지된 프로세서를 재수행시키는 단계를 더 포함할 수 있다.
이때, 프로세서를 재수행시키는 단계는 트리거가 발생하기 전에, 프로세서의 레지스터 파일 또는 타겟 메모리의 값을 백업하는 단계를 포함할 수 있다.
또한, 프로세서를 재수행시키는 단계는 트리거 반복 카운트 값이 설정되면 백업된 레지스터 파일 또는 타겟 메모리의 값을 복원하는 단계를 더 포함할 수 있다.
소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅시 트리거가 발생하면 프로세서를 재수행하여 프리디케이트를 미리 생성함으로써 커런시(currency) 문제를 해결하며, 프로세서의 디버깅 기능을 향상시킬 수 있다.
도 1은 일 실시예에 따른 하드웨어 디버깅 장치의 블록도이다.
도 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: 프리디케이트 조기생성부

Claims (16)

  1. 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 장치에 있어서,
    트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하고, 상기 트리거 반복 카운트 값에 기초하여 연산의 수행 여부에 대한 비트를 포함하는 프리디케이트를 설정하는 프리디케이트 설정부; 및
    프로세서 재수행시에서의 반복 카운트 및 상기 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 생성하는 프리디케이트 조기생성부;를 포함하는 하드웨어 디버깅 장치.
  2. 제1항에 있어서, 상기 반복 카운트는,
    트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수인 것인 하드웨어 디버깅 장치.
  3. 제1항에 있어서, 상기 실행 블록 차이는,
    트리거가 발생한 실행 블록과 상기 소정의 실행 블록의 차이인 것인 하드웨어 디버깅 장치.
  4. 제1항에 있어서, 상기 반복 카운트 및 상기 실행 블록 차이 정보는,
    상기 프로그램의 컴파일 단계에서 생성되는 것인 하드웨어 디버깅 장치.
  5. 제1항에 있어서, 상기 소정의 실행 블록은,
    프로세서의 재수행시에서의 반복 카운트가 상기 트리거 반복 카운트 값보다 크거나 같은 실행 블록인 것인 하드웨어 디버깅 장치.
  6. 제1항에 있어서,
    상기 트리거 반복 카운트 값이 설정되면 상기 트리거 발생시 중지된 프로세서를 재수행시키는 프로세서 재수행부;를 더 포함하는 하드웨어 디버깅 장치.
  7. 제6항에 있어서, 상기 프로세서 재수행부는,
    상기 트리거가 발생하기 전에, 상기 프로세서의 레지스터 파일 또는 타겟 메모리의 값을 백업하는 하드웨어 디버깅 장치.
  8. 제7항에 있어서, 상기 프로세서 재수행부는,
    상기 트리거 반복 카운트 값이 설정되면 상기 백업된 레지스터 파일 또는 타겟 메모리의 값을 복원한 후 상기 중지된 프로세서를 재수행시키는 하드웨어 디버깅 장치.
  9. 소프트웨어 파이프라인된(software pipelined) 프로그램의 하드웨어 디버깅 방법에 있어서,
    트리거(trigger)가 발생하면 반복 카운트 및 실행 블록 차이 정보에 기초하여 트리거 반복 카운트 값을 설정하는 단계;
    상기 트리거 반복 카운트 값에 기초하여, 연산의 수행 여부에 대한 비트를 포함하는 프리디케이트를 설정하는 단계; 및
    프로세서 재수행시에서의 반복 카운트 및 상기 트리거 반복 카운트 값에 기초하여 소정의 실행 블록에 대해 프리디케이트를 생성하는 단계;를 포함하는 하드웨어 디버깅 방법.
  10. 제9항에 있어서, 상기 반복 카운트는,
    트리거가 발생한 시점의 프로세서의 기능 유닛(functional unit) 별로 소프트웨어 파이프라인된 프로그램을 실행하는 연산의 반복 회수인 것인 하드웨어 디버깅 방법.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
KR1020120007383A 2012-01-25 2012-01-25 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법 KR101991680B1 (ko)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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