mirror of
https://github.com/OPM/opm-simulators.git
synced 2026-10-13 09:22:05 -05:00
Merge pull request #3644 from blattms/use-cl2.hpp
[enhancement][opencl} Use cl2.hpp instead of cl.hpp (missing on bullseye)
This commit is contained in:
9 files changed
+46
-43
No files matched your search
+4
-4
@@ -200,14 +200,14 @@ if(ENABLE_FPGA)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(OpenCL_FOUND)
|
if(OpenCL_FOUND)
|
||||||
# the current OpenCL implementation relies on cl.hpp, not cl2.hpp
|
# the current OpenCL implementation relies on cl2.hpp, not cl.hpp
|
||||||
# make sure it is available, otherwise disable OpenCL
|
# make sure it is available, otherwise disable OpenCL
|
||||||
find_file(CL_HPP CL/cl.hpp HINTS ${OpenCL_INCLUDE_DIRS})
|
find_file(CL2_HPP CL/cl2.hpp HINTS ${OpenCL_INCLUDE_DIRS})
|
||||||
if(CL_HPP)
|
if(CL2_HPP)
|
||||||
set(HAVE_OPENCL 1)
|
set(HAVE_OPENCL 1)
|
||||||
include_directories(${OpenCL_INCLUDE_DIRS})
|
include_directories(${OpenCL_INCLUDE_DIRS})
|
||||||
else()
|
else()
|
||||||
message(WARNING " OpenCL was found, but this version of opm-simulators relies on CL/cl.hpp, which implements OpenCL 1.0, 1.1 and 1.2.\n Deactivating OpenCL")
|
message(WARNING " OpenCL was found, but this version of opm-simulators relies on CL/cl2.hpp, which implements OpenCL 1.0, 1.1 and 1.2.\n Deactivating OpenCL")
|
||||||
set(OpenCL_FOUND OFF)
|
set(OpenCL_FOUND OFF)
|
||||||
set(OPENCL_FOUND OFF)
|
set(OPENCL_FOUND OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -654,10 +654,10 @@ void BILU0<block_size>::setKernelParameters(const unsigned int work_group_size_,
|
|||||||
}
|
}
|
||||||
template <unsigned int block_size>
|
template <unsigned int block_size>
|
||||||
void BILU0<block_size>::setKernels(
|
void BILU0<block_size>::setKernels(
|
||||||
cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply1_,
|
cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply1_,
|
||||||
cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply2_,
|
cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply2_,
|
||||||
cl::make_kernel<cl::Buffer&, const double, const unsigned int> *scale_,
|
cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> *scale_,
|
||||||
cl::make_kernel<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg> *ilu_decomp_
|
cl::KernelFunctor<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg> *ilu_decomp_
|
||||||
){
|
){
|
||||||
this->ILU_apply1 = ILU_apply1_;
|
this->ILU_apply1 = ILU_apply1_;
|
||||||
this->ILU_apply2 = ILU_apply2_;
|
this->ILU_apply2 = ILU_apply2_;
|
||||||
@@ -677,10 +677,10 @@ template void BILU0<n>::setOpenCLContext(cl::Context*);
|
|||||||
template void BILU0<n>::setOpenCLQueue(cl::CommandQueue*); \
|
template void BILU0<n>::setOpenCLQueue(cl::CommandQueue*); \
|
||||||
template void BILU0<n>::setKernelParameters(unsigned int, unsigned int, unsigned int); \
|
template void BILU0<n>::setKernelParameters(unsigned int, unsigned int, unsigned int); \
|
||||||
template void BILU0<n>::setKernels( \
|
template void BILU0<n>::setKernels( \
|
||||||
cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *, \
|
cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *, \
|
||||||
cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *, \
|
cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *, \
|
||||||
cl::make_kernel<cl::Buffer&, const double, const unsigned int> *, \
|
cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> *, \
|
||||||
cl::make_kernel<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg> * \
|
cl::KernelFunctor<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg> * \
|
||||||
);
|
);
|
||||||
|
|
||||||
INSTANTIATE_BDA_FUNCTIONS(1);
|
INSTANTIATE_BDA_FUNCTIONS(1);
|
||||||
|
|||||||
@@ -85,10 +85,10 @@ namespace bda
|
|||||||
|
|
||||||
ilu_apply1_kernel_type *ILU_apply1;
|
ilu_apply1_kernel_type *ILU_apply1;
|
||||||
ilu_apply2_kernel_type *ILU_apply2;
|
ilu_apply2_kernel_type *ILU_apply2;
|
||||||
cl::make_kernel<cl::Buffer&, const double, const unsigned int> *scale;
|
cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> *scale;
|
||||||
cl::make_kernel<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::KernelFunctor<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&,
|
||||||
const int, cl::LocalSpaceArg> *ilu_decomp;
|
const int, cl::LocalSpaceArg> *ilu_decomp;
|
||||||
|
|
||||||
GPU_storage s;
|
GPU_storage s;
|
||||||
cl::Context *context;
|
cl::Context *context;
|
||||||
@@ -122,10 +122,10 @@ namespace bda
|
|||||||
void setOpenCLQueue(cl::CommandQueue *queue);
|
void setOpenCLQueue(cl::CommandQueue *queue);
|
||||||
void setKernelParameters(const unsigned int work_group_size, const unsigned int total_work_items, const unsigned int lmem_per_work_group);
|
void setKernelParameters(const unsigned int work_group_size, const unsigned int total_work_items, const unsigned int lmem_per_work_group);
|
||||||
void setKernels(
|
void setKernels(
|
||||||
cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply1,
|
cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply1,
|
||||||
cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply2,
|
cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg> *ILU_apply2,
|
||||||
cl::make_kernel<cl::Buffer&, const double, const unsigned int> *scale,
|
cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> *scale,
|
||||||
cl::make_kernel<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg> *ilu_decomp
|
cl::KernelFunctor<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg> *ilu_decomp
|
||||||
);
|
);
|
||||||
|
|
||||||
int* getToOrder()
|
int* getToOrder()
|
||||||
|
|||||||
@@ -488,7 +488,7 @@ void ChowPatelIlu::decomposition(
|
|||||||
try {
|
try {
|
||||||
// just put everything in the capture list
|
// just put everything in the capture list
|
||||||
std::call_once(initialize_flag, [&](){
|
std::call_once(initialize_flag, [&](){
|
||||||
cl::Program::Sources source(1, std::make_pair(chow_patel_ilu_sweep_s, strlen(chow_patel_ilu_sweep_s))); // what does this '1' mean? cl::Program::Sources is of type 'std::vector<std::pair<const char*, long unsigned int> >'
|
cl::Program::Sources source(1, chow_patel_ilu_sweep_s); // what does this '1' mean? cl::Program::Sources is of type 'std::vector<std::pair<const char*, long unsigned int> >'
|
||||||
cl::Program program = cl::Program(*context, source, &err);
|
cl::Program program = cl::Program(*context, source, &err);
|
||||||
if (err != CL_SUCCESS) {
|
if (err != CL_SUCCESS) {
|
||||||
OPM_THROW(std::logic_error, "ChowPatelIlu OpenCL could not create Program");
|
OPM_THROW(std::logic_error, "ChowPatelIlu OpenCL could not create Program");
|
||||||
@@ -497,7 +497,7 @@ void ChowPatelIlu::decomposition(
|
|||||||
std::vector<cl::Device> devices = context->getInfo<CL_CONTEXT_DEVICES>();
|
std::vector<cl::Device> devices = context->getInfo<CL_CONTEXT_DEVICES>();
|
||||||
program.build(devices);
|
program.build(devices);
|
||||||
|
|
||||||
chow_patel_ilu_sweep_k.reset(new cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
chow_patel_ilu_sweep_k.reset(new cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&,
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace bda
|
|||||||
cl_int err;
|
cl_int err;
|
||||||
std::once_flag initialize_flag;
|
std::once_flag initialize_flag;
|
||||||
|
|
||||||
std::unique_ptr<cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&,
|
||||||
|
|||||||
@@ -20,9 +20,12 @@
|
|||||||
/// This file includes the relevant OpenCL header(s)
|
/// This file includes the relevant OpenCL header(s)
|
||||||
/// All bda files using OpenCL declarations should include this header
|
/// All bda files using OpenCL declarations should include this header
|
||||||
|
|
||||||
#define __CL_ENABLE_EXCEPTIONS
|
#define CL_HPP_ENABLE_EXCEPTIONS
|
||||||
#define CL_TARGET_OPENCL_VERSION 120 // indicate OpenCL 1.2 is used
|
#define CL_TARGET_OPENCL_VERSION 120 // indicate OpenCL 1.2 is used
|
||||||
#include <CL/cl.hpp> // supports up to OpenCL 1.2
|
#define CL_HPP_TARGET_OPENCL_VERSION 120 // indicate OpenCL 1.2 is used
|
||||||
|
#define CL_HPP_MINIMUM_VERSION 120
|
||||||
|
#define CL_HPP_MINIMUM_OPENCL_VERSION 120
|
||||||
|
#include <CL/cl2.hpp> // supports up to OpenCL 1.2
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|||||||
@@ -27,21 +27,21 @@
|
|||||||
namespace bda
|
namespace bda
|
||||||
{
|
{
|
||||||
|
|
||||||
using spmv_kernel_type = cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int,
|
using spmv_kernel_type = cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int,
|
||||||
cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg>;
|
cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg>;
|
||||||
using ilu_apply1_kernel_type = cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
using ilu_apply1_kernel_type = cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg>;
|
cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg>;
|
||||||
using ilu_apply2_kernel_type = cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
using ilu_apply2_kernel_type = cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg>;
|
cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int, cl::LocalSpaceArg>;
|
||||||
using stdwell_apply_kernel_type = cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
using stdwell_apply_kernel_type = cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
const unsigned int, const unsigned int, cl::Buffer&,
|
const unsigned int, const unsigned int, cl::Buffer&,
|
||||||
cl::LocalSpaceArg, cl::LocalSpaceArg, cl::LocalSpaceArg>;
|
cl::LocalSpaceArg, cl::LocalSpaceArg, cl::LocalSpaceArg>;
|
||||||
using stdwell_apply_no_reorder_kernel_type = cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
using stdwell_apply_no_reorder_kernel_type = cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
cl::Buffer&, cl::Buffer&, cl::Buffer&,
|
||||||
const unsigned int, const unsigned int, cl::Buffer&,
|
const unsigned int, const unsigned int, cl::Buffer&,
|
||||||
cl::LocalSpaceArg, cl::LocalSpaceArg, cl::LocalSpaceArg>;
|
cl::LocalSpaceArg, cl::LocalSpaceArg, cl::LocalSpaceArg>;
|
||||||
using ilu_decomp_kernel_type = cl::make_kernel<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&,
|
using ilu_decomp_kernel_type = cl::KernelFunctor<const unsigned int, const unsigned int, cl::Buffer&, cl::Buffer&,
|
||||||
cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg>;
|
cl::Buffer&, cl::Buffer&, cl::Buffer&, const int, cl::LocalSpaceArg>;
|
||||||
|
|
||||||
/// Generate string with axpy kernel
|
/// Generate string with axpy kernel
|
||||||
|
|||||||
@@ -526,7 +526,7 @@ void openclSolverBackend<block_size>::initialize(int N_, int nnz_, int dim, doub
|
|||||||
} // end initialize()
|
} // end initialize()
|
||||||
|
|
||||||
void add_kernel_string(cl::Program::Sources &sources, std::string &source) {
|
void add_kernel_string(cl::Program::Sources &sources, std::string &source) {
|
||||||
sources.emplace_back(std::make_pair(source.c_str(), source.size()));
|
sources.emplace_back(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <unsigned int block_size>
|
template <unsigned int block_size>
|
||||||
@@ -565,14 +565,14 @@ void openclSolverBackend<block_size>::get_opencl_kernels() {
|
|||||||
program.build(devices);
|
program.build(devices);
|
||||||
|
|
||||||
// queue.enqueueNDRangeKernel() is a blocking/synchronous call, at least for NVIDIA
|
// queue.enqueueNDRangeKernel() is a blocking/synchronous call, at least for NVIDIA
|
||||||
// cl::make_kernel<> myKernel(); myKernel(args, arg1, arg2); is also blocking
|
// cl::KernelFunctor<> myKernel(); myKernel(args, arg1, arg2); is also blocking
|
||||||
|
|
||||||
// actually creating the kernels
|
// actually creating the kernels
|
||||||
dot_k.reset(new cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg>(cl::Kernel(program, "dot_1")));
|
dot_k.reset(new cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg>(cl::Kernel(program, "dot_1")));
|
||||||
norm_k.reset(new cl::make_kernel<cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg>(cl::Kernel(program, "norm")));
|
norm_k.reset(new cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg>(cl::Kernel(program, "norm")));
|
||||||
axpy_k.reset(new cl::make_kernel<cl::Buffer&, const double, cl::Buffer&, const unsigned int>(cl::Kernel(program, "axpy")));
|
axpy_k.reset(new cl::KernelFunctor<cl::Buffer&, const double, cl::Buffer&, const unsigned int>(cl::Kernel(program, "axpy")));
|
||||||
scale_k.reset(new cl::make_kernel<cl::Buffer&, const double, const unsigned int>(cl::Kernel(program, "scale")));
|
scale_k.reset(new cl::KernelFunctor<cl::Buffer&, const double, const unsigned int>(cl::Kernel(program, "scale")));
|
||||||
custom_k.reset(new cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int>(cl::Kernel(program, "custom")));
|
custom_k.reset(new cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int>(cl::Kernel(program, "custom")));
|
||||||
spmv_blocked_k.reset(new spmv_kernel_type(cl::Kernel(program, "spmv_blocked")));
|
spmv_blocked_k.reset(new spmv_kernel_type(cl::Kernel(program, "spmv_blocked")));
|
||||||
ILU_apply1_k.reset(new ilu_apply1_kernel_type(cl::Kernel(program, "ILU_apply1")));
|
ILU_apply1_k.reset(new ilu_apply1_kernel_type(cl::Kernel(program, "ILU_apply1")));
|
||||||
ILU_apply2_k.reset(new ilu_apply2_kernel_type(cl::Kernel(program, "ILU_apply2")));
|
ILU_apply2_k.reset(new ilu_apply2_kernel_type(cl::Kernel(program, "ILU_apply2")));
|
||||||
|
|||||||
@@ -65,11 +65,11 @@ private:
|
|||||||
|
|
||||||
// shared pointers are also passed to other objects
|
// shared pointers are also passed to other objects
|
||||||
std::vector<cl::Device> devices;
|
std::vector<cl::Device> devices;
|
||||||
std::unique_ptr<cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg> > dot_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg> > dot_k;
|
||||||
std::unique_ptr<cl::make_kernel<cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg> > norm_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, cl::LocalSpaceArg> > norm_k;
|
||||||
std::unique_ptr<cl::make_kernel<cl::Buffer&, const double, cl::Buffer&, const unsigned int> > axpy_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, cl::Buffer&, const unsigned int> > axpy_k;
|
||||||
std::unique_ptr<cl::make_kernel<cl::Buffer&, const double, const unsigned int> > scale_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> > scale_k;
|
||||||
std::unique_ptr<cl::make_kernel<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int> > custom_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int> > custom_k;
|
||||||
std::unique_ptr<spmv_kernel_type> spmv_blocked_k;
|
std::unique_ptr<spmv_kernel_type> spmv_blocked_k;
|
||||||
std::shared_ptr<ilu_apply1_kernel_type> ILU_apply1_k;
|
std::shared_ptr<ilu_apply1_kernel_type> ILU_apply1_k;
|
||||||
std::shared_ptr<ilu_apply2_kernel_type> ILU_apply2_k;
|
std::shared_ptr<ilu_apply2_kernel_type> ILU_apply2_k;
|
||||||
|
|||||||
Reference in new issue
Block a user