Skip to content

Commit ec551ea

Browse files
committed
Merge branch 'release-1.3.x'
2 parents 5da393e + c2151b5 commit ec551ea

File tree

305 files changed

+2973
-1459
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

305 files changed

+2973
-1459
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
Version History
22
---------------
33

4+
### Open VKL 1.3.0
5+
6+
- Added AVX512 8-wide CPU device mode, enabled via the
7+
`OPENVKL_ISA_AVX512SKX_8_WIDE` CMake option
8+
- VDB volumes: added support for packed / contiguous data layouts for
9+
temporally constant volumes, which can provide improved performance
10+
(`nodesPackedDense`, `nodesPackedTile` parameters)
11+
- VDB utility library: added `repackNodes` flag to toggle usage of packed data
12+
layouts
13+
- Particle volumes: general memory efficiency and performance improvements
14+
- Superbuild updates to latest versions of dependencies
15+
- Minimum ISPC version is now v1.18.0
16+
417
### Open VKL 1.2.0
518

619
- Added `vklSetParam()` API function which can set parameters of any supported

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Copyright 2019-2021 Intel Corporation
1+
## Copyright 2019 Intel Corporation
22
## SPDX-License-Identifier: Apache-2.0
33

44
## Global CMake options ##
@@ -19,7 +19,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
1919

2020
## Establish project ##
2121

22-
project(openvkl VERSION 1.2.0 LANGUAGES C CXX)
22+
project(openvkl VERSION 1.3.0 LANGUAGES C CXX)
2323

2424
## Add openvkl specific macros ##
2525

README.md

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Intel® Open Volume Kernel Library
22

3-
This is release v1.2.0 of Intel® Open VKL. For changes and new features
3+
This is release v1.3.0 of Intel® Open VKL. For changes and new features
44
see the [changelog](CHANGELOG.md). Visit http://www.openvkl.org for more
55
information.
66

@@ -33,6 +33,20 @@ example renderers to demonstrate how to best use the Open VKL API.
3333

3434
## Version History
3535

36+
### Open VKL 1.3.0
37+
38+
- Added AVX512 8-wide CPU device mode, enabled via the
39+
`OPENVKL_ISA_AVX512SKX_8_WIDE` CMake option
40+
- VDB volumes: added support for packed / contiguous data layouts for
41+
temporally constant volumes, which can provide improved performance
42+
(`nodesPackedDense`, `nodesPackedTile` parameters)
43+
- VDB utility library: added `repackNodes` flag to toggle usage of
44+
packed data layouts
45+
- Particle volumes: general memory efficiency and performance
46+
improvements
47+
- Superbuild updates to latest versions of dependencies
48+
- Minimum ISPC version is now v1.18.0
49+
3650
### Open VKL 1.2.0
3751

