185 class(batch_t),
intent(inout) :: this
186 integer,
optional,
intent(in) :: np
188 logical,
optional,
intent(in) :: async
190 integer :: ist_linear, ist, ip, np_
198 select case (this%status())
201 assert(np_ <= int(this%pack_size(2), int32))
206 assert(np_ <= int(this%pack_size(2), int32))
211 do ist = 1, int(this%pack_size(1), int32)
212 this%dff_pack(ist, ip) =
m_zero
219 do ist = 1, int(this%pack_size(1), int32)
220 this%sff_pack(ist, ip) = 0.0_real32
227 do ist = 1, int(this%pack_size(1), int32)
228 this%cff_pack(ist, ip) = cmplx(0.0_real32, 0.0_real32, real32)
235 do ist = 1, int(this%pack_size(1), int32)
244 assert(np_ <= ubound(this%dff_linear, dim=1))
245 do ist_linear = 1, this%nst_linear
248 this%dff_linear(ip, ist_linear) =
m_zero
253 assert(np_ <= ubound(this%sff_linear, dim=1))
254 do ist_linear = 1, this%nst_linear
257 this%sff_linear(ip, ist_linear) = 0.0_real32
262 assert(np_ <= ubound(this%cff_linear, dim=1))
263 do ist_linear = 1, this%nst_linear
266 this%cff_linear(ip, ist_linear) = cmplx(0.0_real32, 0.0_real32, real32)
271 assert(np_ <= ubound(this%zff_linear, dim=1))
272 do ist_linear = 1, this%nst_linear
275 this%zff_linear(ip, ist_linear) =
m_z0
281 message(1) =
"batch_set_zero: unknown batch status."
295 class(
batch_t),
intent(in) :: this
296 integer,
intent(in) :: sp
297 integer,
intent(in) :: ep
299 integer,
intent(in) :: ldpsi1
300 integer,
intent(in) :: ldpsi2
302 integer :: tsize, ii, it
304 integer,
allocatable :: linear_to_ist(:), linear_to_idim(:)
305 type(
accel_mem_t) :: buff_linear_to_ist, buff_linear_to_idim
310 select case (this%status())
317 safe_allocate(linear_to_ist(1:this%nst_linear*tsize))
318 safe_allocate(linear_to_idim(1:this%nst_linear*tsize))
319 do ii = 1, this%nst_linear
321 linear_to_ist(tsize*(ii-1)+it) = tsize*(this%linear_to_ist(ii) - 1) + it - 1
322 linear_to_idim(tsize*(ii-1)+it) = this%linear_to_idim(ii) - 1
344 call accel_kernel_run(kernel, (/1_int64, int(ep - sp + 1, int64)/), (/this%pack_size_real(1), 1_int64/))
348 safe_deallocate_a(linear_to_ist)
349 safe_deallocate_a(linear_to_idim)
362 class(
batch_t),
intent(inout) :: this
363 integer,
intent(in) :: sp
364 integer,
intent(in) :: ep
366 integer,
intent(in) :: ldpsi1
367 integer,
intent(in) :: ldpsi2
369 integer :: tsize, ii, it
371 integer,
allocatable :: linear_to_ist(:), linear_to_idim(:)
372 type(
accel_mem_t) :: buff_linear_to_ist, buff_linear_to_idim
377 select case (this%status())
384 safe_allocate(linear_to_ist(1:this%nst_linear*tsize))
385 safe_allocate(linear_to_idim(1:this%nst_linear*tsize))
386 do ii = 1, this%nst_linear
388 linear_to_ist(tsize*(ii-1)+it) = tsize*(this%linear_to_ist(ii) - 1) + it - 1
389 linear_to_idim(tsize*(ii-1)+it) = this%linear_to_idim(ii) - 1
411 call accel_kernel_run(kernel, (/1_int64, int(ep - sp + 1, int64)/), (/this%pack_size_real(1), 1_int64/))
415 safe_deallocate_a(linear_to_ist)
416 safe_deallocate_a(linear_to_idim)
430 integer pure function batch_points_block_size() result(block_size)
440 integer,
intent(in) :: np
441 class(batch_t),
intent(in) :: xx
442 class(batch_t),
intent(in) :: yy
443 class(batch_t),
intent(inout) :: zz
444 logical,
optional,
intent(in) :: conjugate_yy
448 integer(int64),
dimension(3) :: gsizes, bsizes
449 type(accel_kernel_t),
save,
target :: kernel_zmul_conj
450 type(accel_kernel_t),
save,
target :: kernel_zmul
451 type(accel_kernel_t),
save,
target :: kernel_dmul
452 type(accel_kernel_t),
pointer :: kernel
455 call xx%check_compatibility_with(yy)
456 call xx%check_compatibility_with(zz)
458 conj_yy = optional_default(conjugate_yy, .
true.)
460 select case (xx%status())
461 case (batch_not_packed)
462 if (xx%type() == type_cmplx)
then
465 do ii = 1, xx%nst_linear
468 zz%zff_linear(ip, ii) = xx%zff_linear(ip, ii)*conjg(yy%zff_linear(ip, ii))
475 do ii = 1, xx%nst_linear
478 zz%zff_linear(ip, ii) = xx%zff_linear(ip, ii)*yy%zff_linear(ip, ii)
486 do ii = 1, xx%nst_linear
489 zz%dff_linear(ip, ii) = xx%dff_linear(ip, ii)*yy%dff_linear(ip, ii)
497 if (xx%type() == type_cmplx)
then
502 do ii = 1, xx%nst_linear
503 zz%zff_pack(ii, ip) = xx%zff_pack(ii, ip)*conjg(yy%zff_pack(ii, ip))
510 do ii = 1, xx%nst_linear
511 zz%zff_pack(ii, ip) = xx%zff_pack(ii, ip)*yy%zff_pack(ii, ip)
519 do ii = 1, xx%nst_linear
520 zz%dff_pack(ii, ip) = xx%dff_pack(ii, ip)*yy%dff_pack(ii, ip)
525 case (batch_device_packed)
526 if (xx%type() == type_cmplx)
then
528 kernel => kernel_zmul_conj
529 call accel_kernel_start_call(kernel,
'batch_mul.cu',
'mul_batch<complex<double>, Conjugation::Yes>')
531 kernel => kernel_zmul
532 call accel_kernel_start_call(kernel,
'batch_mul.cu',
'mul_batch<complex<double>, Conjugation::No>')
535 call accel_set_kernel_arg(kernel, 0, np)
536 call accel_set_kernel_arg(kernel, 1, xx%ff_device)
537 call accel_set_kernel_arg(kernel, 2,
log2(int(xx%pack_size(1), int32)))
538 call accel_set_kernel_arg(kernel, 3, yy%ff_device)
539 call accel_set_kernel_arg(kernel, 4,
log2(int(yy%pack_size(1), int32)))
540 call accel_set_kernel_arg(kernel, 5, zz%ff_device)
541 call accel_set_kernel_arg(kernel, 6,
log2(int(zz%pack_size(1), int32)))
543 call accel_grid_size_extend_dim(int(np, int64), xx%pack_size(1), gsizes, bsizes, kernel)
545 kernel => kernel_dmul
546 call accel_kernel_start_call(kernel,
'batch_mul.cu',
'mul_batch<double>')
548 call accel_set_kernel_arg(kernel, 0, np)
549 call accel_set_kernel_arg(kernel, 1, xx%ff_device)
550 call accel_set_kernel_arg(kernel, 2,
log2(int(xx%pack_size_real(1), int32)))
551 call accel_set_kernel_arg(kernel, 3, yy%ff_device)
552 call accel_set_kernel_arg(kernel, 4,
log2(int(yy%pack_size_real(1), int32)))
553 call accel_set_kernel_arg(kernel, 5, zz%ff_device)
554 call accel_set_kernel_arg(kernel, 6,
log2(int(zz%pack_size_real(1), int32)))
556 call accel_grid_size_extend_dim(int(np, int64), xx%pack_size_real(1), gsizes, bsizes, kernel)
559 call accel_kernel_run(kernel, gsizes, bsizes)
567 integer,
intent(in) :: np
568 integer,
intent(in) :: map(:)
569 class(batch_t),
intent(in) :: xx
570 class(batch_t),
intent(in) :: yy
571 class(batch_t),
intent(inout) :: zz
572 type(accel_mem_t) :: buff_map
576 if (xx%status() /= batch_device_packed)
then
577 if (xx%type() == type_float)
then
584 call accel_create_buffer(buff_map, accel_mem_read_only, type_integer, np)
585 call accel_write_buffer(buff_map, np, map)
587 call accel_free_buffer(buff_map)
595 integer,
intent(in) :: np
596 class(accel_mem_t),
intent(in) :: map
597 class(batch_t),
intent(in) :: xx
598 class(batch_t),
intent(in) :: yy
599 class(batch_t),
intent(inout) :: zz
601 type(accel_kernel_t),
save :: kernel
602 integer(int64),
dimension(3) :: gsizes, bsizes
606 call accel_kernel_start_call(kernel,
'copy.cu',
'add_with_map<double>')
608 call accel_set_kernel_arg(kernel, 0, np)
609 call accel_set_kernel_arg(kernel, 1, map)
610 call accel_set_kernel_arg(kernel, 2, xx%ff_device)
611 call accel_set_kernel_arg(kernel, 3,
log2(int(xx%pack_size_real(1), int32)))
612 call accel_set_kernel_arg(kernel, 4, yy%ff_device)
613 call accel_set_kernel_arg(kernel, 5,
log2(int(yy%pack_size_real(1), int32)))
614 call accel_set_kernel_arg(kernel, 6, zz%ff_device)
615 call accel_set_kernel_arg(kernel, 7,
log2(int(zz%pack_size_real(1), int32)))
618 call accel_grid_size_extend_dim(int(np, int64), xx%pack_size_real(1), gsizes, bsizes, kernel)
620 call accel_kernel_run(kernel, gsizes, bsizes)
627 integer,
intent(in) :: np
628 integer,
intent(in) :: map(:)
629 class(batch_t),
intent(in) :: xx
630 class(batch_t),
intent(inout) :: yy
631 type(accel_mem_t) :: buff_map
635 if (xx%status() /= batch_device_packed)
then
636 if (xx%type() == type_float)
then
643 call accel_create_buffer(buff_map, accel_mem_read_only, type_integer, np)
644 call accel_write_buffer(buff_map, np, map)
646 call accel_free_buffer(buff_map)
654 integer,
intent(in) :: np
655 class(accel_mem_t),
intent(in) :: map
656 class(batch_t),
intent(in) :: xx
657 class(batch_t),
intent(inout) :: yy
659 type(accel_kernel_t),
save :: kernel
660 integer(int64),
dimension(3) :: gsizes, bsizes
664 call accel_kernel_start_call(kernel,
'copy.cu',
'copy_with_map<double>')
668 call accel_set_kernel_arg(kernel, 0, np)
669 call accel_set_kernel_arg(kernel, 1, map)
670 call accel_set_kernel_arg(kernel, 2, xx%ff_device)
671 call accel_set_kernel_arg(kernel, 3,
log2(int(xx%pack_size_real(1), int32)))
672 call accel_set_kernel_arg(kernel, 4, yy%ff_device)
673 call accel_set_kernel_arg(kernel, 5,
log2(int(yy%pack_size_real(1), int32)))
676 call accel_grid_size_extend_dim(int(np, int64), xx%pack_size_real(1), gsizes, bsizes, kernel)
678 call accel_kernel_run(kernel, gsizes, bsizes)
690 integer,
intent(in) :: np
691 class(batch_t),
intent(in) :: xx
692 class(batch_t),
intent(inout) :: yy
693 class(batch_t),
intent(inout) :: zz
695 integer :: ist_linear, ip
696 type(accel_kernel_t),
save :: kernel
697 integer(int64),
dimension(3) :: gsizes, bsizes
701 assert(xx%type() == type_cmplx)
702 assert(yy%type() == type_float)
703 assert(zz%type() == type_float)
704 assert(xx%status() == yy%status())
705 assert(xx%status() == zz%status())
707 select case (xx%status())
708 case (batch_not_packed)
709 do ist_linear = 1, xx%nst_linear
712 yy%dff_linear(ip, ist_linear) = real(xx%zff_linear(ip, ist_linear), real64)
713 zz%dff_linear(ip, ist_linear) = aimag(xx%zff_linear(ip, ist_linear))
719 do ist_linear = 1, xx%nst_linear
720 yy%dff_pack(ist_linear, ip) = real(xx%zff_pack(ist_linear, ip), real64)
721 zz%dff_pack(ist_linear, ip) = aimag(xx%zff_pack(ist_linear, ip))
724 case (batch_device_packed)
725 call accel_kernel_start_call(kernel,
'split.cu',
'split_complex<double>')
727 call accel_set_kernel_arg(kernel, 0, int(xx%pack_size(2), int32))
728 call accel_set_kernel_arg(kernel, 1, xx%ff_device)
729 call accel_set_kernel_arg(kernel, 2,
log2(int(xx%pack_size(1), int32)))
730 call accel_set_kernel_arg(kernel, 3, yy%ff_device)
731 call accel_set_kernel_arg(kernel, 4,
log2(int(yy%pack_size(1), int32)))
732 call accel_set_kernel_arg(kernel, 5, zz%ff_device)
733 call accel_set_kernel_arg(kernel, 6,
log2(int(zz%pack_size(1), int32)))
736 call accel_grid_size_extend_dim(int(np, int64), xx%pack_size(1), gsizes, bsizes, kernel)
738 call accel_kernel_run(kernel, gsizes, bsizes)
753 class(batch_t),
intent(in) :: src
754 class(batch_t),
intent(inout) :: dst
755 integer,
intent(in) :: np
758 integer(int64) :: gsizes(3), bsizes(3)
759 logical :: is_cplx, to_single
760 character(len=47) :: kernel_name
764 type(accel_kernel_t),
save,
target :: kernels(1:2, 1:2)
765 type(accel_kernel_t),
pointer :: kernel
769 assert(src%nst_linear == dst%nst_linear)
770 assert(src%status() == dst%status())
771 assert(type_is_complex(src%type()) .eqv. type_is_complex(dst%type()))
772 assert(type_is_single(src%type()) .neqv. type_is_single(dst%type()))
774 is_cplx = type_is_complex(src%type())
775 to_single = type_is_single(dst%type())
777 select case (src%status())
778 case (batch_device_packed)
780 kernel_name = merge(
'precision_copy<complex<double>, complex<float>>', &
781 'precision_copy<complex<float>, complex<double>>', to_single)
783 kernel_name = merge(
'precision_copy<double, float>',
'precision_copy<float, double>', to_single)
785 kernel => kernels(merge(2, 1, is_cplx), merge(2, 1, to_single))
786 call accel_kernel_start_call(kernel,
'precision_copy.cu', trim(kernel_name))
787 call accel_set_kernel_arg(kernel, 0, np)
788 call accel_set_kernel_arg(kernel, 1, src%nst_linear)
789 call accel_set_kernel_arg(kernel, 2, src%ff_device)
790 call accel_set_kernel_arg(kernel, 3,
log2(int(src%pack_size(1), int32)))
791 call accel_set_kernel_arg(kernel, 4, dst%ff_device)
792 call accel_set_kernel_arg(kernel, 5,
log2(int(dst%pack_size(1), int32)))
793 call accel_grid_size_extend_dim(int(np, int64), dst%pack_size(1), gsizes, bsizes, kernel)
794 call accel_kernel_run(kernel, gsizes, bsizes)
802 do ist = 1, dst%nst_linear
803 dst%cff_pack(ist, ip) = cmplx(src%zff_pack(ist, ip), kind=real32)
809 do ist = 1, dst%nst_linear
810 dst%sff_pack(ist, ip) = real(src%dff_pack(ist, ip), kind=real32)
818 do ist = 1, dst%nst_linear
819 dst%zff_pack(ist, ip) = src%cff_pack(ist, ip)
825 do ist = 1, dst%nst_linear
826 dst%dff_pack(ist, ip) = src%sff_pack(ist, ip)
832 case (batch_not_packed)
836 do ist = 1, dst%nst_linear
838 dst%cff_linear(ip, ist) = cmplx(src%zff_linear(ip, ist), kind=real32)
843 do ist = 1, dst%nst_linear
845 dst%sff_linear(ip, ist) = real(src%dff_linear(ip, ist), kind=real32)
852 do ist = 1, dst%nst_linear
854 dst%zff_linear(ip, ist) = src%cff_linear(ip, ist)
859 do ist = 1, dst%nst_linear
861 dst%dff_linear(ip, ist) = src%sff_linear(ip, ist)
876#include "batch_ops_inc.F90"
879#include "complex.F90"
880#include "batch_ops_inc.F90"
886#include "batch_ops_inc.F90"
889#include "complex.F90"
890#include "batch_ops_inc.F90"
897#include "batch_ops_inc.F90"
900#include "complex.F90"
901#include "batch_ops_inc.F90"
908#include "batch_ops_inc.F90"
911#include "complex.F90"
912#include "batch_ops_inc.F90"
919#include "batch_ops_inc.F90"
922#include "complex.F90"
923#include "batch_ops_inc.F90"
930#include "batch_ops_inc.F90"
933#include "complex.F90"
934#include "batch_ops_inc.F90"
941#include "batch_ops_inc.F90"
944#include "complex32.F90"
945#include "batch_ops_inc.F90"
batchified version of the BLAS axpy routine:
batchified multiplication by mesh function with optional conjugation:
batchified scale with optional conjugation:
scale a batch by a constant or vector
There are several ways how to call batch_set_state and batch_get_state:
double log2(double __x) __attribute__((__nothrow__
subroutine, public accel_free_buffer(this, async)
subroutine, public accel_kernel_start_call(this, file_name, kernel_name, flags)
integer, parameter, public accel_mem_read_only
This module implements batches of mesh functions.
integer, parameter, public batch_not_packed
functions are stored in CPU memory, unpacked order
integer, parameter, public batch_device_packed
functions are stored in device memory in packed order
integer, parameter, public batch_packed
functions are stored in CPU memory, in transposed (packed) order
This module implements common operations on batches of mesh functions.
subroutine zbatch_get_state3(this, ii, np, psi, async)
subroutine dbatch_get_state3(this, ii, np, psi, async)
subroutine batch_copy_with_map_accel(np, map, xx, yy)
subroutine zbatch_get_state1(this, ist, np, psi, async)
Write a get of state with np points from a batch.
subroutine, public zbatch_copy_with_map_to_array(np, map, xx, array)
Transfer a batch from the mesh to an array on the submesh (defined by a map)
subroutine, public dbatch_ax_function_py(np, aa, psi, yy)
This routine performs a set of axpy operations adding the same function psi to all functions of a bat...
subroutine dbatch_set_state1(this, ist, np, psi)
Write a single state with np points into a batch at position ist.
subroutine dbatch_axpy_const(np, aa, xx, yy)
This routine applies a 'pair-wise' axpy operation to all functions of the batches xx and yy,...
subroutine zbatch_axpby(np, aa, xx, bb, yy)
calculate yy(ist,:) = aa*xx(ist,:) + bb*yy(ist,:) for a batch
subroutine cbatch_axpy_const(np, aa, xx, yy)
This routine applies a 'pair-wise' axpy operation to all functions of the batches xx and yy,...
subroutine zbatch_get_points(this, sp, ep, psi)
copy a set of points into a mesh function
subroutine dbatch_xpay_vec(np, xx, aa, yy, a_start, a_full)
calculate yy(ist,:) = xx(ist,:) + aa(ist)*yy(ist,:) for a batch
subroutine dbatch_scal_vec(np, aa, xx, a_start, a_full)
subroutine dbatch_set_state2(this, index, np, psi)
Write a single state with np points into a batch at position defined by index.
subroutine dbatch_copy_with_map(np, map, xx, yy)
subroutine cbatch_get_state2(this, index, np, psi, async)
subroutine, public dbatch_copy_with_map_to_array(np, map, xx, array)
Transfer a batch from the mesh to an array on the submesh (defined by a map)
subroutine dbatch_scal2v(np, aa, xx, yy, conjugate_xx)
calculate yy(ist,:) = aa*CJ(xx(ist,:)) for a batch
subroutine dbatch_get_state2(this, index, np, psi, async)
subroutine dbatch_axpy_vec(np, aa, xx, yy, a_start, a_full)
A simple switch between specialized kernels and generic kernels.
subroutine dbatch_set_state3(this, ii, np, psi)
Write a set of state with np points into a batch.
subroutine zbatch_axpy_const(np, aa, xx, yy)
This routine applies a 'pair-wise' axpy operation to all functions of the batches xx and yy,...
subroutine sbatch_set_state3(this, ii, np, psi)
Write a set of state with np points into a batch.
subroutine zbatch_scal_const(np, aa, xx)
scale all functions in a batch by constant aa
subroutine zbatch_get_state2(this, index, np, psi, async)
subroutine zbatch_xpay_const(np, xx, aa, yy)
calculate yy(ist) = xx(ist) + aa*yy(ist) for a batch
subroutine, public batch_split_complex(np, xx, yy, zz)
extract the real and imaginary parts of a complex batch
subroutine batch_add_with_map_accel(np, map, xx, yy, zz)
subroutine dbatch_set_points(this, sp, ep, psi)
copy a set of points into a mesh function
subroutine dbatch_get_state1(this, ist, np, psi, async)
Write a get of state with np points from a batch.
subroutine zbatch_copy_with_map(np, map, xx, yy)
subroutine dbatch_mul_mf(np, ff, xx, yy, conjugate_xx)
calculate yy(ist,:) = ff(:) * CJ(xx(ist,:)) for a batch
subroutine, public batch_set_zero(this, np, async)
fill all mesh functions of the batch with zero
subroutine, public zbatch_ax_function_py(np, aa, psi, yy)
This routine performs a set of axpy operations adding the same function psi to all functions of a bat...
subroutine zbatch_axpy_vec(np, aa, xx, yy, a_start, a_full)
A simple switch between specialized kernels and generic kernels.
subroutine cbatch_set_state1(this, ist, np, psi)
Write a single state with np points into a batch at position ist.
subroutine batch_set_points_accel(this, sp, ep, psi, ldpsi1, ldpsi2)
GPU version of batch_set_points.
subroutine dbatch_xpay_const(np, xx, aa, yy)
calculate yy(ist) = xx(ist) + aa*yy(ist) for a batch
subroutine dbatch_axpby(np, aa, xx, bb, yy)
calculate yy(ist,:) = aa*xx(ist,:) + bb*yy(ist,:) for a batch
subroutine dbatch_get_points(this, sp, ep, psi)
copy a set of points into a mesh function
subroutine zbatch_scal2v(np, aa, xx, yy, conjugate_xx)
calculate yy(ist,:) = aa*CJ(xx(ist,:)) for a batch
integer pure function, public batch_points_block_size()
determine the device block size
subroutine dbatch_add_with_map(np, map, xx, yy, zz)
subroutine zbatch_mul_mf(np, ff, xx, yy, conjugate_xx)
calculate yy(ist,:) = ff(:) * CJ(xx(ist,:)) for a batch
subroutine sbatch_get_state1(this, ist, np, psi, async)
Write a get of state with np points from a batch.
subroutine sbatch_get_state2(this, index, np, psi, async)
subroutine zbatch_xpay_vec(np, xx, aa, yy, a_start, a_full)
calculate yy(ist,:) = xx(ist,:) + aa(ist)*yy(ist,:) for a batch
subroutine sbatch_set_state1(this, ist, np, psi)
Write a single state with np points into a batch at position ist.
subroutine, public batch_copy_precision(src, dst, np)
Copy the data of a batch to another batch of the same logical shape but the opposite precision (doubl...
subroutine cbatch_get_state3(this, ii, np, psi, async)
subroutine batch_mul_cj(np, xx, yy, zz, conjugate_yy)
Point-wise multiply two batches with optional conjugation on yy: zz_i = xx_i * CJ(yy_i)
subroutine sbatch_get_state3(this, ii, np, psi, async)
subroutine sbatch_set_state2(this, index, np, psi)
Write a single state with np points into a batch at position defined by index.
subroutine zbatch_set_state1(this, ist, np, psi)
Write a single state with np points into a batch at position ist.
subroutine batch_add_with_map_cpu(np, map, xx, yy, zz)
subroutine zbatch_scal_vec(np, aa, xx, a_start, a_full)
subroutine cbatch_set_state3(this, ii, np, psi)
Write a set of state with np points into a batch.
subroutine zbatch_set_state2(this, index, np, psi)
Write a single state with np points into a batch at position defined by index.
subroutine sbatch_axpy_const(np, aa, xx, yy)
This routine applies a 'pair-wise' axpy operation to all functions of the batches xx and yy,...
subroutine, public zbatch_axpy_function(np, aa, xx, psi, nst)
This routine performs a set of axpy operations for each function x of a batch (xx),...
subroutine zbatch_set_points(this, sp, ep, psi)
copy a set of points into a mesh function
subroutine zbatch_add_with_map(np, map, xx, yy, zz)
subroutine, public dbatch_axpy_function(np, aa, xx, psi, nst)
This routine performs a set of axpy operations for each function x of a batch (xx),...
subroutine batch_get_points_accel(this, sp, ep, psi, ldpsi1, ldpsi2)
GPU version of batch_get_points.
subroutine cbatch_set_state2(this, index, np, psi)
Write a single state with np points into a batch at position defined by index.
subroutine zbatch_set_state3(this, ii, np, psi)
Write a set of state with np points into a batch.
subroutine cbatch_get_state1(this, ist, np, psi, async)
Write a get of state with np points from a batch.
subroutine batch_copy_with_map_cpu(np, map, xx, yy)
subroutine dbatch_scal_const(np, aa, xx)
scale all functions in a batch by constant aa
This module contains interfaces for BLAS routines You should not use these routines directly....
real(real64), parameter, public m_zero
logical pure function, public not_in_openmp()
complex(real64), parameter, public m_z0
This module is intended to contain "only mathematical" functions and procedures.
subroutine, public messages_not_implemented(feature, namespace)
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
subroutine, public profiling_out(label)
Increment out counter and sum up difference between entry and exit time.
subroutine, public profiling_in(label, exclude)
Increment in counter and save entry time.
type(type_t), parameter, public type_cmplx_single
type(type_t), parameter, public type_float_single
integer pure function, public types_get_size(this)
type(type_t), parameter, public type_integer
type(type_t), parameter, public type_float
Class defining batches of mesh functions.