Skip to main content
QUICK REVIEW

[논문 리뷰] Design and Implementation of ShenWei Universal C/C++

Huanqi Cao, Jiajie Chen|arXiv (Cornell University)|2022. 08. 01.
Embedded Systems Design Techniques인용 수 4
한 줄 요약

ShenWei Universal C/C++ (SWUC)는 ShenWei 다핵 프로세서의 관리 프로세싱 엔티티(MPE)와 컴퓨팅 프로세싱 엔티티(CPE) 간 프로그래밍을 통합하는 C/C++의 언어 확장이다. host, slave, infer, kernel와 같은 새로운 속성과 컴파일러 지시어를 도입함으로써, 단일 파일 기반의 이식성 있는 코드를 가능하게 하여 이종 프로그래밍을 단순화하고 기존 C++ 애플리케이션의 이식을 가속화한다.

ABSTRACT

The ShenWei many-core series processors powering multiple cutting-edge supercomputers are equipped with their unique on-chip heterogeneous architecture. They have long required programmers to write separate codes for the control part on Management Processing Element (MPE) and accelerated part on Compute Processing Element (CPE), which is similar to open standards like OpenCL. Such a programming model results in shattered code and bad maintainability, and also make it hard to migrate existing projects targeting commodity processors. Borrowing the experience from CUDA and DPC++ and leveraging the unique unified main memory on ShenWei many-core architecture, we propose ShenWei Universal C/C++ (SWUC), a language extension to C/C++ that enables fluent programming acrossing the boundary of MPE and CPE. Through the use of several new attributes and compiler directives, users are able to write codes running on MPE and CPE in a single file. In case of C++, SWUC further support lambda expressions on CPEs, making it possible to have the code flow better matching the logical design. SWUC also manages to make the Athread library interfaces available, easing the learning curve for original ShenWei users. These powerful features together ensures SWUC to simplify the programming on ShenWei many-core processors and migration of existing C/C++ applications.

연구 동기 및 목표

  • MPE와 CPE 코드를 별도의 파일로 작성하고 유지보수해야 하는 ShenWei 다핵 시스템에서의 분裂数 개발 모델을 해결한다.
  • 특히 템플릿과 멤버 함수를 포함한 기존 C/C++ 애플리케이션을 ShenWei 프로세서로 이식하는 데 필요한 복잡성을 감소시킨다.
  • 하나의 파일에서 호스트 및 디바이스 실행을 모두 지원하는 단일 소스 프로그래밍 모델을 통해 프로그래머의 생산성을 향상시킨다.
  • 지능적인 추론과 속성 기반 코드 필터링을 통해 MPE와 CPE 경계를 넘는 템플릿 사용을 단순화한다.
  • 기존 컴파일러 인프라를 활용해 최소한의 공학적 부담으로 표준 C++ 컴파일러의 즉시 대체가 가능한 솔루션을 제공한다.

제안 방법

  • host(모든 MPE에서 실행), slave(CPE에서 실행), infer(호출된 함수에 따라 대상 자동 결정), kernel(CPE 커널 실행의 진입점으로 표시)의 네 가지 새로운 언어 속성을 도입한다.
  • 코드 블록의 기본 대상 아키텍처를 설정하기 위해 #pragma swuc push 및 #pragma swuc pop 컴파일러 지시어를 사용한다. 이를 통해 속성의 선택적 적용이 가능해진다.
  • Sunway C/C++ 컴파일러에 플러그인으로 구현하여 중간단계에서 대상 아키텍처에 따라 코드를 분석하고 필터링한다.
  • 두 번의 컴파일링 단계를 수행한다: 첫 번째는 MPE용(제어 코드 및 커널 런처 래퍼 생성), 두 번째는 CPE용(런처 및 디바이스 코드 생성), 이후 출력 결과를 연결한다.
  • slave 속성이 부여된 C++ 람다 표현식을 지원하여 디바이스 측에서의 실행을 가능하게 하고, 코드의 모듈성과 논리적 흐름을 향상시킨다.
  • 호출 그래프를 통해 대상 아키텍처를 전파하는 infer 속성을 사용하여 MPE와 CPE 간 템플릿 인스턴스화를 자동으로 수행함으로써 수동 템플릿 전문화가 필요 없도록 한다.

실험 결과

연구 질문

  • RQ1기본 하드웨어 추상화를 변경하지 않으면서도 ShenWei 다핵 프로세서에서 이종 프로그래밍을 단순화할 수 있는 통합 C++ 프로그래밍 모델을 어떻게 설계할 수 있는가?
  • RQ2유형 안정성과 성능을 유지하면서 MPE와 CPE 간의 템플릿 및 함수 포인터 사용을 원활하게 하기 위한 메커니즘은 무엇인가?
  • RQ3컴파일러 플러그인 접근 방식이 기존 툴체인에 최소한의 수정으로 MPE와 CPE의 코드 생성을 효과적으로 통합할 수 있는가?
  • RQ4람다 표현식과 함수 템플릿을 MPE-CPE 경계를 넘어서 어떻게 지원할 수 있을까? 이는 코드 중복 감소와 유지보수성 향상에 기여한다.
  • RQ5SWUC 모델은 기존 C++ 애플리케이션을 ShenWei 아키텍처로 이식하는 데 필요한 노력의 정도를 어느 정도 줄일 수 있는가?

주요 결과

  • SWUC는 host, slave, kernel와 같은 속성을 사용하여 MPE와 CPE 코드를 단일 소스 파일에 작성할 수 있게 하여 코드 분열을 크게 감소시켰다.
  • infer 속성은 호출 그래프 분석을 통해 함수의 가용성을 자동으로 결정함으로써 수동 애너테이션과 중복을 줄였다.
  • slave 속성이 부여된 C++ 람다 표현식은 네이티브로 지원되어 더 깔끔하고 모듈화된 코드를 작성할 수 있게 하였으며, 논리적 프로그램 구조와 일치시켰다.
  • infer 속성을 통해 템플릿 함수가 MPE와 CPE 양쪽 대상에 대해 자동으로 인스턴스화되므로, 디바이스 간 수동 템플릿 전문화가 필요 없어졌다.
  • 중간단계에서의 가로막힘을 통한 두 번의 컴파일링 모델은 현재 대상에 해당하지 않는 코드의 정확한 필터링을 보장하여 정확성과 성능을 유지한다.
  • SWUC는 기존 Sunway 컴파일러에 플러그인으로 구현되어 최소한의 통합 노력으로 즉시 대체가 가능하며, 표준 C++와의 완전한 후행 호환성을 확보했다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.