이기종 멀티코어 기반의 open cv 응용 사례 및 효율적인 어플리케이션 디자인

50
이기종 멀티코어 기반의 OpenCV 응용 사례 및 효율적인 어플리케이션 디자인 송승화

Upload: seunghwa-song

Post on 04-Jul-2015

939 views

Category:

Technology


9 download

DESCRIPTION

이기종 멀티코어 기반의 OpenCV 응용사례 및 효율적인 어플리케이션 디자인 발표자료 2013.09.24 발표

TRANSCRIPT

Page 1: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

이기종 멀티코어 기반의

OpenCV 응용 사례 및

효율적인 어플리케이션 디자인

송승화

Page 2: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

이기종 멀티코어 기술 동향

ETRI 연구 현황

OpenSEED 활동

(OpenCV 응용 사례)

Page 3: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

이기종 멀티코어 기술 동향

Page 4: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

지난 십 년간 컴퓨터에 근본적인 변화가 찾아왔다

사람들의 관심 대상은 와트당 성능으로 옮겨졌다

기존의 혁신을 이끌 던 것은 단순한 성능 그 자체

WHY?

Page 5: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

실제로 산업계에서 만들어지는 컴퓨터들은 근원적으로 바뀌고 있으며

우리가 사용하는 마이크로프로세서들은

다수의 저전력 코어들로 구성되어 있다

프로세서입력 출력 >소모 전력

프로세서

프로세서

입력출력

Page 6: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

멀티코어가 거스를 수 없는 대세

그렇다면

모두 같은 종류(동종)가 될 것인가? 다른 종류(이종)이 될 것인가?

97W

236W

95W

Intel 80-코어 테라급 프로세서

NVIDIS GTX 280

Intel Core2 쿼드 프로세서(Q6700)

16

14

GF

LO

PS

/Wa

tt

65nm 공정으로 생산된 세 개의 프로세서에 대한 최고 성능 및 전력 소비량 그래프

12

10

8

6

4

2

0

Page 7: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

The Challenges with Computing Today

PerformanceProgrammer

Productivity

Power

consumptionPortability

Page 8: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

전력 효율

전력 소모를 줄이는 것은 모든 컴퓨팅 분야를 통틀어 아

주 중요한 이슈로 부각되고 있다

Reducing power consumption is increasingly critical across all segments of

computing.

Page 9: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

성능

그래픽 처리, 다양하고 무거운 멀티미디어 데이터 처리, 음성인식,

얼굴 인식, 증강 현실, 제스처 인식 등 다양한 요구사항을 위한 기술

들이 개발되고

성능을 위해 각 목적에 맞는 다양한 프로세서들이 존재

Page 10: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

쉬운

S/W

개발

CPU, GPU, DSP 그리고 무지하게 많은 Accelerator들

다양한 프로그래밍 언어, 스타일, SW 설계 이슈들이

소프트웨어 개발에 걸림돌이 되어선 안 된다

Page 11: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

호환성

새로운 기술 적용을 위해, 또는 비용 문제로

Platform (H/W chipset)이 바뀌어도

기존에 개발한 소프트웨어의 재 사용성이

용이해야 한다

Page 12: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

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

Page 13: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

HSAHeterogeneous 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

Page 14: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

이기종 멀티코어 지원을 위한 기술들

Page 15: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

AP (Application Processor) 패러다임 변화로

이기종 시스템 아키텍처 연합 설립

Page 16: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

Structured for CPU, GPU, DSP, and other accelerators

Building heterogeneous compute software ecosystem

Defining key interface

Programmers can focus on their algorithms

출처 : HSA Foundation

Page 17: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

OpenCL, C++AMP, Python, JS, etc.

출처 : HSA Foundation

Page 18: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

정리

HSA는 단지 이기종 프로세서를 하나의 SoC에 물리적으로

구현하는 것 뿐만 아니라 이기종 프로세서를 효율적으로 활

용하기 위한 Software Stack 및 개발 지원을 위한 노력이 중

