Commit Graph

530 Commits

Author SHA1 Message Date
Kyle Lutz
0a0fa4c25b Merge pull request #117 from roshanr95/stable_partition
Add algorithm and test for stable_partition
2014-05-23 18:34:31 -07:00
roshanr
4d3d114285 Add algorithm and test for stable_partition
Added algorithm and test for stable_partition.
Changed partition to use it for now till a
better implementation is found
2014-05-23 14:19:17 +05:30
Kyle Lutz
4a507cb368 Remove test for variadic wait_list::insert() 2014-05-22 22:40:04 -07:00
Kyle Lutz
85af9d2630 Add variadic wait_for_all() function 2014-05-18 19:47:19 -07:00
Kyle Lutz
13bc000117 Add image2d::clone() method 2014-05-18 19:34:24 -07:00
Kyle Lutz
b49a8e52f8 Add test for find_if() with distance() 2014-05-18 16:15:57 -07:00
Kyle Lutz
376713f1b4 Simplify lambda wrappers for binary geometric functions 2014-05-18 16:13:47 -07:00
roshanr
8dbc2b658d Add algorithm and test for includes 2014-05-19 01:42:16 +05:30
roshanr
de9b2ef6ff Add algorithm and test for set_symmetric_difference 2014-05-19 01:08:41 +05:30
roshanr
acbabfeeff Add algorithm and test for set_difference 2014-05-18 22:50:00 +05:30
roshanr
5f7cd290cf Add algorithm and test for set_union 2014-05-18 22:49:54 +05:30
roshanr
c522d9a337 Add algorithm and test for set_intersection 2014-05-16 19:14:48 +05:30
Kyle Lutz
b41ec2b1cb Fix bug when invoking binary closures 2014-05-14 10:44:52 -07:00
Kyle Lutz
a107b9239f Fix tests for event::set_callback() on Intel GPUs
Intel GPUs don't fire the callbacks registered with set_callback()
until the underlying OpenCL event object is destroyed. This changes
the test so that the events go out of scope or are explicitly reset
before checking that the callback has been executed.
2014-05-10 18:04:42 -07:00
Kyle Lutz
b89c886462 Refactor exception classes
This refactors and improves the exception classes. Additional
documentation as well as testing has been added. This also adds
a new static method to opencl_error which converts OpenCL error
codes to human-readable strings.
2014-05-10 14:59:33 -07:00
Kyle Lutz
b1eef72ec2 Add device vendor predicate functions
This adds a couple new functions for checking the vendor of a
compute device. This is useful for algorithms which specialize
based on the type of the underlying hardware.
2014-05-10 10:33:24 -07:00
Kyle Lutz
4bb78de369 Merge pull request #110 from roshanr95/search_n
Search_n
2014-05-10 10:09:16 -07:00
roshanr
d3b3881d9e Add algorithm and test for search_n 2014-05-09 22:48:40 +05:30
roshanr
09760b4372 Add algorithm and test for find_end 2014-05-09 05:16:04 +05:30
Kyle Lutz
6b7d83b40e Merge pull request #103 from roshanr95/search_algorithms
Search algorithm
2014-05-07 21:04:40 -07:00
roshanr
79d5353a4e Minor fixes
Change documentation style, add test for search(), remove unused
variable, remove trailing whitespaces
2014-05-07 15:53:03 +05:30
Kyle Lutz
88b6a8b3d4 Only call clRetainDevice()/clReleaseDevice() for sub-devices 2014-05-06 19:56:11 -07:00
roshanr
747fe2d41f Search algorithm
Add algorithm and test for search()
2014-05-04 23:41:43 +05:30
Kyle Lutz
00f782355e Add example and test for AMD's static C++ kernel language 2014-04-28 21:53:36 -07:00
Kyle Lutz
37a00f5c4e Add normal_distribution class 2014-04-27 15:27:15 -07:00
Kyle Lutz
02fc4fa170 Add define() method to function<> and closure<> 2014-04-27 15:02:48 -07:00
Kyle Lutz
6b00246e09 Simplify function/closure macro implementations 2014-04-27 12:56:14 -07:00
Kyle Lutz
f6bd9de8bd Reorganize tests for issues/bugs 2014-04-27 12:42:45 -07:00
Kyle Lutz
9343b99085 Improve documentation 2014-04-24 19:51:45 -07:00
Kyle Lutz
4b67907023 Change BOOST_COMPUTE_FUNCTION() to use custom argument names
This changes the BOOST_COMPUTE_FUNCTION() macro (and the related
BOOST_COMPUTE_CLOSURE() macro) to use custom, user-provided argument
names instead of auto-generating them based on their index.

