ATMI: Asynchronous Task and Memory Interface



Asynchronous Task and Memory Interface, or ATMI, is a runtime framework and programming model for heterogeneous CPU-GPU systems. It provides a consistent API to create task graphs on CPUs and GPUs (integrated and discrete). ATMI is a declarative programming model, where high-level tasks can be simply described by using a few predefined C-style structures. The task description includes specifying its granularity, dependencies to other tasks, data requirements and so on. The ATMI runtime, based on the task graph, will perform task scheduling and memory management that is optimal for the underlying platform. ATMI provides a rich and flexible user interface so that the end user can relinquish scheduling to the runtime (default behavior) or take full control of scheduling and mapping, if desired. The target audience for ATMI is application programmers or middleware developers for high-level languages.

Highlights of ATMI

  • ATMI-RT: runtime library to manage tasks
  • ATMI-C: language extension for declaring tasks
  • A comprehensive machine model for CPUs, integrated GPU (APU) and discrete GPU (dGPU) systems.
  • Consistent task management API for CPU tasks and GPU tasks
    • GPU kernel language: CL (more kernel language support to come in the future)
    • CPU tasks: support for multi-dimensional task grids (similar to GPU tasks)
  • Task dependencies
  • Task groups
  • Recursive tasks (tasks creating other tasks)
  • Efficient resource management
    • Signaling among dependent tasks
    • Kernel argument memory regions
    • Reuse of task handles
  • Data movement API (synchronous and asynchronous options)
    • Asynchronous data movement is treated as an ATMI task in the task graph.