Go to file
Gunther Weber d974477e40 Merge topic 'add/hybrid_hypersweep'
02789a0d4 Improve comments
ed6b0f008 Fix CMakeLists.txt after moving header file.
5fd1b8ce8 Moved I/O functions to testing directory.
b6db5ddaa Make GlobalBlockId int to reduce casts. Renamed BlockIndex to LocalBlockNo.
bec58bd73 Make DIY own blocks and delete them to prevent memory leak on exception
50ca0318b Added missing ExecutionSignature.
f96020a24 Consolidated two copies of NotNoSuchElementPredicate.h
65352d7f0 Remove extranous Allocate in HierarchicalAugmenter
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Vicente Bolea <vicente.bolea@kitware.com>
Acked-by: Sujin Philip <sujin.philip@kitware.com>
Merge-request: !2587
2021-11-10 13:55:32 -05:00
.github docs: update gitlab links to include /-/ component 2020-05-26 14:48:49 -04:00
.gitlab Merge branch 'master' into ollielo-master-patch-72902 2021-10-28 08:06:40 -06:00
benchmarking add include sstream and see if it clears the dashboard 2021-10-14 07:24:55 -06:00
CMake Add clarification for DEVICE_SOURCES 2021-10-12 13:50:42 -06:00
config added pkg-config .pc 2021-07-23 15:33:07 -06:00
data Start creating test for HierarchicalHyperSweeper and fix various bugs in it 2021-10-20 14:46:23 -07:00
docs Add release notes for 1.7.0-rc1 2021-10-21 13:08:40 -04:00
examples Make volume metric data filter output and print tree in app; general clean up 2021-10-20 14:46:24 -07:00
Utilities Fix newline issue in reproduce_ci_env.py 2021-10-14 10:15:02 -06:00
vtkm Merge topic 'add/hybrid_hypersweep' 2021-11-10 13:55:32 -05:00
vtkmstd Have VTKM_IS_TRIVIAL* macros show types better 2021-04-02 07:37:26 -06:00
.clang-format clang-format: update configuration for 9.0 2020-08-24 11:47:55 -04:00
.gitattributes clang-format: update configuration for 9.0 2020-08-24 11:47:55 -04:00
.gitignore Add a point-oscillator filter + example 2018-07-18 09:33:06 -04:00
.gitlab-ci.yml CI: move from only to rules 2021-10-18 14:36:16 -04:00
.hooks-config hooks: add hook chains for development checks and LFS 2020-04-02 12:51:43 -04:00
.kitware-release.json CI: adds .kitware-release.json 2021-05-24 18:26:39 -04:00
.lfsconfig LFS: Set lfs.url upon the origin url 2021-06-24 13:26:40 -04:00
CMakeLists.txt Enable NO_DEPRECATED_VIRTUAL by default 2021-10-13 13:20:28 -04:00
CONTRIBUTING.md docs: update gitlab links to include /-/ component 2020-05-26 14:48:49 -04:00
CTestConfig.cmake conslidate the license statement 2019-04-17 10:57:13 -06:00
CTestCustom.cmake.in Turn on CUDA warnings for unknown stack sizes 2021-08-02 09:50:41 -06:00
LICENSE.txt 1.7.0-rc1 is our 9th official release of VTK-m. 2021-10-21 13:08:50 -04:00
README.md cmake: set c++14 as minimum c++ rev 2021-02-08 17:13:05 +01:00
version.txt 1.7.0-rc1 is our 9th official release of VTK-m. 2021-10-21 13:08:50 -04:00

VTK-m

VTK-m is a toolkit of scientific visualization algorithms for emerging processor architectures. VTK-m supports the fine-grained concurrency for data analysis and visualization algorithms required to drive extreme scale computing by providing abstract models for data and execution that can be applied to a variety of algorithms across many different processor architectures.

You can find out more about the design of VTK-m on the VTK-m Wiki.

Learning Resources

  • A high-level overview is given in the IEEE Vis talk "VTK-m: Accelerating the Visualization Toolkit for Massively Threaded Architectures."

  • The VTK-m Users Guide provides extensive documentation. It is broken into multiple parts for learning and references at multiple different levels.

    • "Part 1: Getting Started" provides the introductory instruction for building VTK-m and using its high-level features.
    • "Part 2: Using VTK-m" covers the core fundamental components of VTK-m including data model, worklets, and filters.
    • "Part 3: Developing with VTK-m" covers how to develop new worklets and filters.
    • "Part 4: Advanced Development" covers topics such as new worklet types and custom device adapters.
  • A practical VTK-m Tutorial based in what users want to accomplish with VTK-m:

    • Building VTK-m and using existing VTK-m data structures and filters.
    • Algorithm development with VTK-m.
    • Writing new VTK-m filters.
  • Community discussion takes place on the VTK-m users email list.

  • Doxygen-generated nightly reference documentation is available online.

Contributing

There are many ways to contribute to VTK-m, with varying levels of effort.

Dependencies

