Release history¶
0.8.0 (current development version)¶
- FIXED: updated the CUDA backend for the change
async->async_in the new versions of PyCUDA. Bumped PyOpenCL and PyCUDA versions to 2018.1.1. - FIXED: an error in the conversion of numpy.int64 to ctype for Windows.
- FIXED: an unstable type of
nbytesinThread.array(), leading to problems with calling the C++ backend later on.
0.7.2 (16 Sep 2018)¶
- FIXED:
is_double()now correctly recognizesnumpy.complex128as requiring double precision. - ADDED:
compute_unitsattribute toDeviceParameters.
0.7.1 (14 Aug 2018)¶
- CHANGED:
SIZE_TandVSIZE_Tare now signed integers, to avoid problems with negative indices and strides. - CHANGED:
Arrayviews now returnArrayobjects. - CHANGED: a
Typeobject can only be equal to anotherTypeobject (before it only required equality of the attributes). - ADDED: an
output_arr_tkeyword parameter forTransposeandReduce. - ADDED: a proper support for non-zero array offsets and array views. Added
base,base_dataandnbyteskeyword parameters forarray(). Other array-allocating methods and the constructor ofTypenow also have thenbyteskeyword. - ADDED: a specialized FFT example (
examples/demo_specialized_fft.py). - ADDED: a method
padded()ofType. - ADDED: an
api_idattribute forDeviceParametersobjects. - ADDED: a
kernel_nameparameter forComputationPlan.kernel_call. Also, all built-in computations now have custom-set kernel names for the ease of profiling. - ADDED:
Typeobjects are now hashable. - ADDED: a
keepoptional parameter forThread.compile,Thread.compile_staticandComputation.compile, allowing one to preserve the generated source code and binaries. - FIXED: a bug where a computation with constant arrays could not be called from another computation.
- FIXED: an incorrect call to PyCUDA in
Array.copy().
0.7.0 (5 Jul 2018)¶
- CHANGED:
asynckeywords in multiple methods have been renamed toasync_, sinceasyncis a keyword starting from Python 3.7. - ADDED: an ability to handle array views in computations.
- ADDED: a scan class
Scan. - ADDED: an optional parameter
compiler_optionsforThread.compile,Thread.compile_staticandComputation.compile, allowing one to pass additional options to the compiler. - ADDED: support for constant arrays. On CLUDA level, use
constant_arrayskeyword parameter tocompile()andcompile_static(), and subsequentset_constant()(CUDA only) (or the analogous methods ofKernelorStaticKernel). On the computation level, useComputationPlan.constant_arrayto declare a constant array, and then pass the returned objects to kernels as any other argument. - FIXED: some methods inherited by
Arrayfrom the backend array class in case of the OpenCL backend failed because of the changed interface. - FIXED: incorrect postfix in the result of
c_constant()for unsigned long integers.
0.6.8 (18 Dec 2016)¶
- ADDED: a von Mises distribution sampler (
vonmises()). - ADDED:
div_const()anddiv_param()transformations. - ADDED:
Kernel.prepared_call,Kernel.__call__andStaticKernel.__call__now return the resultingEventobject in case of the OpenCL backend.ComputationCallable.__call__returns a list of Event objects from the nested kernel calls. - FIXED: properly handling the case of an unfinished
__init__()inThread(when__del__()tries to access non-existent attributes). - FIXED: an error when using
from_trf()without specifying the guiding array in Py3. - FIXED: (reported by @mountaindust)
Array.copynow actually copies the array contents in CUDA backend. - FIXED: (reported by @Philonoist)
load_idx/store_idxhandled expressions in parameters incorrectly (errors during macro expansion). - FIXED: a minor bug in the information displayed during the interactive
Threadcreation. - FIXED: class names in the test suite that produced errors (due to the changed rules for test discovery in
py.test). - FIXED: updated
ReturnValuesPluginin the test suite to conform topy.testinterface changes.
0.6.7 (11 Mar 2016)¶
- ADDED: an example of a transposition-based n-dimensional FFT (
demo_fftn_with_transpose.py). - FIXED: a problem with Beignet OpenCL driver where the INLINE macro was being redefined.
- FIXED: a bug in
Reducewhere reduction over a struct type with a nested array produced a template rendering error. - FIXED: now taking the minimum time over several attempts instead of the average in several performance tests (as it is done in the rest of the test suite).
- FIXED:
Transposenow calculates the required elementary transpositions in the constructor instead of doing it during the compilation.
0.6.6 (11 May 2015)¶
- FIXED: a bug with the
NANconstant not being defined in CUDA on Windows. - FIXED: (PR by @ringw) copying and arithmetic operations on Reikna arrays now preserve the array type instead of resetting it to PyOpenCL/PyCUDA array.
- FIXED: a bug in virtual size finding algorithm that could cause
get_local_id(ndim)/get_global_id(ndim)being called with an argument out of the range supported by the OpenCL standard, causing compilation fails on some platforms. - FIXED: now omitting some of redundant modulus operations in virtual size functions.
- ADDED: an example of a spectrogram-calculating computation (
demo_specgram.py).
0.6.5 (31 Mar 2015)¶
- CHANGED: the correspondence for
numpy.uintpis not registered by default anymore — this type is not really useful in CPU-GPU interaction. - FIXED: (reported by J. Vacher) dtype/ctype correspondences for 64-bit integer types are registered even if the Python interpreter is 32-bit.
- ADDED:
ComputationCallableobjects expose the attributethread. - ADDED:
FFTShiftcomputation. - ADDED: an example of an element-reshuffling transformation.
0.6.4 (29 Sep 2014)¶
- CHANGED: renamed
power_dtypeparameter toexponent_dtype(a more correct term) inpow(). - FIXED: (PR by @ringw) exception caused by printing CUDA program object.
- FIXED:
pow()(0, 0) now returns 1 as it should. - ADDED: an example of
FFTwith a custom transformation. - ADDED: a type check in the
FFTconstructor. - ADDED: an explicit
output_dtypeparameter forpow(). - ADDED:
Arrayobjects for each backend expose the attributethread.
0.6.3 (18 Jun 2014)¶
- FIXED: (@schreon) a bug preventing the usage of
EntrywiseNormwith customaxes. - FIXED: (PR by @SyamGadde) removed syntax constructions incompatible with Python 2.6.
- FIXED: added Python 3.4 to the list of classifiers.
0.6.2 (20 Feb 2014)¶
- ADDED:
pow()function module in CLUDA. - ADDED: a function
any_api()that returns some supported GPGPU API module. - ADDED: an example of
Reducewith a custom data type. - FIXED: a Py3 compatibility issue in
Reduceintroduced in0.6.1. - FIXED: a bug due to the interaction between the implementation of
from_trf()and the logic of processing nested computations. - FIXED: a bug in
FFTleading to undefined behavior on some OpenCL platforms.
0.6.1 (4 Feb 2014)¶
- FIXED:
Reducecan now pick a decreased work group size if the attached transformations are too demanding.
0.6.0 (27 Dec 2013)¶
- CHANGED: some computations were moved to sub-packages:
PureParallel,TransposeandReducetoreikna.algorithms,MatrixMulandEntrywiseNormtoreikna.linalg. - CHANGED:
scale_constandscale_paramwere renamed tomul_const()andmul_param(), and the scalar parameter name of the latter was renamed fromcoefftoparam. - ADDED: two transformations for norm of an arbitrary order:
norm_const()andnorm_param(). - ADDED: stub transformation
ignore(). - ADDED: broadcasting transformations
broadcast_const()andbroadcast_param(). - ADDED: addition transformations
add_const()andadd_param(). - ADDED:
EntrywiseNormcomputation. - ADDED: support for multi-dimensional sub-arrays in
c_constant()andflatten_dtype(). - ADDED: helper functions
extract_field()andc_path()to work in conjunction withflatten_dtype(). - ADDED: a function module
add(). - FIXED: casting a coefficient in the
normal_bm()template to a correct dtype. - FIXED:
cast()avoids casting if the value already has the target dtype (sincenumpy.castdoes not work with struct dtypes, see issue #4148). - FIXED: a error in transformation module rendering for scalar parameters with struct dtypes.
- FIXED: normalizing dtypes in several functions from
dtypesto avoid errors withnumpydtype shortcuts.
0.5.2 (17 Dec 2013)¶
- ADDED:
normal_bm()now supports complex dtypes. - FIXED: a nested
PureParallelcan now take several identical argument objects as arguments. - FIXED: a nested computation can now take a single input/output argument (e.g. a temporary array) as separate input and output arguments.
- FIXED: a critical bug in
CBRNGthat could lead to the counter array not being updated. - FIXED: convenience constructors of
CBRNGcan now properly handleNoneassamplers_kwds.
0.5.1 (30 Nov 2013)¶
- FIXED: a possible infinite loop in
compile_static()local size finding algorithm.
0.5.0 (25 Nov 2013)¶
- CHANGED:
KernelParameteris not derived fromTypeanymore (although it still retains the corresponding attributes). - CHANGED:
Predicatenow takes a dtype’d value asempty, not a string. - CHANGED: The logic of processing struct dtypes was reworked, and
adjust_alignmentwas removed. Instead, one should usealign()(which does not take aThreadparameter) to get a dtype with the offsets and itemsize equal to those a compiler would set. On the other hand,ctype_module()attempts to set the alignments such that the field offsets are the same as in the given numpy dtype (unlessignore_alignmentsflag is set). - ADDED: struct dtypes support in
c_constant(). - ADDED:
flatten_dtype()helper function. - ADDED: added
transposed_aandtransposed_bkeyword parameters toMatrixMul. - ADDED: algorithm cascading to
Reduce, leading to 3-4 times increase in performance. - ADDED:
polar_unit()function module in CLUDA. - ADDED: support for arrays with 0-dimensional shape as computation and transformation arguments.
- FIXED: a bug in
Reduce, which lead to incorrect results in cases when the reduction power is exactly equal to the maximum one. - FIXED:
Transposenow works correctly for struct dtypes. - FIXED:
bounding_power_of_2now correctly returns1instead of2being given1as an argument. - FIXED:
compile_static()local size finding algorithm is much less prone to failure now.
0.4.0 (10 Nov 2013)¶
- CHANGED:
supports_dtype()method moved fromThreadtoDeviceParameters. - CHANGED:
fast_mathkeyword parameter moved fromThreadconstructor tocompile()andcompile_static(). It is alsoFalseby default, instead ofTrue. Correspondingly,THREAD_FAST_MATHmacro was renamed toCOMPILE_FAST_MATH. - CHANGED: CBRNG modules are using the dtype-to-ctype support.
Correspondingly, the C types for keys and counters can be obtained by calling
ctype_module()onkey_dtypeandcounter_dtypeattributes. The module wrappers still define their types, but their names are using a different naming convention now. - ADDED: module generator for nested dtypes (
ctype_module()) and a function to get natural field offsets for a given API/device (adjust_alignment). - ADDED:
fast_mathkeyword parameter incompile(). In other words, nowfast_mathcan be set per computation. - ADDED:
ALIGNmacro is available in CLUDA kernels. - ADDED: support for struct types as
Computationarguments (for them, thectypesattributes contain the corresponding module obtained withctype_module()). - ADDED: support for non-sequential axes in
Reduce. - FIXED: bug in the interactive
Threadcreation (reported by James Bergstra). - FIXED: Py3-incompatibility in the interactive
Threadcreation. - FIXED: some code paths in virtual size finding algorithm could result in a type error.
- FIXED: improved the speed of test collection by reusing
Threadobjects.
0.3.6 (9 Aug 2013)¶
- ADDED: the first argument to the
TransformationorPureParallelsnippet is now areikna.core.Indicesobject instead of a list. - ADDED: classmethod
PureParallel.from_trf(), which allows one to create a pure parallel computation out of a transformation. - FIXED: improved
Computation.compile()performance for complicated computations by precreating transformation templates.
0.3.5 (6 Aug 2013)¶
- FIXED: bug with virtual size algorithms returning floating point global and local sizes in Py2.
0.3.4 (3 Aug 2013)¶
- CHANGED: virtual sizes algorithms were rewritten and are now more maintainable. In addition, virtual sizes can now handle any number of dimensions of local and global size, providing the device can support the corresponding total number of work items and groups.
- CHANGED: id- and size- getting kernel functions now have return types corresponding to their equivalents. Virtual size functions have their own independent return type.
- CHANGED:
Thread.compile_static()andComputationPlan.kernel_call()take global and local sizes in the row-major order, to correspond to the matrix indexing in load/store macros. - FIXED: requirements for PyCUDA extras (a currently non-existent version was specified).
- FIXED: an error in gamma distribution sampler, which lead to slightly wrong shape of the resulting distribution.
0.3.3 (29 Jul 2013)¶
- FIXED: package metadata.
0.3.2 (29 Jul 2013)¶
- ADDED: same module object, when being called without arguments from other modules/snippets, is rendered only once and returns the same prefix each time. This allows one to create structure declarations that can be used by functions in several modules.
- ADDED: reworked
cbrngmodule and exposed kernel interface of bijections and samplers. - CHANGED: slightly changed the algorithm that determines the order of computation parameters after a transformation is connected to it. Now the ordering inside a list of initial computation parameters or a list of a single transformation parameters is preserved.
- CHANGED: kernel declaration string is now passed explicitly to a kernel template as the first parameter.
- FIXED: typo in FFT performance test.
- FIXED: bug in FFT that could result in changing the contents of the input array to one of the intermediate results.
- FIXED: missing data type normalization in
c_constant(). - FIXED: Py3 incompatibility in
cluda.cuda. - FIXED: updated some obsolete computation docstrings.
0.3.1 (25 Jul 2013)¶
- FIXED: too strict array type check for nested computations that caused some tests to fail.
- FIXED: default values of scalar parameters are now processed correctly.
- FIXED: Mako threw name-not-found exceptions on some list comprehensions in FFT template.
- FIXED: some earlier-introduced errors in tests.
- INTERNAL:
pylintwas ran and many stylistic errors fixed.
0.3.0 (23 Jul 2013)¶
Major core API change:
- Computations have function-like signatures with the standard
Signatureinterface; no more separation of inputs/outputs/scalars. - Generic transformations were ditched; all the transformations have static types now.
- Transformations can now change array shapes, and load/store from/to external arrays in output/input transformations.
- No flat array access in kernels; all access goes through indices. This opens the road for correct and automatic stride support (not fully implemented yet).
- Computations and accompanying classes are stateless, and their creation is more straightforward.
Other stuff:
- Bumped Python requirements to >=2.6 or >=3.2, and added a dependency on
funcsig. - ADDED: more tests for cluda.functions.
- ADDED: module/snippet attributes discovery protocol for custom objects.
- ADDED: strides support to array allocation functions in CLUDA.
- ADDED: modules can now take positional arguments on instantiation, same as snippets.
- CHANGED:
ElementwisebecomesPureParallel(as it is not always elementwise). - FIXED: incorrect behavior of functions.norm() for non-complex arguments.
- FIXED: undefined variable in functions.exp() template (reported by Thibault North).
- FIXED: inconsistent block/grid shapes in static kernels
0.2.4 (11 May 2013)¶
- ADDED: ability to introduce new scalar arguments for nested computations (the API is quite ugly at the moment).
- FIXED: handling prefixes properly when connecting transformations to nested computations.
- FIXED: bug in dependency inference algorithm which caused it to ignore allocations in nested computations.
0.2.3 (25 Apr 2013)¶
- ADDED: explicit
release()(primarily for certain rare CUDA use cases). - CHANGED: CLUDA API discovery interface (see the documentation).
- CHANGED: The part of CLUDA API that is supposed to be used by other layers was moved to the
__init__.py. - CHANGED: CLUDA
Contextwas renamed toThread, to avoid confusion withPyCUDA/PyOpenCLcontexts. - CHANGED: signature of
create(); it can filter devices now, and supports interactive mode. - CHANGED:
Modulewithsnippet=Trueis nowSnippet - FIXED: added
transformation.makoandcbrng_ref.pyto the distribution package. - FIXED: incorrect parameter generation in
test/cluda/cluda_vsizes/ids. - FIXED: skipping testcases with incompatible parameters in
test/cluda/cluda_vsizes/idsandsizes. - FIXED: setting the correct length of
max_num_groupsin case of CUDA and a device with CC < 2. - FIXED: typo in
cluda.api_discovery.
0.2.2 (20 Apr 2013)¶
- ADDED: ability to use custom argument names in transformations.
- ADDED: multi-argument
mul(). - ADDED: counter-based random number generator
CBRNG. - ADDED:
reikna.elementwise.Elementwisenow supports argument dependencies. - ADDED: Module support in CLUDA; see Tutorial: modules and snippets for details.
- ADDED:
template_def(). - CHANGED:
reikna.cluda.kernel.render_template_sourceis the main renderer now. - CHANGED:
FuncCollectorclass was removed; functions are now used as common modules. - CHANGED: all templates created with
template_for()are now rendered withfrom __future__ import division. - CHANGED: signature of
OperationRecorder.add_kerneltakes a renderable instead of a full template. - CHANGED:
compile_static()now takes a template instead of a source. - CHANGED:
reikna.elementwise.Elementwisenow uses modules. - FIXED: potential problem with local size finidng in static kernels (first approximation for the maximum workgroup size was not that good)
- FIXED: some OpenCL compilation warnings caused by an incorrect version querying macro.
- FIXED: bug with incorrect processing of scalar global size in static kernels.
- FIXED: bug in variance estimates in CBRNG tests.
- FIXED: error in the temporary varaiable type in
reikna.cluda.functions.polar()andreikna.cluda.functions.exp().
0.2.1 (8 Mar 2013)¶
- FIXED: function names for kernel
polar(),exp()andconj(). - FIXED: added forgotten kernel
norm()handler. - FIXED: bug in
Py.Testtestcase execution hook which caused every test to run twice. - FIXED: bug in nested computation processing for computation with more than one kernel.
- FIXED: added dependencies between
MatrixMulkernel arguments. - FIXED: taking into account dependencies between input and output arrays as well as the ones between internal allocations — necessary for nested computations.
- ADDED: discrete harmonic transform
DHT(calculated using Gauss-Hermite quadrature).
0.2.0 (3 Mar 2013)¶
- Added FFT computation (slightly optimized PyFFT version + Bluestein’s algorithm for non-power-of-2 FFT sizes)
- Added Python 3 compatibility
- Added Thread-global automatic memory packing
- Added polar(), conj() and exp() functions to kernel toolbox
- Changed name because of the clash with another Tigger.
0.1.0 (12 Sep 2012)¶
- Lots of changes in the API
- Added elementwise, reduction and transposition computations
- Extended API reference and added topical guides
0.0.1 (22 Jul 2012)¶
- Created basic core for computations and transformations
- Added matrix multiplication computation
- Created basic documentation