Heterogeneous Programming Using Data Parallel Extension for Numba* for AI and HPC
Overview
Python* has become a useful tool in advancing scientific research and computation with a rich ecosystem of open source packages for mathematics, science, and engineering. Python is anchored on the performant numerical computation on arrays and matrices, data analysis, and visualization capabilities.
Data Parallel Extension for Numba* is a stand-alone extension to the Numba just-in-time (JIT) compiler and adds SYCL* programming capabilities to Numba. This extension is packaged as part of Intel® Distribution for Python*, which is included with AI Tools.
This data parallel Python course demonstrates high-performing code targeting Intel® XPUs using Python. Developers learn how to take advantage of heterogeneous architectures and speed up applications without using low-level proprietary programming APIs.
Prerequisites
Complete the first three modules of the Essentials of SYCL course:
- Introduction to SYCL
- SYCL Program Structure
- SYCL Unified Shared Memory
Learn about the Intel Distribution for Python.
Objectives
Who is this for?
This course is designed for Python developers who want to learn the basics of data parallel Python for data parallel and heterogeneous hardware (such as CPU and GPU) without leaving the Python ecosystem or compromising on performance.
What will I be able to do?
Practice the essential concepts and features of Data Parallel Extension for Numba using live sample code on the Intel® Developer Cloud.
Get Started
Get hands-on practice with code samples in Jupyter* Notebooks running live on Intel Developer Cloud.
To get started:
- Sign in to Intel Developer Cloud, select One Click Log In for JupyterLab, and then (if needed) select Launch Server.
- Open the AI_Numba_dpex_Essentials folder, and then select Welcome.ipynb.
Modules
Introduction to Data Parallel Extension for Numba
- Write parallel Python programs using Numba.
- Introduce Data Parallel Extension for Numba and show examples of how to write parallel code and perform an automatic offload approach using @numba.jit.
- For programmers with SYCL and GPU programming experience, see examples of how to write Explicit kernel using the @numba_dpex.kernel decorator.
Introduction to Data Parallel Control
- Use Data Parallel Control (dpctl) to manage different devices.
- Introduce the classes and the functions of dpctl (platform, device, context, device_selector, and queue).
- Use the Unified Shared Memory (USM) manager to create Python objects that use SYCL USM for data allocation.
Introduction to Pairwise Distance Algorithm
- Introduce the @numba.jit implementation of the Pairwise algorithm.
- Use the @numba_dpex.kernel implementation of the Pairwise algorithm.
- Use the NumPy implementation of the Pairwise algorithm.
Implementation of the Black-Scholes Formula
- Introduce the @numba.jit implementation of the Black-Scholes algorithm.
- Use the @numba_dpex.kernel implementation of the Black-Scholes algorithm.
- Use the NumPy implementation of the Black-Scholes algorithm.
Implementation of K-Means Using Numba
- Introduce the @numba.jit implementation of the K-Means algorithm.
- Use @numba_dpex.kernel implementation of the K-Means algorithm.
- Use the NumPy implementation of the K-Means algorithm.
Implementation of K-Nearest Neighbors (KNN) Algorithm
- Introduce the @numba.jit implementation of the KNN algorithm.
- Use @numba_dpex.kernel implementation of the KNN algorithm.