(committing very old stuff) Something with input/output
This commit is contained in:
parent
ee27ef82cf
commit
f5d5731500
3 changed files with 61 additions and 52 deletions
|
@ -10,8 +10,10 @@ add_library(${LIBNAME} ${headers} ${sources})
|
||||||
find_library(OPENCL_LIBRARY OpenCL)
|
find_library(OPENCL_LIBRARY OpenCL)
|
||||||
|
|
||||||
set(libs ${OPENCL_LIBRARY})
|
set(libs ${OPENCL_LIBRARY})
|
||||||
|
set(${LIBNAME}_LIBRARIES ${LIBNAME} ${libs} CACHE INTERNAL "")
|
||||||
|
|
||||||
target_link_libraries(${LIBNAME} ${libs})
|
target_link_libraries(${LIBNAME} ${libs})
|
||||||
|
target_include_directories(${LIBNAME} PUBLIC ".")
|
||||||
|
|
||||||
install(TARGETS ${LIBNAME} DESTINATION lib)
|
install(TARGETS ${LIBNAME} DESTINATION lib)
|
||||||
install(FILES ${headers} DESTINATION include/J)
|
install(FILES ${headers} DESTINATION include/J)
|
||||||
|
|
4
cl.hpp
4
cl.hpp
|
@ -4442,7 +4442,7 @@ typedef T param_type; \
|
||||||
struct KernelArgumentHandler
|
struct KernelArgumentHandler
|
||||||
{
|
{
|
||||||
static ::size_t size(const T&) { return sizeof(T); }
|
static ::size_t size(const T&) { return sizeof(T); }
|
||||||
static T* ptr(T& value) { return &value; }
|
static typename std::remove_reference_t<T>* ptr(T& value) { return &value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -4607,7 +4607,7 @@ typedef T param_type; \
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
cl_int setArg(cl_uint index, T value)
|
cl_int setArg(cl_uint index, T&& value)
|
||||||
{
|
{
|
||||||
return detail::errHandler(
|
return detail::errHandler(
|
||||||
::clSetKernelArg(
|
::clSetKernelArg(
|
||||||
|
|
35
cl2.hpp
35
cl2.hpp
|
@ -13,48 +13,50 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// debugging tool
|
namespace cl {
|
||||||
static void check(cl_int err){
|
// debugging tool
|
||||||
|
inline void checky(cl_int err){
|
||||||
assert(err == CL_SUCCESS);
|
assert(err == CL_SUCCESS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// simple variadic wrapper for kernels/arguments (1D)
|
// simple variadic wrapper for kernels/arguments (1D)
|
||||||
struct KernelOp{
|
struct KernelOp{
|
||||||
KernelOp(const cl::Program& program, const char* name, cl_int* err)
|
KernelOp(const cl::Program& program, const char* name, cl_int* err = nullptr)
|
||||||
: kernel(program, name, err)
|
: kernel(program, name, err)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
cl_int operator()(cl::CommandQueue & queue, size_t W, size_t H, Args&&... args){
|
cl_int operator()(cl::CommandQueue & queue, size_t W, Args&&... args){
|
||||||
return apply(queue, W, H, 0, std::forward<Args>(args)...);
|
return apply(queue, W, 0, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cl::Kernel kernel;
|
cl::Kernel kernel;
|
||||||
|
|
||||||
template <typename T, typename... Args>
|
template <typename T, typename... Args>
|
||||||
cl_int apply(cl::CommandQueue & queue, size_t W, size_t H, cl_uint n, T&& t, Args&&... args){
|
cl_int apply(cl::CommandQueue & queue, size_t W, cl_uint n, T&& t, Args&&... args){
|
||||||
check(kernel.setArg(n, t));
|
cl::checky(kernel.setArg(n, t));
|
||||||
return apply(queue, W, H, n+1, std::forward<Args>(args)...);
|
return apply(queue, W, n+1, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
cl_int apply(cl::CommandQueue & queue, size_t W, size_t H, size_t){
|
cl_int apply(cl::CommandQueue & queue, size_t W, size_t){
|
||||||
return queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(W, H), cl::NullRange);
|
return queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(W));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// We need to put the op<<'s in namespace cl (ADL)
|
// We need to put the op<<'s in namespace cl (ADL)
|
||||||
namespace cl {
|
namespace cl {
|
||||||
std::ostream& operator<<(std::ostream& out, Platform const & platform){
|
inline std::ostream& operator<<(std::ostream& out, Platform const & platform){
|
||||||
return out << platform.getInfo<CL_PLATFORM_NAME>() << ", " << platform.getInfo<CL_PLATFORM_VERSION>();
|
return out << platform.getInfo<CL_PLATFORM_NAME>() << ", " << platform.getInfo<CL_PLATFORM_VERSION>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& out, Device const & device){
|
inline std::ostream& operator<<(std::ostream& out, Device const & device){
|
||||||
out << device.getInfo<CL_DEVICE_NAME>() << ", " << device.getInfo<CL_DEVICE_VERSION>() << ", " << device.getInfo<CL_DRIVER_VERSION>();
|
out << device.getInfo<CL_DEVICE_NAME>() << ", " << device.getInfo<CL_DEVICE_VERSION>() << ", " << device.getInfo<CL_DRIVER_VERSION>();
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& out, Context const & context){
|
inline std::ostream& operator<<(std::ostream& out, Context const & context){
|
||||||
Platform p;
|
Platform p;
|
||||||
context.getInfo(CL_CONTEXT_PLATFORM, &p);
|
context.getInfo(CL_CONTEXT_PLATFORM, &p);
|
||||||
out << "Platform:\t" << p << '\n';
|
out << "Platform:\t" << p << '\n';
|
||||||
|
@ -68,9 +70,14 @@ namespace cl {
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& out, Program const & program){
|
inline std::ostream& operator<<(std::ostream& out, Program const & program){
|
||||||
return out << "Kernels in program:\t" << program.getInfo<CL_PROGRAM_KERNEL_NAMES>();
|
return out << "Kernels in program:\t" << program.getInfo<CL_PROGRAM_KERNEL_NAMES>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::ostream& operator<<(std::ostream& out, Image const & image){
|
||||||
|
out << "Image: " << image.getImageInfo<CL_IMAGE_WIDTH>() << "x" << image.getImageInfo<CL_IMAGE_HEIGHT>();
|
||||||
|
return out << " elements: " << image.getImageInfo<CL_IMAGE_ELEMENT_SIZE>() << " pitch: " << image.getImageInfo<CL_IMAGE_ROW_PITCH>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Reference in a new issue