Realtime Signal Processing on Nvidia TX2 using...

28
Armin Weiss Dr. Amin Mazloumian Dr. Matthias Rosenthal Institute of Embedded Systems High Performance Multimedia Research Group Zurich University of Applied Sciences Realtime Signal Processing on Nvidia TX2 using CUDA

Transcript of Realtime Signal Processing on Nvidia TX2 using...

Page 1: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Armin Weiss

Dr. Amin Mazloumian

Dr. Matthias Rosenthal

Institute of Embedded Systems

High Performance Multimedia Research Group

Zurich University of Applied Sciences

Realtime Signal Processing on Nvidia TX2

using CUDA

Page 2: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

System OverviewDigital Audio Mixing Console

2

Audio

I / O

Card

Control

Unit

Audio

Source

TX2Audio Processing

Audio

Sink

Page 3: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Motivation

3

CPUGPU

• In Comparison to FPGA / DSP Solutions:

• Performance Gain: 100x (e.g. Analog Devices SHARC)

• Fast Development Time

• System on Single Chip

• Cost Effective

Nvidia TX Series

Page 4: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Challenges

• Short and Deterministic Latency

• 32 Samples (0.33 ms @ 96 kHz)

• Video (60 Hz): 16.7 ms / Frame

• High Input and Output Data Rate

• 256 Channels ∗ 7 Inputs ∗32 BitInput

∗ 96 kHz = 5.5 Gb/s

• 1080p@60 (24-bit RGB): 3.0 Gb/s

4

Page 5: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyVariability in GPU Kernel Launch

5

< 0.1%

__global__void identity(float *input, float *output, int numElem) {

for (int index = 0; index < numElem; index++) {output[index] = input[index];

}}

numElem = 25

≈ 99.8% as expected

0.1 % - 0.2%

Outliers

Page 6: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyVariability in GPU Kernel Launch

6

Latency ~ Buffer Size

Outliers ≈ 50 ms

Page 7: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyProblems

• How to Improve Deterministic Behavior?

• Solution: Persistent CUDA Kernel

• Eliminate Launch Time

7

Page 8: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyPersistent Kernel

8

while (running) {

if (new_audio_samples() == true) {

send_sync_to_GPU();

wait_for_GPU_sync();

}

}

__global__ void audioKernel(…) {

// Infinite loop

while (true) {

wait_for_CPU_sync();

// Audio channel processing

wait_for_all_threads_to_finish();

send_sync_to_CPU();

}

}

CPUHost Application

GPUCUDA Kernel

Page 9: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyPersistent Kernel: Synchronization

9

__global__ void audioKernel(…, volatile int*

gpuToken) {

// Infinite loop

while (true) {

wait_for_CPU_sync();

// Audio channel processing

wait_for_all_threads_to_finish();

send_sync_to_CPU();

}

}

GPUCUDA Kernel

wait_for_CPU_sync() {

int i = blockIdx.x * blockDim.x + threadIdx.x;

if (i == 0)

while (*gpuToken == NO_AUDIO);

synchronize_threads();

}

Memory Accessible

by CPU and GPU

Page 10: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyCUDA Memory Comparison Managed <-> Zero Copy

10

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

GPU

Buffer

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

GPU

Buffer

Zero Copy Managed Memory

Page 11: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyProblems

• Memory Accessible by CPU and GPU

• Use Zero Copy Memory

• What about Parameters?

11

Page 12: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

GPU

Short and Deterministic LatencyInfinite Loop: Parameter Communication

12

System Memory

CPU

Application

Writes at

Arbitrary

Time

Audio Processing Thread

Local Parameter

Copy

Parameter

Memory

(Zero Copy)

Slow

Access!

Periodic Update

Page 13: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Short and Deterministic LatencyConclusion

• Use Memory Accessible by CPU and GPU

• Use Zero Copy Memory

• What about Parameters?

• Speed-up due to Local Copy

• How to Make CPUs Deterministic?

• CPU Core Isolation

• Initramfs built with Yocto

• No Flash Access Anymore During Runtime

• Minimize Influence from other Applications

13

Page 14: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Challenges

• Short and Deterministic Latency

• High Input and Output Data Rate

14

Page 15: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateSeparate Buffers

15

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

I/O

Buffer

GPU

Buffer

PCIe

Audio

I / O

Card

memcpy

Page 16: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data Ratememcpy() Measurements

16

1.E+00

1.E+03

1.E+06

1.E+09

memcpy() Time4096 bytes @ 48 kHz for 12h on 3 CPUs (A57)

TX1 ( Kernel v3.10.96) TX2 (Kernel v4.4.15)

75 % CPU Usage!

# O

ccurr

ences

Time (µs)

Page 17: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateShared Buffer

17

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

I/O

Buffer

GPU

Buffer

PCIe

Audio

I / O

Card

memcpy

Page 18: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateShared Buffer

18

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

Shared

Buffer

PCIe

Audio

I / O

Card

Page 19: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateShared Buffer

19

• Existing Solutions for Buffer Sharing

• GPUDirect RDMA

Page 20: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

DesktopDiscrete GPU

TX2Integrated GPU

High Input / Output Data RateGPUDirect RDMA

20

CPUs

System

Memory

3rd

Party

Device

GPU

Bridge

PCIe

CPUs

System

Memory

3rd

Party

Device

PCIe

Controller

PCIe

GPU

Memory Interconnect

Memory

GPUDirect

RDMA

Page 21: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateShared Buffer

21

• Existing Solutions for Buffer Sharing

• GPUDirect RDMA Not Available

• CudaHostRegister()

Page 22: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateCudaHostRegister()

22

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

I/O

Buffer

PCIe

Audio

I / O

Card

CudaHostRegister()

Page 23: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateShared Buffer

23

• Existing Solutions for Buffer Sharing

• GPUDirect RDMA Not Available

• CudaHostRegister() Not Implemented on TX2

• Video4Linux2 Userptr Mode

Page 24: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateVideo4Linux - Userptr

24

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

GPU

Buffer

Video

Input

Embedded

Camera

Userptr Mode

Mapped Access

Page 25: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateVideo4Linux - Userptr

25

TX2

CPU GPU

DRAM 8GB

Memory ControllerIncl. SMMU

Cache Cache

GPU

Buffer

PCIe

Audio

I / O

Card

Userptr Mode

Mapped Access

Page 26: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

High Input / Output Data RateShared Buffer

26

• Existing Solutions for Buffer Sharing

• GPUDirect RDMA Not Available

• CudaHostRegister() Not Implemented on TX2

• Video4Linux2 Userptr Mode✓

Page 27: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Conclusion

27

• Feasibility of Low-Latency Signal Processing on GPU

• Professional Audio Mixer with 200 Channels

• Short and Deterministic Latency

• Persistent CUDA Kernel

• High Input / Output Data Rate

• Shared Buffer I/O <-> GPU (Video4Linux)

Page 28: Realtime Signal Processing on Nvidia TX2 using CUDAon-demand.gputechconf.com/...realtime-signal-processing-on-nvidia-t… · Realtime Signal Processing on Nvidia TX2 using CUDA. Zürcher

Zürcher Fachhochschule

Get started with signal processing on GPU!

28

Website: http://www.zhaw.ch/ines/

Blog: https://blog.zhaw.ch/high-performance/

Github: https://github.com/ines-hpmm

E-Mail: [email protected]

[email protected]

[email protected]

Questions