Tags: skn123/vexcl
Tags
* API breaking change: `vex::purge_kernel_caches()` family of functio… …ns is renamed to `vex::purge_caches()` as the online cache now may hold objects of arbitrary type. The overloads that used to take `vex::backend::kernel_cache_key` now take `const vex::backend::command_queue&`. * The online cache is now purged whenever `vex::Context` is destroyed. This allows for clean release of OpenCL/cuda contexts. * Code for random number generators has been unified between OpenCL and CUDA backends. * Fast Fourier Transform is now supported both for OpenCL and CUDA backends. * `vex::backend::kernel` constructor now takes optional parameter with command line options. * Performance of CLOGS algorithms has been improved. * VEX_BUILTIN_FUNCTION macro has been made public. * Minor bug fixes and improvements.
* API breaking change: changed the definition of VEX_FUNCTION family … …of macros. The previous versions are available as VEX_FUNCTION_V1. * Wrapping code for [clogs](clogs.sourceforge.net) library is added by @bmerry (the author of clogs). * vector/multivector iterators are now standard-conforming iterators. * Other minor improvements and bug fixes.
Sorting algorithms may take tuples of keys/values (in fact, any Boost… ….Fusion sequence will do). One will have to explicitly specify the comparison functor in this case. Both host and device variants of the comparison functor should take 2n arguments, where n is the number of keys. The first n arguments correspond to the left set of keys, and the second n arguments correspond to the right set of keys. Here is an example that sorts values by a tuple of two keys: vex::vector<int> keys1(ctx, n); vex::vector<float> keys2(ctx, n); vex::vector<double> vals (ctx, n); struct { VEX_FUNCTION(device, bool(int, float, int, float), "return (prm1 == prm3) ? (prm2 < prm4) : (prm1 < prm3);" ); bool operator()(int a1, float a2, int b1, float b2) const { return std::make_tuple(a1, a2) < std::tuple(b1, b2); } } comp; vex::sort_by_key(std::tie(keys1, keys2), vals, comp);
* `vex::SpMat<>`class uses CUSPARSE library on CUDA backend when `VEXCL_USE_CUSPARSE` macro is defined. This results in more effective sparse matrix-vector product, but disables inlining of SpMV operation. * Provided an example of CUDA backend interoperation with Thrust. * When `VEXCL_CHECK_SIZES` macro is defined to 1 or 2, then runtime checks for vector expression correctness are enabled (see ddemidov#81, ddemidov#82). * Added `sort()` and `sort_by_key()` functions. * Added `inclusive_scan()` and `exclusive_scan()` functions. * Added `reduce_by_key()` function. Only works with single-device contexts. * Added `convert_<type>()` and `as_<type>()` builtin functions for OpenCL backend.
Version 1.0.0 * Added CUDA backend! * vex::Filter::General: modifiable container for device filters. * vex::Filter::Env supports OCL_POSITION environment variable. * Vector views (reduction, permutation) are all work with vector expressions. * Added vex::reshape() function for reshaping of multidimensional expressions. * Added vex::cast() function for changing deduced type of an expression. * Added vex::Filter::Extension and vex::Filter::GLSharing filters (thanks, @johneih!) * Added VEXCL_SPLIT_MULTIEXPRESSIONS macro to allow componentwise splitting of large multiexpressions. * Various bug fixes.
* Sparse matrix-vector product for OpenCL vector types: vex::SpMat <cl_double2> A; vex::vector<cl_double2> x, y; y = A * x; * Added raw_pointer() function. See 'Raw pointers' section in README. * Fixed compilation for 32bit Visual Studio (thanks to @d-meiser for reporting!). * Other bug fixes.
* Allow user-defined functions in symbolic expressions * Introduced address-of and dereference operators in vector expressions This makes the following possible: // Assign 42 to either y or z, depending on value of x. The trick // with address_of/dereference is unfortunately required because // in C99 (which OpenCL is based on) result of ternary operator // is not an lvalue. vex::tie( *if_else( x < 0.5 ? &y : &z) ) = 42; * vex::reduce() accepts slices of vector expressions. vex::reduce() calls may be nested. * vex::element_index() optianally accepts length (number of elements). This allows to reduce stateless vector expressions. Could be useful e.g. for Monte-Carlo experiments. * Added missing builtin functions. * Introduced constants in vector expressions. Instances of std::integral_constant<T,v> or constants from vex::constants namespace (which are currently wrappers for boost::math::constants) will not be passed as kernel parameters, but will be written as literals to kernel source. Users may introduce their own constants with help of VEX_CONSTANT macro.
* FFT transform may be used as if it was first-class vector expressio… …n, and not only an additive expression. * Allow to purge online kernel caches. This allows for complete cleanup of OpenCL contexts. * Offline kernel caching. Saves time on first-time compilation.
PreviousNext