초록
대부분의 디지털 신호 처리기 (Digital Signal Processor)는 두 개 이상의 메모리 뱅크를 가지는 하버드 아키텍처 (Harvard architecture)를 지원한다. 다중 메모리 뱅크 중에서 하나는 프로그램용으로 나머지는 데이터용으로 사용하여 프로세서가 한 명령어 사이클에 메모리의 여러 데이터에 동시 접근을 가능하게 한다. 이전 연구에서 우리는 다중 메모리 뱅크에 효율적으로 데이터를 할당하는 방법에 대하여 논하였다. 본 논문에서는 이전 연구의 확장으로 런타임 메모리의 최적화에 대한 우리의 최근 연구에 대하여 소개한다. 듀얼 데이터 메모리 뱅3(Dual Data Memory Bank)를 효율적으로 이용하기 위해 각 메모리 뱅크에 할당된 변수를 관리하기 위한 독립적인 두 개의 런타임 스택이 필요하다. 프로시저에 대한 두 메모리 뱅크의 활성화 레코드(Activation Record)의 크기는 각 메모리 뱅크에 할당된 변수의 개수가 일정하지 않기 때문에 다를 수 있다. 따라서 여러 개의 프로시저가 연속으로 호출될 때 두 개의 런타임 스택의 크기가 크게 달라질 수 있다. 이러한 두 메모리 뱅크 사이의 불균형은 하나의 메모리에 여유 공간이 있음에도 불구하고 다른 하나의 메모리 뱅크의 사용량이 온칩 메모리(on-chip memory)범위를 초과하는 원인이 될 수 있다. 본 논문에서는 온칩 메모리를 효율적으로 사용하기 위해 두 런타임 스택의 균형 맞추기를 시도했다. 본 논문에서 제안하는 알고리즘은 상대적으로 단순하지만 효율적으로 런타임 메모리를 사용할 수 있다는 것을 실험결과를 통해 보여주고 있다.
Most vendors of digital signal processors (DSPs) support a Harvard architecture, which has two or more memory buses, one for program and one or more for data and allow the processor to access multiple words of data from memory in a single instruction cycle. We already addressed how to efficiently assign data to multi-memory banks in our previous work. This paper reports on our recent attempt to optimize run-time memory. The run-time environment for dual data memory banks (DBMBs) requires two run-time stacks to control activation records located in two memory banks corresponding to calling procedures. However, activation records of two memory banks for a procedure are able to have different size. As a consequence, dual run-time stacks can be unbalanced whenever a procedure is called. This unbalance between two memory banks causes that usage of one memory bank can exceed the extent of on-chip memory area although there is free area in the other memory bank. We attempt balancing dual run-time slacks to enhance efficiently utilization of on-chip memory in this paper. The experimental results have revealed that although our algorithm is relatively quite simple, it still can utilize run-time memories efficiently; thus enabling our compiler to run extremely fast, yet minimizing the usage of un-time memory in the target code.