This is an API-breaking change. Users should now provide argument
names when using the BOOST_COMPUTE_FUNCTION() macro. The examples
and documentation have been updated to reflect the new API.
2014-04-20 19:13:48 -07:00
Kyle Lutz
2511bdb436 Merge pull request #97 from roshanr95/unique
Fix errors in unique
2014-04-20 16:42:56 -07:00
roshanr
59efaa0eeb Add tests and benchmarks for unique_copy 2014-04-21 02:00:02 +05:30
Kyle Lutz
6ac757887c Support generic function callbacks for event 2014-04-19 11:38:10 -07:00
Kyle Lutz
2fb2c08806 Fix unused variable warning in test_user_event.cpp 2014-04-17 23:10:24 -07:00
Kyle Lutz
21d81fcd76 Add user_event class 2014-04-16 21:11:47 -07:00
Kyle Lutz
6336b81911 Rename mersenne_twister_engine::fill() to generate() 2014-04-13 14:13:53 -07:00
Kyle Lutz
2ebb04caac Add discard() method to mersenne_twister_engine 2014-04-13 13:57:12 -07:00
Kyle Lutz
dd0b1fcb7b Add discard_iterator class 2014-04-13 13:45:01 -07:00
Kyle Lutz
b7c4f0ce18 Change mersenne_twister::seed() to take a command_queue 2014-04-12 11:14:44 -07:00
Kyle Lutz
7966768c80 Remove read/write buffer convenience overloads in command_queue 2014-04-12 09:40:37 -07:00
Kyle Lutz
6499e30c66 Add test creating a std::future for an event object 2014-04-11 20:24:12 -07:00
Kyle Lutz
bae2bb6c7f Add get_nvidia_compute_capability() function 2014-04-02 21:30:22 -07:00
Kyle Lutz
6334d67720 Merge pull request #75 from roshanr95/unique
Unique algorithm
2014-03-23 21:24:05 -07:00
roshanr
1e81b7ec2e Unique algorithm
Added unique() algorithm, tests and benchmarks. Removed unused variable
in scan_on_gpu() to remove warnings
2014-03-24 06:30:28 +05:30
Kyle Lutz
667aa9c200 Add buffer::clone() method 2014-03-20 23:31:41 -07:00
Kyle Lutz
0446e24baf Fix BOOST_COMPUTE_FUNCTION() with non-default-constructible types 2014-03-20 23:31:36 -07:00
Kyle Lutz
35eef1e6be Add test for inner_product() with counting_iterator 2014-03-20 23:17:27 -07:00
Kyle Lutz
8e086104a0 Add event::set_callback() method
This adds a method to the event class which allows the user to
register a callback function to be invoked when the event reaches
the specified state (e.g. when it completes).
2014-03-16 13:20:57 -07:00
Kyle Lutz
0c3a325554 Move transform_if() algorithm to experimental 2014-03-16 13:16:39 -07:00
Kyle Lutz
9bf22a41d1 Merge pull request #66 from roshanr95/rotate_copy
rotate_copy algorithm and test
2014-03-13 08:07:11 -07:00
Kyle Lutz
bae7432c04 Improve sort_by_key() performance 2014-03-12 23:40:57 -07:00
Kyle Lutz
cf8e972e55 Improve kernel::set_arg() method 2014-03-12 21:02:22 -07:00
Kyle Lutz
9e5bff9d83 Add SYSTEM to third-party include_directories() calls 2014-03-12 20:41:04 -07:00
Kyle Lutz
d03fab297d Merge pull request #63 from kylelutz/coveralls
Add coveralls.io integration
2014-03-12 19:06:41 -07:00
Kyle Lutz
524ce5c799 Add coveralls.io integration
This adds support for automatic code-coverage generation with
coveralls.io and Travis-CI.
2014-03-12 18:26:29 -07:00
roshanr
f1b7f39655 rotate_copy algorithm and test 2014-03-13 03:56:56 +05:30
Kyle Lutz
5fb6f94cea Merge pull request #62 from roshanr95/rotate
Rotate algorithm
2014-03-12 10:38:56 -07:00
roshanr
03edbbbdab Rotate algorithm 2014-03-12 22:41:30 +05:30
Kyle Lutz
83d104f24f Add BOOST_COMPUTE_CLOSURE() macro
This adds a new macro which allows users to create closure functions
which can capture C++ variables and make them available in OpenCL.
2014-03-08 18:44:03 -08:00
Kyle Lutz
dec92cc438 Add BOOST_COMPUTE_ADAPT_STRUCT() macro
This adds a new macro which allows the user to adapt a C++ struct
or class for use with OpenCL given its type, name, and members.

