본 논문에서는 Thumb-2 명령어 집합 구조의 성능을 개선하기 위하여 분기 명령어와 사용 빈도가 높은 명령어를 동시에 실행하는 병렬 분기 명령어 집합을 제시한다. 제시된 기법에서는 16비트 분기 명령어와 사용 빈도가 높은 16비트 LOAD, ADD, MOV, STORE, SUB 명령어를 각각 결합하는 새로운 32비트 명령어를 도입한다. 새로운 명령어의 인코딩 공간을 제공하기 위해 사용 빈도가 낮은 기존 명령어의 레지스터 필드에 사용되는 비트 수를 줄이고 이를 통해 절약된 비트들을 이용하여 병렬 분기 명령어를 인코딩한다. 실험 결과, 제시된 방법은 코드 크기를 증가시키지 않고 전통적인 방식과 비교하여 평균 8.0%의 성능을 향상시킨다.
본 논문에서는 Thumb-2 명령어 집합 구조의 성능을 개선하기 위하여 분기 명령어와 사용 빈도가 높은 명령어를 동시에 실행하는 병렬 분기 명령어 집합을 제시한다. 제시된 기법에서는 16비트 분기 명령어와 사용 빈도가 높은 16비트 LOAD, ADD, MOV, STORE, SUB 명령어를 각각 결합하는 새로운 32비트 명령어를 도입한다. 새로운 명령어의 인코딩 공간을 제공하기 위해 사용 빈도가 낮은 기존 명령어의 레지스터 필드에 사용되는 비트 수를 줄이고 이를 통해 절약된 비트들을 이용하여 병렬 분기 명령어를 인코딩한다. 실험 결과, 제시된 방법은 코드 크기를 증가시키지 않고 전통적인 방식과 비교하여 평균 8.0%의 성능을 향상시킨다.
In this paper, the parallel branch instruction is proposed which executes a branch instruction and the frequently used instruction simultaneously to improve the performance of Thumb-2 instruction set architecture. In the proposed approach, new 32-bit parallel branch instructions are introduced which...
In this paper, the parallel branch instruction is proposed which executes a branch instruction and the frequently used instruction simultaneously to improve the performance of Thumb-2 instruction set architecture. In the proposed approach, new 32-bit parallel branch instructions are introduced which combine 16-bit branch instruction with each of the frequently used 16-bit LOAD, ADD, MOV, STORE, and SUB instructions, respectively. To provide the encoding space of the new instructions, the register field in less frequently executed instructions is reduced, and the new instructions are encoded by using the saved bits. Experiments show that the proposed approach improves performance by an average of 8.0% when compared to the conventional approach.
In this paper, the parallel branch instruction is proposed which executes a branch instruction and the frequently used instruction simultaneously to improve the performance of Thumb-2 instruction set architecture. In the proposed approach, new 32-bit parallel branch instructions are introduced which combine 16-bit branch instruction with each of the frequently used 16-bit LOAD, ADD, MOV, STORE, and SUB instructions, respectively. To provide the encoding space of the new instructions, the register field in less frequently executed instructions is reduced, and the new instructions are encoded by using the saved bits. Experiments show that the proposed approach improves performance by an average of 8.0% when compared to the conventional approach.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 분기 명령어와 사용 빈도가 높은 명령어를 동시에 실행하는 병렬 분기 명령어를 제시한다. 병렬 분기 명령어는 16비트 분기 명령어와 사용 빈도가 높은 16비트 명령어를 결합하는 32비트 명령어이다.
본 논문에서는 프로그램의 코드 크기를 증가시키지 않고 하드웨어 추가를 최소화하면서도 명령어의 병렬성 수준을 향상시키고자 한다. 이를 위해 실행 빈도가 높으면서도 병렬 처리 구현 복잡도가 낮은 분기(branch) 명령어와 다른 명령어를 동시에 실행하는 병렬 분기 명령어를 도입한다.
본 연구에서는 프로세서의 성능을 개선하기 위해 분기 명령어와 사용 빈도가 높은 명령어를 하나로 결합하여 병렬 수행하는 병렬 분기 명령어를 제시한다. 제시된 기법을 Thumb-2 명령어 집합 구조의 Cortex-M3에서 실험 결과 제시된 기법은 코드 크기를 증가시키지 않으면서도 평균 8.
제안 방법
컴파일러의 명령어 재배치(instruction scheduling)에 의한 영향을 제거하여 Thumb-2 코드와 동일한 조건에서 성능을 비교하기 위하여 제시된 기법에서는 추가적인 명령어 재배치를 수행하지 않는다. ARM Realview 컴파일러가 생성한 코드를 대상으로 제시된 기법을 적용하기 전인 Thumb-2 코드와 적용 후인 PABEX 코드의 성능을 Qemu ARM 시뮬레이터로 측정한다.
표 7은 제시된 기법에서 병렬 분기 명령어를 위한 인코딩 공간을 제공하기 위해 축소된 두 명령어의 실행 빈도를 보여준다. LDMIA와 STMIA 명령어 중 R7을 전송 레지스터로 포함하는 명령어의 동적 실행 사이클을 측정한다. 각 프로그램에 대하여 ARM Realview 컴파일러 툴 체인이 생성한 Thumb-2 이진 코드를 대상으로 ARM Realview 시뮬레이터를 사용하여 총 동적 실행 사이클과 두 명령어의 사이클을 각각 측정한다.
LDMIA와 STMIA 명령어 중 R7을 전송 레지스터로 포함하는 명령어의 동적 실행 사이클을 측정한다. 각 프로그램에 대하여 ARM Realview 컴파일러 툴 체인이 생성한 Thumb-2 이진 코드를 대상으로 ARM Realview 시뮬레이터를 사용하여 총 동적 실행 사이클과 두 명령어의 사이클을 각각 측정한다. R7을 전송 레지스터로 포함하는 두 명령어는 평균적으로 총 실행 사이클의 0.
시뮬레이터는 새로운 PABEX 명령어 집합을 지원하기 위해 확장된다. 각 프로그램에 대해 ARM Realview 컴파일러가 Cortex-M3 프로세서 명령어 집합인 Thumb-2 명령어 집합 어셈블리 코드를 생성하고 생성된 어셈블리 중에서 PABEX의 병렬 분기 명령어로 변경될 수 있는 코드 패턴을 기본 블록(basic block)에서 찾아내어 변경한다. 컴파일러의 명령어 재배치(instruction scheduling)에 의한 영향을 제거하여 Thumb-2 코드와 동일한 조건에서 성능을 비교하기 위하여 제시된 기법에서는 추가적인 명령어 재배치를 수행하지 않는다.
[6]에서는 16비트 Thumb 명령어 집합 구조를 개선하기 위하여 주소 지정 방식(addressing mode)을 확장한다. 데이터 리스트(data list)에 대한 접근 속도를 향상시키기 위하여 크기가 조정된 레지스터 오프셋 주소 지정 방식(scaled register offset addressing mode)과 사후 인덱스 주소 지정 방식(post-indexed addressing mode)을 메모리 참조 명령어인 로드와 저장 명령어에 도입한다. 실험 결과, 제시된 방법은 16비트 Thumb 명령어 집합의 성능을 평균 8.
Thumb-2의 명령어 인코딩 공간은 대부분 사용되기 때문에 제시되는 새로운 명령어를 인코딩하기 위한 공간은 거의 없다. 따라서 병렬 분기 명령어의 인코딩 공간을 생성하기 위하여, 제시된 방식에서는 두 개의 명령어들에서 레지스터 필드에 사용되는 비트 수를 감소시킨다. 이러한 변경은 사용 빈도가 낮은 명령어에 국한되기에 프로그래머에게 부담을 주지는 않으리라 기대된다.
제시된 병렬 분기 명령어의 길이는 32비트로 16비트 분기 명령어와 사용 빈도가 높은 명령어를 결합한다. 따라서 본 실험에서는 16비트 분기 명령어의 빈도를 측정한다. 분기 명령어의 평균 등장 빈도는 12.
본 논문에서는 병렬 분기 명령어를 Thumb-2 명령어 집합 구조에 적용한 PABEX (PArallel Branch EXtension)이라 불리는 새로운 명령어 집합 구조를 제시하는데 이 구조에서는 16비트 분기 명령어와 ADD, MOV, LOAD 등 빈번하게 사용하는 16비트 명령어를 병렬 실행하는 새로운 32비트 명령어를 도입한다. 새로운 명령어의 인코딩 공간을 제공하기 위해 사용 빈도가 낮은 명령어의 레지스터 필드에 사용되는 비트 수를 줄이고 이를 통해 절약된 비트들을 이용하여 새로운 병렬 분기 명령어를 인코딩한다.
본 논문에서는 병렬 분기 명령어를 Thumb-2 명령어 집합 구조에 적용한 PABEX (PArallel Branch EXtension)이라 불리는 새로운 명령어 집합 구조를 제시하는데 이 구조에서는 16비트 분기 명령어와 ADD, MOV, LOAD 등 빈번하게 사용하는 16비트 명령어를 병렬 실행하는 새로운 32비트 명령어를 도입한다. 새로운 명령어의 인코딩 공간을 제공하기 위해 사용 빈도가 낮은 명령어의 레지스터 필드에 사용되는 비트 수를 줄이고 이를 통해 절약된 비트들을 이용하여 새로운 병렬 분기 명령어를 인코딩한다. 제시된 기법을 적용하면 기존의 Thumb-2 명령어 집합을 사용할 때와 비교하여 응용 프로그램의 실행 속도가 평균적으로 8.
성능 평가를 위해 사용한 벤치마크 프로그램은 임베디드 벤치마크인 MiBench, CPU 벤치마크인 SPEC2006, 멀티미디어 벤치마크인 MediaBench에서 상호 보완적으로 선정한다. MiBench에서 이미지 코덱인 jpeg, 음성 코덱인 adpcm, 데이터 암호화 프로그램인 sha를.
로드와 저장 명령어에 대해 오프셋 주소 지정 방식(offset addressing mode)을 지원하는데 이 방식은 유효 주소(effective address)를 기준 레지스터(base register)의 값에 오프셋 값을 더한 값으로 계산한다. 오프셋 값은 즉시(immediate), 레지스터(register) 중 하나로 명시될 수 있으며 LDR와 LDRH에 대해서는 각각 32비트 워드 배열 및 16비트 하프워드 배열의 요소를 접근하는 데에 유용한 2비트 및 1비트 왼쪽 시프트된 레지스터 오프셋 주소 지정 방식을 추가로 제공한다. ADD, SUB 명령어는 두번째 피연산자로 레지스터와 즉시값(immediate)를 지원하며 주소 계산에 널리 사용되는 ADD 명령어에 대해서는 두번째 피연산자로 2비트 왼쪽으로 시프트된 레지스터 형식을 추가로 지원한다.
본 논문에서는 프로그램의 코드 크기를 증가시키지 않고 하드웨어 추가를 최소화하면서도 명령어의 병렬성 수준을 향상시키고자 한다. 이를 위해 실행 빈도가 높으면서도 병렬 처리 구현 복잡도가 낮은 분기(branch) 명령어와 다른 명령어를 동시에 실행하는 병렬 분기 명령어를 도입한다. 분기 명령어는 전체 프로그램의 실행 사이클의 15%-25%의 비율을 차지할 정도로 실행 빈도가 높으면서[4] 대부분의 최신 구조에서는 분기 명령어에 의한 제어 의존성(control dependence)을 줄이기 위해 분기 대상 주소를 실행 단계가 아닌 디코더 단계에서 계산하기 때문에 다른 명령어와 병렬 실행을 지원하기 위한 추가적인 하드웨어의 복잡도가 낮다.
그림 5는 PABEX에서 제시된 병렬 분기 명령어를 인코딩 하기 위해 Thumb-2의 16비트 LDMIA (L 비트=1)와 STMIA (L 비트=0) 명령어 형식을 변경한 것이다. 제시된 기법에서는 두 명령어에서 전송 가능한 레지스터 리스트를 R0~R7에서 R0~R6로 축소하여 R7에 해당하는 비트(hw1의 비트 7)을 절약한다. 절약된 비트를 이용하여 병렬 분기 명령어를 도입한다.
LDMIA와 STMIA 명령어는 각각 메모리와 범용 레지스터들 사이에 여러 개의 데이터를 로드하고 저장한다. 제시된 방법은 각 명령어에서 레지스터 리스트 필드를 한 비트 감소시켜 이를 이용한다. LDMIA와 STMIA 명령어에서 레지스터 R7을 전송 가능한 리스트에서 제외하여서 해당 레지스터 리스트를 R0~R7에서 R0~R6로 축소 한다.
표 5는 병렬 분기 명령어에 포함할 명령어를 선정하기 위해 Thumb-2의 16비트 명령어 중 분기 명령어와 결합 가능한 명령어의 빈도를 측정한 결과를 보여준다. 표 3의 벤치마크 프로그램에 대하여 ARM Realview 컴파일러 툴 체인을 사용하여 Thumb-2 어셈블리 코드를 생성하고 분기 명령어와 병렬 실행 가능한 명령어를 기본 블록에서 찾아서 ARM Realview 시뮬레이터로 동적 실행 빈도를 측정한다. 분기 명령어와 병렬 처리 가능한 명령어 중 빈도가 높은 명령어는 LOAD, ADD, MOV, STORE, SUB의 순이며 등장 확률은 각각 3.
대상 데이터
MiBench에서 이미지 코덱인 jpeg, 음성 코덱인 adpcm, 데이터 암호화 프로그램인 sha를. SPEC2006에서 데이터 압축 프로그램인 164(gzip)과 mcf를 선정한다. MediaBench에서는 동영상 압축 코덱인 mpeg과 데이터 암호화 및 인증 프로그램인 pegwit을 선정한다.
제시된 방법의 효율성을 측정하기 위하여 Qemu ARM 시뮬레이터[17]에서 Cortex-M3 프로세서[18]를 대상으로 성능을 평가한다. 시뮬레이터는 새로운 PABEX 명령어 집합을 지원하기 위해 확장된다.
성능/효과
이 표에서는 일곱 개의 각 벤치마크 프로그램에 대하여 Thumb-2의 실행 사이클과 PABEX의 실행 사이클의 수, 그리고 PABEX 사이클 수와 Thumb-2 사이클의 비율을 보여준다. 벤치마크 프로그램에 대해 평균 8.0%의 성능이 향상되며 jpeg, mpeg, 164, sha, adpcm, pegwit, mcf에서 평균적으로 각각 5.7%, 6.1%, 8.4%, 8.4%, 5.4%, 12.3%, 10.1% 성능이 개선된다. 성능 향상의 범위는 5.
이 벤치마크에서 명령어들의 빈도를 측정한다. 분기 명령어와 데이터 의존 관계가 없어서 분기 명령어와 병렬 실행이 가능한 명령어는 LOAD, ADD, MOV, STORE, SUB의 순으로 빈도가 높으며 각 빈도는 각각 전체 실행 사이클 수의 3.8%, 1.6%, 1.3%, 1.0%, 0.3%이다. 상세한 성능 평가는 IV장의 표 5를 참고 하기 바란다.
표 3의 벤치마크 프로그램에 대하여 ARM Realview 컴파일러 툴 체인을 사용하여 Thumb-2 어셈블리 코드를 생성하고 분기 명령어와 병렬 실행 가능한 명령어를 기본 블록에서 찾아서 ARM Realview 시뮬레이터로 동적 실행 빈도를 측정한다. 분기 명령어와 병렬 처리 가능한 명령어 중 빈도가 높은 명령어는 LOAD, ADD, MOV, STORE, SUB의 순이며 등장 확률은 각각 3.8%, 1.6%, 1.3%, 1.0%, 0.3%이다. 분기 명령어와 결합 가능한 LOAD 명령어의 빈도 범위는 전체 실행 사이클의 0.
데이터 리스트(data list)에 대한 접근 속도를 향상시키기 위하여 크기가 조정된 레지스터 오프셋 주소 지정 방식(scaled register offset addressing mode)과 사후 인덱스 주소 지정 방식(post-indexed addressing mode)을 메모리 참조 명령어인 로드와 저장 명령어에 도입한다. 실험 결과, 제시된 방법은 16비트 Thumb 명령어 집합의 성능을 평균 8.5%의 향상시킨다. [7], [8]과 같은 기법들은 사용 가능한 레지스터의 수를 증가시킴으로써 성능을 개선한다.
이를 통해 ARMv8 구조에서는 디코딩이 단순화되며 독립적인 디코딩 기능은 고급 분기 예측을 용이하게 한다. 이 구조는 성능 향상을 위해 31개의 64비트 범용 레지스터를 추가하고 LDM/STM (load/store multiple) 명령어를 제거하고 구현 복잡도 대비 상대적인 이득이 작은 조건부 명령어를 감소시킴으로써 실질적인 명령어 집합을 단순화하여 프로세서 메모리 및 시스템 효율을 향상시킨다. 2014년에 64비트를 지원하는 차세대 ARMv8 구조 기반의 Cortex-A57과 Cortex-A53제품이 출시될 예정이다.
본 연구에서는 프로세서의 성능을 개선하기 위해 분기 명령어와 사용 빈도가 높은 명령어를 하나로 결합하여 병렬 수행하는 병렬 분기 명령어를 제시한다. 제시된 기법을 Thumb-2 명령어 집합 구조의 Cortex-M3에서 실험 결과 제시된 기법은 코드 크기를 증가시키지 않으면서도 평균 8.0%의 성능을 향상시킨다. 제시된 방식은 ARM사의 최신 구조인 Thumb-2 명령어 집합 구조를 채택하는 다양한 프로세서들에 적용 가능하다.
새로운 명령어의 인코딩 공간을 제공하기 위해 사용 빈도가 낮은 명령어의 레지스터 필드에 사용되는 비트 수를 줄이고 이를 통해 절약된 비트들을 이용하여 새로운 병렬 분기 명령어를 인코딩한다. 제시된 기법을 적용하면 기존의 Thumb-2 명령어 집합을 사용할 때와 비교하여 응용 프로그램의 실행 속도가 평균적으로 8.0% 향상되는 의미 있는 결과를 얻는다.
1%사이의 범위에 존재한다. 제시된 기법의 평균 성능 향상인 8.0%는 분기 명령어와 병렬 실행 가능한 LOAD, ADD, MOV, STORE, SUB 명령어의 평균 비율의 총합과 동일하다.
0%의 성능을 향상시킨다. 제시된 방식은 ARM사의 최신 구조인 Thumb-2 명령어 집합 구조를 채택하는 다양한 프로세서들에 적용 가능하다. 향후에는 제시된 기법을 Cortex-A15와 같은 Thumb-2 기반의 최신 멀티코어 프로세서 등에 적용하고 성능을 평가하여 멀티코어 프로세서에 최적화된 병렬 분기 명령어를 제안하려고 한다.
제시된 병렬 분기 명령어는 기존의 VLIW (Very Long Instruction Word) 머신의 명령어 집합과 개념적으로는 유사성을 가지나 병렬 분기 명령어는 기존의 16비트 명령어 두 개를 결합한 32비트 명령어이므로 코드 크기를 증가시키지 않는다. 제시된 기법은 기존의 지연 분기(delayed branch) 명령어[4]와도 구분되다.
표 6은 분기 명령어의 등장 빈도를 보여준다. 제시된 병렬 분기 명령어의 길이는 32비트로 16비트 분기 명령어와 사용 빈도가 높은 명령어를 결합한다. 따라서 본 실험에서는 16비트 분기 명령어의 빈도를 측정한다.
후속연구
제시된 방식은 ARM사의 최신 구조인 Thumb-2 명령어 집합 구조를 채택하는 다양한 프로세서들에 적용 가능하다. 향후에는 제시된 기법을 Cortex-A15와 같은 Thumb-2 기반의 최신 멀티코어 프로세서 등에 적용하고 성능을 평가하여 멀티코어 프로세서에 최적화된 병렬 분기 명령어를 제안하려고 한다.
질의응답
핵심어
질문
논문에서 추출한 답변
ARM 프로세서는 어디에 탑재되는가?
ARM 프로세서는 가장 널리 사용되는 32비트 임베디드 프로세서로 스마트폰, 태블릿, 가전 기기, 자동차 등의 다양한 제품에 탑재된다. 2012년 판매된 약 87억 개의 칩이 ARM 구조에 기반을 두고 있으며 스마트폰 프로세서 시장의 95%가 넘는 시장 점유율을 차지한다[1].
상용화된 가장 최신 ARM 구조는?
상용화된 가장 최신 ARM 구조는 ARMv7 (버전 7)이며 이 구조를 바탕으로 하는 프로세서는 스마트폰과 고성능 시스템을 대상으로 하는 Cortex-A (Application), 실시간 시스템을 위한 Cortex-R (Real-time), 저비용 임베디드 시스템을 위한 Cortex-M (Microcontroller)의 세 가지 유형이 있다. 2012년에 라이선스(license)된 전체 ARM 프로세서 중에서 ARMv7 구조는 전체의 77%(Cortex-M이 37%, Cortex-A가 32%, Cortex-R이 8%)를 차지할 정도로 널리 사용된다[1].
ARMv7의 핵심 명령어에 관해 설명하시오.
ARMv7 구조에서는 Thumb-2가 핵심 명령어 집합 (Instruction Set)이다[2]. Thumb-2 명령어 집합은 기존 16비트 Thumb 명령어들[3]과 32비트 ARM 명령어들을 하나의 명령어 집합으로 통합하여 Thumb과 ARM 두 모드 사이의 모드 전환 오버헤드(overhead)를 제거한다. 추가로, 개선된 비트 처리 명령어와 같은 효율적인 명령어를 새롭게 도입한다. 이를 통해 Thumb-2는 기존 16비트 Thumb의 높은 코드 밀도를 제공하면서도 32비트 ARM 코드의 성능을 제공한다. ARM 모드에서는 명령어의 길이가 32비트, Thumb 모드에서는 16비트로 고정적인데 비해 Thumb-2 명령어는 16비트 명령어와 32비트 명령어가 혼재한다. 그림 1은 세 구조에서 이러한 명령어 흐름의 예를 보여준다.
J. L. Hennessy, and D. A. Patterson, "Computer Architecture - A Quantitative Approach (5. ed.)," Morgan Kaufmann, pp. 148-261, 2011.
J. A. Fisher, P. Faraboschi, and C. Young, "Embedded Computing: A VLIW Approach to Architecture, Compilers and Tools," Elsevier Morgan Kauffman, pp. 45-398, 2005.
D. -H. Kim, "AMEX: Extending Addressing Mode of 16-bit Thumb Instruction Set Architecture," Journal of The Korea Society of Computer and Information, Vol. 17, No. 11, pp. 1-10, 2012.
A. Krishnaswamy and R. Gupta, "Efficient Use of Invisible Registers in Thumb Code," In Proc. of the 38th IEEE/ACMInternational Symposium on Microarchitecture, pp. 30-42, Nov 2005.
A. Krishnaswamy, and R. Gupta, "Dynamic coalescing for 16-bit instructions," ACM Transaction on Embedded Computing System, Vol. 4, No. 1, pp. 3-37, Feb. 2005.
Y. -J. Kwon, X. Ma, and H. J. Lee, "PARE: instruction set architecture for efficient code size reduction," IEE Electronics Letters, Vol. 35, No. 24, pp. 2098-2099, Nov. 1999.
B. Li, and R. Gupta, "Bit Section Instruction Set Extension of ARMfor Embedded Applications," In Proc. of International Conference on Compilers, Architecture, and Synthesis for Embedded Systems (CASES), pp. 69-78, Grenoble, France, 2002.
H.-H. Chiang, H.-J. Cheng, and Y.-S. Hwang, "Doubling the Number of Registers on ARM Processors," In Proc. of the 16th Workshop on Interaction between Compilers and Computer Architectures (INTERACT-16), pp. 1-8, Feb. 2012.
Hedley Francis, "ARM DSP-Enhanced Extensions," ARM Ltd., 2001.
J. Rokov, and D. Ing, "ARM Architecture and Multimedia Applications," RIZ-Transmitters Co., 2010.
ARM Ltd. "Introducing NEON $^{TM}$ Development Article," 2009.
J. Goodacre, and A. N. Sloss, "Parallelism and the ARM instruction set architecture," Computer, Vol. 38, No. 7, pp. 42-50, 2005.
D. -H. Kim, "The Compressed Instruction Set Architecture for the OpenRISC Processor," Journal of The Korea Society of Computer and Information, Vol. 17, No. 10, pp. 11-23, 2012.
F. Bellard, "QEMU, a fast and portable dynamic translator," In Proc. of the Int. Conf. on USENIX Annual Technical Conference, Berkeley, CA, USA, pp. 41-41, 2005.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.