요하다

복잡한 HSA를 지원하기 위해 HSA Foundation, Khronos 와

같은 비영리 단체들이 표준을 정의 하고 기술 배포를 위한

노력을 하고 있다

Page 19: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

ETRI 연구 현황

Page 20: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

연구목표

자료 제공 : ETRI

Page 21: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

연구 배경

자료 제공 : ETRI

Page 22: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 OS

연구 현황

자료 제공 : ETRI

CPU-GPU 로드밸런서

Page 23: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

에너지 효율형 자원관리 OSOpenMP 병렬 라이브러리 지원

연구 현황

자료 제공 : ETRI

Page 24: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

연구 현황

이기종 멀티코어 지원 개발도구

자료 제공 : ETRI

Page 25: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

기술 개발 로드맵

자료 제공 : ETRI

Page 26: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

2차년도 연구 진행 상황

• OpenGL ES 지원

– 1차년도 mesa 기반의 software 방식

– H/W 지원 드라이버 제공

– OpenCL 지원 드라이버 제공

• 운영체제 기술연구

– 공평성과 반응성을 동시에 고려한 스케줄링 기법

– CPU-GPU간 통신 속도 개선 연구

– 발열을 고려한 에너지 스케줄링 기법

Page 27: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

OpenSEED 활동

(OpenCV 응용 사례)

Page 28: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

Open SEED = Open Lab

ETRI 기술 소개 및 배포, 기술 지원,

그리고 Ecosystem 구축을 위한

오픈 커뮤니티

Page 29: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

Kick Off

2013년 2월 테스트베드 팀 모집 및 Kick Off

현재 3개 테스트베드 팀 가동 중

OpenCV + OpenCL 응용 및 성능평가

로드밸런서 커널의 실시간성 성능 향상

커널 모듈화 및 개발 도구 연구

Page 30: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 OS 기반

OpenCV 응용 사례

2013년

- 고성능 자원관리 OS 포팅

- OpenCV 라이브러리 포팅

- 테스트 어플리케이션 구현 및 성능 비교

2014년

- CPU-GPU 로드밸런서 OS 포팅

- OpenCV+OCL(OpenCL) 라이브러리 포팅

- 테스트 어플리케이션 구현 및 성능 비교

Page 31: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 OS와 태스크 스케줄링

고성능 자원관리 OS

Application

Process

with OpenCV

Quad core processor

Distributed Weighted Round-

Robin

Scheduler

Legacy

Application

Process

Legacy

Application

Process

Legacy

Application

Process

Core1 Core2 Core3 Core4

T T T

thread

Task tree

태스크 병렬성 최적화

Page 32: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 OS와 태스크 스케줄링

자료 제공 : ETRI

Page 33: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

기존 연구 단계에서 성능평가는 로드밸런싱 성능 평가를 위

해 순수한 CPU 연산만 수행

메모리 접근과 I/O가 수시로 발생하는 실제 응용 단계에서의

성능은 어떨까?

어떻게 어플리케이션을 디자인 해야 멀티코어의 활용을 극

대화 할 수 있을까?

Page 34: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

어플리케이션 디자인 이슈

가설 1

실제로는 어떤 프로세서 자원을 어떤 태스크에 할당 할지는 예측이 어렵다(일반적으로 스케줄러는 태스크들의 CPU Affinity(CPU pinning)를 강제 하지 않는다)

Cache hit 확률을 높이기 위해 메모리 자원을 공유가 많은 태스크들은 같은 코어

에서 연산하는 것이 효율적일 것이다

어플리케이션 특성을 잘 아는 개발자가 시스템 상황에 맞게 태스크 병렬성을 적

절히 이용하는 것이 좋을 것

Op

en

CV

Lib

rary

OpenCV

High GUI

Library

OpenCV

CORE

Library

shared

memory

Core 1

Core 2

Core 3

Core 4

User Thread

Camera

Capture

Thread

Window

Display

Thread

User Thread