This allows for custom user-defined data-types to be used with the
Boost.Compute containers and algorithms.
2014-03-08 18:21:34 -08:00
Kyle Lutz
6f3f30bee9 Add enqueue_native_kernel() method to command_queue 2014-03-08 15:21:57 -08:00
Kyle Lutz
3b49cf14f8 Add wait_list class
This adds a wait_list class which contains a vector of OpenCL
events that can be waited on before executing further commands.
2014-03-08 14:09:41 -08:00
Kyle Lutz
71af014b3d Add mapped_view container 2014-03-08 13:17:55 -08:00
Kyle Lutz
b8de46d4de Add experimental directory
This adds an experimental directory which contains various
experimental algorithms and functions. The files and APIs
under this directory are experimental and unstable.
2014-03-08 13:02:06 -08:00
Kyle Lutz
9e0431006a Rearrange types tests 2014-03-08 12:55:11 -08:00
Kyle Lutz
dacdbf0ffd Bug in fill() with uchar4 2014-02-22 10:51:39 -08:00
Kyle Lutz
ccd6f21d98 Change vector constructors to take queue argument
This changes the vector<T> constructors which copy or initialize
data to take a queue argument used for performing the operations.

Previously they just took a context argument used to initialize the
buffer and then created a new command queue to use. This improves
performance by not requiring a new command queue and also fixes issues
when performing operations on a different command queue while the
vector was still being initialized.
2014-01-27 23:39:19 -08:00
Kyle Lutz
bc8aa0e9d5 Skip generate_pair test on AMD
This skips the generate_pair test on AMD which does not
properly support struct assignment. Before this patch the
test would fail with "UNREACHABLE executed!" and a SIGABRT.
2014-01-26 18:52:58 -08:00
Kyle Lutz
dc20f09d92 Add make_tuple() lambda function 2014-01-14 22:18:35 -08:00
Kyle Lutz
ea7c2bf2f4 Add make_pair() lambda function 2014-01-14 22:03:48 -08:00
Kyle Lutz
e313aae6f7 Rename lambda result test functions to check_lambda_result() 2014-01-14 21:48:33 -08:00
Kyle Lutz
72664c8de9 Add test for generate() with pair<T1, T2> 2014-01-14 21:31:51 -08:00
Kyle Lutz
1dd35de225 Fix sign comparison warnings in tests 2014-01-14 21:29:25 -08:00
Kyle Lutz
936d801466 Add support for host iterators to sort() 2014-01-13 18:27:52 -08:00
Denis Demidov
41d2052c2a Fix linkage problem with detail::getenv()
detail::getenv() function was not declared inline, which led to
`multiple definition` errors at link time when a program consisted of
multiple objects that included Boost.Compute headers.

Fixed the problem and added core.multiple_objects test.
2014-01-07 21:29:18 +04:00
Kyle Lutz
aad03486d9 Add interop support
This adds interoperability support between Boost.Compute and various
other C/C++ libraries (Eigen, OpenCV, OpenGL, Qt and VTK). This eases
development for users using external libraries with Boost.Compute.
2014-01-06 23:35:38 -08:00
Kyle Lutz
b47e74df6f Add is_fundamental type-trait 2014-01-06 23:04:36 -08:00
Kyle Lutz
eca81df028 Merge pull request #39 from ddemidov/offline-cache
Implements offline kernel caching
2014-01-06 22:47:52 -08:00
Denis Demidov
562f149b18 Implements offline kernel caching
See kylelutz/compute#21

This adds program::build_with_source() function that both creates and
builds the program for the given context with supplied source and
compile options. In case BOOST_COMPUTE_USE_OFFLINE_CACHE macro is
defined, it also saves the compiled program binary for reuse in the
offline cache located in $HOME/.boost_compute folder on UNIX-like
systems and in %APPDATA%/boost_compute folder on Windows.

All internal uses of program::create_with_source() followed by
program::build() are replaced with program::build_with_source().
2014-01-07 09:07:00 +04:00
Kyle Lutz
b17888b604 Move future header to async directory 2014-01-06 18:44:37 -08:00
Kyle Lutz
84b45b4394 Bump Boost version requirement to 1.48
This bumps the required Boost version to 1.48 as Boost.Compute
makes use of Boost.Move which was added in version 1.48.

