mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Renamed move_to_coarse/fine() in CPR
This commit is contained in:
parent
19a0454b6f
commit
5e85c23478
@ -492,11 +492,11 @@ void CPR<block_size>::apply(const cl::Buffer& y, cl::Buffer& x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
OpenclKernels::residual(d_mat->nnzValues, d_mat->colIndices, d_mat->rowPointers, x, y, *d_rs, Nb, block_size);
|
OpenclKernels::residual(d_mat->nnzValues, d_mat->colIndices, d_mat->rowPointers, x, y, *d_rs, Nb, block_size);
|
||||||
OpenclKernels::move_to_coarse(*d_rs, *d_weights, *d_coarse_y, Nb);
|
OpenclKernels::full_to_pressure_restriction(*d_rs, *d_weights, *d_coarse_y, Nb);
|
||||||
|
|
||||||
amg_cycle_gpu(0, *d_coarse_y, *d_coarse_x);
|
amg_cycle_gpu(0, *d_coarse_y, *d_coarse_x);
|
||||||
|
|
||||||
OpenclKernels::move_to_fine(*d_coarse_x, x, pressure_idx, Nb);
|
OpenclKernels::add_coarse_pressure_correction(*d_coarse_x, x, pressure_idx, Nb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,8 +48,8 @@ std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, cl::Buffer&, const
|
|||||||
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> > OpenclKernels::scale_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> > OpenclKernels::scale_k;
|
||||||
std::unique_ptr<cl::KernelFunctor<const double, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > OpenclKernels::vmul_k;
|
std::unique_ptr<cl::KernelFunctor<const double, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > OpenclKernels::vmul_k;
|
||||||
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int> > OpenclKernels::custom_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int> > OpenclKernels::custom_k;
|
||||||
std::unique_ptr<cl::KernelFunctor<const cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > OpenclKernels::move_to_coarse_k;
|
std::unique_ptr<cl::KernelFunctor<const cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > OpenclKernels::full_to_pressure_restriction_k;
|
||||||
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int> > OpenclKernels::move_to_fine_k;
|
std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int> > OpenclKernels::add_coarse_pressure_correction_k;
|
||||||
std::unique_ptr<spmv_blocked_kernel_type> OpenclKernels::spmv_blocked_k;
|
std::unique_ptr<spmv_blocked_kernel_type> OpenclKernels::spmv_blocked_k;
|
||||||
std::unique_ptr<spmv_kernel_type> OpenclKernels::spmv_k;
|
std::unique_ptr<spmv_kernel_type> OpenclKernels::spmv_k;
|
||||||
std::unique_ptr<spmv_kernel_type> OpenclKernels::spmv_noreset_k;
|
std::unique_ptr<spmv_kernel_type> OpenclKernels::spmv_noreset_k;
|
||||||
@ -95,10 +95,10 @@ void OpenclKernels::init(cl::Context *context, cl::CommandQueue *queue_, std::ve
|
|||||||
add_kernel_source(sources, norm_s);
|
add_kernel_source(sources, norm_s);
|
||||||
const std::string& custom_s = get_custom_source();
|
const std::string& custom_s = get_custom_source();
|
||||||
add_kernel_source(sources, custom_s);
|
add_kernel_source(sources, custom_s);
|
||||||
const std::string& move_to_coarse_s = get_move_to_coarse_source();
|
const std::string& full_to_pressure_restriction_s = get_full_to_pressure_restriction_source();
|
||||||
add_kernel_source(sources, move_to_coarse_s);
|
add_kernel_source(sources, full_to_pressure_restriction_s);
|
||||||
const std::string& move_to_fine_s = get_move_to_fine_source();
|
const std::string& add_coarse_pressure_correction_s = get_add_coarse_pressure_correction_source();
|
||||||
add_kernel_source(sources, move_to_fine_s);
|
add_kernel_source(sources, add_coarse_pressure_correction_s);
|
||||||
const std::string& spmv_blocked_s = get_blocked_matrix_operation_source(matrix_operation::spmv_op);
|
const std::string& spmv_blocked_s = get_blocked_matrix_operation_source(matrix_operation::spmv_op);
|
||||||
add_kernel_source(sources, spmv_blocked_s);
|
add_kernel_source(sources, spmv_blocked_s);
|
||||||
const std::string& spmv_s = get_matrix_operation_source(matrix_operation::spmv_op, true);
|
const std::string& spmv_s = get_matrix_operation_source(matrix_operation::spmv_op, true);
|
||||||
@ -138,8 +138,8 @@ void OpenclKernels::init(cl::Context *context, cl::CommandQueue *queue_, std::ve
|
|||||||
scale_k.reset(new cl::KernelFunctor<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")));
|
||||||
vmul_k.reset(new cl::KernelFunctor<const double, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int>(cl::Kernel(program, "vmul")));
|
vmul_k.reset(new cl::KernelFunctor<const double, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int>(cl::Kernel(program, "vmul")));
|
||||||
custom_k.reset(new cl::KernelFunctor<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")));
|
||||||
move_to_coarse_k.reset(new cl::KernelFunctor<const cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int>(cl::Kernel(program, "move_to_coarse")));
|
full_to_pressure_restriction_k.reset(new cl::KernelFunctor<const cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int>(cl::Kernel(program, "full_to_pressure_restriction")));
|
||||||
move_to_fine_k.reset(new cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int>(cl::Kernel(program, "move_to_fine")));
|
add_coarse_pressure_correction_k.reset(new cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int>(cl::Kernel(program, "add_coarse_pressure_correction")));
|
||||||
spmv_blocked_k.reset(new spmv_blocked_kernel_type(cl::Kernel(program, "spmv_blocked")));
|
spmv_blocked_k.reset(new spmv_blocked_kernel_type(cl::Kernel(program, "spmv_blocked")));
|
||||||
spmv_k.reset(new spmv_kernel_type(cl::Kernel(program, "spmv")));
|
spmv_k.reset(new spmv_kernel_type(cl::Kernel(program, "spmv")));
|
||||||
spmv_noreset_k.reset(new spmv_kernel_type(cl::Kernel(program, "spmv_noreset")));
|
spmv_noreset_k.reset(new spmv_kernel_type(cl::Kernel(program, "spmv_noreset")));
|
||||||
@ -282,36 +282,36 @@ void OpenclKernels::custom(cl::Buffer& p, cl::Buffer& v, cl::Buffer& r, const do
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenclKernels::move_to_coarse(const cl::Buffer& fine_y, cl::Buffer& weights, cl::Buffer& coarse_y, int Nb)
|
void OpenclKernels::full_to_pressure_restriction(const cl::Buffer& fine_y, cl::Buffer& weights, cl::Buffer& coarse_y, int Nb)
|
||||||
{
|
{
|
||||||
const unsigned int work_group_size = 32;
|
const unsigned int work_group_size = 32;
|
||||||
const unsigned int num_work_groups = ceilDivision(Nb, work_group_size);
|
const unsigned int num_work_groups = ceilDivision(Nb, work_group_size);
|
||||||
const unsigned int total_work_items = num_work_groups * work_group_size;
|
const unsigned int total_work_items = num_work_groups * work_group_size;
|
||||||
Timer t;
|
Timer t;
|
||||||
|
|
||||||
cl::Event event = (*move_to_coarse_k)(cl::EnqueueArgs(*queue, cl::NDRange(total_work_items), cl::NDRange(work_group_size)), fine_y, weights, coarse_y, Nb);
|
cl::Event event = (*full_to_pressure_restriction_k)(cl::EnqueueArgs(*queue, cl::NDRange(total_work_items), cl::NDRange(work_group_size)), fine_y, weights, coarse_y, Nb);
|
||||||
|
|
||||||
if (verbosity >= 4) {
|
if (verbosity >= 4) {
|
||||||
event.wait();
|
event.wait();
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << std::scientific << "OpenclKernels move_to_coarse() time: " << t.stop() << " s";
|
oss << std::scientific << "OpenclKernels full_to_pressure_restriction() time: " << t.stop() << " s";
|
||||||
OpmLog::info(oss.str());
|
OpmLog::info(oss.str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenclKernels::move_to_fine(cl::Buffer& coarse_x, cl::Buffer& fine_x, int pressure_idx, int Nb)
|
void OpenclKernels::add_coarse_pressure_correction(cl::Buffer& coarse_x, cl::Buffer& fine_x, int pressure_idx, int Nb)
|
||||||
{
|
{
|
||||||
const unsigned int work_group_size = 32;
|
const unsigned int work_group_size = 32;
|
||||||
const unsigned int num_work_groups = ceilDivision(Nb, work_group_size);
|
const unsigned int num_work_groups = ceilDivision(Nb, work_group_size);
|
||||||
const unsigned int total_work_items = num_work_groups * work_group_size;
|
const unsigned int total_work_items = num_work_groups * work_group_size;
|
||||||
Timer t;
|
Timer t;
|
||||||
|
|
||||||
cl::Event event = (*move_to_fine_k)(cl::EnqueueArgs(*queue, cl::NDRange(total_work_items), cl::NDRange(work_group_size)), coarse_x, fine_x, pressure_idx, Nb);
|
cl::Event event = (*add_coarse_pressure_correction_k)(cl::EnqueueArgs(*queue, cl::NDRange(total_work_items), cl::NDRange(work_group_size)), coarse_x, fine_x, pressure_idx, Nb);
|
||||||
|
|
||||||
if (verbosity >= 4) {
|
if (verbosity >= 4) {
|
||||||
event.wait();
|
event.wait();
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << std::scientific << "OpenclKernels move_to_fine() time: " << t.stop() << " s";
|
oss << std::scientific << "OpenclKernels add_coarse_pressure_correction() time: " << t.stop() << " s";
|
||||||
OpmLog::info(oss.str());
|
OpmLog::info(oss.str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -643,9 +643,9 @@ void OpenclKernels::apply_stdwells_no_reorder(cl::Buffer& d_Cnnzs_ocl, cl::Buffe
|
|||||||
|
|
||||||
// transform blocked vector to scalar vector using pressure-weights
|
// transform blocked vector to scalar vector using pressure-weights
|
||||||
// every workitem handles one blockrow
|
// every workitem handles one blockrow
|
||||||
std::string OpenclKernels::get_move_to_coarse_source() {
|
std::string OpenclKernels::get_full_to_pressure_restriction_source() {
|
||||||
return R"(
|
return R"(
|
||||||
__kernel void move_to_coarse(
|
__kernel void full_to_pressure_restriction(
|
||||||
__global const double *fine_y,
|
__global const double *fine_y,
|
||||||
__global const double *weights,
|
__global const double *weights,
|
||||||
__global double *coarse_y,
|
__global double *coarse_y,
|
||||||
@ -670,9 +670,9 @@ void OpenclKernels::apply_stdwells_no_reorder(cl::Buffer& d_Cnnzs_ocl, cl::Buffe
|
|||||||
|
|
||||||
// add the coarse pressure solution back to the finer, complete solution
|
// add the coarse pressure solution back to the finer, complete solution
|
||||||
// every workitem handles one blockrow
|
// every workitem handles one blockrow
|
||||||
std::string OpenclKernels::get_move_to_fine_source() {
|
std::string OpenclKernels::get_add_coarse_pressure_correction_source() {
|
||||||
return R"(
|
return R"(
|
||||||
__kernel void move_to_fine(
|
__kernel void add_coarse_pressure_correction(
|
||||||
__global const double *coarse_x,
|
__global const double *coarse_x,
|
||||||
__global double *fine_x,
|
__global double *fine_x,
|
||||||
const unsigned int pressure_idx,
|
const unsigned int pressure_idx,
|
||||||
|
@ -72,8 +72,8 @@ private:
|
|||||||
static std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> > scale_k;
|
static std::unique_ptr<cl::KernelFunctor<cl::Buffer&, const double, const unsigned int> > scale_k;
|
||||||
static std::unique_ptr<cl::KernelFunctor<const double, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > vmul_k;
|
static std::unique_ptr<cl::KernelFunctor<const double, cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > vmul_k;
|
||||||
static std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int> > custom_k;
|
static std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, cl::Buffer&, const double, const double, const unsigned int> > custom_k;
|
||||||
static std::unique_ptr<cl::KernelFunctor<const cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > move_to_coarse_k;
|
static std::unique_ptr<cl::KernelFunctor<const cl::Buffer&, cl::Buffer&, cl::Buffer&, const unsigned int> > full_to_pressure_restriction_k;
|
||||||
static std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int> > move_to_fine_k;
|
static std::unique_ptr<cl::KernelFunctor<cl::Buffer&, cl::Buffer&, const unsigned int, const unsigned int> > add_coarse_pressure_correction_k;
|
||||||
static std::unique_ptr<spmv_blocked_kernel_type> spmv_blocked_k;
|
static std::unique_ptr<spmv_blocked_kernel_type> spmv_blocked_k;
|
||||||
static std::unique_ptr<spmv_kernel_type> spmv_k;
|
static std::unique_ptr<spmv_kernel_type> spmv_k;
|
||||||
static std::unique_ptr<spmv_kernel_type> spmv_noreset_k;
|
static std::unique_ptr<spmv_kernel_type> spmv_noreset_k;
|
||||||
@ -111,10 +111,10 @@ private:
|
|||||||
static std::string get_custom_source();
|
static std::string get_custom_source();
|
||||||
|
|
||||||
/// Transform blocked vector to scalar vector using pressure-weights
|
/// Transform blocked vector to scalar vector using pressure-weights
|
||||||
static std::string get_move_to_coarse_source();
|
static std::string get_full_to_pressure_restriction_source();
|
||||||
|
|
||||||
/// Add the coarse pressure solution back to the finer, complete solution
|
/// Add the coarse pressure solution back to the finer, complete solution
|
||||||
static std::string get_move_to_fine_source();
|
static std::string get_add_coarse_pressure_correction_source();
|
||||||
|
|
||||||
/// b = mat * x
|
/// b = mat * x
|
||||||
/// algorithm based on:
|
/// algorithm based on:
|
||||||
@ -160,8 +160,8 @@ public:
|
|||||||
static void scale(cl::Buffer& in, const double a, int N);
|
static void scale(cl::Buffer& in, const double a, int N);
|
||||||
static void vmul(const double alpha, cl::Buffer& in1, cl::Buffer& in2, cl::Buffer& out, int N);
|
static void vmul(const double alpha, cl::Buffer& in1, cl::Buffer& in2, cl::Buffer& out, int N);
|
||||||
static void custom(cl::Buffer& p, cl::Buffer& v, cl::Buffer& r, const double omega, const double beta, int N);
|
static void custom(cl::Buffer& p, cl::Buffer& v, cl::Buffer& r, const double omega, const double beta, int N);
|
||||||
static void move_to_coarse(const cl::Buffer& fine_y, cl::Buffer& weights, cl::Buffer& coarse_y, int Nb);
|
static void full_to_pressure_restriction(const cl::Buffer& fine_y, cl::Buffer& weights, cl::Buffer& coarse_y, int Nb);
|
||||||
static void move_to_fine(cl::Buffer& coarse_x, cl::Buffer& fine_x, int pressure_idx, int Nb);
|
static void add_coarse_pressure_correction(cl::Buffer& coarse_x, cl::Buffer& fine_x, int pressure_idx, int Nb);
|
||||||
static void spmv(cl::Buffer& vals, cl::Buffer& cols, cl::Buffer& rows, cl::Buffer& x, cl::Buffer& b, int Nb, unsigned int block_size, bool reset = true);
|
static void spmv(cl::Buffer& vals, cl::Buffer& cols, cl::Buffer& rows, cl::Buffer& x, cl::Buffer& b, int Nb, unsigned int block_size, bool reset = true);
|
||||||
static void residual(cl::Buffer& vals, cl::Buffer& cols, cl::Buffer& rows, cl::Buffer& x, const cl::Buffer& rhs, cl::Buffer& out, int Nb, unsigned int block_size);
|
static void residual(cl::Buffer& vals, cl::Buffer& cols, cl::Buffer& rows, cl::Buffer& x, const cl::Buffer& rhs, cl::Buffer& out, int Nb, unsigned int block_size);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user