I/O

I/O

?

Page 35: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

어플리케이션 디자인 이슈

가설 2

태스크들이 많아지면 여러 코어에 분산될 것이다

어플리케이션 특성에 따라 가능한 한 태스크들을 코어에 분산 시키는 것이 좋을지

아니면 최대한 분산을 줄이는 것이 좋을지 고민해 볼 문제

Core 1

Core 2

Core 3

Core 4

User Thread

Camera

Capture

Thread

Window

Display

Thread

User Thread

User ThreadUser Thread

User Thread

User Thread

User Thread

User Thread

Page 36: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

어플리케이션 디자인 이슈

가설 3

메모리 Copy의 오버헤드는 CPU-CPU 간 copy 보다 CPU-GPU 간 copy에서 더

클 것이다. -> 이는 zero-copy의 활용으로 부하를 줄일 수 있다

User

Thread

Camera

Capture

Thread

Window

Display

Thread

User

Thread

User

Thread

User

Thread

L2 Cache

Core 1 Core 2 Core 3 Core 4

GPU

Memory copy

Memory

Memory copy

offloading

Page 37: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

소프트웨어 디자인을 간단하게

태스크가 어떤 코어의 자원을 활용할 것이다 라는 예측은 위험

태스크의 수를 적절히 조율 (태스크 병렬성을 적절히 활용)

태스크 간 자원 공유를 최소화 하자

메모리 복사를 최소화 하자

향후 이기종 시스템 기반 오픈소스 어플리케이션 구현을 완료하고 성능평가 비교 및 최적화를 하는 시도를 할 것

Page 38: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

타겟 시스템

Odroid Q (하드커널 제조)

Exynos4412 (Quad core ARM Cortex-A9)

Mali-400 GPU

Page 39: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 OS 커널 배포

Page 40: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

OpenCV 라이브러리 빌드 및 포팅

OpenCV

라이브러리 빌드카메라 테스트

Odroid Q 보드

OpenCV 포팅

Page 41: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

CPU-GPU

로드밸런서 OS

OpenCL

ARM processor NEON Instruction

OpenMP

고성능 자원관리 OS

향후 검토 가능한 또 다른 활동들

Homogeneous

System

Heterogeneous

System

Application

HW

OS Layer

Library

App

Page 42: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

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이 지원될 예정

Page 43: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

CPU-GPU 로드밸런서 OS 기반

OpenCV 테스트 계획

OCL (OpenCV의 OpenCL 모듈)

라이브러리 빌드 및 포팅이기종 멀티코어 지원 개발도구로

테스트 어플리케이션 구현

GPU 기반 어플리케이션의

성능 측정

GPU 기반 어플리케이션의

소모 전력 측정

Page 44: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

Q&A

Page 45: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

감사합니다

Page 46: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

참조

AMD HSA : http://developer.amd.com/resources/heterogeneous-

computing/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명 저

Page 47: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

Appendix

• 고성능 자원관리 OS 커널 빌드하기

• 고성능 자원관리 OS 커널 포팅하기

• OpenCV 라이브러리 빌드하기

Page 48: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

개발 환경

고성능 자원관리 커널 빌드 및 포팅을 위한 개발 환경은 Ubuntu 12.04 이후 버

전을 권장한다.

Arm gcc (hard floating) 크로스 컴파일 툴체인이 설치되어야 한다. 툴체인은

하드커널 에서 제공

(ubuntu에서 직접 설치해도 되지만 Odroid Q에 설치된 운영체제와의 호환성

때문에 gcc 버전은 4.7.x로 맞춰 줘야 한다)

Page 49: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 OS 커널 빌드

커널 빌드

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

커널 및 패치 다운로드

커널 패치 적용

]$ patch –p1 < OS-HP.PATCH

커널 모듈 빌드

]$ sudo export MOD_INSTALL_PATH=../mymodules

]$ sudo make modules

]$ sudo make modules_install

Page 50: 이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인

고성능 자원관리 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