문수묵 교수
Soomuk Moon
서울대학교 · 컴퓨터과학
연구실 소개
문수묵 교수의 연구실은 반도체 기술의 고도화와 최적화를 핵심으로 삼고 있으며, 고성능 마이크로프로세서 설계, 컴파일러 기술, 가상 머신 및 자바 기반 실행 환경의 성능 향상에 대한 연구를 진행하고 있습니다. 특히, 신뢰성 높은 고밀도 반도체 공정 기술과 함께 VLIW 아키텍처, 지연 최소화를 위한 병렬 파싱 기법, 그리고 달빅 가상 머신의 적시 컴파일 기반 최적화 기술 등 실질적인 성능 향상을 위한 소프트웨어-하드웨어 공동 최적화 기법을 개발하고 있습니다. 이는 모바일 및 임베디드 시스템에서의 응용 성능 향상에 기여하고 있습니다.
연구 현황
연구 성과 추이
표시된 성과는 수집된 데이터 기준으로 산출되며, 일부 차이가 있을 수 있습니다.
주요 논문
15An advanced Intel 3 FinFET technology is presented that has been optimized to provide 10% logic scaling, a full node of performance improvement and improved reliability compared to Intel 4. Through transistor enhancements, interconnect optimization, and design co-optimizations, up to 18% performance gain at iso-power is achieved over Intel 4. Intel 3 additionally enables a 210nm high-density standard cell, 1.2V-native I/O transistors, deep N-well isolation, and long-channel analog devices to pro
The performance of very long instruction word (VLIW) microprocessors depends on the close co-operation between the compiler and the architecture. To design a high-performance VLIW a testbed is required that allows detailed co-evaluation of both compilation techniques and architectural features. The paper introduces a new VLIW testbed based on the SPARC instruction set architecture, which includes an aggressive scheduling compiler and a fast VLIW simulator. The compiler takes gcc-generated optimi
Modern microprocessors that exploit instruction-level parallelism (ILP) require higher data cache bandwidth than sequential machines, since at least the same number of cache references (or more due to speculative execution) must be made in fewer clock cycles. To support the required bandwidth, multiport caches have been proposed, allowing the execution of multiple load/store instructions in a single cycle. Deciding the minimal number of cache ports that do not deeply affect performance is one of
Journal Article Evaluation of a Java Ahead-of-Time Compiler for Embedded Systems Get access Dong-Heon Jung, Dong-Heon Jung School of Electrical Engineering and Computer Science, Seoul National University, Seoul 151-742, Korea Search for other works by this author on: Oxford Academic Google Scholar Soo-Mook Moon, Soo-Mook Moon * School of Electrical Engineering and Computer Science, Seoul National University, Seoul 151-742, Korea *Corresponding author: smoon@snu.ac.kr Search for other works by th
구글의 모바일 플랫폼인 안드로이드에서는 기존의 자바 어플리케이션을 수행하기 위해 자바 클래스 파일을 덱스(dex) 파일로 변경한 뒤 달빅 가상 머신을 통해 수행한다. 달빅은 레지스터 기반의 가상 머신으로 인터프리터 외에 추적(trace) 기반의 경로 컴파일 정책을 사용하여 달빅 바이트코드를 머신 코드로 번역하여 수행하는 적시 컴파일러를 탑재하였다. 본 논문에서는 달빅 가상 머신의 적시 컴파일러에서 사용하는 추적 단위를 확장하는 장기 추적 방식으로 변경하는 것을 제안한다. 이를 통해 더 많은 바이트코드 명령어를 함께 컴파일하여 컴파일 시간은 길어져도 더 좋은 머신 코드를 생성할 수 있어 하이브리드 컴파일 환경 등을 구축하는 데 유용하다. 실험을 통해 달빅 가상 머신의 성능 향상 가능성을 확인하였다.
웹 어플리케이션은 로딩 시간을 빠르게 하는 것이 중요하다. 파싱은 로딩 과정 중 하나로서 로딩을 길어지게 하는 원인이 되고 있다. 이러한 이유로 파싱 쓰레드를 만들어 파싱을 병렬화 시킨 동시 파싱 기법이 제안되었다[3]. 그러나 동시 파싱은 파싱 순서에 대한 고려가 없다는 한계가 있었다. 본 논문에서는 동시 파싱을 사용할 때 어떤 함수를 먼저 파싱해야 하는가에 대한 휴리스틱을 제안한다. 파싱 우선순위를 정하기 위해 실제 웹 어플리케이션의 자바스크립트 함수들을 분석하여 함수를 세 가지 기준으로 분류하였고, 각 분류의 호출 확률(call probability)을 구하였다. 조사한 호출 확률을 이용하여 높은 호출확률을 갖는 함수들에 높은 파싱 우선 순위를 주었고, 반대로 낮은 호출 확률의 함수들은 낮은 우선 순위를 주었다. 정의한 우선 순위를 토대로 휴리스틱을 제안했고 이를 검증하기 위해 실제 웹 어플리케이션에서 로딩 시간을 측정하여 최대 3.8%, 평균 2.6%의 로딩 시간을 단축하였다
내장형 시스템은 메모리의 제약으로 인해 흔히 작은 코드사이즈를 요구한다. ARM THUMB 이나 MIPS16 과 같 이 절반 크기의 인코딩을 갖는 아키텍쳐는 코드 사이즈를 성공적으로 줄였으나, 동시에 줄어든 레지스터 필드의 크 기로 인해 가용 레지스터 개수가 줄어들고 더 많은 스필(spill) 을 양산하여 코드 사이즈와 성능에 악영향을 준다. 한 가지 해결방법은 레지스터 구조에 뱅크를 도입하는 것이다. 이렇게 하면 기존의 모든 레지스터를 레지스터 할당 에 사용할 수 있어서 스필 이 줄어든다. 이 과정에서 효과적인 레지스터 할당기법이 필요하며 우리는 코드를 두 가 지 영역으로 분할하고 각 역을 서로 다른 뱅크에 할당하는 방법을 사용한다. 코드 분할에 영향을 미치는 중요한 요 소 중 하나는 뱅크 전환 메커니즘인데 지금까지 toggling 과 selection 방법이 소개되었다. Toggling 은 코드 분할 을 간단하게 해 주는 반면 selection 은 보다 유연한 코드 분할이 가능하
The rise of on-device inference of large language models (LLMs) is rapidly escalating the demand for memory-intensive operations on edge devices. While DRAMbased processing-in-memory (PIM) is a promising solution for overcoming the memory wall, edge devices require PIM to function both as a compute unit and a memory device due to their limited memory capacity. Such PIM-enabled memory complicates the partition and placement of a tensor into DRAM banks in a PIM-operable manner. Notably, we highlig
VLIW machines derive their performance advantage from the parallel execution of independent instructions that have been scheduled by the compiler. The paper evaluates the performance impact of a set of important VLIW compilation techniques on non-numerical integer programs. In particular, several key scheduling approaches, including software pipelining versus loop unrolling, DAG-based versus trace-based global scheduling, all-path versus profiled speculation, and restricted versus unrestricted s
많은 내장형 자바 시스템들이 제한된 메모리를 가지고 있으므로 JITC를 위해 충분한 코드 캐시가 주어지지 않아 자바의 수행 성능이 떨어질 수 있다. 본 논문에서는 이를 극복하고자 수행 중에 코드 캐시 공간이 부족하면 일부 메소드의 머신 코드를 영구적 메모리의 파일 시스템에 저장해 두었다가 재호출 때에 다시 코드 캐시로 읽어 와서 재활용하는 코드 캐시를 확장하는 수행 방식을 제안한다. 이는 기존의 클라이언트 선행 컴파일 기법을 수행 중에 코드 캐시 확장을 위해 적용한 것이다. 우리가 제안한 자바 수행 구조는 코드 캐시가 반으로 줄었을 때의 일반적인 자바 수행 방식보다 1.6배 좋은 성능을 보여주고 있다.
자바스크립트의 성능이 주요 관심사가 되면서 자바스크립트 엔진은 성능 향상을 위해 적시 컴파일 방식을 사용해왔다. 최근 들어 자바스크립트 엔진은 타입 추론 최적화를 하는 적시 컴파일러를 추가로 도입하여 단계적으로 OSR 기법을 적용하여 최대의 성능 효율을 얻고자 한다. 본 논문에서는 WebKit 브라우저의 자바스크립트 엔진에 적용된 단계적 OSR 기법을 분석하고 실험을 통해 성능 효과를 알아보고자 한다. 실험 결과 자바스크립트 벤치 마크에서는 단계적 OSR을 통해 평균 5.6배의 높은 성능 향상을 얻었지만, 웹 페이지 로딩에서는 단계적 OSR 기법의 한계 또한 확인할 수 있었다.
Modern single-CPU microprocessors exploit instruction-level parallelism (ILP) by deriving their performance advantage mainly from parallel execution of ALU and memory instructions within a single clock cycle. This performance advantage obtained by exploiting data ILP is severely offset by sequential execution of conditional branches, especially in branch-intensive non-numerical code. Consequently, branch ILP must also be exploited by executing branches and data instructions in parallel. This req
코드 커버리지는 소프트웨어 테스팅에서 가장 기초적인 측정 항목 중 하나이다. 하지만 리소스가 부족한 임베디드 환경에서 프로그램의 코드 커버리지를 정확하게 측정하는 것은 어렵다. 먼저, 최적화를 생략하거나 추가 계측 코드를 삽입하는 기존의 방법은 프로그램 바이너리의 크기를 증가시키므로 메모리가 부족한 환경에서 적용하기 어렵다. 그리고 소스 코드를 컴파일할 때 코드를 최적화하는 과정에서 커버리지 측정 위치가 불명확해지기 때문에, 코드 커버리지를 정확하게 측정하기 어렵다. 본 논문에서는 위의 문제를 해결하여, 동적 바이너리 계측을 이용하여 메모리 증가 없이 베이직 블록 커버리지를 최대 99.9% 정확도로 측정할 수 있는 새로운 방법을 제안한다.
자바에서는 어떤 객체에 접근하는 작업을 할 때마다 항상 해당 객체에 대한 레퍼런스가 널(Null)인지 여부를 먼저 검사하도록 규정하고 있다. 자바 언어는 객체 중심 언어이기 때문에 객체 접근이 빈번하며 이러한 널 포인터 검사는 자바 프로그램의 성능을 크게 저하시킬 수 있다. 이러한 성능 저하를 줄이기 위한 방법으로 불필요하게 반복되는 널 포인터 검사를 제거하는 기법이 사용되고 있다. 즉, 적시(Just-in-Time, JIT) 컴파일러가 사용되는 자바 수행 환경에서 코드 분석을 통해 불필요한 널 포인터 검사 코드를 제거하는 최적화를 한다.본 논문은 JIT 컴파일러 수행 환경에서 조건 수행(predication)이라는 최근 마이크로프로세서의 특징을 이용하여, 기존의 최적화로는 제거할 수 없는 널 포인터 검사 코드를 추가로 없애는 방법을 제시한다. 일반적으로 널 포인터 검사 코드는 비교와 분기 두 명령어로 이루어져 있는데, 그 중에 비교 명령어를 객체를 사용하기 전에 수행하는 것이 아니
대표 연구 분야
문수묵 교수의 연구를 Nubint에서 더 깊이 살펴보세요
이 연구실의 논문을 앱에서 열어 AI와 함께 읽고, 핵심을 요약하고, 내 글에 인용하세요.