See issue #37.
2014-01-05 18:53:19 -08:00
Kyle Lutz
e337f632da Add height() and width() methods to image2d 2014-01-05 18:36:29 -08:00
Denis Demidov
0c8a59ef84 Fix core.system test
The find_device check in core.system is invalid. It could fail when same
device is supported by several platforms. In my case this happens for
Intel CPU when both AMD and Intel platforms are installed. The CPU
returned by boost::compute::system::default_device() is served by the
AMD platform, and the CPU returned by
boost::compute::system::find_device(name) is served by Intel SDK. The
only thing that could be safely asserted here is that both devices have
the same name.
2013-12-27 11:26:25 +04:00
Kyle Lutz
0d9be38326 Fix issues with gather() algorithm
This fixes some issues with the gather algorithm and also
adds another test for it.
2013-12-21 15:34:29 -08:00
Kyle Lutz
ac1ff45eff Add reduce_on_gpu() algorithm
This adds a improved reduce() algorithm implementation for
GPUs. Also adds checks to accumulate() which allow it to
use the higher-performance reduce() algorithm if possible.
2013-12-21 10:56:55 -08:00
Kyle Lutz
cf473bebd3 Use BOOST_COMPUTE_FUNCTION() macro in tests
This replaces the usages of make_function_from_source() with
the BOOST_COMPUTE_FUNCTION() macro.
2013-12-07 15:26:07 -08:00
Kyle Lutz
2728282c19 Add merge_floats test
This adds a test case for merge() with float's.
2013-12-07 15:18:45 -08:00
Kyle Lutz
26612823a4 Add merge() overload with custom compare function
This adds a merge() function overload which uses a custom compare
function instead of the default less<T>() to compare the values.
2013-12-07 15:15:37 -08:00
Kyle Lutz
6b6f66b6ba Add reduce() overload without function argument
This adds adds an overload of the reduce() function which
uses plus<T>() as the reductor. This simplifies the common
case of calculating the sum for a range of values.
2013-12-07 15:02:04 -08:00
Kyle Lutz
ba9e64e316 Remove init argument from reduce()
This removes the init argument from reduce. This simplifies the
implementation and avoids copying a value from the host to the
device on every call to reduce.

If an initial value is required, the accumulate function can be
called instead.
2013-12-07 14:49:46 -08:00
Kyle Lutz
701bc8a5f3 Add nth_element() algorithm
This adds an implementation of the nth_element() algorithm. For
now the algorithm is trivially implemented by calling sort().
2013-11-15 20:51:13 -08:00
Kyle Lutz
0daa62e41f Add experimental copy_index_if() algorithm
This adds an experimental algorithm like copy_if() which copies
the index of the values for which predicate returns true instead
of the values themselves.
2013-11-15 20:30:30 -08:00
Kyle Lutz
953ebb4e26 Add variadic tuple support
This adds support for variadic tuples on C++11 compilers.
2013-11-15 20:07:39 -08:00
Kyle Lutz
844690070f Remove STL algorithm tests from vector<> test
This removes the STL algorithm tests from the vector<> test.
2013-11-15 19:41:12 -08:00
Kyle Lutz
b5ff4743bb Add field() function
This adds a new function which will return the named field
from a value. For example, this can be used to return one of
the components of a pair object or to swizzle a vector value.
2013-11-10 15:44:45 -08:00
Kyle Lutz
8213697307 Add BOOST_COMPUTE_FUNCTION() macro
This adds a new macro to ease the definition of custom user
functions. The BOOST_COMPUTE_FUNCTION() macro creates a new
boost::compute::function<> object with the provided return
type, argument types, function name and OpenCL source code.
2013-11-10 15:32:15 -08:00
Kyle Lutz
feb510a019 Add unpack() function adaptor
This adds a new unpack() function adaptor which converts
a function with N arguments to a function which takes a
single tuple argument with N components.

This is useful for calling built-in functions with the tuples
values returned from zip_iterator. This also removes the now
un-needed binary_transform_iterator.
2013-09-24 23:05:08 -04:00
Kyle Lutz
efa83c9420 Add test for calculating mean and standard deviation
This adds a test which uses reduce() and transform_reduce()
to calculate mean and standard deviation.
2013-09-24 22:50:02 -04:00
Kyle Lutz
736f3a17a6 Add min_and_max reduce() test
This adds a test for computing the minimum and maximum
values of a vector simultaneously using reduce() with a
custom reduction function.

Also fixes a bug in reduce() in which inplace_reduce() was
being used even if the input type and result type differed.
2013-09-24 22:47:16 -04:00
Kyle Lutz
44920c6443 Rename ext.get test to functional.get
This renames the ext.get test to function.get.
2013-09-24 22:37:32 -04:00
Kyle Lutz
dc6b3228eb Add as() and convert() type-conversion functions
This adds the as() and convert() functions for converting
between OpenCL types.
2013-09-24 22:27:50 -04:00
Kyle Lutz
07e4a6b3aa Remove BLAS functions
This removes the incomplete BLAS API functions.
2013-09-24 22:19:56 -04:00
Kyle Lutz
d16309f57e Add program_cache
This adds a program cache which can be used by algorithms and other
functions to store programs which may be re-used. This improves
performance by reducing the need for costly recompilation of commonly
used programs.

Program caches are context specific and multiple copies of the same
context will use the same program cache. They are created and accessed
by the global get_program_cache() function.

For now, only a few algorithms and functions (radix sort, mersenne
twister, fixed size sorts) make use of the program cache.
2013-09-07 22:58:34 -04:00
Kyle Lutz
d04e628367 Add experimental sort_by_transform() algorithm
This adds a sort_by_transform() algorithm which sorts a sets of
values based on the value of a transform function.

