4. WHY?
지난 십 년간 컴퓨터에 근본적인 변화가 찾아왔다
기존의 혁신을 이끌 던 것은 단순한 성능 그 자체
사람들의 관심 대상은 와트당 성능으로 옮겨졌다
5. 실제로 산업계에서 만들어지는 컴퓨터들은 근원적으로 바뀌고 있으며
우리가 사용하는 마이크로프로세서들은
다수의 저전력 코어들로 구성되어 있다
프로세서
입력
프로세서
출력
>
소모 전력
입력
출력
프로세서
6. 멀티코어가 거스를 수 없는 대세
그렇다면
모두 같은 종류(동종)가 될 것인가? 다른 종류(이종)이 될 것인가?
Intel 80-코어 테라급 프로세서
16
14
GFLOPS/Watt
12
10
8
6
NVIDIS GTX 280
97W
Intel Core2 쿼드 프로세서(Q6700)
4
2
0
236W
95W
65nm 공정으로 생산된 세 개의 프로세서에 대한 최고 성능 및 전력 소비량 그래프
7. The Challenges with Computing Today
Power
consumption
Performance
Programmer
Productivity
Portability
8. 전력 효율
Reducing power consumption is increasingly critical across all segments of
computing.
전력 소모를 줄이는 것은 모든 컴퓨팅 분야를 통틀어 아
주 중요한 이슈로 부각되고 있다
9. 성능
그래픽 처리, 다양하고 무거운 멀티미디어 데이터 처리, 음성인식,
얼굴 인식, 증강 현실, 제스처 인식 등 다양한 요구사항을 위한 기술
들이 개발되고
성능을 위해 각 목적에 맞는 다양한 프로세서들이 존재
10. 쉬운
S/W
개발
CPU, GPU, DSP 그리고 무지하게 많은 Accelerator들
다양한 프로그래밍 언어, 스타일, SW 설계 이슈들이
소프트웨어 개발에 걸림돌이 되어선 안 된다
11. 호환성
새로운 기술 적용을 위해, 또는 비용 문제로
Platform (H/W chipset)이 바뀌어도
기존에 개발한 소프트웨어의 재 사용성이
용이해야 한다
12. But current CPUs and GPUs have been designed as separate
processing elements and do not work together efficiently…
현재의 CPU와 GPU는 프로세싱 코어들이 분리되어 설계 되어있고
프로세서 간의 협업이 효율적으로 이루어지지 않는다.
Each has a separate memory space, requiring an application to
explicitly copy data from CPU to GPU and then back again.
각각의 프로세서는 분리된 메모리 공간을 사용하며 이는 응용 단계에서
CPU와 GPU 간에 반복적인 데이터 복사가 발생하게 된다
출처 : AMD HSA Introduction page
13. HSA
Heterogeneous System Architecture
HSA creates an improved processor design that exposes the benefits and capabilities of mainstream programmable
compute elements, working together seamlessly.
HSA 는 프로그래밍이 가능한 프로세서들(compute elements) 의 장점을 살릴 수
있고 프로세서간의 매끄러운 협업이 가능한 개선된 프로세서 디자인을 제안한다
출처 : AMD HSA Introduction page
16. 출처 : HSA Foundation
Structured for CPU, GPU, DSP, and other accelerators
Building heterogeneous compute software ecosystem
Defining key interface
Programmers can focus on their algorithms
17. 출처 : HSA Foundation
OpenCL, C++AMP, Python, JS, etc.
18. 정리
HSA는 단지 이기종 프로세서를 하나의 SoC에 물리적으로
구현하는 것 뿐만 아니라 이기종 프로세서를 효율적으로 활
용하기 위한 Software Stack 및 개발 지원을 위한 노력이 중
요하다
복잡한 HSA를 지원하기 위해 HSA Foundation, Khronos 와
같은 비영리 단체들이 표준을 정의 하고 기술 배포를 위한
노력을 하고 있다
26. 2차년도 연구 진행 상황
• OpenGL ES 지원
– 1차년도 mesa 기반의 software 방식
– H/W 지원 드라이버 제공
– OpenCL 지원 드라이버 제공
• 운영체제 기술연구
– 공평성과 반응성을 동시에 고려한 스케줄링 기법
– CPU-GPU간 통신 속도 개선 연구
– 발열을 고려한 에너지 스케줄링 기법
28. Open SEED = Open Lab
ETRI 기술 소개 및 배포, 기술 지원,
그리고 Ecosystem 구축을 위한
오픈 커뮤니티
29. Kick Off
2013년 2월 테스트베드 팀 모집 및 Kick Off
현재 3개 테스트베드 팀 가동 중
OpenCV + OpenCL 응용 및 성능평가
로드밸런서 커널의 실시간성 성능 향상
커널 모듈화 및 개발 도구 연구
30. 고성능 자원관리 OS 기반
OpenCV 응용 사례
2013년
- 고성능 자원관리 OS 포팅
- OpenCV 라이브러리 포팅
- 테스트 어플리케이션 구현 및 성능 비교
2014년
- CPU-GPU 로드밸런서 OS 포팅
- OpenCV+OCL(OpenCL) 라이브러리 포팅
- 테스트 어플리케이션 구현 및 성능 비교
31. 고성능 자원관리 OS와 태스크 스케줄링
thread
T
…
Legacy
Application
Process
T
T
Legacy
Application
Process
Application
Process
with OpenCV
Legacy
Application
Process
Task tree
고성능 자원관리 OS
Distributed Weighted RoundRobin
Scheduler
태스크 병렬성 최적화
Core1
Core2
Core3
Quad core processor
Core4
33. 기존 연구 단계에서 성능평가는 로드밸런싱 성능 평가를 위
해 순수한 CPU 연산만 수행
메모리 접근과 I/O가 수시로 발생하는 실제 응용 단계에서의
성능은 어떨까?
어떻게 어플리케이션을 디자인 해야 멀티코어의 활용을 극
대화 할 수 있을까?
34. 어플리케이션 디자인 이슈
가설 1
실제로는 어떤 프로세서 자원을 어떤 태스크에 할당 할지는 예측이 어렵다
(일반적으로 스케줄러는 태스크들의 CPU Affinity(CPU pinning)를 강제 하지 않는다)
Cache hit 확률을 높이기 위해 메모리 자원을 공유가 많은 태스크들은 같은 코어
에서 연산하는 것이 효율적일 것이다
어플리케이션 특성을 잘 아는 개발자가 시스템 상황에 맞게 태스크 병렬성을 적
절히 이용하는 것이 좋을 것
User Thread
Core 1
Core 2
OpenCV Library
OpenCV
CORE
Library
User Thread
?
Core 3
Core 4
shared
memory
Window
Display
Thread
OpenCV
High GUI
Library
Camera
Capture
Thread
I/O
I/O
35. 어플리케이션 디자인 이슈
가설 2
태스크들이 많아지면 여러 코어에 분산될 것이다
어플리케이션 특성에 따라 가능한 한 태스크들을 코어에 분산 시키는 것이 좋을지
아니면 최대한 분산을 줄이는 것이 좋을지 고민해 볼 문제
User Thread
User Thread
Core 1
User Thread
User Thread
User Thread
User Thread
Core 2
User Thread
User Thread
Core 3
Camera
Capture
Thread
Window
Display
Thread
Core 4
36. 어플리케이션 디자인 이슈
가설 3
메모리 Copy의 오버헤드는 CPU-CPU 간 copy 보다 CPU-GPU 간 copy에서 더
클 것이다. -> 이는 zero-copy의 활용으로 부하를 줄일 수 있다
Memory
Memory copy
L2 Cache
GPU
Memory copy
Core 1
Core 2
Core 3
Core 4
offloading
User
Thread
User
Thread
User
Thread
Window
Display
Thread
User
Thread
Camera
Capture
Thread
37. 소프트웨어 디자인을 간단하게
태스크가 어떤 코어의 자원을 활용할 것이다 라는 예측은 위험
태스크의 수를 적절히 조율 (태스크 병렬성을 적절히 활용)
태스크 간 자원 공유를 최소화 하자
메모리 복사를 최소화 하자
향후 이기종 시스템 기반 오픈소스 어플리케이션 구현을 완료하고 성능
평가 비교 및 최적화를 하는 시도를 할 것
38. 타겟 시스템
Odroid Q (하드커널 제조)
Exynos4412 (Quad core ARM Cortex-A9)
Mali-400 GPU
40. OpenCV 라이브러리 빌드 및 포팅
OpenCV
라이브러리 빌드
카메라 테스트
Odroid Q 보드
OpenCV 포팅
41. 향후 검토 가능한 또 다른 활동들
Homogeneous
System
Application
App
Library
OS Layer
HW
Heterogeneous
System
OpenMP
OpenCL
고성능 자원관리 OS
CPU-GPU
로드밸런서 OS
ARM processor NEON Instruction
42. CPU-GPU 로드밸런서 OS 기반
OpenCV 테스트 계획
Processor :
Exynos5 Octa Cortex™-A15 1.6Ghz quad core and
Cortex™-A7 quad core CPUs
GPU:
Imagination 사의 PowerVR SGX544MP3 GPU
OS:
CPU-GPU 로드밸런서 Linux kernel 기반 Ubuntu
Library:
OpenCL EP stack, OpenCV+OCL
Exynos5 코어에서 OpenCL이 지원될 예정
43. CPU-GPU 로드밸런서 OS 기반
OpenCV 테스트 계획
OCL (OpenCV의 OpenCL 모듈)
라이브러리 빌드 및 포팅
GPU 기반 어플리케이션의
소모 전력 측정
이기종 멀티코어 지원 개발도구로
테스트 어플리케이션 구현
GPU 기반 어플리케이션의
성능 측정
46. 참조
AMD HSA : http://developer.amd.com/resources/heterogeneouscomputing/what-is-heterogeneous-system-architecture-hsa/
HAS Foundation : http://hsafoundation.com/
Khronos OpenCL : http://www.khronos.org/opencl/
Khronos Web CL : http://www.khronos.org/webcl/
Open SEED : http://opensw-seed.org/
하드 커널 : http://www.hardkernel.com/
OpenCL 프로그래밍 가이드 – Aaftab Munshi 외 4명 저
48. 개발 환경
고성능 자원관리 커널 빌드 및 포팅을 위한 개발 환경은 Ubuntu 12.04 이후 버
전을 권장한다.
Arm gcc (hard floating) 크로스 컴파일 툴체인이 설치되어야 한다. 툴체인은
하드커널 에서 제공
(ubuntu에서 직접 설치해도 되지만 Odroid Q에 설치된 운영체제와의 호환성
때문에 gcc 버전은 4.7.x로 맞춰 줘야 한다)
49. 고성능 자원관리 OS 커널 빌드
커널 및 패치 다운로드
커널 패치 적용
]$ patch –p1 < OS-HP.PATCH
커널 빌드
Arm gcc hardfloating 툴체인이 설치되어 있어야 한다
]$ sudo export ARCH=arm
]$ sudo export CROSS_COMPILE=arm-linux-gnueabihf]$ sudo make mrproper
]$ sudo make clean
]$ sudo make odroidq_ubuntu_defconfig
]$ sudo make zImage
커널 모듈 빌드
]$ sudo export MOD_INSTALL_PATH=../mymodules
]$ sudo make modules
]$ sudo make modules_install
50. 고성능 자원관리 OS 커널 빌드
Odroid Q 보드에 커널을 포팅 하기 위해서 fastboot 를 사용한다
]$ sudo apt-get install android-tools-fastboot
[타겟보드]
타겟 보드와 호스트 PC를 OTG 케이블로 연결 후,
타겟 보드의 디버거를 통해 부트로더 모드를 진입하고
Fastboot 모드로 들어간다
(하드커널 참조)
]# fastboot
fastboot mode
OTG cable connected
[호스트 PC]
빌드된 커널 이미지(zImage 파일)을 fastboot로 포팅
]$ sudo fastboot kernel ./zImage