### pptx

```The Fast Evaluation of Hidden
Markov Models on GPU
Presented by Ting-Yu Mu & Wooyoung Lee
Introduction

Hidden Markov Model (HMM):
◦ A statistical method (Probability based)
◦ Used in a wide range of applications:
 Speech recognition
 Computer vision
 Medical image analysis

One of the problems need to be solved:
◦ Evaluate the probability of an observation
sequence on a given HMM (Evaluation)
◦ The solution of above is the key to choose the
best matched models among the HMMs
Introduction – Example
Application: Speech Recognition
 Goal: Recognize words one by one
 Input:

◦ The speech signal of a given word →
 Represented as a time sequence of coded spectral
vectors

Output:
◦ The observation sequence →
 Represented as an index indicator in the spectral
codebook
Introduction – Example

vocabulary
◦ Perform unknown word recognition:
 Using the solution of evaluation problem to score
each HMM based on the observation sequence of
the word
 The model scores the highest is selected as the
result

The accuracy:
◦ Based on the correctness of the chosen result

consists of two parts:
◦ Estimate the parameters of HMMs to build the
models, and the load varies upon each HMM
 Executed only one time
◦ Evaluate the probability of an observation
sequence on each HMM
 Executed many times on recognition process

The performance is depend on the
complexity of the evaluation algorithm
Efficient Algorithm

The lower order of complexity:
◦ Forward-backward algorithm
 Consists of two passes:
 Forward probability
 Backward probability
 Used extensively
 Computational intensive
◦ One way to increase the performance:
 Design the parallel algorithm
 Utilizing the present day’s multi-core systems
General Purpose GPU

Why choose Graphic Processing Unit
◦ Rapid increases in the performance
 Supports floating-points operations
 Fast computational power/memory bandwidth
GPU is specialized for
compute-intensive and
highly parallel
computation
More transistors are
devoted to data
processing rather that
data caching
CUDA Programming Model

The GPU is seen as a compute device to
execute part of the application that:
◦ Has to be executed multiple times
◦ Can be isolated as a function
◦ Works independently on different data
Such a function can be compiled to run on
the device. The resulting program is called
a Kernel
 The batch of threads that executes a
kernel is organized as a grid of blocks

CUDA Programming Model

◦ Contains the batch of threads that can be
cooperate together:
 Fast shared memory
 Synchronizable
◦ The block can be one-, two-, or threedimensional arrays
CUDA Programming Model

◦ Contains the limited number of threads in a
block
◦ Allows larger numbers of thread to execute
the same kernel with one invocation
◦ Blocks identifiable through block ID
◦ Blocks can be one- or two-dimensional arrays
CUDA Programming Model
CUDA Memory Model
Parallel Algorithm on GPU

The tasks of computing the evaluation
probability is split into pieces and
◦ A thread block evaluates a Markov model
◦ Calculating the dimension of the grid:
 Obtained by dividing the number of states N by the
block size
◦ Forward probability is computed by a thread
◦ Needs to synchronize the threads due to:
 Shared data
CUDAfy.NET
What is CUDAfy.Net?
Made by Hybrid DSP Systems in
Netherlands
 a set of libraries and tools that permit
general purpose programming of NVIDIA
CUDA GPUs from the Microsoft .NET
framework.
 combining flexibility, performance and
ease of use
 First release: March 17, 2011

Cudafy.NET SDK

Cudafy .NET Library
◦ Cudafy Translator (Convert .NET code to
CUDA C)
◦ Cudafy Library (CUDA support for .NET)
◦ Cudafy Host (Host GPU wrapper)
◦ Cudafy Math (FFT + BLAS)

The translator converts .NET code into
CUDA code. Based on ILSPY (Open
Source .NET assembly browser and
decompiler)
Cudafy Translator
GENERAL CUDAFY PROCESS

Two main components to the Cudafy SDK:
◦ Translation from .NET to CUDA C and compiling using NVIDIA
compiler (this results in a Cudafy module xml file)

It is not necessary for the target machine to perform the first step
above.
◦ 2. Add the Cudafy, Cudafy.Host and Cudafy.Translator namespaces
to source files (using in C#)
◦ 3. Add a parameter of GThread type to GPU functions and use it to
access thread, block and grid information as well as specialist
synchronization and local shared memory features.
◦ 4. Place a Cudafy attribute on the functions.
◦ 5. In your host code before using the GPU functions call
Cudafy.Translator.Cudafy( ). This returns a Cudafy Module instance.
◦ 6. Load the module into a GPGPU instance. The GPGPU type allows
you to interact seamlessly with the GPU from your .NET code.
Development Requirement
NVIDIA CUDA Toolkit 4.1
 Visual Studio 2010

◦ Microsoft VC++ Compiler (used by NVIDIA
CUDA Compiler)
Windows( XP SP3, VISTA, 7 32bit/64bit)
 NVIDIA GPUs
 NVIDIA Graphic Driver

GPU vs PLINQ vs LINQ
GPU vs PLINQ vs LINQ
Reference





ILSpy : http://wiki.sharpdevelop.net/ilspy.ashx
Cudafy.NET : http://cudafy.codeplex.com/
Using Cudafy for GPGPU Programming in .NET :
http://www.codeproject.com/Articles/202792/Usi
ng-Cudafy-for-GPGPU-Programming-in-NET
Base64 Encoding on a GPU :
http://www.codeproject.com/Articles/276993/Bas
e64-Encoding-on-a-GPU
High Performance Queries: GPU vs LINQ vs
PLINQ :
http://www.codeproject.com/Articles/289551/Hig
h-Performance-Queries-GPU-vs-PLINQ-vs-LINQ
```