For example, this can be used to sort a set of vectors by their
length (when used with the length<T>() function) or by a single
component (when used with the get<N>() function).
2013-09-07 17:10:15 -04:00
Kyle Lutz
3389a5c741 Add sort_by_key() algorithm
This adds a new sort_by_key() algorithm which sorts a range
of values by a range of keys with a comparison operator.

For now this is only implemented by the serial insertion sort
algorithm. In the future it will be ported to the other sorting
algorithms (e.g. radix sort).
2013-09-07 17:02:08 -04:00
Kyle Lutz
f9d887e30d Add experimental tabulate() algorithm
This adds a tabulate() algorithm which fills a range with values
calculated from a function given each elements index.
2013-09-07 16:53:08 -04:00
Kyle Lutz
a96c9c0182 Add result argument to reduce() algorithm
This adds an output iterator result argument to the reduce()
algorithm. Now, instead of returning the reduced result, the
result is written to an output iterator. This allows the value
to stay on the device and avoids a device-to-host copy in cases
where the result is not needed on the host (e.g. it is part of
a larger computation).

This is an API breaking change to users of reduce(). Affected code
should now declare a result variable and then pass a pointer to it
as the new result argument.
2013-09-07 15:36:49 -04:00
Kyle Lutz
a8f4421739 Add copy() specialization for host-to-host transfers
This adds a copy() specialization for host-to-host transfers
which simply forwards the call to std::copy().

This is useful in templated algorithms which may in certain
circumstances copy() between data ranges on the host.
2013-09-07 15:29:48 -04:00
Kyle Lutz
1c4c772921 Add quirks for image tests on POCL
This adds code to skip certain image tests on POCL devices which
do not fully support images and image samplers.
2013-09-07 15:10:35 -04:00
Kyle Lutz
3a7b90ff06 Fix issue with comparison operators in lambda expressions
This fixes an issue in which comparison operators (e.g. <, ==)
in lambda expressions would return the wrong result type causing
compilation errors.

Also adds a few test cases to ensure the correct result type
and that lambda expressions can be properly used with count_if().
2013-08-15 22:10:03 -04:00
Kyle Lutz
bacec5b8fe Add uniform_real_distribution
This adds a random number distribution which generates random
numbers in a uniform distribution.

Also adds a convenience algorithm which fills a range with
uniformly distributed random numbers between two values.
2013-08-13 20:40:42 -04:00
Kyle Lutz
767589fe0d Rearrange type headers
This rearranges the type headers to live under the
<boost/compute/types/...> directory instead of the
top-level <boost/compute/...> directory.
2013-08-13 20:37:56 -04:00
Kyle Lutz
220d0df600 Add test for fill() command type
This adds a test to ensure the fill() algorithm uses the
clEnqueueFillBuffer() function if supported.
2013-07-02 21:57:19 -04:00
Kyle Lutz
b10a7a43c6 Add test for copy() command type
This adds a test to ensure that the copy() algorithm uses
the proper command type when copying memory buffers.
2013-07-02 21:57:19 -04:00
Denis Demidov
84394de119 Get rid of type convesion warnings inside VS2010 2013-06-24 09:57:22 +02:00
Denis Demidov
b2484376f3 Use std::numeric_limits<float>::infinity() directly
Division by zero, that was used initially, results in compilation error
in VS2010
2013-06-24 09:55:40 +02:00
Kyle Lutz
f2b812019c Fix bugs with char/uchar/bool literals in meta_kernel
This fixes a few issues that occurred when using char, uchar
and bool literals with meta_kernel.
2013-06-19 23:55:22 -04:00
Kyle Lutz
e01569049b Add type_name<bool>() specialization
This adds a type_name() specialization for bool.
2013-06-19 23:48:49 -04:00
Kyle Lutz
7fb77ef9c5 Add test for any/all/none_if() with NaN and inf
This adds a test for the any_of(), all_of() and none_of() functions
with NaN and Inf values.
2013-06-11 21:16:15 -04:00
Kyle Lutz
8e51a0a162 Refactor lambda expression framework to use meta_kernel
This refactors the lambda expression framework to use meta_kernel
to construct kernel source code instead of using plain strings.
2013-06-11 21:14:28 -04:00
Kyle Lutz
64e94549b3 Add specialization for get<N>() with zip_iterator
This adds a specialization for the get<N>() function when used
with zip_iterator's. Now, only the N'th iterator for the expression
will be dereferenced instead of dereferencing all of the iterators
into a tuple and then extracting the N'th component.
2013-06-11 20:37:23 -04:00
Denis Demidov
b731d6146d Skipping fill_char_pair_vector test on AMD
The test fails for the same reason that fill_pair_vector does.

See: c085d64a46
See: http://devgurus.amd.com/thread/166622

closes: #2
2013-05-24 09:02:48 +04:00
Kyle Lutz
c085d64a46 Skip tests using struct assignment on AMD
This adds a check to skip tests which use fill() with pair and
tuple types on AMD platforms. There is a bug which crashes the
OpenCL compiler with an "UNREACHABLE executed!" message on AMD
platforms when using struct assignment in kernel code.

