HPP (CUDA) Seminar

Hello My Past-Present-Future Students,

The need of this document will help me and you to avoid “expectation misunderstandings” and will filter the correct audience for this seminar. Especially new students who don’t know me or my teaching style.

So let's begin . . . . .

- This is “Introduction to Heterogenous Parallel Programming (HPP)” seminar which will involve CUDA and OpenCL.
- CUDA and Parallel Processing are part of syllabus for Computer Engineering degree and post-graduation courses of many universities,   government and autonomous institutions.
- Not only students, but teachers also have started realising that “Not Knowing These Things” will not be an option.

What is HPP? :
==============

Heterogeneous Parallel Programming is about making the Graphics Card Processor ( GPU ) help CPU to do the heavy jobs in comparatively very much less time, for which the CPU, working alone might have taken much more time.
In essence, it boosts system performance dramatically . . . . . exponentially.

What you can do after learning HPP :
====================================

Using CUDA/OpenCL/C++AMP like HPP technology, you can “Programmatically” enter any such field where there is a performance bottleneck and the need to boost overall system performance.
Like :
a) In Scientific Computation like Physics/Chemistry/Mathematics/Astronomy etc.
b) In Financial Computation like the Share market.
c) In Scientific Visualisations i.e: Medical/Pharmaceutical/Astronomical/Molecular/Automobile etc.
d) In Creative Visualisations like the ones we see in TV/Movie/Web advertisements.
e) In AutoCAD/3DS-Max/Maya/Cinema4D/Z-Brush/Blender like 3D-Content Creation softwares.
f) In any/all 3D games.
g) In any/all Computer Graphics-related implementations.
h) In any/all Digital Image Processing-related implementations.
i) In Security like Encryption/Decryption.
j) In Audio/Video/Multimedia.
k) etc.
[ Wherever I used the word “etc” in above listing, I am forced to stop not by choice, but by my limitations. ]

HERE IS SOMETHING AMAZING AND SHOCKING :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Now, Mobiles also support HPP. Yes, I shall practically show you my own demo/s on iOS and Android.

Okay. If you decide to learn it, then what are the prerequisites?
===========================================================================

Answer in one line : Eternal passion, Eternal patience and Eternal persistence.
Though above line is philosophical, it is applicable to all sorts of learning.

Practically speaking, there are only(?) 4 prerequisites :

a) Computer Fundamentals
[ Don’t ever underestimate the power of the word “FUNDAMENTALS” ]

b) Operating System Concepts - Particulary regarding "CPU" and "Memory".

c) You must love Coding. I mean lots of coding.

d) You must be comfortable with C and Data Structures.

* If engineering is concerned, these technologies need full mathematical background of different mathematical algorithms. They are not at all part of this seminar.

Can I learn HPP on my own?
==========================

Of course!

How I did it ?
==============

In one graphics application, a heavy textured object was taking much time to load. I heard about nVidia’s CUDA technology. So I gave it a try by passing that texture to CUDA GPU and then to graphics pipeline and saw the magical speed boost with all 20 fingers ( hand and feet ) in my mouth. I assure you, you will do that too.

If it is so, why this seminar? Can’t we do it on our own just like you did?
===============================================================================

Surely. Rather you should/must do it on your own.

But here comes the problem :
My long teaching experience has shown me that students have difficulty in reading books either due to lack of patience or due to language problems. Many students understand concepts well if they are taught rather than read.

This is where “HPP seminar” may come to rescue you from this Bibliophobia and may save your startup time.
===========================================================================================================

What are the contents of this HPP seminar?
==========================================

So assuming that you have gone through above introduction, understood every line of it, we can go for the possible contents of the seminar :

01) What it is.
02) Brief evolution from Multithreading, Multicore, Multiprocessor programming.
03) HPP related terminologies.
04) Information about current HPP technologies.
05) GPU architecture.

A) TECHNOLOGIES WHOSE CODE YOU WILL LEARN :
===========================================

* CUDA :
  ======

06) Creating, Compiling, Linking and Executing CUDA Application
     On Windows [ Both Visual Studio IDE And Command Line Methods ]
     a) Hello World Application
     b) Vector Addition Application.
     c) Matrix Multiplication Application.

07) Creating, Compiling, Linking and Executing CUDA Application
     On Linux [ Command Line Method ]
     a) Hello World Application
     b) Vector Addition Application.
     c) Matrix Multiplication Application.

08) Understanding related & important concepts of CUDA while doing above things.

* OpenCL :
  ========

09) Creating, Compiling, Linking and Executing OpenCL Application
     On Windows [ Both Visual Studio IDE And Command Line Methods ]
     a) Hello World Application
     b) Vector Addition Application.
     c) Matrix Multiplication Application.

10) Creating, Compiling, Linking and Executing OpenCL Application
     On Linux [ Command Line Method ]
     a) Hello World Application
     b) Vector Addition Application.
     c) Matrix Multiplication Application.

11) Understanding related & needed concepts of OpenCL while doing above things.

B) TECHNOLOGIES WHICH YOU WILL KNOW ABOUT :
===========================================

12) Brief about some additional HPP technologies with “Vector Addition” example.
     a) OpenGL Compute Shader.
     b) DirectX Compute Shader or DirectCompute
     c) C++ AMP

C) TECHNOLOGY BENCH-MARKING :
==============================

13) Comparitive observations of Large Vector Additions and Graphical Simulations on different GPUs (including eGPU), different platforms and different OSs.

D) TECHNOLOGY DEMOS :
==============================

14) Real-word use of all or some of HPP scenarios listed under the heading "What you can do after learning HPP?". These will be demonstrated and explained with my own live applications and my RTR students' demos.

========================================================================================

What this seminar is NOT about?
===============================

- It is not about theory. Some theory will be there. But very less and whenever on needed basis.
  Majorly this seminar is about HPP coding.

- It is not about OS Multithreaded Programming : Because that alone deserves a full dedicated seminar.

- It is not about Multicore Programming : Because that alone deserves a full dedicated seminar.

- It is not about Multi-processor ( Homogenous ) Programming.

- REMEMBER : It is not about Mathematics and Algorithms of parallel programming patterns.
This is because of diversity of patterns and each requires different mathematical implementation and very time consuming theory. This deserves a separate and full-fledged course (NOT Seminar).


Who should attend this seminar?
===============================

Answer to this question is now obvious :
The one, who understood each and every line from this document.

Who should not attend this seminar?
===================================

- Those who already know all of the above content ( ? )

- Those who decide to learn HPP on their own.

- Those who can learn from books/videos etc.

- Those who think fees should be less and contents should be more.

- Those who need this seminar for free.

- Those who have never coded yet and are not comfortable with C/Data Structures.
[ Hello World in TurboC/VisualC++/gcc/Xcode is not enough. ]

- Those who are Syllabus/Examination/Job oriented.

- Those who are unable to sit/see/hear for long time.

- Those who are unable to put their mobiles and Facebook/WhatsApp “SWITCHED-OFF”.

- Those who are ALWAYS busy for weekends.

- Those who are tired/bored of learning new things.

- Those who are managing doers rather than being a doer.

What should we bring?
=====================

- Passion, patience and persistence.

- We will email you the CUDA/OpenCL applications.
You MUST download the codes and keep their PRINTOUTS with you for your reference during seminar.

- Laptop is not needed. Rather don’t even consider using it. We want you to follow the code in the PRINTOUTS.

- Better to just have a notebook and pen.

Notes/CDs/DVDs :
================

No Notes/CDs/DVDs will be given.
You are expected to see live, hear live and write live.