VTK-m Requires:

  • C++11 Compiler. VTK-m has been confirmed to work with the following
    • GCC 5.4+
    • Clang 5.0+
    • XCode 5.0+
    • MSVC 2015+
    • Intel 17.0.4+
  • CMake
    • CMake 3.12+
    • CMake 3.13+ (for CUDA support)

Optional dependencies are:

  • CUDA Device Adapter
  • TBB Device Adapter
  • OpenMP Device Adapter
    • Requires a compiler that supports OpenMP >= 4.0.
  • OpenGL Rendering
    • The rendering module contains multiple rendering implementations including standalone rendering code. The rendering module also includes (optionally built) OpenGL rendering classes.
    • The OpenGL rendering classes require that you have a extension binding library and one rendering library. A windowing library is not needed except for some optional tests.
  • Extension Binding
  • On Screen Rendering
    • OpenGL Driver
    • Mesa Driver
  • On Screen Rendering Tests
  • Headless Rendering

VTK-m has been tested on the following configurations:c

  • On Linux
    • GCC 5.4.0, 5.4, 6.5, 7.4, 8.2, 9.2; Clang 5, 8; Intel 17.0.4; 19.0.0
    • CMake 3.12, 3.13, 3.16, 3.17
    • CUDA 9.2, 10.2, 11.0, 11.1
    • TBB 4.4 U2, 2017 U7
  • On Windows
    • Visual Studio 2015, 2017
    • CMake 3.12, 3.17
    • CUDA 10.2
    • TBB 2017 U3, 2018 U2
  • On MacOS
    • AppleClang 9.1
    • CMake 3.12
    • TBB 2018

Building

VTK-m supports all majors platforms (Windows, Linux, OSX), and uses CMake to generate all the build rules for the project. The VTK-m source code is available from the VTK-m download page or by directly cloning the VTK-m git repository.

The basic procedure for building VTK-m is to unpack the source, create a build directory, run CMake in that build directory (pointing to the source) and then build. Here are some example *nix commands for the process (individual commands may vary).

$ tar xvzf ~/Downloads/vtk-m-v1.4.0.tar.gz
$ mkdir vtkm-build
$ cd vtkm-build
$ cmake-gui ../vtk-m-v1.4.0
$ cmake --build -j .              # Runs make (or other build program)

A more detailed description of building VTK-m is available in the VTK-m Users Guide.

Example

The VTK-m source distribution includes a number of examples. The goal of the VTK-m examples is to illustrate specific VTK-m concepts in a consistent and simple format. However, these examples only cover a small part of the capabilities of VTK-m.

Below is a simple example of using VTK-m to load a VTK image file, run the Marching Cubes algorithm on it, and render the results to an image:

#include <vtkm/Bounds.h>
#include <vtkm/Range.h>
#include <vtkm/cont/ColorTable.h>
#include <vtkm/filter/Contour.h>
#include <vtkm/io/VTKDataSetReader.h>
#include <vtkm/rendering/Actor.h>
#include <vtkm/rendering/Camera.h>
#include <vtkm/rendering/CanvasRayTracer.h>
#include <vtkm/rendering/Color.h>
#include <vtkm/rendering/MapperRayTracer.h>
#include <vtkm/rendering/Scene.h>
#include <vtkm/rendering/View3D.h>

vtkm::io::VTKDataSetReader reader("path/to/vtk_image_file.vtk");
vtkm::cont::DataSet inputData = reader.ReadDataSet();
std::string fieldName = "scalars";

vtkm::Range range;
inputData.GetPointField(fieldName).GetRange(&range);
vtkm::Float64 isovalue = range.Center();

// Create an isosurface filter
vtkm::filter::Contour filter;
filter.SetIsoValue(0, isovalue);
filter.SetActiveField(fieldName);
vtkm::cont::DataSet outputData = filter.Execute(inputData);

// compute the bounds and extends of the input data
vtkm::Bounds coordsBounds = inputData.GetCoordinateSystem().GetBounds();

// setup a camera and point it to towards the center of the input data
vtkm::rendering::Camera camera;
camera.ResetToBounds(coordsBounds);
vtkm::cont::ColorTable colorTable("inferno");

// Create a mapper, canvas and view that will be used to render the scene
vtkm::rendering::Scene scene;
vtkm::rendering::MapperRayTracer mapper;
vtkm::rendering::CanvasRayTracer canvas(512, 512);
vtkm::rendering::Color bg(0.2f, 0.2f, 0.2f, 1.0f);

// Render an image of the output isosurface
scene.AddActor(vtkm::rendering::Actor(outputData.GetCellSet(),
                                      outputData.GetCoordinateSystem(),
                                      outputData.GetField(fieldName),
                                      colorTable));
vtkm::rendering::View3D view(scene, mapper, canvas, camera, bg);
view.Paint();
view.SaveAs("demo_output.png");

A minimal CMakeLists.txt such as the following one can be used to build this example.

project(example)

set(VTKm_DIR "/somepath/lib/cmake/vtkm-XYZ")

find_package(VTKm REQUIRED)

add_executable(example example.cxx)
target_link_libraries(example vtkm_cont vtkm_rendering)

License

VTK-m is distributed under the OSI-approved BSD 3-clause License. See LICENSE.txt for details.