See: http://devgurus.amd.com/thread/166622
2013-05-22 23:05:54 -04:00
Kyle Lutz
2560600122 Fix issues with boost::tuple<>, char, and fill()
This fixes issues when using boost::tuple<> containing char
types with the fill() algorithm.
2013-05-21 23:10:56 -04:00
Kyle Lutz
9141732b3e Fix issues with std::pair<>, char, and fill()
This fixes issues when using std::pair<> containing char
types with the fill() algorithm.
2013-05-21 23:10:56 -04:00
Kyle Lutz
a2f54abd06 Add test for copy() with std::stringstream
This adds a test for using std::stringstream with the
copy() algorithm.
2013-05-20 22:51:47 -04:00
Kyle Lutz
fab7be5f43 Add inplace_merge() algorithm
This adds a simple inplace_merge() algorithm which merges
two contiguous sorted ranges in-place.

For now, the implementation simply copies the ranges to
two temporary vectors and calls merge().
2013-05-20 20:50:12 -04:00
Kyle Lutz
b43e79b983 Add support for get<N>() in lambda expressions
This adds support for using the get<N>() function in lambda
expressions to extract a single component of an aggregate type.

Also adds a test of using boost::tuple<> to store a user-defined
data type on the device and sort them by their first component
using a lambda expression as the comparator.
2013-05-20 20:50:10 -04:00
Kyle Lutz
e46828a9d6 Fix issues involving iterators with void value_type
This fixes a few issues encountered when using iterators with a
void value_type (e.g. std::insert_iterator<>).

The is_contiguous_iterator meta-function was refactored to always
return false for iterators with a void value_type and avoid
instantiating types for containers with a void value_type
(e.g. std::vector<void>::iterator) which previously resulted
in compilation errors.
2013-05-20 19:57:13 -04:00
Kyle Lutz
4ab37ada07 Add system-wide default command queue
This adds a system-wide default command queue. This queue is
accessible via the new static system::default_queue() method.
The default command queue is created for the default compute
device in the default context and is analogous to the default
stream in CUDA.

This changes how algorithms operate when invoked without an
explicit command queue. Previously, each algorithm had two
overloads, the first expected a command queue to be explicitly
passed and the second would create and use a temporary command
queue. Now, all algorithms take a command queue argument which
has a default value equal to system::default_queue().

This fixes a number of race-conditions and performance issues
througout the library associated with create, using, and
destroying many separate command queues.
2013-05-15 20:59:56 -04:00
Kyle Lutz
1b9e904cc7 Add CHECK_RANGE_EQUAL() test macro
This adds a new macro for the unit-tests which checks a range of
values on the device against an array of values on the host. This
simplifies writing tests and removes the need to explicitly copy
values back to the host for verification.
2013-05-13 23:06:40 -04:00
Kyle Lutz
eea16e61c7 Remove simple_histogram from flat_map test
This removes the inefficent simple_histogram test-case from
the flat_map test-suite.
2013-05-11 20:17:24 -04:00
Kyle Lutz
130f8c30f1 Rename kernel::num_args() method to arity()
This renames the kernel::num_args() method to arity().
2013-05-11 20:15:00 -04:00
Kyle Lutz
178676df4f Refactor the system::default_device() method
This refactors the system::default_device() method. Now, the
default compute device for the system is only found once and
stored in a static variable. This eliminates many redundant
calls to clGetPlatformIDs() and clGetDeviceIDs().

Also, the default_cpu_device() and default_gpu_device() methods
have been removed and their usages replaced with default_device().
2013-05-10 22:49:05 -04:00
Kyle Lutz
fecbe63043 Check for partitioning support in device test
This adds checks to the device test-suite to ensure that the
current device supports the partitioning types before attempting
to use the corresponding device::partition_*() methods.
2013-05-09 23:05:11 -04:00
Kyle Lutz
8934bea627 Skip enqueue_write_buffer_rect() test on AMD GPUs
This skips the enqueue_write_buffer_rect() test on AMD GPUs which
don't correctly implement the clEnqueueWriteBuffer() function.
2013-05-09 22:13:28 -04:00
Kyle Lutz
9a64f6b39a Add get<N>() function
This adds a get<N>() function which returns the n'th element
of an aggregate type (e.g. vector type, pair, tuple).

This unifies the functionality of, and replaces, the get_pair()
and vector_component() functions.
2013-05-05 12:46:05 -04:00
Kyle Lutz
3e840fa306 Add transform_if() algorithm
This adds a new algorithm named transform_if() which applies
a given unary function to an input value only if it passes a
separate predicate function.
2013-05-05 11:51:21 -04:00
Kyle Lutz
49a34442e5 Remove unused histogram() algorithm
This removes the unused histogram() algorithm.
2013-05-05 10:56:14 -04:00
Kyle Lutz
9a350f65cf Change clamp_range() test to use float
This changes the clamp_range() test to use float values instead
of int values. The OpenCL clamp() function is only defined for
float values and this test caused kernel compilation errors on
certain platforms.

