GPUを活用したCPU負荷低減事(PDF:473KB)

株式会社 ITAGE
GPU活用による
CPU負荷低減事例
AGENDA
CPU負荷の低減事例 for linux
・はじめに
・Camera映像表示へのGPU活用
・Camera映像表示へのGPU活用_FullHD対応
・ShaderEffects
・Camera Direct Preview機能のご紹介
・GPGPU(OpenCL)による画像認識
・NEONによる画像認識
はじめに
i.MX6 seriesの搭載GPU
Unit
Solo Lite
SoloX
Solo
DualLite
Dual
Quad
Dual
Plus/QuadPlu
s
GPU3D
-
GC400T
27M Tri/s,
133
Mpxl/s
GC880
Open GLES 2.0
53M Tri/s,
266 Mpxl/s
Vivante
GC2000
•176Mtri/s
•1000Mpxl/s
• OpenGL ES
1.1/2.0/3.0
•OpenCL
1.1 EP
Vivante
GC2000
•176Mtri/s
•1000Mpxl/s
•OpenGL ES
1.1/2.0/3.0
•OpenCL
1.1 EP
GPU2D
GC320
GC400T
(600Mpxl/s)
GC320
(600Mpxl/s)
GC320
(600Mpxl/s)
GC320
(600Mpxl/s)
GPU活用事例
・GPUによる画像補正
- 歪曲補正
- 台形補正
- Color Conversion(YUV->RGB)
- De-Interlacing
- Framerate Conversion
- Constrast補正
- Brightness補正
- gamma補正
- 各種Effect
・その他
CPUとの並列化(一般的にはGPGPUなど)
Camera映像表示へのGPU活用
CAMERA映像表示へのGPU活用(HARDWARE)
i.MX6 solo Sabre AI(Automotive Infotainment)
Fact sheet:
http://www.nxp.com/files/32bit/doc/fact_sheet/IMX6SABREAIFS.pdf?fasp=1&WT_TYPE
=Fact%20Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Do
cumentation&fileExt=.pdf
Camera:
アイティーエス
ITC-510H 960H 48万画素ドームカメラ
http://www.its-tokyo.co.jp/cctvcamera/domecamera/itc-510h/itc-510h.html
CAMERA映像表示へのGPU活用(ソフトウェア)
Portabilityの高いI/FによるGPU活用事例
Camera映像表示Application(v4l2+EGL1.4/OpenGLESv2.0を使用)
cmp ソ フ トウェ ア 概要
Application
Demo
Application
Graphics Backend Serverは、
FBを使用
(他にX11, waylandが選択可能)
Captureには
V4L2を利用
Middleware/Libraries
<<use>>
libEGL.so
<<use>>
libGLESv2.so
<<use>>
<<use>>
libGAL.so
<<use>>
<<use>>
galcore(Vivante
Kernel Driver)
<<use>>
<<use>>
<<interface>>
IOCTL <<use>>
Kernel
imx-fb(Framebuffer
driver for imx)
Linux (kernel 3.14.52)
mxc_v4l2_capture
(Capture Driver for imx)
CAMERA映像表示へのGPU活用(FLOW)
Camera映像表示Flow
a ct C a p t ureAp p
開始
Initialize V4L2
glTexImage2D()
Initialize EGL
Capture thread
GPU thread
開始
開始
Set Texture
Decode済イメージ
のCopy
Allocate Stream
Buffer
Stream ON
Initialize
GLESv2.0
Draw
<<flow>>
Start Capture
thread
Start GPU
thread
QUIT?
フロー終了
Deque Buffer
Set Texture from
Stream Buffer
Que Buffer
QUIT?
QUIT?
Stream OFF
終了
フロー終了
CAMERA映像表示へのGPU活用(性能)
Frame rate:
Camera Input 720x480:
LCD Output 720x480:
CPU rate(App. Process):
MMDC profile
30 FPS
25.0833 FPS
28.5%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
101.68
45.79
147.48
6
72
GPU3D
62.53
63.29
125.82
5
72
汎用的なI/Fの場合、Decodeしたimageに対して、GPUが扱うTexture領域へCPU copyが行われるた
めCPU負荷はまだ高い状態
参考:Camera Capture停止時
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
0.68
0.05
0.73
0
19
GPU3D
0
0
0
0
0
CAMERA映像表示へのGPU活用(低減化)
i.MX6(Vivante GC2000/GC880) 独自拡張機能を使用
GL_VIV_direct_texture
- 直接Access可能なTexture生成に対応.
- YUVformat Textureに対応.
glTexDirectVIV()
- GPUから参照可能なTexture用memory領域を取得するAPI
glTexDirectVIVMap()
- 連続論理(物理)memoryをTexture memoryとしてMAPするAPI
glTexDirectInvalidateVIV()
- Texture用memoryのUPDATEをGPUドライバに通知するAPI
参照:“iMX6_EGL-OES_Extension_Support.pdf” - BSP内のdocument
CAMERA映像表示へのGPU活用(VIVANTE EXTENSION)
Camera映像表示Flow(Vivante extension使用)
a ct C a p t ureAp p
開始
Initialize V4L2
glTexDirectVIV
Map()
Initialize EGL
Capture thread
GPU thread
開始
開始
Set Texture
Decode済イメージ
のCopy(Copy less)
Allocate Stream
Buffer
Stream ON
Initialize
GLESv2.0
Draw
<<flow>>
Start Capture
thread
Start GPU
thread
QUIT?
フロー終了
Deque Buffer
Set Texture from
Stream Buffer
Que Buffer
QUIT?
QUIT?
Stream OFF
終了
フロー終了
CAMERA映像表示へのGPU活用(性能)
Frame rate:
Camera Input 720x480:
LCD Output 720x480:
CPU rate(App. Process):
MMDC profile
30 FPS
30 FPS
4.3%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
51.00
40.20
91.21
4
61
GPU3D
76.14
84.98
161.13
8
62
Vivante extension利用により、CPU負荷が大幅に低減
参考:汎用I/F使用時
Frame rate:
Camera Input 720x480:
LCD Output 720x480:
CPU rate(App. Process):
30 FPS
25.0833 FPS
28.5%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
101.68
45.79
147.48
6
72
GPU3D
62.53
63.29
125.82
5
72
CAMERA映像表示へのGPU活用_FULLHD対応(HARDWARE)
i.MX6 DL Sabre SDP(Platform for Smart Devices)
Fact sheet:
http://www.nxp.com/files/32bit/doc/fact_sheet/RDIMX6SABREPLATFS.pdf?fasp=1&WT
_TYPE=Fact%20Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASS
ET=Documentation&fileExt=.pdf
Camera:
Sabre SDP embedded mipi-csi
CAMERA映像表示へのGPU活用_FULLHD対応
Frame rate:
Camera Input 1920x768:
LCD Output 1920x768:
CPU rate(App. Process):
MMDC profile
30 FPS
8.85294 FPS
3.8%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
4.48
0.25
4.73
0
40
GPU3D
118.67
111.75
230.42
9
40
画像補正した場合、FullHD30FPS入力に対して、FullHD30FPS出力が間に合っていない
画像補正なしの場合は、30FPS出力可能
参考:720x480対応時
Frame rate:
Camera Input 720x480:
LCD Output 720x480:
CPU rate(App. Process):
30 FPS
30 FPS
4.3%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
4.45
0.25
4.70
0
61
GPU3D
76.14
84.98
161.13
8
62
CAMERA映像表示へのGPU活用_FULLHD対応
Frame rate:
Camera Input 1920x768:
LCD Output 720x480:
CPU rate(App. Process):
MMDC profile
30 FPS
30 FPS
4.45%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
12.43
0.55
12.98
0
45
GPU3D
81.30
159.16
240.46
8
45
LCD出力を一部Clipping(720x480)することで、画像補正を行っても、
30FPS出力には対応可能
参考:FullHD to FullHD
Frame rate:
Camera Input 1920x768:
LCD Output 1920x768:
CPU rate(App. Process):
30 FPS
8.85294 FPS
3.8%
Read(MB/s)
Write(MB/s)
Total(MB/s)
Utilization(%)
Bus Load(%)
CPU
4.48
0.25
4.73
0
40
GPU3D
118.67
111.75
230.42
9
40
Shader Effects
SHADER EFFECT
参考:Qt5 example
Camera Direct Preview機能のご紹介
DIRECT PREVIEW機能のご紹介
i.MX6のIPUにはCamera Direct Preview機能があります。
Camera Direct Preview機能とは、Cameraからの入力映像を直接
LCDへ表示出来る機能です。
SW-HW同期の必要性がないため、CPU負荷がかかりませんが、
GPUほど汎用性の高い画像補正は行えません。
FB1:HMI
Kernel Driver内でDirect
Preview設定を行うことで、
実行結果
System起動時、Rootfsがマウントされる前にCamera映像を表示す
ることが出来ます。
参照: iMX6-IPU.pdf
FB0:Camera
Leyer構成
GPGPU(OpenCL)による画像認識
GPGPU(OPENCL)による画像認識
i.MX6はGPGPU(OpenCL) APIサポート有
i.MX6Solo/DualLite(Vivante GC880)
OpenCL Embedded Profile Support
i.MX6Dual/Quad(Vivante GC2000)
OpenCL Embedded/Full Profile Support
※the OpenCL can only use 1K local memory and 64byte memory cache
local memoryが小さすぎて描画や画像を取り扱う処理には使用出来ない。
640x480 RGBのGray scale変換だけでも数秒必要
i.MX6solo
OpenCV 3.1+OpenCL 1.1EP
参考URL:
http://www.vivantecorp.com/index.php/en/technology/gpgpu
NEONによる画像認識
OpenCV 3.0以降、OpenCV HALmoduleとして、
NEONのHardware Accelerationが使用可能となっています。
i.MX6にもNEONは搭載されていますので、
高速な画像認識がOpenSourceで容易に出来る可能性があります。
ITAGEにて評価中
SUMMARY
CPU負荷の低減事例 for linux
・INTRODUCTION
・Camera映像表示へのGPU活用
・Camera映像表示へのGPU活用_FullHD対応
・ShaderEffects
・Camera Direct Preview機能のご紹介
・GPGPU(OpenCL)による画像認識
・NEONによる画像認識
御礼
ご清聴ありがとうございました。