3852
- Added `vklSetParam()` API function which can set parameters of any
@@ -550,7 +564,7 @@ variables described previously.
550564
551565
## Basic data types
552566
553-
Open VKL defines 3-component vectors of integer and vector types:
567+
Open VKL defines 3-component vectors of integer and float types:
554568
555569
``` cpp
556570
typedef struct
@@ -600,8 +614,8 @@ typedef struct
600614

601615
Objects in Open VKL are exposed to the APIs as handles with internal
602616
reference counting for lifetime determination. Objects are created with
603-
particular type’s `vklNew...` API entry point. For example, `vklNewData`
604-
and `vklNewVolume`.
617+
each particular type’s `vklNew...` API entry point. For example,
618+
`vklNewData` and `vklNewVolume`.
605619

606620
In general, modifiable parameters to objects are modified using
607621
`vklSet...` functions based on the type of the parameter being set. The
@@ -775,7 +789,7 @@ called concurrently on the same object.
775789

776790
Open VKL currently supports structured volumes on regular and spherical
777791
grids; unstructured volumes with tetrahedral, wedge, pyramid, and
778-
hexaderal primitive types; adaptive mesh refinement (AMR) volumes;
792+
hexahedral primitive types; adaptive mesh refinement (AMR) volumes;
779793
sparse VDB volumes; and particle volumes. Volumes are created with
780794
`vklNewVolume` with a device and appropriate type string:
781795

@@ -1120,13 +1134,18 @@ VDB volumes are created by passing the type string `"vdb"` to
11201134
| int\[\] | node.temporallyStructuredNumTimesteps | | For temporally structured variation, number of timesteps per voxel. Only valid if `temporalFormat` is `VKL_TEMPORAL_FORMAT_STRUCTURED`. |
11211135
| VKLData\[\] | node.temporallyUnstructuredIndices | | For temporally unstructured variation, beginning per voxel. Supported data types for each node are `VKL_UINT` and `VKL_ULONG`. Only valid if `temporalFormat` is `VKL_TEMPORAL_FORMAT_UNSTRUCTURED`. |
11221136
| VKLData\[\] | node.temporallyUnstructuredTimes | | For temporally unstructured variation, time values corresponding to values in `node.data`. For each node, the data must be of type `VKL_FLOAT`. Only valid if `temporalFormat` is `VKL_TEMPORAL_FORMAT_UNSTRUCTURED`. |
1137+
| VKLData\[\] | nodesPackedDense | | Optionally provided instead of `node.data`, for each attribute a single array of all dense node data (`VKL_FORMAT_DENSE_ZYX` only) in a contiguous layout, provided in the same order as the corresponding `node.*` parameters. This packed layout may be more performant. Supported for temporally constant data only. |
1138+
| VKLData\[\] | nodesPackedTile | | Optionally provided instead of `node.data`, for each attribute a single array of all tile node data (`VKL_FORMAT_TILE` only) in a contiguous layout, provided in the same order as the corresponding `node.*` parameters. This packed layout may be more performant. Supported for temporally constant data only. |
11231139
| float\[\] | background | `VKL_BACKGROUND_UNDEFINED` | For each attribute, the value that is returned when sampling an undefined region outside the volume domain. |
11241140
| box3i | indexClippingBounds | | Clips the volume to the specified index-space bounding box. This is useful for volumes with dimensions that are not even multiples of the leaf node dimensions, or .vdb files with restrictive active voxel bounding boxes. |
11251141

11261142
Configuration parameters for VDB (`"vdb"`) volumes.
11271143

11281144
The level, origin, format, and data parameters must have the same size,
1129-
and there must be at least one valid node or `commit()` will fail.
1145+
and there must be at least one valid node or `commit()` will fail. The
1146+
`nodesPackedDense` and `nodesPackedTile` parameters may be provided
1147+
instead of `node.data`; this packed data layout may provide better
1148+
performance.
11301149

11311150
VDB volumes support temporally structured and temporally unstructured
11321151
temporal variation. See section ‘Temporal Variation’ for more detail.
@@ -2476,7 +2495,7 @@ before you can build Open VKL you need the following prerequisites:
24762495
examples, you should also have some version of OpenGL.
24772496

24782497
- Additionally you require a copy of the [Intel® Implicit SPMD Program
2479-
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.16.0 or
2498+
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.18.0 or
24802499
later. Please obtain a release of ISPC from the [ISPC downloads
24812500
page](https://ispc.github.io/downloads.html).
24822501

cmake/openvklConfig.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Copyright 2019-2021 Intel Corporation
1+
## Copyright 2019 Intel Corporation
22
## SPDX-License-Identifier: Apache-2.0
33

44
@PACKAGE_INIT@

cmake/openvkl_ispc.cmake

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
## Copyright 2019-2021 Intel Corporation
1+
## Copyright 2019 Intel Corporation
22
## SPDX-License-Identifier: Apache-2.0
33

44
option(OPENVKL_ISPC_FAST_MATH "enable ISPC fast-math optimizations" OFF)
55

66
# ISPC versions to look for, in decending order (newest first)
7-
set(ISPC_VERSION_WORKING "1.16.0")
7+
set(ISPC_VERSION_WORKING "1.18.0")
88
list(GET ISPC_VERSION_WORKING -1 ISPC_VERSION_REQUIRED)
99

1010
if (NOT ISPC_EXECUTABLE)
@@ -89,9 +89,11 @@ macro(openvkl_configure_ispc_isa)
8989
option(OPENVKL_ISA_AVX2 "Enables AVX2 ISA." ON)
9090
option(OPENVKL_ISA_AVX512KNL "Enables AVX512 ISA for Knights Landing." OFF)
9191
option(OPENVKL_ISA_AVX512SKX "Enables AVX512 ISA for Skylake." ON)
92+
option(OPENVKL_ISA_AVX512SKX_8_WIDE "Enables AVX512 ISA for Skylake (8 wide)." OFF)
9293

93-
if (OPENVKL_ISA_AVX512KNL AND OPENVKL_ISA_AVX512SKX)
94-
message(FATAL_ERROR "Only one AVX512 ISA may be enabled; choose either AVX512KNL or AVX512SKX")
94+
if ((OPENVKL_ISA_AVX512KNL AND (OPENVKL_ISA_AVX512SKX OR OPENVKL_ISA_AVX512SKX_8_WIDE)) OR
95+
(OPENVKL_ISA_AVX512SKX AND OPENVKL_ISA_AVX512SKX_8_WIDE))
96+
message(FATAL_ERROR "Only one AVX512 ISA may be enabled; choose either AVX512KNL, AVX512SKX or AVX512SKX_8_WIDE")
9597
endif()
9698
else()
9799
option(OPENVKL_ISA_NEON "Enables NEON ISA." ON)
@@ -140,6 +142,12 @@ macro(openvkl_configure_ispc_isa)
140142
message(STATUS "OpenVKL AVX512SKX ISA target enabled.")
141143
endif()
142144

145+
if (OPENVKL_ISA_AVX512SKX_8_WIDE)
146+
set(OPENVKL_ISPC_TARGET_LIST ${OPENVKL_ISPC_TARGET_LIST} avx512skx-i32x8)
147+
set(OPENVKL_ISPC_TARGET_LIST_8 ${OPENVKL_ISPC_TARGET_LIST_8} avx512skx-i32x8)
148+
message(STATUS "OpenVKL AVX512SKX_8_WIDE ISA target enabled.")
149+
endif()
150+
143151
# if only one target is specified for a given width, add a second target to
144152
# force ISPC name mangling. this avoids global name conflicts between devices
145153
# of different widths.
@@ -250,7 +258,8 @@ macro (OPENVKL_ISPC_COMPILE)
250258
list(LENGTH ISPC_TARGETS NUM_TARGETS)
251259
if (NUM_TARGETS GREATER 1)
252260
foreach(target ${ISPC_TARGETS})
253-
string(REPLACE "-i32x16" "" target ${target}) # strip avx512(knl|skx)-i32x16
261+
string(REPLACE "-i32x8" "" target ${target}) # strip "-i32x8"
262+
string(REPLACE "-i32x16" "" target ${target}) # strip "-i32x16"
254263
set(results ${results} "${outdir}/${fname}.dev_${target}${ISPC_TARGET_EXT}")
255264
endforeach()
256265
endif()

cmake/openvkl_macros.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Copyright 2019-2022 Intel Corporation
1+
## Copyright 2019 Intel Corporation
22
## SPDX-License-Identifier: Apache-2.0
33

44
macro(openvkl_add_library_ispc name type)
@@ -56,6 +56,10 @@ macro(openvkl_configure_global_build_flags)
5656

5757
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
5858

59+
if(CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
60+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model=precise")
61+
endif()
62+
5963
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
6064
if(NOT WIN32)
6165
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-ansi-alias")

doc/api.md

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ previously.
181181
Basic data types
182182
----------------
183183

184-
Open VKL defines 3-component vectors of integer and vector types:
184+
Open VKL defines 3-component vectors of integer and float types:
185185

186186
typedef struct
187187
{
@@ -225,8 +225,8 @@ Object model
225225
------------
226226

227227
Objects in Open VKL are exposed to the APIs as handles with internal reference
228-
counting for lifetime determination. Objects are created with particular type's
229-
`vklNew...` API entry point. For example, `vklNewData` and `vklNewVolume`.
228+
counting for lifetime determination. Objects are created with each particular
229+
type's `vklNew...` API entry point. For example, `vklNewData` and `vklNewVolume`.
230230

231231
In general, modifiable parameters to objects are modified using `vklSet...`
232232
functions based on the type of the parameter being set. The parameter name is
@@ -417,7 +417,7 @@ Volume types
417417
------------
418418

419419
Open VKL currently supports structured volumes on regular and spherical grids;
420-
unstructured volumes with tetrahedral, wedge, pyramid, and hexaderal primitive
420+
unstructured volumes with tetrahedral, wedge, pyramid, and hexahedral primitive
421421
types; adaptive mesh refinement (AMR) volumes; sparse VDB volumes; and particle
422422
volumes. Volumes are created with `vklNewVolume` with a device and appropriate
423423
type string:
@@ -928,6 +928,28 @@ following parameters:
928928
Only valid if `temporalFormat` is
929929
`VKL_TEMPORAL_FORMAT_UNSTRUCTURED`.
930930

931+
VKLData[] nodesPackedDense Optionally provided instead of
932+
`node.data`, for each attribute a
933+
single array of all dense node data
934+
(`VKL_FORMAT_DENSE_ZYX` only) in a
935+
contiguous layout, provided in the
936+
same order as the corresponding
937+
`node.*` parameters. This packed
938+
layout may be more performant.
939+
Supported for temporally constant data
940+
only.
941+
942+
VKLData[] nodesPackedTile Optionally provided instead of
943+
`node.data`, for each attribute a
944+
single array of all tile node data
945+
(`VKL_FORMAT_TILE` only) in a
946+
contiguous layout, provided in the
947+
same order as the corresponding
948+
`node.*` parameters. This packed
949+
layout may be more performant.
950+
Supported for temporally constant data
951+
only.
952+
931953
float[] background `VKL_BACKGROUND_UNDEFINED` For each attribute, the value that is
932954
returned when sampling an undefined
933955
region outside the volume domain.
@@ -943,7 +965,9 @@ following parameters:
943965
: Configuration parameters for VDB (`"vdb"`) volumes.
944966

945967
The level, origin, format, and data parameters must have the same size, and there must
946-
be at least one valid node or `commit()` will fail.
968+
be at least one valid node or `commit()` will fail. The `nodesPackedDense` and
969+
`nodesPackedTile` parameters may be provided instead of `node.data`; this packed data
970+
layout may provide better performance.
947971

948972
VDB volumes support temporally structured and temporally unstructured temporal
949973
variation. See section 'Temporal Variation' for more detail.

doc/compilation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ you can build Open VKL you need the following prerequisites:
3030
have some version of OpenGL.
3131

3232
- Additionally you require a copy of the [Intel® Implicit SPMD Program
33-
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.16.0 or later.
33+
Compiler (Intel® ISPC)](http://ispc.github.io), version 1.18.0 or later.
3434
Please obtain a release of ISPC from the [ISPC downloads
3535
page](https://ispc.github.io/downloads.html).
3636

examples/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Copyright 2019-2022 Intel Corporation
1+
## Copyright 2019 Intel Corporation
22
## SPDX-License-Identifier: Apache-2.0
33

44
## "Hello world" VKL tutorials ##

examples/from_openvkl_install/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Copyright 2019-2021 Intel Corporation
1+
## Copyright 2019 Intel Corporation
22
## SPDX-License-Identifier: Apache-2.0
33

44
# NOTE: This CMakeLists.txt is intended to be used to exercise an OpenVKL

0 commit comments

Comments
 (0)