Also updates the test to use the new global context.
2013-04-27 10:20:47 -04:00
Kyle Lutz
dde1747b32 Merge remote-tracking branch 'ddemidov/master' 2013-04-27 09:45:32 -04:00
Dominic Meiser
2a93124ef5 Using FindOpenCL module from VexCL
Changed CMakeLists.txt files in Boost.Compute to use the variables
defined by FindOpenCL.
2013-04-23 20:03:38 -04:00
Kyle Lutz
ea107ae5d6 Add clamp_range() algorithm
This adds a clamp_range() algorithm which clamps a range
of values between a low and high value. This is based on
the algorithm of the same name in Boost.Algorithm.
2013-04-22 22:06:04 -04:00
Kyle Lutz
3b24d0d15e Add test for SAXPY
This adds a test for the SAXPY function.
2013-04-22 20:40:50 -04:00
Denis Demidov
13887e8ed5 Rely on system::default_context() to hold static context
refs kylelutz/compute#9
2013-04-19 15:16:46 +04:00
Denis Demidov
5d77bbebee Global setup for OpenCL context in tests
refs kylelutz/compute#9

device, context, and queue are initialized statically in `context_setup.hpp`.
With this change all tests are able to complete when an NVIDIA GPU is in
exclusive compute mode.

Side effect of the change:
Time for all tests to complete reduced from 15.71 to 13.03 sec Tesla C2075.
2013-04-19 14:53:59 +04:00
Kyle Lutz
8142e5d5f9 Add move-constructors to wrapper classes
This adds move-constructors and move-assignment operators
to the OpenCL wrapper classes.
2013-04-17 20:45:04 -04:00
Kyle Lutz
5cb51569eb Add test for command_queue::enqueue_write_buffer_rect()
This adds a test for the enqueue_write_buffer_rect() method
in the command_queue class. This method copies a rectangular
region of memory from the host to a device buffer.
2013-04-13 20:52:42 -04:00
Kyle Lutz
4bdec761cd Add memory_object::reference_count() method
This adds a reference_count() method to the memory_object
class which returns its current reference count.
2013-04-13 11:07:04 -04:00
Kyle Lutz
da4cb81679 Return event from command_queue::enqueue_nd_range_kernel()
This changes the enqueue_nd_range_kernel() method to return an
event object. This allows clients to monitor the progress of a
kernel executing on a device.
2013-04-13 10:23:01 -04:00
Kyle Lutz
001b3ff7fe Add get() methods to wrapper classes
This adds a get() method to each wrapper class which returns
a reference to the underlying OpenCL object.
2013-04-13 09:44:51 -04:00
Kyle Lutz
1be19a6305 Add multiplies<T> specialization for std::complex<T>
This adds a specialization of multiplies<T> for std::complex<T>
which implements complex number multiplication.

Also adds a simple test using transform() to verify the complex
multiplication works correctly.
2013-04-10 22:04:04 -04:00
Kyle Lutz
8d13920dc4 Move swizzle_iterator to detail namespace
This moves the swizzle_iterator class to the detail
namespace.
2013-04-10 21:51:24 -04:00
Kyle Lutz
bcc3aed40f Move pixel_input_iterator to detail namespace
This moves the pixel_input_iterator class to the detail
namespace.
2013-04-10 21:38:05 -04:00
Kyle Lutz
e30ec9f26c Move adjacent_transform_iterator to detail namespace
This moves the adjacent_transform_iterator class to the
detail namespace.
2013-04-10 21:24:15 -04:00
Kyle Lutz
430a76bb6c Add generate_fibonacci_sequence test-case
This adds a new test case which computes the first twenty-five
fibonacci numbers using the transform() algorithm and a custom
generator function.
2013-04-09 22:36:00 -04:00
Kyle Lutz
9a3d7c7d4b Add missing iostream header include to test_device
This adds a missing include for the iostream header to
test_device. This fixes a compilation issue when using
OpenCL 1.2.
2013-04-07 13:00:55 -04:00
Kyle Lutz
14ea0bdbff Fix bug in command_queue test on AMD platforms
This fixes a bug in the event_profiling test case in the
command_queue test. On AMD platforms, the event object
returned from clEnqueueMarker() has no profiling information
associated with it and returns an error code when accessed.

Now, profiling information for a simple write to a device
buffer is checked instead.
2013-03-26 23:36:58 -04:00
Kyle Lutz
4338b311f7 Add device::partition() method
This adds a new set of methods to the device class allowing
device objects to be partitioned into multiple sub-devices
using the clCreateSubDevices() function.

