1.1. Introduction

High-performance computing relies on ever finer threading. Advances in processor technology include ever greater numbers of cores, hyperthreading, accelerators with integrated blocks of cores, and special vectorized instructions, all of which require more software parallelism to achieve peak performance. Traditional visualization solutions cannot support this extreme level of concurrency. Extreme scale systems require a new programming model and a fundamental change in how we design algorithms. To address these issues we created VTK‑m: the visualization toolkit for multi-/many-core architectures.

VTK‑m supports a number of algorithms and the ability to design further algorithms through a top-down design with an emphasis on extreme parallelism. VTK‑m also provides support for finding and building links across topologies, making it possible to perform operations that determine manifold surfaces, interpolate generated values, and find adjacencies. Although VTK‑m provides a simplified high-level interface for programming, its template-based code removes the overhead of abstraction.

Table 1.1 Comparison of Marching Cubes implementations.

CUDA SDK

VTK‑m

431 LOC

265 LOC

MCCompareCuda

MCCompareVTKm

VTK‑m simplifies the development of parallel scientific visualization algorithms by providing a framework of supporting functionality that allows developers to focus on visualization operations. Consider the listings in Table 1.1 that compares the size of the implementation for the Marching Cubes algorithm in VTK‑m with the equivalent reference implementation in the CUDA software development kit. Because VTK‑m internally manages the parallel distribution of work and data, the VTK‑m implementation is shorter and easier to maintain. Additionally, VTK‑m provides data abstractions not provided by other libraries that make code written in VTK‑m more versatile.

1.1.1. How to Use This Guide

This user’s guide is organized into 5 parts to help guide novice to advanced users and to provide a convenient reference. Part 1 (Getting Started) provides a brief overview of using VTK‑m. This part provides instructions on building VTK‑m and some simple examples of using VTK‑m. Users new to VTK‑m are well served to read through Part Part 1 (Getting Started) first to become acquainted with the basic concepts.

The remaining parts, which provide detailed documentation of increasing complexity, have chapters that do not need to be read in detail. Readers will likely find it useful to skip to specific topics of interest.

Part 2 (Using VTK‑m) dives deeper into the VTK‑m library. It provides much more detail on the concepts introduced in Part 1 (Getting Started) and introduces new topics helpful to people who use VTK‑m’s existing algorithms.

Part 3 (Developing Algorithms) documents how to use VTK‑m’s framework to develop new or custom visualization algorithms. In this part we dive into the inner workings of filters and introduce the concept of a worklet, which is the base unit used to write a device-portable algorithm in VTK‑m. Part 3 (Developing Algorithms) also documents many supporting functions that are helpful in implementing visualization algorithms.

Part 4 (Advanced Development) explores in more detail how VTK‑m manages memory and devices. This information describes how to adapt VTK‑m to custom data structures and new devices.

Part 5 (Core Development) exposes the inner workings of VTK‑m. These concepts allow you to design new algorithmic structures not already available in VTK‑m.

Did You Know?

In this guide we periodically use these Did you know? boxes to provide additional information related to the topic at hand.

Common Errors

Common Errors blocks are used to highlight some of the common problems or complications you might encounter when dealing with the topic of discussion.