Enabling Julialang-Based Development for Graphcore IPUs

Enable high-level programming for Graphcore’s IPU Machine Learning hardware accelerator. The goal is to enable high-level Julialang-based IPU development without forcing a user to handcraft assembly or C++.
Master

Graphcore Intelligence Processing Units (IPUs) are a new range of processors which feature a massively parallel architecture. Each IPU consists of a large amount of “Tiles” which each feature an IPU-Core along with some local memory. Each of those IPU-Cores can execute workloads independently of each other and are connected via a very fast interconnect. Any IPU functions as an accelerator and is controlled by a “traditional” computer through PCIe.

All workloads on an IPU consist of three repeating phases: compute, sync an exchange. During the compute phase all IPU cores will execute their workload completely independently. After finishing they wait for all other cores to finish and synchronize. Finally data can be exchanged between all cores and each core will enter the compute phase again as soon as it has finished exchanging data.

We aim to close the gap between algorithm designers and system programmers by allowing access to the low-level Poplar interface [1], through high-level Julia [2] language bindings. Therefore, we allow high-level programming while keeping performance promises from the C++ API.

Goal

The goal is to enable Julia-based IPU development, ideally without forcing a user to handcraft assembly or write C++. For this, we need to consider two things; (1) the code running on the host system, which is responsible for setting up the IPU, and (2) the user-defined code, which is submitted to the hardware in so-called codelets. To enable both, we aim to implement a simple source-to-source compiler.

Learning outcome

-Understanding Graphcore’s IPU (Hardware and Programming model)

-Insights into concepts of higher level programming languages and Julia in particular

Qualifications

You should be open-minded and able to work together in an international team of researchers from different institutions. You should have good C++ skills and enjoy programming. In addition, basic knowledge of the Julia programming language would be desirable.

Supervisors

  • Johannes Langguth
  • Daniel Thilo Schroeder
  • Luk Burchard (Simula)

Collaboration partners

Graphcore

References

[1] POPLAR AND POPLIBS USER GUIDE: docs.graphcore.ai/projects/poplar-user-guide/en/latest/index.html

[2] JuliaLang: julialang.org/

Contact person