For now, device partitioning is only supported on systems
with OpenCL version 1.2 (or later).
2013-03-26 23:36:54 -04:00
Kyle Lutz
4752fb2404 Support returning std::vector<T> from get_info<T>()
This adds support for returning a std::vector<T> from the
various get_info<T>() methods. This provides a simpler
interface to get the values in an array returned from one
of the clGet*Info() functions.

This also adds a test using the new API to get the maximum
work item sizes in each dimension for a device.
2013-03-26 22:44:56 -04:00
Kyle Lutz
25e7214e5c Fix bug in inplace_reduce() test
This fixes a bug in the test for inplace_reduce() in which
the vector was being filled with data from two different
command queues leaving the data in an undefined state.
2013-03-25 21:05:42 -04:00
Kyle Lutz
ecc0944afe Remove check for local_memory_size in test_kernel
This removes the check for local_memory_size in test_kernel. The
local memory size differs between platforms and some (e.g. Intel)
don't report any local memory usage.
2013-03-20 18:38:09 -04:00
Kyle Lutz
35f3bdc7fd Add test for transform_iterator
This adds a unit test for transform_iterator.
2013-03-19 18:22:54 -04:00
Kyle Lutz
d80e2a5c30 Add test for permutation_iterator
This adds a unit test for permutation_iterator.
2013-03-19 18:22:08 -04:00
Kyle Lutz
5f6bdf8644 Add test for counting_iterator
This adds a unit test for counting_iterator.
2013-03-19 18:12:22 -04:00
Kyle Lutz
4aaf4bcbb0 Add test for constant_iterator
This adds a unit test for constant_iterator.
2013-03-19 18:11:59 -04:00
Kyle Lutz
7c3a05b421 Add construct_from_cl_context test-case to test_context
This adds a new test executable for the context class and
adds a new test-case which checks the functionality of the
context(cl_context) constructor.
2013-03-19 17:51:44 -04:00
Kyle Lutz
34cfe34edb Add construct_from_cl_command_queue test-case to test_command_queue
This adds a new test-case to test_command_queue which checks the
functionality of the command_queue(cl_command_queue) constructor.
2013-03-19 17:48:30 -04:00
Kyle Lutz
e8f77897eb Add construct_from_cl_mem test-case to test_buffer
This adds a new test-case to test_buffer which checks the
functionality of the buffer(cl_mem) constructor.
2013-03-19 17:46:14 -04:00
Kyle Lutz
2d81f561c4 Add zip_iterator class
This adds a zip_iterator class which allows for one or more
iterators to be combined into a single iterator object.
2013-03-17 23:42:56 -04:00
Kyle Lutz
ada2351812 Add support for boost::tuple<>
This adds support for using boost::tuple<> types with the
Boost.Compute containers and algorithms.
2013-03-17 23:28:07 -04:00
Kyle Lutz
db53bdb246 Fix check for local memory size in test_kernel
This fixes the check for the local memory size in the
get_work_group_info kernel test.

While the kernel only allocates 16 float's, some platforms
will use more local memory. This changes the test to check
for at least 16 float's worth of local memory.
2013-03-17 22:42:56 -04:00
Kyle Lutz
b88de104f3 Add queue.finish() call to test_mersenne_twister
This adds a call to queue.finish() to ensure that the results
are ready before being checked in the mersenne_twister test.
2013-03-14 22:17:50 -04:00
Kyle Lutz
e16890aa9f Add queue.finish() calls to test_merge
This adds calls to queue.finish() to ensure that the results
are ready before being checked in the merge test.
2013-03-14 22:16:39 -04:00
Kyle Lutz
ef2a14a278 Add queue.finish() calls to test_inplace_reduce
This adds calls to queue.finish() to ensure that the results
are ready before being checked in the inplace_reduce test.
2013-03-14 22:15:00 -04:00
Kyle Lutz
de0bdcd2e4 Fix test module name for TestInsertionSort
This fixes the module name for the insertion sort test.
2013-03-10 20:21:26 -04:00
Kyle Lutz
30e5f6a836 Fix test module name for TestRadixSort
This fixes the module name for the radix sort test.
2013-03-10 20:20:32 -04:00
Kyle Lutz
08045a3466 Add test for sorting vectors by length
This adds a test for the sort() method which sorts a container
of 3D vectors by their length. This uses a lambda expression to
generate the compare function for the sort() algorithm.
2013-03-10 20:17:02 -04:00
Kyle Lutz
69aef15cab Add merge() algorithm
This implements the merge() algorithm which merges two
ranges of sorted values into a single sorted range.

The current implementation uses a simple serial merge
algorithm. A GPU optimized version is coming soon.
2013-03-10 20:10:58 -04:00
Kyle Lutz
d34cdaac59 Initial commit 2013-03-02 15:14:17 -05:00