SlideShare a Scribd company logo
December 2019
APPLICATIONS AND DEVELOPMENT
2
GPUCPU
Add GPUs: Accelerate Applications
3
ACCELERATED COMPUTING IS GROWING RAPIDLY
22x GPU Developers
45,000
1M
2012 2018
580 Applications Accelerated
580
0
100
200
300
400
500
600
700
2011 2012 2013 2014 2015 2016 2017 2018 2018
11M
1M
2012
11x CUDA Downloads
4
CUDA POWERS ACCELERATED COMPUTING
DEFINING THE NEXT GIANT WAVE IN
HPC
Over 80x in 3 Years
Googlenet Training Performance Vs K80
DL FRAMEWORKS AND HPC
APPLICATIONS ACCELERATED
+400 More
Applications
1x K80
4x M40
8x P100
8x V100
0x
20x
40x
60x
80x
100x
127 Systems on Top 500
World’s #1 Summit: 144 PF
World’s #2 Sierra: 95 PF
Europe’s #1 Piz Daint: 21 PF
Japan’s #1 ABCI: 20 PF
Industrial #1 ENI: 12 PF
5
SMALL CHANGES, BIG SPEED-UP
Application Code
+
GPU CPU
5% of Code
Compute-Intensive Functions
Rest of Sequential
CPU Code
6
3 WAYS TO ACCELERATE APPLICATIONS
Applications
Libraries
“Drop-in”
Acceleration
Programming
Languages
OpenACC
Directives
Maximum
Flexibility
Easily Accelerate
Applications
7
3 WAYS TO ACCELERATE APPLICATIONS
Applications
Libraries
“Drop-in”
Acceleration
Programming
Languages
OpenACC
Directives
Maximum
Flexibility
Easily Accelerate
Applications
8
LIBRARIES: EASY, HIGH-QUALITY ACCELERATION
Using libraries enables GPU acceleration without in-depth
knowledge of GPU programming
Many GPU-accelerated libraries follow standard APIs, thus
enabling acceleration with minimal code changes
Libraries offer high-quality implementations of functions
encountered in a broad range of applications
NVIDIA libraries are tuned by experts
EASE OF USE
“DROP-IN”
QUALITY
PERFORMANCE
9
DEEP LEARNING
GPU ACCELERATED LIBRARIES
“Drop-in” Acceleration for Your Applications
LINEAR ALGEBRA PARALLEL ALGORITHMS
SIGNAL, IMAGE & VIDEO
TensorRT
nvGRAPH NCCL
cuBLAS
cuSPARSE cuRAND
DeepStream SDK NVIDIA NPPcuFFT
CUDA
Math library
cuSOLVER
CODEC SDKcuDNN
10
3 STEPS TO CUDA-ACCELERATED APPLICATION
Step 1: Substitute library calls with equivalent CUDA library calls
saxpy ( … ) cublasSaxpy ( … )
Step 2: Manage data locality
- with CUDA: cudaMalloc(), cudaMemcpy(), etc.
- with CUBLAS: cublasAlloc(), cublasSetVector(), etc.
Step 3: Rebuild and link the CUDA-accelerated library
gcc myobj.o –l cublas
11
3 WAYS TO ACCELERATE APPLICATIONS
Applications
Libraries
“Drop-in”
Acceleration
Programming
Languages
OpenACC
Directives
Maximum
Flexibility
Easily Accelerate
Applications
12
OpenACC is a directives-
based programming approach
to parallel computing
designed for performance
and portability on CPUs
and GPUs for HPC.
main()
{
<serial code>
#pragma acc kernels
{
<parallel code>
}
}
Add Simple Compiler Directive
13
Janus Juul Eriksen, PhD Fellow
qLEAP Center for Theoretical Chemistry, Aarhus University
“
OpenACC makes GPU computing approachable for
domain scientists. Initial OpenACC implementation
required only minor effort, and more importantly,
no modifications of our existing CPU implementation.
“
LSDALTON
Large-scale application for calculating high-
accuracy molecular energies
Lines of Code
Modified
# of Weeks
Required
# of Codes to
Maintain
<100 Lines 1 Week 1 Source
Big Performance
7.9x
8.9x
11.7x
ALANINE-1
13 ATOMS
ALANINE-2
23 ATOMS
ALANINE-3
33 ATOMSSpeedupvsCPU
Minimal Effort
LS-DALTON CCSD(T) Module
Benchmarked on Titan Supercomputer (AMD CPU vs Tesla K20X)
https://developer.nvidia.com/openacc/success-stories
14
SINGLE CODE FOR MULTIPLE PLATFORMS
POWER
Sunway
x86 CPU
x86 Xeon Phi
NVIDIA GPU
PEZY-SC
9x 10x 11x
52x
9x 10x 11x
77x
0x
20x
40x
60x
80x
SpeedupvsSingleHaswellCore
PGI OpenACC
Intel OpenMP
IBM OpenMP
Dual Haswell Dual Broadwell Dual POWER8 1 Tesla
P100
OpenACC - Performance Portable Programming Model for HPC
1 Tesla
V100
AWE Hydrodynamics CloverLeaf mini-App, bm32 data set
Systems: Haswell: 2x16 core Haswell server, four K80s, CentOS 7.2 (perf-hsw10), Broadwell: 2x20 core Broadwell server, eight P100s (dgx1-prd-01), Minsky: POWER8+NVLINK, four P100s,
RHEL 7.3 (gsn1).
Compilers: Intel 17.0, IBM XL 13.1.3, PGI 16.10.
Benchmark: CloverLeaf v1.3 downloaded from http://uk-mac.github.io/CloverLeaf the week of November 7 2016; CloverlLeaf_Serial; CloverLeaf_ref (MPI+OpenMP); CloverLeaf_OpenACC
(MPI+OpenACC)
Data compiled by PGI November 2016, Volta data collected June 2017
15
TOP HPC APPS ADOPTING OPENACC
OpenACC - Performance Portability And Ease of Programming
ANSYS Fluent
VASP
3 of Top 10 Apps
5 CSCS Codes
COSMO
ELEPHANT
RAMSES
ICON
ORB5
GTC
XGC
ACME
FLASH
LSDalton
5 ORNL CAAR
Codes
30000
22500
15000
7500
0
T4 T8 T14 T28
Time(S)
CPU (cores)
CPU: (Haswell EP) Intel(R) Xeon(R) CPU E5-2695 v3 @2.30GHz, 2 sockets, 28 cores
GPU: Tesla K80 12+12 GB, Driver 346.46
Fluent Native Solver
Fluent HTC Solver K80 GPU
ANSYS Fluent R18.0 Radiation SolverGaussian
16
GAUSSIAN 16
Using OpenACC allowed us to continue
development of our fundamental
algorithms and software capabilities
simultaneously with the GPU-related
work. In the end, we could use the
same code base for SMP, cluster/
network and GPU parallelism. PGI's
compilers were essential to the
success of our efforts.
Mike Frisch, Ph.D.
President and CEO
Gaussian, Inc.
Gaussian, Inc.
340QuinnipiacSt. Bldg. 40
Wallingford, CT 06492USA
custserv@gaussian.com
Gaussian isa registered trademark of Gaussian, Inc. All other trademark
thepropertiesof their respectiveholders. Specif cationssubject tochangew
Copyright © 2017, Gaussian, Inc. All rightsreserved.
Roberto Gomperts
NVIDIA
Michael Frisch
Gaussian
Brent Leback
NVIDIA/PGI
Project Contributors
Valinomycin
wB97xD/6-311+(2d,p) Freq
2.25X speedup
Hardware: HPE server with dual Intel Xeon E5-2698 v3 CPUs (2.30GHz ; 16 cores/chip), 256GB
memory and 4 Tesla K80 dual GPU boards (boost clocks: MEM 2505 and SM 875). Gaussian source
code compiled with PGI Accelerator Compilers (16.5) with OpenACC (2.5 standard).
A Leading Computation Chemistry Code
17
OpenACC DIRECTIVES EXAMPLE
!$acc data copy(A,Anew)
iter=0
do while ( err > tol .and. iter < iter_max )
iter = iter +1
err=0._fp_kind
!$acc kernels
do j=1,m
do i=1,n
Anew(i,j) = .25_fp_kind *( A(i+1,j ) + A(i-1,j ) &
+A(i ,j-1) + A(i ,j+1))
err = max( err, Anew(i,j)-A(i,j))
end do
end do
!$acc end kernels
IF(mod(iter,100)==0 .or. iter == 1) print *, iter, err
A= Anew
end do
!$acc end data
Copy arrays into GPU memory
within data region
Parallelize code inside region
Close off parallel region
Close off data region,
copy data back
18
OPENACC FOR EVERYONE
New PGI Community Edition Now Available
PROGRAMMING MODELS
OpenACC, CUDA Fortran, OpenMP,
C/C++/Fortran Compilers and Tools
PLATFORMS
X86, OpenPOWER, NVIDIA GPU
UPDATES 1-2 times a year 6-9 times a year 6-9 times a year
SUPPORT User Forums PGI Support
PGI Professional
Services
LICENSE Annual Perpetual Volume/Site
FREE
19
RESOURCES
FREE Compiler
Success stories
Guides
Tutorials
Videos
Courses
Code Samples
Talks
Books Specification
Teaching Materials
Slack&StackOverflow
Success stories: https://www.openacc.org/success-stories
Resources: https://www.openacc.org/resources
Free Compiler: https://www.pgroup.com/products/community.htm
20
3 WAYS TO ACCELERATE APPLICATIONS
Applications
Libraries
“Drop-in”
Acceleration
Programming
Languages
OpenACC
Directives
Maximum
Flexibility
Easily Accelerate
Applications
21
CUDA Fortran, OpenACCFortran
CUDA C++, OpenACCC, C++
CUDA Python, PyCUDAPython
MATLAB, Mathematica, LabVIEWNumerical analytics
GPU PROGRAMMING LANGUAGES
Altimesh Hybridizer, Alea GPUC#
22
void saxpy_serial(int n,
float a,
float *x,
float *y)
{
for (int i = 0; i < n; ++i)
y[i] = a*x[i] + y[i];
}
// Perform SAXPY on 1M elements
saxpy_serial(4096*256, 2.0, x, y);
__global__
void saxpy_parallel(int n,
float a,
float *x,
float *y)
{
int i = blockIdx.x*blockDim.x +
threadIdx.x;
if (i < n) y[i] = a*x[i] + y[i];
}
// Perform SAXPY on 1M elements
saxpy_parallel<<<4096,256>>>(n,2.0,x,y);
CUDA C
Standard C Code Parallel C Code
http://developer.nvidia.com/cuda-toolkit
23
CUDA C++: DEVELOP GENERIC PARALLEL CODE
Class hierarchies
__device__ methods
Templates
Operator overloading
Functors (function objects)
Device-side new/delete
More…
template <typename T>
struct Functor {
__device__ Functor(_a) : a(_a) {}
__device__ T operator(T x) { return a*x; }
T a;
}
template <typename T, typename Oper>
__global__ void kernel(T *output, int n) {
Oper op(3.7);
output = new T[n]; // dynamic allocation
int i = blockIdx.x*blockDim.x + threadIdx.x;
if (i < n)
output[i] = op(i); // apply functor
}
http://developer.nvidia.com/cuda-toolkit
CUDA C++ features enable
sophisticated and flexible
applications and middleware
24
// generate 32M random numbers on host
thrust::host_vector<int> h_vec(32 << 20);
thrust::generate(h_vec.begin(),
h_vec.end(),
` rand);
// transfer data to device (GPU)
thrust::device_vector<int> d_vec = h_vec;
// sort data on device
thrust::sort(d_vec.begin(), d_vec.end());
// transfer data back to host
thrust::copy(d_vec.begin(),
d_vec.end(),
h_vec.begin());
RAPID PARALLEL C++ DEVELOPMENT
• Resembles C++ STL
• High-level interface
• Enhances developer productivity
• Enables performance portability
between GPUs and multicore CPUs
• Flexible
• CUDA, OpenMP, and TBB backends
• Extensible and customizable
• Integrates with existing software
• Open source
http://developer.nvidia.com/thrust or http://thrust.googlecode.com
25
CUDA FORTRAN
• Program GPU using Fortran
• Key language for HPC
• Simple language extensions
• Kernel functions
• Thread / block IDs
• Device & data
management
• Parallel loop directives
• Familiar syntax
• Use allocate, deallocate
• Copy CPU-to-GPU with
assignment (=)
module mymodule contains
attributes(global) subroutine saxpy(n,a,x,y)
real :: x(:), y(:), a,
integer n, i
attributes(value) :: a, n
i = threadIdx%x+(blockIdx%x-1)*blockDim%x
if (i<=n) y(i) = a*x(i) + y(i);
end subroutine saxpy
end module mymodule
program main
use cudafor; use mymodule
real, device :: x_d(2**20), y_d(2**20)
x_d = 1.0; y_d = 2.0
call saxpy<<<4096,256>>>(2**20,3.0,x_d,y_d,)
y = y_d
write(*,*) 'max error=', maxval(abs(y-5.0))
end program main
http://developer.nvidia.com/cuda-fortran
26
MATLAB
http://www.mathworks.com/discovery/matlab-gpu.html
GET STARTED TODAY
These languages are supported on all CUDA-capable GPUs.
You might already have a CUDA-capable GPU in your laptop or desktop PC!
CUDA C/C++
http://developer.nvidia.com/cuda-toolkit
Thrust C++ Template Library
http://developer.nvidia.com/thrust
CUDA Fortran
http://developer.nvidia.com/cuda-toolkit
CUDA Python
http://developer.nvidia.com/how-to-cuda-python
Mathematica
http://www.wolfram.com/mathematica/new
-in-8/cuda-and-opencl-support/
27
NSIGHT
DEVELOPER TOOLS
28
NSIGHT PRODUCT FAMILY
Nsight Systems
System-wide application
algorithm tuning
Nsight Compute
CUDA Kernel Profiling and
Debugging
Nsight Graphics
Graphics Shader Profiling and
Debugging
IDE Plugins
Nsight Eclipse
Edition/Visual Studio
(Editor, Debugger)
29
NSIGHT SYSTEMS
Observe Application Behavior: CPU threads, GPU
traces, Memory Bandwidth and more
Locate Optimization Opportunities: CUDA &
OpenGL APIs, Unified Memory transfers, User
Annotations using NVTX
Ready for Big Data: Fast GUI capable of visualizing
in excess of 10 million events on laptops, Container
support, Minimum user privileges
System-wide Performance Analysis
https://developer.nvidia.com/nsight-systems
30
Processes and
threads
CUDA and OpenGL
API trace
Multi-GPU
Kernel and memory
transfer activities
cuDNN and
cuBLAS trace
Thread/core
migration
Thread state
31
NVIDIA NSIGHT COMPUTE
Next Generation Kernel Profiler
 Interactive CUDA API debugging and kernel
profiling
 Fast Data Collection
 Improved Workflow and Fully Customizable
(Baselining, Programmable UI/Rules)
 Command Line, Standalone, IDE Integration
 Platform Support
 OS: Linux (x86, ARM), Windows
 GPUs: Pascal, Volta, Turing
Kernel
Profile
Comparisons
with
Baseline
Metric Data
Source
Correlation
32
SIX WAYS TO SAXPY
Programming Languages for GPU Computing
33
SINGLE PRECISION ALPHA X PLUS Y (SAXPY)
Part of Basic Linear Algebra Subroutines (BLAS) Library
GPU SAXPY in multiple languages and libraries
A menagerie* of possibilities, not a tutorial
𝒛 = 𝛼𝒙 + 𝒚
x, y, z : vector
 : scalar
*technically, a program chrestomathy: http://en.wikipedia.org/wiki/Chrestomathy
34
subroutine saxpy(n, a, x, y)
real :: x(:), y(:), a
integer :: n, i
!$acc kernels
do i=1,n
y(i) = a*x(i)+y(i)
enddo
!$acc end kernels
end subroutine saxpy
...
! Perform SAXPY on 1M elements
call saxpy(2**20, 2.0, x_d, y_d)
...
void saxpy(int n,
float a,
float *x,
float *y)
{
#pragma acc kernels
for (int i = 0; i < n; ++i)
y[i] = a*x[i] + y[i];
}
...
// Perform SAXPY on 1M elements
saxpy(1<<20, 2.0, x, y);
...
OpenACC COMPILER DIRECTIVES
Parallel C Code Parallel Fortran Code
http://developer.nvidia.com/openacc or http://openacc.org
35
int N = 1<<20;
...
// Use your choice of blas library
// Perform SAXPY on 1M elements
blas_saxpy(N, 2.0, x, 1, y, 1);
int N = 1<<20;
cublasInit();
cublasSetVector(N, sizeof(x[0]), x, 1, d_x, 1);
cublasSetVector(N, sizeof(y[0]), y, 1, d_y, 1);
// Perform SAXPY on 1M elements
cublasSaxpy(N, 2.0, d_x, 1, d_y, 1);
cublasGetVector(N, sizeof(y[0]), d_y, 1, y, 1);
cublasShutdown();
cuBLAS LIBRARY
Serial BLAS Code Parallel cuBLAS Code
http://developer.nvidia.com/cublas
You can also call cuBLAS from Fortran,
C++, Python, and other languages
36
void saxpy(int n, float a,
float *x, float *y)
{
for (int i = 0; i < n; ++i)
y[i] = a*x[i] + y[i];
}
int N = 1<<20;
// Perform SAXPY on 1M elements
saxpy(N, 2.0, x, y);
__global__
void saxpy(int n, float a,
float *x, float *y)
{
int i = blockIdx.x*blockDim.x + threadIdx.x;
if (i < n) y[i] = a*x[i] + y[i];
}
int N = 1<<20;
cudaMemcpy(d_x, x, N, cudaMemcpyHostToDevice);
cudaMemcpy(d_y, y, N, cudaMemcpyHostToDevice);
// Perform SAXPY on 1M elements
saxpy<<<4096,256>>>(N, 2.0, d_x, d_y);
cudaMemcpy(y, d_y, N, cudaMemcpyDeviceToHost);
CUDA CStandard C Parallel C
http://developer.nvidia.com/cuda-toolkit
37
int N = 1<<20;
std::vector<float> x(N), y(N);
...
// Perform SAXPY on 1M elements
std::transform(x.begin(), x.end(),
y.begin(), y.end(),
2.0f * _1 + _2);
int N = 1<<20;
thrust::host_vector<float> x(N), y(N);
...
thrust::device_vector<float> d_x = x;
thrust::device_vector<float> d_y = y;
// Perform SAXPY on 1M elements
thrust::transform(d_x.begin(), d_x.end(),
d_y.begin(),d_y.begin(),
2.0f * _1 + _2)
THRUST C++ TEMPLATE LIBRARY
Serial C++ Code
with STL and Boost
Parallel C++ Code
http://thrust.github.comwww.boost.org/libs/lambda
38
CUDA FORTRAN
module mymodule contains
attributes(global) subroutine saxpy(n, a, x, y)
real :: x(:), y(:), a
integer :: n, i
attributes(value) :: a, n
i = threadIdx%x+(blockIdx%x-1)*blockDim%x
if (i<=n) y(i) = a*x(i)+y(i)
end subroutine saxpy
end module mymodule
program main
use cudafor; use mymodule
real, device :: x_d(2**20), y_d(2**20)
x_d = 1.0, y_d = 2.0
! Perform SAXPY on 1M elements
call saxpy<<<4096,256>>>(2**20, 2.0, x_d, y_d)
end program main
http://developer.nvidia.com/cuda-fortran
module mymodule contains
subroutine saxpy(n, a, x, y)
real :: x(:), y(:), a
integer :: n, i
do i=1,n
y(i) = a*x(i)+y(i)
enddo
end subroutine saxpy
end module mymodule
program main
use mymodule
real :: x(2**20), y(2**20)
x = 1.0, y = 2.0
! Perform SAXPY on 1M elements
call saxpy(2**20, 2.0, x, y)
end program main
Standard Fortran Parallel Fortran
39
PYTHON
Numba Parallel Python
https://numba.pydata.org
import numpy as np
from numba import vectorize
@vectorize(['float32(float32, float32,
float32)'], target='cuda')
def saxpy(a, x, y):
return a * x + y
N = 1048576
# Initialize arrays
A = np.ones(N, dtype=np.float32)
B = np.ones(A.shape, dtype=A.dtype)
C = np.empty_like(A, dtype=A.dtype)
# Add arrays onGPU
C = saxpy(2.0, X, Y)
import numpy as np
def saxpy(a, x, y):
return [a * xi + yi
for xi, yi in zip(x, y)]
x = np.arange(2**20, dtype=np.float32)
y = np.arange(2**20, dtype=np.float32)
cpu_result = saxpy(2.0, x, y)
http://numpy.scipy.org
Standard Python
40
ENABLING ENDLESS WAYS TO SAXPY
• Build front-ends for Java, Python, R, DSLs
• Target other processors like ARM, FPGA,
GPUs, x86
CUDA
C, C++, Fortran
LLVM Compiler
For CUDA
NVIDIA
GPUs
x86
CPUs
New Language
Support
New Processor
Support
CUDA Compiler Contributed to
Open Source LLVM
42
int N = 1 << 20;
// Perform SAXPY on 1M elements: y[]=a*x[]+y[]
saxpy(N, 2.0, d_x, 1, d_y, 1);
DROP-IN ACCELERATION (STEP 1)
43
int N = 1 << 20;
// Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[]
cublasSaxpy(N, 2.0, d_x, 1, d_y, 1);
DROP-IN ACCELERATION (STEP 1)
Add “cublas” prefix
and use device variables
44
int N = 1 << 20;
cublasInit();
// Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[]
cublasSaxpy(N, 2.0, d_x, 1, d_y, 1);
cublasShutdown();
DROP-IN ACCELERATION (STEP 2)
Shut down cuBLAS
Initialize cuBLAS
45
int N = 1 << 20;
cublasInit();
cublasAlloc(N, sizeof(float), (void**)&d_x);
cublasAlloc(N, sizeof(float), (void*)&d_y);
// Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[]
cublasSaxpy(N, 2.0, d_x, 1, d_y, 1);
cublasFree(d_x);
cublasFree(d_y);
cublasShutdown();
DROP-IN ACCELERATION (STEP 2)
Allocate device vectors
Deallocate device vectors
46
int N = 1 << 20;
cublasInit();
cublasAlloc(N, sizeof(float), (void**)&d_x);
cublasAlloc(N, sizeof(float), (void*)&d_y);
cublasSetVector(N, sizeof(x[0]), x, 1, d_x, 1);
cublasSetVector(N, sizeof(y[0]), y, 1, d_y, 1);
// Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[]
cublasSaxpy(N, 2.0, d_x, 1, d_y, 1);
cublasGetVector(N, sizeof(y[0]), d_y, 1, y, 1);
cublasFree(d_x);
cublasFree(d_y);
cublasShutdown();
DROP-IN ACCELERATION (STEP 2)
Transfer data to GPU
Read data back GPU
47
2 BASIC STEPS TO GET STARTED
Step 1: Annotate source code with directives:
Step 2: Compile & run:
pgf90 -ta=nvidia -Minfo=accel file.f
!$acc data copy(util1,util2,util3) copyin(ip,scp2,scp2i)
!$acc parallel loop
…
!$acc end parallel
!$acc end data

More Related Content

What's hot

GTC Taiwan 2017 主題演說
GTC Taiwan 2017 主題演說GTC Taiwan 2017 主題演說
GTC Taiwan 2017 主題演說
NVIDIA Taiwan
 
組み込みから HPC まで ARM コアで実現するエコシステム
組み込みから HPC まで ARM コアで実現するエコシステム組み込みから HPC まで ARM コアで実現するエコシステム
組み込みから HPC まで ARM コアで実現するエコシステム
Shinnosuke Furuya
 
GPU Accelerated Data Science with RAPIDS - ODSC West 2020
GPU Accelerated Data Science with RAPIDS - ODSC West 2020GPU Accelerated Data Science with RAPIDS - ODSC West 2020
GPU Accelerated Data Science with RAPIDS - ODSC West 2020
John Zedlewski
 
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloudPart 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Univa, an Altair Company
 
Building the World's Largest GPU
Building the World's Largest GPUBuilding the World's Largest GPU
Building the World's Largest GPU
Renee Yao
 
JMI Techtalk: 한재근 - How to use GPU for developing AI
JMI Techtalk: 한재근 - How to use GPU for developing AIJMI Techtalk: 한재근 - How to use GPU for developing AI
JMI Techtalk: 한재근 - How to use GPU for developing AI
Lablup Inc.
 
PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」
PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」
PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」
PC Cluster Consortium
 
02 ai inference acceleration with components all in open hardware: opencapi a...
02 ai inference acceleration with components all in open hardware: opencapi a...02 ai inference acceleration with components all in open hardware: opencapi a...
02 ai inference acceleration with components all in open hardware: opencapi a...
Yutaka Kawai
 
Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...
Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...
Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...
NVIDIA Taiwan
 
dCUDA: Distributed GPU Computing with Hardware Overlap
 dCUDA: Distributed GPU Computing with Hardware Overlap dCUDA: Distributed GPU Computing with Hardware Overlap
dCUDA: Distributed GPU Computing with Hardware Overlap
inside-BigData.com
 
GPUIterator: Bridging the Gap between Chapel and GPU Platforms
GPUIterator: Bridging the Gap between Chapel and GPU PlatformsGPUIterator: Bridging the Gap between Chapel and GPU Platforms
GPUIterator: Bridging the Gap between Chapel and GPU Platforms
Akihiro Hayashi
 
Latest HPC News from NVIDIA
Latest HPC News from NVIDIALatest HPC News from NVIDIA
Latest HPC News from NVIDIA
inside-BigData.com
 
RAPIDS Overview
RAPIDS OverviewRAPIDS Overview
RAPIDS Overview
NVIDIA Japan
 
最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI
最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI
最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI
NVIDIA Japan
 
Accelerated Computing: The Path Forward
Accelerated Computing: The Path ForwardAccelerated Computing: The Path Forward
Accelerated Computing: The Path Forward
NVIDIA
 
Debugging CUDA applications
Debugging CUDA applicationsDebugging CUDA applications
Debugging CUDA applications
Rogue Wave Software
 
Possibilities of generative models
Possibilities of generative modelsPossibilities of generative models
Possibilities of generative models
Alison B. Lowndes
 
GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心
GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心
GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心
NVIDIA Taiwan
 
Intro to Machine Learning for GPUs
Intro to Machine Learning for GPUsIntro to Machine Learning for GPUs
Intro to Machine Learning for GPUs
Sri Ambati
 
GTC Taiwan 2017 企業端深度學習與人工智慧應用
GTC Taiwan 2017 企業端深度學習與人工智慧應用GTC Taiwan 2017 企業端深度學習與人工智慧應用
GTC Taiwan 2017 企業端深度學習與人工智慧應用
NVIDIA Taiwan
 

What's hot (20)

GTC Taiwan 2017 主題演說
GTC Taiwan 2017 主題演說GTC Taiwan 2017 主題演說
GTC Taiwan 2017 主題演說
 
組み込みから HPC まで ARM コアで実現するエコシステム
組み込みから HPC まで ARM コアで実現するエコシステム組み込みから HPC まで ARM コアで実現するエコシステム
組み込みから HPC まで ARM コアで実現するエコシステム
 
GPU Accelerated Data Science with RAPIDS - ODSC West 2020
GPU Accelerated Data Science with RAPIDS - ODSC West 2020GPU Accelerated Data Science with RAPIDS - ODSC West 2020
GPU Accelerated Data Science with RAPIDS - ODSC West 2020
 
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloudPart 3 Maximizing the utilization of GPU resources on-premise and in the cloud
Part 3 Maximizing the utilization of GPU resources on-premise and in the cloud
 
Building the World's Largest GPU
Building the World's Largest GPUBuilding the World's Largest GPU
Building the World's Largest GPU
 
JMI Techtalk: 한재근 - How to use GPU for developing AI
JMI Techtalk: 한재근 - How to use GPU for developing AIJMI Techtalk: 한재근 - How to use GPU for developing AI
JMI Techtalk: 한재근 - How to use GPU for developing AI
 
PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」
PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」
PCCC21:日本電気株式会社「一台何役?SX-Aurora TSUBASA最新情報」
 
02 ai inference acceleration with components all in open hardware: opencapi a...
02 ai inference acceleration with components all in open hardware: opencapi a...02 ai inference acceleration with components all in open hardware: opencapi a...
02 ai inference acceleration with components all in open hardware: opencapi a...
 
Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...
Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...
Recent Progress in SCCS on GPU Simulation of Biomedical and Hydrodynamic Prob...
 
dCUDA: Distributed GPU Computing with Hardware Overlap
 dCUDA: Distributed GPU Computing with Hardware Overlap dCUDA: Distributed GPU Computing with Hardware Overlap
dCUDA: Distributed GPU Computing with Hardware Overlap
 
GPUIterator: Bridging the Gap between Chapel and GPU Platforms
GPUIterator: Bridging the Gap between Chapel and GPU PlatformsGPUIterator: Bridging the Gap between Chapel and GPU Platforms
GPUIterator: Bridging the Gap between Chapel and GPU Platforms
 
Latest HPC News from NVIDIA
Latest HPC News from NVIDIALatest HPC News from NVIDIA
Latest HPC News from NVIDIA
 
RAPIDS Overview
RAPIDS OverviewRAPIDS Overview
RAPIDS Overview
 
最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI
最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI
最新の HPC 技術を生かした AI・ビッグデータインフラの東工大 TSUBAME3.0 及び産総研 ABCI
 
Accelerated Computing: The Path Forward
Accelerated Computing: The Path ForwardAccelerated Computing: The Path Forward
Accelerated Computing: The Path Forward
 
Debugging CUDA applications
Debugging CUDA applicationsDebugging CUDA applications
Debugging CUDA applications
 
Possibilities of generative models
Possibilities of generative modelsPossibilities of generative models
Possibilities of generative models
 
GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心
GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心
GTC Taiwan 2017 如何在充滿未知的巨量數據時代中建構一個數據中心
 
Intro to Machine Learning for GPUs
Intro to Machine Learning for GPUsIntro to Machine Learning for GPUs
Intro to Machine Learning for GPUs
 
GTC Taiwan 2017 企業端深度學習與人工智慧應用
GTC Taiwan 2017 企業端深度學習與人工智慧應用GTC Taiwan 2017 企業端深度學習與人工智慧應用
GTC Taiwan 2017 企業端深度學習與人工智慧應用
 

Similar to Application Optimisation using OpenPOWER and Power 9 systems

Nvidia tesla-k80-overview
Nvidia tesla-k80-overviewNvidia tesla-k80-overview
Nvidia tesla-k80-overview
Communication Progress
 
Hardware & Software Platforms for HPC, AI and ML
Hardware & Software Platforms for HPC, AI and MLHardware & Software Platforms for HPC, AI and ML
Hardware & Software Platforms for HPC, AI and ML
inside-BigData.com
 
Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Backend.AI Technical Introduction (19.09 / 2019 Autumn)Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Lablup Inc.
 
GTC 2022 Keynote
GTC 2022 KeynoteGTC 2022 Keynote
GTC 2022 Keynote
Alison B. Lowndes
 
NVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdf
NVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdfNVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdf
NVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdf
MuhammadAbdullah311866
 
Accelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDS
Accelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDSAccelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDS
Accelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDS
Databricks
 
Harnessing the virtual realm for successful real world artificial intelligence
Harnessing the virtual realm for successful real world artificial intelligenceHarnessing the virtual realm for successful real world artificial intelligence
Harnessing the virtual realm for successful real world artificial intelligence
Alison B. Lowndes
 
NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019
NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019
NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019
NVIDIA
 
Accelerating Data Science With GPUs
Accelerating Data Science With GPUsAccelerating Data Science With GPUs
Accelerating Data Science With GPUs
iguazio
 
OpenACC Monthly Highlights - September
OpenACC Monthly Highlights - SeptemberOpenACC Monthly Highlights - September
OpenACC Monthly Highlights - September
NVIDIA
 
Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...
Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...
Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...
E-Commerce Brasil
 
DATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe ConferenceDATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe Conference
LEGATO project
 
RAPIDS – Open GPU-accelerated Data Science
RAPIDS – Open GPU-accelerated Data ScienceRAPIDS – Open GPU-accelerated Data Science
RAPIDS – Open GPU-accelerated Data Science
Data Works MD
 
S51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdf
S51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdfS51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdf
S51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdf
DLow6
 
Speeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCCSpeeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCC
inside-BigData.com
 
OpenACC Monthly Highlights - February 2018
OpenACC Monthly Highlights - February 2018OpenACC Monthly Highlights - February 2018
OpenACC Monthly Highlights - February 2018
NVIDIA
 
Tesla Accelerated Computing Platform
Tesla Accelerated Computing PlatformTesla Accelerated Computing Platform
Tesla Accelerated Computing Platform
inside-BigData.com
 
Phi Week 2019
Phi Week 2019Phi Week 2019
Phi Week 2019
Alison B. Lowndes
 
OpenACC Monthly Highlights: February 2022
OpenACC Monthly Highlights: February 2022OpenACC Monthly Highlights: February 2022
OpenACC Monthly Highlights: February 2022
OpenACC
 
OpenACC Monthly Highlights: January 2021
OpenACC Monthly Highlights: January 2021OpenACC Monthly Highlights: January 2021
OpenACC Monthly Highlights: January 2021
OpenACC
 

Similar to Application Optimisation using OpenPOWER and Power 9 systems (20)

Nvidia tesla-k80-overview
Nvidia tesla-k80-overviewNvidia tesla-k80-overview
Nvidia tesla-k80-overview
 
Hardware & Software Platforms for HPC, AI and ML
Hardware & Software Platforms for HPC, AI and MLHardware & Software Platforms for HPC, AI and ML
Hardware & Software Platforms for HPC, AI and ML
 
Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Backend.AI Technical Introduction (19.09 / 2019 Autumn)Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Backend.AI Technical Introduction (19.09 / 2019 Autumn)
 
GTC 2022 Keynote
GTC 2022 KeynoteGTC 2022 Keynote
GTC 2022 Keynote
 
NVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdf
NVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdfNVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdf
NVIDIA DGX User Group 1st Meet Up_30 Apr 2021.pdf
 
Accelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDS
Accelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDSAccelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDS
Accelerated Machine Learning with RAPIDS and MLflow, Nvidia/RAPIDS
 
Harnessing the virtual realm for successful real world artificial intelligence
Harnessing the virtual realm for successful real world artificial intelligenceHarnessing the virtual realm for successful real world artificial intelligence
Harnessing the virtual realm for successful real world artificial intelligence
 
NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019
NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019
NVIDIA CEO Jensen Huang Presentation at Supercomputing 2019
 
Accelerating Data Science With GPUs
Accelerating Data Science With GPUsAccelerating Data Science With GPUs
Accelerating Data Science With GPUs
 
OpenACC Monthly Highlights - September
OpenACC Monthly Highlights - SeptemberOpenACC Monthly Highlights - September
OpenACC Monthly Highlights - September
 
Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...
Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...
Fórum E-Commerce Brasil | Tecnologias NVIDIA aplicadas ao e-commerce. Muito a...
 
DATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe ConferenceDATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe Conference
 
RAPIDS – Open GPU-accelerated Data Science
RAPIDS – Open GPU-accelerated Data ScienceRAPIDS – Open GPU-accelerated Data Science
RAPIDS – Open GPU-accelerated Data Science
 
S51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdf
S51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdfS51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdf
S51281 - Accelerate Data Science in Python with RAPIDS_1679330128290001YmT7.pdf
 
Speeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCCSpeeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCC
 
OpenACC Monthly Highlights - February 2018
OpenACC Monthly Highlights - February 2018OpenACC Monthly Highlights - February 2018
OpenACC Monthly Highlights - February 2018
 
Tesla Accelerated Computing Platform
Tesla Accelerated Computing PlatformTesla Accelerated Computing Platform
Tesla Accelerated Computing Platform
 
Phi Week 2019
Phi Week 2019Phi Week 2019
Phi Week 2019
 
OpenACC Monthly Highlights: February 2022
OpenACC Monthly Highlights: February 2022OpenACC Monthly Highlights: February 2022
OpenACC Monthly Highlights: February 2022
 
OpenACC Monthly Highlights: January 2021
OpenACC Monthly Highlights: January 2021OpenACC Monthly Highlights: January 2021
OpenACC Monthly Highlights: January 2021
 

More from Ganesan Narayanasamy

Chip Design Curriculum development Residency program
Chip Design Curriculum development Residency programChip Design Curriculum development Residency program
Chip Design Curriculum development Residency program
Ganesan Narayanasamy
 
Basics of Digital Design and Verilog
Basics of Digital Design and VerilogBasics of Digital Design and Verilog
Basics of Digital Design and Verilog
Ganesan Narayanasamy
 
180 nm Tape out experience using Open POWER ISA
180 nm Tape out experience using Open POWER ISA180 nm Tape out experience using Open POWER ISA
180 nm Tape out experience using Open POWER ISA
Ganesan Narayanasamy
 
Workload Transformation and Innovations in POWER Architecture
Workload Transformation and Innovations in POWER Architecture Workload Transformation and Innovations in POWER Architecture
Workload Transformation and Innovations in POWER Architecture
Ganesan Narayanasamy
 
OpenPOWER Workshop at IIT Roorkee
OpenPOWER Workshop at IIT RoorkeeOpenPOWER Workshop at IIT Roorkee
OpenPOWER Workshop at IIT Roorkee
Ganesan Narayanasamy
 
Deep Learning Use Cases using OpenPOWER systems
Deep Learning Use Cases using OpenPOWER systemsDeep Learning Use Cases using OpenPOWER systems
Deep Learning Use Cases using OpenPOWER systems
Ganesan Narayanasamy
 
IBM BOA for POWER
IBM BOA for POWER IBM BOA for POWER
IBM BOA for POWER
Ganesan Narayanasamy
 
OpenPOWER System Marconi100
OpenPOWER System Marconi100OpenPOWER System Marconi100
OpenPOWER System Marconi100
Ganesan Narayanasamy
 
OpenPOWER Latest Updates
OpenPOWER Latest UpdatesOpenPOWER Latest Updates
OpenPOWER Latest Updates
Ganesan Narayanasamy
 
POWER10 innovations for HPC
POWER10 innovations for HPCPOWER10 innovations for HPC
POWER10 innovations for HPC
Ganesan Narayanasamy
 
Deeplearningusingcloudpakfordata
DeeplearningusingcloudpakfordataDeeplearningusingcloudpakfordata
Deeplearningusingcloudpakfordata
Ganesan Narayanasamy
 
OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...
OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...
OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...
Ganesan Narayanasamy
 
AI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systems
AI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systemsAI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systems
AI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systems
Ganesan Narayanasamy
 
AI in healthcare - Use Cases
AI in healthcare - Use Cases AI in healthcare - Use Cases
AI in healthcare - Use Cases
Ganesan Narayanasamy
 
AI in Health Care using IBM Systems/OpenPOWER systems
AI in Health Care using IBM Systems/OpenPOWER systemsAI in Health Care using IBM Systems/OpenPOWER systems
AI in Health Care using IBM Systems/OpenPOWER systems
Ganesan Narayanasamy
 
AI in Healh Care using IBM POWER systems
AI in Healh Care using IBM POWER systems AI in Healh Care using IBM POWER systems
AI in Healh Care using IBM POWER systems
Ganesan Narayanasamy
 
Poster from NUS
Poster from NUSPoster from NUS
Poster from NUS
Ganesan Narayanasamy
 
SAP HANA on POWER9 systems
SAP HANA on POWER9 systemsSAP HANA on POWER9 systems
SAP HANA on POWER9 systems
Ganesan Narayanasamy
 
Graphical Structure Learning accelerated with POWER9
Graphical Structure Learning accelerated with POWER9Graphical Structure Learning accelerated with POWER9
Graphical Structure Learning accelerated with POWER9
Ganesan Narayanasamy
 
AI in the enterprise
AI in the enterprise AI in the enterprise
AI in the enterprise
Ganesan Narayanasamy
 

More from Ganesan Narayanasamy (20)

Chip Design Curriculum development Residency program
Chip Design Curriculum development Residency programChip Design Curriculum development Residency program
Chip Design Curriculum development Residency program
 
Basics of Digital Design and Verilog
Basics of Digital Design and VerilogBasics of Digital Design and Verilog
Basics of Digital Design and Verilog
 
180 nm Tape out experience using Open POWER ISA
180 nm Tape out experience using Open POWER ISA180 nm Tape out experience using Open POWER ISA
180 nm Tape out experience using Open POWER ISA
 
Workload Transformation and Innovations in POWER Architecture
Workload Transformation and Innovations in POWER Architecture Workload Transformation and Innovations in POWER Architecture
Workload Transformation and Innovations in POWER Architecture
 
OpenPOWER Workshop at IIT Roorkee
OpenPOWER Workshop at IIT RoorkeeOpenPOWER Workshop at IIT Roorkee
OpenPOWER Workshop at IIT Roorkee
 
Deep Learning Use Cases using OpenPOWER systems
Deep Learning Use Cases using OpenPOWER systemsDeep Learning Use Cases using OpenPOWER systems
Deep Learning Use Cases using OpenPOWER systems
 
IBM BOA for POWER
IBM BOA for POWER IBM BOA for POWER
IBM BOA for POWER
 
OpenPOWER System Marconi100
OpenPOWER System Marconi100OpenPOWER System Marconi100
OpenPOWER System Marconi100
 
OpenPOWER Latest Updates
OpenPOWER Latest UpdatesOpenPOWER Latest Updates
OpenPOWER Latest Updates
 
POWER10 innovations for HPC
POWER10 innovations for HPCPOWER10 innovations for HPC
POWER10 innovations for HPC
 
Deeplearningusingcloudpakfordata
DeeplearningusingcloudpakfordataDeeplearningusingcloudpakfordata
Deeplearningusingcloudpakfordata
 
OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...
OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...
OpenCAPI-based Image Analysis Pipeline for 18 GB/s kilohertz-framerate X-ray ...
 
AI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systems
AI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systemsAI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systems
AI in healthcare and Automobile Industry using OpenPOWER/IBM POWER9 systems
 
AI in healthcare - Use Cases
AI in healthcare - Use Cases AI in healthcare - Use Cases
AI in healthcare - Use Cases
 
AI in Health Care using IBM Systems/OpenPOWER systems
AI in Health Care using IBM Systems/OpenPOWER systemsAI in Health Care using IBM Systems/OpenPOWER systems
AI in Health Care using IBM Systems/OpenPOWER systems
 
AI in Healh Care using IBM POWER systems
AI in Healh Care using IBM POWER systems AI in Healh Care using IBM POWER systems
AI in Healh Care using IBM POWER systems
 
Poster from NUS
Poster from NUSPoster from NUS
Poster from NUS
 
SAP HANA on POWER9 systems
SAP HANA on POWER9 systemsSAP HANA on POWER9 systems
SAP HANA on POWER9 systems
 
Graphical Structure Learning accelerated with POWER9
Graphical Structure Learning accelerated with POWER9Graphical Structure Learning accelerated with POWER9
Graphical Structure Learning accelerated with POWER9
 
AI in the enterprise
AI in the enterprise AI in the enterprise
AI in the enterprise
 

Recently uploaded

AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
Vadym Kazulkin
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
ScyllaDB
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
christinelarrosa
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
Demystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through StorytellingDemystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through Storytelling
Enterprise Knowledge
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
BibashShahi
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
Fwdays
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Pitangent Analytics & Technology Solutions Pvt. Ltd
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 

Recently uploaded (20)

AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
Demystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through StorytellingDemystifying Knowledge Management through Storytelling
Demystifying Knowledge Management through Storytelling
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
Crafting Excellence: A Comprehensive Guide to iOS Mobile App Development Serv...
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 

Application Optimisation using OpenPOWER and Power 9 systems

  • 3. 3 ACCELERATED COMPUTING IS GROWING RAPIDLY 22x GPU Developers 45,000 1M 2012 2018 580 Applications Accelerated 580 0 100 200 300 400 500 600 700 2011 2012 2013 2014 2015 2016 2017 2018 2018 11M 1M 2012 11x CUDA Downloads
  • 4. 4 CUDA POWERS ACCELERATED COMPUTING DEFINING THE NEXT GIANT WAVE IN HPC Over 80x in 3 Years Googlenet Training Performance Vs K80 DL FRAMEWORKS AND HPC APPLICATIONS ACCELERATED +400 More Applications 1x K80 4x M40 8x P100 8x V100 0x 20x 40x 60x 80x 100x 127 Systems on Top 500 World’s #1 Summit: 144 PF World’s #2 Sierra: 95 PF Europe’s #1 Piz Daint: 21 PF Japan’s #1 ABCI: 20 PF Industrial #1 ENI: 12 PF
  • 5. 5 SMALL CHANGES, BIG SPEED-UP Application Code + GPU CPU 5% of Code Compute-Intensive Functions Rest of Sequential CPU Code
  • 6. 6 3 WAYS TO ACCELERATE APPLICATIONS Applications Libraries “Drop-in” Acceleration Programming Languages OpenACC Directives Maximum Flexibility Easily Accelerate Applications
  • 7. 7 3 WAYS TO ACCELERATE APPLICATIONS Applications Libraries “Drop-in” Acceleration Programming Languages OpenACC Directives Maximum Flexibility Easily Accelerate Applications
  • 8. 8 LIBRARIES: EASY, HIGH-QUALITY ACCELERATION Using libraries enables GPU acceleration without in-depth knowledge of GPU programming Many GPU-accelerated libraries follow standard APIs, thus enabling acceleration with minimal code changes Libraries offer high-quality implementations of functions encountered in a broad range of applications NVIDIA libraries are tuned by experts EASE OF USE “DROP-IN” QUALITY PERFORMANCE
  • 9. 9 DEEP LEARNING GPU ACCELERATED LIBRARIES “Drop-in” Acceleration for Your Applications LINEAR ALGEBRA PARALLEL ALGORITHMS SIGNAL, IMAGE & VIDEO TensorRT nvGRAPH NCCL cuBLAS cuSPARSE cuRAND DeepStream SDK NVIDIA NPPcuFFT CUDA Math library cuSOLVER CODEC SDKcuDNN
  • 10. 10 3 STEPS TO CUDA-ACCELERATED APPLICATION Step 1: Substitute library calls with equivalent CUDA library calls saxpy ( … ) cublasSaxpy ( … ) Step 2: Manage data locality - with CUDA: cudaMalloc(), cudaMemcpy(), etc. - with CUBLAS: cublasAlloc(), cublasSetVector(), etc. Step 3: Rebuild and link the CUDA-accelerated library gcc myobj.o –l cublas
  • 11. 11 3 WAYS TO ACCELERATE APPLICATIONS Applications Libraries “Drop-in” Acceleration Programming Languages OpenACC Directives Maximum Flexibility Easily Accelerate Applications
  • 12. 12 OpenACC is a directives- based programming approach to parallel computing designed for performance and portability on CPUs and GPUs for HPC. main() { <serial code> #pragma acc kernels { <parallel code> } } Add Simple Compiler Directive
  • 13. 13 Janus Juul Eriksen, PhD Fellow qLEAP Center for Theoretical Chemistry, Aarhus University “ OpenACC makes GPU computing approachable for domain scientists. Initial OpenACC implementation required only minor effort, and more importantly, no modifications of our existing CPU implementation. “ LSDALTON Large-scale application for calculating high- accuracy molecular energies Lines of Code Modified # of Weeks Required # of Codes to Maintain <100 Lines 1 Week 1 Source Big Performance 7.9x 8.9x 11.7x ALANINE-1 13 ATOMS ALANINE-2 23 ATOMS ALANINE-3 33 ATOMSSpeedupvsCPU Minimal Effort LS-DALTON CCSD(T) Module Benchmarked on Titan Supercomputer (AMD CPU vs Tesla K20X) https://developer.nvidia.com/openacc/success-stories
  • 14. 14 SINGLE CODE FOR MULTIPLE PLATFORMS POWER Sunway x86 CPU x86 Xeon Phi NVIDIA GPU PEZY-SC 9x 10x 11x 52x 9x 10x 11x 77x 0x 20x 40x 60x 80x SpeedupvsSingleHaswellCore PGI OpenACC Intel OpenMP IBM OpenMP Dual Haswell Dual Broadwell Dual POWER8 1 Tesla P100 OpenACC - Performance Portable Programming Model for HPC 1 Tesla V100 AWE Hydrodynamics CloverLeaf mini-App, bm32 data set Systems: Haswell: 2x16 core Haswell server, four K80s, CentOS 7.2 (perf-hsw10), Broadwell: 2x20 core Broadwell server, eight P100s (dgx1-prd-01), Minsky: POWER8+NVLINK, four P100s, RHEL 7.3 (gsn1). Compilers: Intel 17.0, IBM XL 13.1.3, PGI 16.10. Benchmark: CloverLeaf v1.3 downloaded from http://uk-mac.github.io/CloverLeaf the week of November 7 2016; CloverlLeaf_Serial; CloverLeaf_ref (MPI+OpenMP); CloverLeaf_OpenACC (MPI+OpenACC) Data compiled by PGI November 2016, Volta data collected June 2017
  • 15. 15 TOP HPC APPS ADOPTING OPENACC OpenACC - Performance Portability And Ease of Programming ANSYS Fluent VASP 3 of Top 10 Apps 5 CSCS Codes COSMO ELEPHANT RAMSES ICON ORB5 GTC XGC ACME FLASH LSDalton 5 ORNL CAAR Codes 30000 22500 15000 7500 0 T4 T8 T14 T28 Time(S) CPU (cores) CPU: (Haswell EP) Intel(R) Xeon(R) CPU E5-2695 v3 @2.30GHz, 2 sockets, 28 cores GPU: Tesla K80 12+12 GB, Driver 346.46 Fluent Native Solver Fluent HTC Solver K80 GPU ANSYS Fluent R18.0 Radiation SolverGaussian
  • 16. 16 GAUSSIAN 16 Using OpenACC allowed us to continue development of our fundamental algorithms and software capabilities simultaneously with the GPU-related work. In the end, we could use the same code base for SMP, cluster/ network and GPU parallelism. PGI's compilers were essential to the success of our efforts. Mike Frisch, Ph.D. President and CEO Gaussian, Inc. Gaussian, Inc. 340QuinnipiacSt. Bldg. 40 Wallingford, CT 06492USA custserv@gaussian.com Gaussian isa registered trademark of Gaussian, Inc. All other trademark thepropertiesof their respectiveholders. Specif cationssubject tochangew Copyright © 2017, Gaussian, Inc. All rightsreserved. Roberto Gomperts NVIDIA Michael Frisch Gaussian Brent Leback NVIDIA/PGI Project Contributors Valinomycin wB97xD/6-311+(2d,p) Freq 2.25X speedup Hardware: HPE server with dual Intel Xeon E5-2698 v3 CPUs (2.30GHz ; 16 cores/chip), 256GB memory and 4 Tesla K80 dual GPU boards (boost clocks: MEM 2505 and SM 875). Gaussian source code compiled with PGI Accelerator Compilers (16.5) with OpenACC (2.5 standard). A Leading Computation Chemistry Code
  • 17. 17 OpenACC DIRECTIVES EXAMPLE !$acc data copy(A,Anew) iter=0 do while ( err > tol .and. iter < iter_max ) iter = iter +1 err=0._fp_kind !$acc kernels do j=1,m do i=1,n Anew(i,j) = .25_fp_kind *( A(i+1,j ) + A(i-1,j ) & +A(i ,j-1) + A(i ,j+1)) err = max( err, Anew(i,j)-A(i,j)) end do end do !$acc end kernels IF(mod(iter,100)==0 .or. iter == 1) print *, iter, err A= Anew end do !$acc end data Copy arrays into GPU memory within data region Parallelize code inside region Close off parallel region Close off data region, copy data back
  • 18. 18 OPENACC FOR EVERYONE New PGI Community Edition Now Available PROGRAMMING MODELS OpenACC, CUDA Fortran, OpenMP, C/C++/Fortran Compilers and Tools PLATFORMS X86, OpenPOWER, NVIDIA GPU UPDATES 1-2 times a year 6-9 times a year 6-9 times a year SUPPORT User Forums PGI Support PGI Professional Services LICENSE Annual Perpetual Volume/Site FREE
  • 19. 19 RESOURCES FREE Compiler Success stories Guides Tutorials Videos Courses Code Samples Talks Books Specification Teaching Materials Slack&StackOverflow Success stories: https://www.openacc.org/success-stories Resources: https://www.openacc.org/resources Free Compiler: https://www.pgroup.com/products/community.htm
  • 20. 20 3 WAYS TO ACCELERATE APPLICATIONS Applications Libraries “Drop-in” Acceleration Programming Languages OpenACC Directives Maximum Flexibility Easily Accelerate Applications
  • 21. 21 CUDA Fortran, OpenACCFortran CUDA C++, OpenACCC, C++ CUDA Python, PyCUDAPython MATLAB, Mathematica, LabVIEWNumerical analytics GPU PROGRAMMING LANGUAGES Altimesh Hybridizer, Alea GPUC#
  • 22. 22 void saxpy_serial(int n, float a, float *x, float *y) { for (int i = 0; i < n; ++i) y[i] = a*x[i] + y[i]; } // Perform SAXPY on 1M elements saxpy_serial(4096*256, 2.0, x, y); __global__ void saxpy_parallel(int n, float a, float *x, float *y) { int i = blockIdx.x*blockDim.x + threadIdx.x; if (i < n) y[i] = a*x[i] + y[i]; } // Perform SAXPY on 1M elements saxpy_parallel<<<4096,256>>>(n,2.0,x,y); CUDA C Standard C Code Parallel C Code http://developer.nvidia.com/cuda-toolkit
  • 23. 23 CUDA C++: DEVELOP GENERIC PARALLEL CODE Class hierarchies __device__ methods Templates Operator overloading Functors (function objects) Device-side new/delete More… template <typename T> struct Functor { __device__ Functor(_a) : a(_a) {} __device__ T operator(T x) { return a*x; } T a; } template <typename T, typename Oper> __global__ void kernel(T *output, int n) { Oper op(3.7); output = new T[n]; // dynamic allocation int i = blockIdx.x*blockDim.x + threadIdx.x; if (i < n) output[i] = op(i); // apply functor } http://developer.nvidia.com/cuda-toolkit CUDA C++ features enable sophisticated and flexible applications and middleware
  • 24. 24 // generate 32M random numbers on host thrust::host_vector<int> h_vec(32 << 20); thrust::generate(h_vec.begin(), h_vec.end(), ` rand); // transfer data to device (GPU) thrust::device_vector<int> d_vec = h_vec; // sort data on device thrust::sort(d_vec.begin(), d_vec.end()); // transfer data back to host thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin()); RAPID PARALLEL C++ DEVELOPMENT • Resembles C++ STL • High-level interface • Enhances developer productivity • Enables performance portability between GPUs and multicore CPUs • Flexible • CUDA, OpenMP, and TBB backends • Extensible and customizable • Integrates with existing software • Open source http://developer.nvidia.com/thrust or http://thrust.googlecode.com
  • 25. 25 CUDA FORTRAN • Program GPU using Fortran • Key language for HPC • Simple language extensions • Kernel functions • Thread / block IDs • Device & data management • Parallel loop directives • Familiar syntax • Use allocate, deallocate • Copy CPU-to-GPU with assignment (=) module mymodule contains attributes(global) subroutine saxpy(n,a,x,y) real :: x(:), y(:), a, integer n, i attributes(value) :: a, n i = threadIdx%x+(blockIdx%x-1)*blockDim%x if (i<=n) y(i) = a*x(i) + y(i); end subroutine saxpy end module mymodule program main use cudafor; use mymodule real, device :: x_d(2**20), y_d(2**20) x_d = 1.0; y_d = 2.0 call saxpy<<<4096,256>>>(2**20,3.0,x_d,y_d,) y = y_d write(*,*) 'max error=', maxval(abs(y-5.0)) end program main http://developer.nvidia.com/cuda-fortran
  • 26. 26 MATLAB http://www.mathworks.com/discovery/matlab-gpu.html GET STARTED TODAY These languages are supported on all CUDA-capable GPUs. You might already have a CUDA-capable GPU in your laptop or desktop PC! CUDA C/C++ http://developer.nvidia.com/cuda-toolkit Thrust C++ Template Library http://developer.nvidia.com/thrust CUDA Fortran http://developer.nvidia.com/cuda-toolkit CUDA Python http://developer.nvidia.com/how-to-cuda-python Mathematica http://www.wolfram.com/mathematica/new -in-8/cuda-and-opencl-support/
  • 28. 28 NSIGHT PRODUCT FAMILY Nsight Systems System-wide application algorithm tuning Nsight Compute CUDA Kernel Profiling and Debugging Nsight Graphics Graphics Shader Profiling and Debugging IDE Plugins Nsight Eclipse Edition/Visual Studio (Editor, Debugger)
  • 29. 29 NSIGHT SYSTEMS Observe Application Behavior: CPU threads, GPU traces, Memory Bandwidth and more Locate Optimization Opportunities: CUDA & OpenGL APIs, Unified Memory transfers, User Annotations using NVTX Ready for Big Data: Fast GUI capable of visualizing in excess of 10 million events on laptops, Container support, Minimum user privileges System-wide Performance Analysis https://developer.nvidia.com/nsight-systems
  • 30. 30 Processes and threads CUDA and OpenGL API trace Multi-GPU Kernel and memory transfer activities cuDNN and cuBLAS trace Thread/core migration Thread state
  • 31. 31 NVIDIA NSIGHT COMPUTE Next Generation Kernel Profiler  Interactive CUDA API debugging and kernel profiling  Fast Data Collection  Improved Workflow and Fully Customizable (Baselining, Programmable UI/Rules)  Command Line, Standalone, IDE Integration  Platform Support  OS: Linux (x86, ARM), Windows  GPUs: Pascal, Volta, Turing Kernel Profile Comparisons with Baseline Metric Data Source Correlation
  • 32. 32 SIX WAYS TO SAXPY Programming Languages for GPU Computing
  • 33. 33 SINGLE PRECISION ALPHA X PLUS Y (SAXPY) Part of Basic Linear Algebra Subroutines (BLAS) Library GPU SAXPY in multiple languages and libraries A menagerie* of possibilities, not a tutorial 𝒛 = 𝛼𝒙 + 𝒚 x, y, z : vector  : scalar *technically, a program chrestomathy: http://en.wikipedia.org/wiki/Chrestomathy
  • 34. 34 subroutine saxpy(n, a, x, y) real :: x(:), y(:), a integer :: n, i !$acc kernels do i=1,n y(i) = a*x(i)+y(i) enddo !$acc end kernels end subroutine saxpy ... ! Perform SAXPY on 1M elements call saxpy(2**20, 2.0, x_d, y_d) ... void saxpy(int n, float a, float *x, float *y) { #pragma acc kernels for (int i = 0; i < n; ++i) y[i] = a*x[i] + y[i]; } ... // Perform SAXPY on 1M elements saxpy(1<<20, 2.0, x, y); ... OpenACC COMPILER DIRECTIVES Parallel C Code Parallel Fortran Code http://developer.nvidia.com/openacc or http://openacc.org
  • 35. 35 int N = 1<<20; ... // Use your choice of blas library // Perform SAXPY on 1M elements blas_saxpy(N, 2.0, x, 1, y, 1); int N = 1<<20; cublasInit(); cublasSetVector(N, sizeof(x[0]), x, 1, d_x, 1); cublasSetVector(N, sizeof(y[0]), y, 1, d_y, 1); // Perform SAXPY on 1M elements cublasSaxpy(N, 2.0, d_x, 1, d_y, 1); cublasGetVector(N, sizeof(y[0]), d_y, 1, y, 1); cublasShutdown(); cuBLAS LIBRARY Serial BLAS Code Parallel cuBLAS Code http://developer.nvidia.com/cublas You can also call cuBLAS from Fortran, C++, Python, and other languages
  • 36. 36 void saxpy(int n, float a, float *x, float *y) { for (int i = 0; i < n; ++i) y[i] = a*x[i] + y[i]; } int N = 1<<20; // Perform SAXPY on 1M elements saxpy(N, 2.0, x, y); __global__ void saxpy(int n, float a, float *x, float *y) { int i = blockIdx.x*blockDim.x + threadIdx.x; if (i < n) y[i] = a*x[i] + y[i]; } int N = 1<<20; cudaMemcpy(d_x, x, N, cudaMemcpyHostToDevice); cudaMemcpy(d_y, y, N, cudaMemcpyHostToDevice); // Perform SAXPY on 1M elements saxpy<<<4096,256>>>(N, 2.0, d_x, d_y); cudaMemcpy(y, d_y, N, cudaMemcpyDeviceToHost); CUDA CStandard C Parallel C http://developer.nvidia.com/cuda-toolkit
  • 37. 37 int N = 1<<20; std::vector<float> x(N), y(N); ... // Perform SAXPY on 1M elements std::transform(x.begin(), x.end(), y.begin(), y.end(), 2.0f * _1 + _2); int N = 1<<20; thrust::host_vector<float> x(N), y(N); ... thrust::device_vector<float> d_x = x; thrust::device_vector<float> d_y = y; // Perform SAXPY on 1M elements thrust::transform(d_x.begin(), d_x.end(), d_y.begin(),d_y.begin(), 2.0f * _1 + _2) THRUST C++ TEMPLATE LIBRARY Serial C++ Code with STL and Boost Parallel C++ Code http://thrust.github.comwww.boost.org/libs/lambda
  • 38. 38 CUDA FORTRAN module mymodule contains attributes(global) subroutine saxpy(n, a, x, y) real :: x(:), y(:), a integer :: n, i attributes(value) :: a, n i = threadIdx%x+(blockIdx%x-1)*blockDim%x if (i<=n) y(i) = a*x(i)+y(i) end subroutine saxpy end module mymodule program main use cudafor; use mymodule real, device :: x_d(2**20), y_d(2**20) x_d = 1.0, y_d = 2.0 ! Perform SAXPY on 1M elements call saxpy<<<4096,256>>>(2**20, 2.0, x_d, y_d) end program main http://developer.nvidia.com/cuda-fortran module mymodule contains subroutine saxpy(n, a, x, y) real :: x(:), y(:), a integer :: n, i do i=1,n y(i) = a*x(i)+y(i) enddo end subroutine saxpy end module mymodule program main use mymodule real :: x(2**20), y(2**20) x = 1.0, y = 2.0 ! Perform SAXPY on 1M elements call saxpy(2**20, 2.0, x, y) end program main Standard Fortran Parallel Fortran
  • 39. 39 PYTHON Numba Parallel Python https://numba.pydata.org import numpy as np from numba import vectorize @vectorize(['float32(float32, float32, float32)'], target='cuda') def saxpy(a, x, y): return a * x + y N = 1048576 # Initialize arrays A = np.ones(N, dtype=np.float32) B = np.ones(A.shape, dtype=A.dtype) C = np.empty_like(A, dtype=A.dtype) # Add arrays onGPU C = saxpy(2.0, X, Y) import numpy as np def saxpy(a, x, y): return [a * xi + yi for xi, yi in zip(x, y)] x = np.arange(2**20, dtype=np.float32) y = np.arange(2**20, dtype=np.float32) cpu_result = saxpy(2.0, x, y) http://numpy.scipy.org Standard Python
  • 40. 40 ENABLING ENDLESS WAYS TO SAXPY • Build front-ends for Java, Python, R, DSLs • Target other processors like ARM, FPGA, GPUs, x86 CUDA C, C++, Fortran LLVM Compiler For CUDA NVIDIA GPUs x86 CPUs New Language Support New Processor Support CUDA Compiler Contributed to Open Source LLVM
  • 41.
  • 42. 42 int N = 1 << 20; // Perform SAXPY on 1M elements: y[]=a*x[]+y[] saxpy(N, 2.0, d_x, 1, d_y, 1); DROP-IN ACCELERATION (STEP 1)
  • 43. 43 int N = 1 << 20; // Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[] cublasSaxpy(N, 2.0, d_x, 1, d_y, 1); DROP-IN ACCELERATION (STEP 1) Add “cublas” prefix and use device variables
  • 44. 44 int N = 1 << 20; cublasInit(); // Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[] cublasSaxpy(N, 2.0, d_x, 1, d_y, 1); cublasShutdown(); DROP-IN ACCELERATION (STEP 2) Shut down cuBLAS Initialize cuBLAS
  • 45. 45 int N = 1 << 20; cublasInit(); cublasAlloc(N, sizeof(float), (void**)&d_x); cublasAlloc(N, sizeof(float), (void*)&d_y); // Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[] cublasSaxpy(N, 2.0, d_x, 1, d_y, 1); cublasFree(d_x); cublasFree(d_y); cublasShutdown(); DROP-IN ACCELERATION (STEP 2) Allocate device vectors Deallocate device vectors
  • 46. 46 int N = 1 << 20; cublasInit(); cublasAlloc(N, sizeof(float), (void**)&d_x); cublasAlloc(N, sizeof(float), (void*)&d_y); cublasSetVector(N, sizeof(x[0]), x, 1, d_x, 1); cublasSetVector(N, sizeof(y[0]), y, 1, d_y, 1); // Perform SAXPY on 1M elements: d_y[]=a*d_x[]+d_y[] cublasSaxpy(N, 2.0, d_x, 1, d_y, 1); cublasGetVector(N, sizeof(y[0]), d_y, 1, y, 1); cublasFree(d_x); cublasFree(d_y); cublasShutdown(); DROP-IN ACCELERATION (STEP 2) Transfer data to GPU Read data back GPU
  • 47. 47 2 BASIC STEPS TO GET STARTED Step 1: Annotate source code with directives: Step 2: Compile & run: pgf90 -ta=nvidia -Minfo=accel file.f !$acc data copy(util1,util2,util3) copyin(ip,scp2,scp2i) !$acc parallel loop … !$acc end parallel !$acc end data