Limitations =========== .. currentmodule:: warp This section summarizes various limitations and currently unsupported features in Warp. Requests for new features can be made at `GitHub Discussions `_, and issues can be opened at `GitHub Issues `_. Unsupported Features -------------------- To achieve good performance on GPUs some dynamic language features are not supported: * Lambda functions * List comprehensions * Exceptions * Recursion * Runtime evaluation of expressions, e.g.: eval() * Dynamic structures such as lists, sets, dictionaries, etc. Kernels ------- * Strings cannot be passed into kernels. * Short-circuit evaluation is not supported. * :func:`wp.atomic_add() ` does not support ``wp.int64``. * :func:`wp.tid() ` cannot be called from user functions. * CUDA thread blocks use a fixed size 256 threads per block. Arrays ------ * Arrays can have a maximum of four dimensions. * Each dimension of a Warp array cannot be greater than the maximum value representable by a 32-bit signed integer, :math:`2^{31}-1`. * There are currently no data types that support complex numbers. Structs ------- * Structs cannot have generic members, i.e. of type ``typing.Any``. Volumes ------- * The sparse-volume *topology* cannot be changed after the tiles for the :class:`Volume` have been allocated. Multiple Processes ------------------ * A CUDA context created in the parent process cannot be used in a *forked* child process. Use the spawn start method instead, or avoid creating CUDA contexts in the parent process. * There can be issues with using same user kernel cache directory when running with multiple processes. A workaround is to use a separate cache directory for every process. See :ref:`example-cache-management` for how the cache directory may be changed.