2#ifndef STORMM_COORDINATE_COPY_H
3#define STORMM_COORDINATE_COPY_H
7#include "Accelerator/card_utilities.h"
8#include "Accelerator/gpu_details.h"
9#include "Accelerator/gpu_enumerators.h"
10#include "Accelerator/hybrid_util.h"
11#include "Constants/behavior.h"
12#include "DataTypes/common_types.h"
13#include "DataTypes/stormm_vector_types.h"
14#include "Math/matrix_ops.h"
15#include "Math/rounding.h"
16#include "Numerics/split_fixed_precision.h"
17#include "Synthesis/condensate.h"
18#include "Synthesis/phasespace_synthesis.h"
19#include "Synthesis/synthesis_enumerators.h"
20#include "coordinateframe.h"
21#include "coordinate_series.h"
22#include "coordinate_util.h"
23#include "phasespace.h"
24#include "trajectory_enumerators.h"
26# include "hpc_coordinate_copy.h"
32using card::GpuDetails;
33using card::HpcKernelSync;
34using card::HybridFormat;
35using card::HybridTargetLevel;
36using constants::PrecisionModel;
37using data_types::isFloatingPointScalarType;
38using data_types::isSignedIntegralScalarType;
39using data_types::getStormmScalarTypeName;
40using stmath::extractBoxDimensions;
42using numerics::hostDoubleToInt95;
43using numerics::hostChangeFPBits;
44using synthesis::Condensate;
45using synthesis::CondensateReader;
46using synthesis::CondensateWriter;
47using synthesis::StructureSource;
48using synthesis::CondensateWriter;
49using synthesis::PhaseSpaceSynthesis;
50using synthesis::PsSynthesisReader;
51using synthesis::PsSynthesisWriter;
63template <
typename Tdest,
typename Torig>
64void checkCopyValidity(
const Tdest *destination,
const Torig &origin,
65 HybridTargetLevel destination_tier, HybridTargetLevel origin_tier);
72void coordCopyValidateAtomCounts(
int destination_atoms,
int origin_atoms);
79void coordCopyValidateFrameIndex(
int frame_index,
int frame_count);
86void coordCopyValidateSystemIndex(
int system_index,
int system_count);
119void copyBoxInformation(
double* dest_boxdim,
double* dest_umat,
double* dest_invu,
120 int index_dest,
const double* orig_boxdim,
const double* orig_umat,
121 const double* orig_invu,
int index_orig, llint* dest_boxvecs =
nullptr,
122 int* dest_boxvec_ovrf =
nullptr,
const double dest_scale = 1.0,
123 const llint* orig_boxvecs =
nullptr,
const int* orig_boxvec_ovrf =
nullptr,
124 const int dest_bits = 0,
const int orig_bits = 0);
126void copyBoxInformation(
double* dest_boxdim,
double* dest_umat,
double* dest_invu,
127 int index_dest,
const double* orig_boxdim,
const double* orig_umat,
128 const double* orig_invu, llint* dest_boxvecs =
nullptr,
129 int* dest_boxvec_ovrf =
nullptr);
131void copyBoxInformation(
double* dest_boxdim,
double* dest_umat,
double* dest_invu,
132 const double* orig_boxdim,
const double* orig_umat,
133 const double* orig_invu,
int index_orig = 0);
162template <
typename Tdest,
typename Torig>
163void copyCoordinateXYZ(Tdest* xdest, Tdest* ydest, Tdest* zdest,
const Torig* xorig,
164 const Torig* yorig,
const Torig* zorig,
int natom);
166template <
typename Tdest,
typename Torig>
167void copyCoordinateXYZ(Tdest* xdest, Tdest* ydest, Tdest* zdest,
double dest_scale,
168 const Torig* xorig,
const Torig* yorig,
const Torig* zorig,
169 double orig_scale,
int natom);
171template <
typename Tdest,
typename Torig>
172void copyCoordinateXYZ(Tdest* xdest, Tdest* ydest, Tdest* zdest,
const Torig* xorig,
173 const Torig* yorig,
const Torig* zorig,
double orig_scale,
int natom);
175template <
typename Tdest,
typename Torig>
176void copyCoordinateXYZ(Tdest* xdest, Tdest* ydest, Tdest* zdest,
double dest_scale,
177 const Torig* xorig,
const Torig* yorig,
const Torig* zorig,
178 double orig_scale,
int natom);
180template <
typename Tdest>
181void copyCoordinateXYZ(Tdest* xdest, Tdest* ydest, Tdest* zdest,
182 const llint* xorig,
const int* xorig_ovrf,
const llint* yorig,
183 const int* yorig_ovrf,
const llint* zorig,
const int* zorig_ovrf,
184 double orig_scale,
int natom);
186template <
typename Tdest>
187void copyCoordinateXYZ(Tdest* xdest, Tdest* ydest, Tdest* zdest,
double dest_scale,
188 const llint* xorig,
const int* xorig_ovrf,
const llint* yorig,
189 const int* yorig_ovrf,
const llint* zorig,
const int* zorig_ovrf,
190 double orig_scale,
int natom);
192template <
typename Torig>
193void copyCoordinateXYZ(llint* xdest,
int* xdest_ovrf, llint* ydest,
int* ydest_ovrf, llint* zdest,
194 int* zdest_ovrf,
double dest_scale,
const Torig* xorig,
const Torig* yorig,
195 const Torig* zorig,
int natom);
197template <
typename Torig>
198void copyCoordinateXYZ(llint* xdest,
int* xdest_ovrf, llint* ydest,
int* ydest_ovrf, llint* zdest,
199 int* zdest_ovrf,
double dest_scale,
const Torig* xorig,
const Torig* yorig,
200 const Torig* zorig,
double orig_scale,
int natom);
202void copyCoordinateXYZ(llint* xdest,
int* xdest_ovrf, llint* ydest,
int* ydest_ovrf, llint* zdest,
203 int* zdest_ovrf,
double dest_scale,
const llint* xorig,
204 const int* xorig_ovrf,
const llint* yorig,
const int* yorig_ovrf,
205 const llint* zorig,
const int* zorig_ovrf,
double orig_scale,
int natom);
268 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
269 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
270 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
273 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
274 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
275 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
278 TrajectoryKind kind, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
279 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
280 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
283 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
284 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
285 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
288 CoordinateCycle orientation,
289 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
290 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
291 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
294 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
295 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
296 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
299 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
300 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
301 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
305 int frame_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
306 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
307 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
310 int orig_atom_start,
int index_orig, TrajectoryKind kind,
311 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
312 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
313 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
316 TrajectoryKind kind, CoordinateCycle orientation,
317 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
318 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
319 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
322 TrajectoryKind kind, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
323 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
324 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
327 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
328 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
329 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
332 int orig_atom_start,
int index_orig,
333 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
334 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
335 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
338 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
339 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
340 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
344 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
345 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
346 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
349 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
350 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
351 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
353void coordCopy(
PhaseSpace *destination, TrajectoryKind kind, CoordinateCycle orientation,
355 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
356 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
357 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
360 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
361 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
362 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
365 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
366 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
367 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
370 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
371 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
372 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
375 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
376 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
377 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
380void coordCopy(
PhaseSpace *destination, TrajectoryKind kind, CoordinateCycle orientation,
382 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
383 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
384 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
388 int frame_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
389 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
390 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
394 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
395 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
396 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
399 int index_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
400 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
401 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
404 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
405 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
406 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
409 int orig_atom_start,
int index_orig,
410 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
411 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
412 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
415 int index_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
416 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
417 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
419void coordCopy(
PhaseSpace *destination, TrajectoryKind kind, CoordinateCycle orientation,
421 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
422 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
423 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
426 int index_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
427 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
428 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
431 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
432 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
433 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
438 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
439 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
440 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
444 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
445 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
446 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
450 const TrajectoryKind kind,
451 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
452 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
453 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
457 HybridTargetLevel destination_tier, HybridTargetLevel origin_tier,
458 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
462 TrajectoryKind kind, CoordinateCycle orientation,
463 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
464 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
465 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
469 TrajectoryKind kind, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
470 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
471 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
475 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
476 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
477 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
479template <
typename Tdest,
typename Torig>
482 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
483 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
484 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
486template <
typename Tdest,
typename Torig>
489 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
490 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
491 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
497 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
498 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
499 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
504 HybridTargetLevel destination_tier, HybridTargetLevel origin_tier,
505 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
510 CoordinateCycle orientation,
511 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
512 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
513 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
518 TrajectoryKind kind, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
519 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
520 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
525 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
526 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
527 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
532 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
533 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
534 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
538 int index_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
539 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
540 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
544 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
545 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
546 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
550 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
551 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
552 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
556 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
557 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
558 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
562 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
563 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
564 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
568 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
569 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
570 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
573 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
574 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
575 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
578 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
579 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
580 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
583 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
584 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
585 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
588void coordCopy(
PsSynthesisWriter *destination,
int dest_atom_start,
int index_dest,
590 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
591 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
592 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
595void coordCopy(
PsSynthesisWriter *destination,
int dest_atom_start,
int index_dest,
597 HybridTargetLevel destination_tier, HybridTargetLevel origin_tier,
598 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
603 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
604 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
605 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
610 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
611 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
612 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
617 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
618 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
619 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
621void coordCopy(
PsSynthesisWriter *destination,
int dest_atom_start,
int index_dest,
623 int index_orig,
int natom,
624 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
625 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
626 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
628void coordCopy(
PsSynthesisWriter *destination,
int dest_atom_start,
int index_dest,
629 const CondensateReader &origin,
int orig_atom_start,
int index_orig,
int natom,
630 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
631 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
632 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
635 CoordinateCycle orientation,
const Condensate &origin,
int index_orig,
636 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
637 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
638 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
642 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
643 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
644 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
647 int index_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
648 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
649 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
651void coordCopy(
PsSynthesisWriter *destination,
int dest_atom_start,
int index_dest,
653 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
654 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
655 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
659 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
660 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
661 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
663void coordCopy(
CondensateWriter *destination,
int dest_atom_start,
int index_dest,
665 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
666 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
667 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
670 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
671 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
672 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
674void coordCopy(
CondensateWriter *destination,
int dest_atom_start,
int index_dest,
676 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
677 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
678 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
680void coordCopy(
CondensateWriter *destination,
int dest_atom_start,
int index_dest,
682 HybridTargetLevel origin_tier,
const GpuDetails &gpu = null_gpu,
683 HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
686 TrajectoryKind kind, CoordinateCycle orientation,
687 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
688 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
689 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
692 TrajectoryKind kind, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
693 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
694 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
697 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
698 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
699 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
702void coordCopy(
CondensateWriter *destination,
size_t dest_atom_start,
int index_dest,
704 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
705 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
706 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
710 size_t frame_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
711 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
712 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
714void coordCopy(
CondensateWriter *destination,
int dest_atom_start,
int index_dest,
716 TrajectoryKind kind, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
717 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
718 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
720void coordCopy(
CondensateWriter *destination,
int dest_atom_start,
int index_dest,
722 HybridTargetLevel destination_tier, HybridTargetLevel origin_tier,
723 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
726 int index_orig, TrajectoryKind kind, CoordinateCycle orientation,
727 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
728 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
729 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
732 int index_orig, TrajectoryKind kind,
733 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
734 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
735 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
738 int index_orig, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
739 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
740 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
742void coordCopy(
CondensateWriter *destination,
int dest_atom_start,
int index_dest,
743 const CondensateReader &origin,
int orig_atom_start,
int index_orig,
int natom,
744 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
745 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
746 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
748void coordCopy(
Condensate *destination,
int index_dest,
const Condensate &origin,
int index_orig,
749 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
750 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
751 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
755 const int2* system_pairs,
int copy_count,
756 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
757 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
758 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
760template <
typename Tdest,
typename Torig>
762 const std::vector<int2> &system_pairs,
763 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
764 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
765 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
767template <
typename Tdest,
typename Torig>
770 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
771 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
772 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
776 int copy_count, HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
777 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
778 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
780template <
typename Tdest>
782 TrajectoryKind kind, CoordinateCycle orientation,
783 const std::vector<int2> &system_pairs,
784 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
785 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
786 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
788template <
typename Tdest>
790 TrajectoryKind kind,
const std::vector<int2> &system_pairs,
791 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
792 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
793 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
795template <
typename Tdest>
797 const std::vector<int2> &system_pairs,
798 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
799 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
800 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
802template <
typename Tdest>
804 TrajectoryKind kind,
const CoordinateCycle orientation,
806 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
807 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
808 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
810template <
typename Tdest>
813 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
814 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
815 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
817template <
typename Tdest>
820 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
821 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
822 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
826 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
827 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
828 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
830template <
typename Tdest>
832 const std::vector<int2> &system_pairs,
833 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
834 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
835 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
837template <
typename Tdest>
840 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
841 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
842 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
846 const int2* system_pairs,
int copy_count,
847 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
848 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
849 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
851template <
typename Torig>
854 const std::vector<int2> &system_pairs,
855 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
856 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
857 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
859template <
typename Torig>
862 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
863 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
864 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
866template <
typename Torig>
868 const std::vector<int2> &system_pairs,
869 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
870 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
871 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
873template <
typename Torig>
874void coordCopy(
PhaseSpaceSynthesis *destination, TrajectoryKind kind, CoordinateCycle orientation,
876 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
877 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
878 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
880template <
typename Torig>
883 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
884 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
885 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
887template <
typename Torig>
890 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
891 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
892 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
895 const int2* system_pairs,
int copy_count,
896 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
897 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
898 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
901 const std::vector<int2> &system_pairs,
902 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
903 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
904 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
908 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
909 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
910 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
913 const int2* system_pairs,
int copy_count,
914 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
915 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
916 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
918void coordCopy(
PhaseSpaceSynthesis *destination, TrajectoryKind kind, CoordinateCycle orientation,
919 const Condensate &origin,
const std::vector<int2> &system_pairs,
920 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
921 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
922 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
925 const std::vector<int2> &system_pairs,
926 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
927 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
928 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
931 const std::vector<int2> &system_pairs,
932 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
933 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
934 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
936void coordCopy(
PhaseSpaceSynthesis *destination, TrajectoryKind kind, CoordinateCycle orientation,
938 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
939 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
940 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
944 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
945 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
946 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
950 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
951 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
952 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
955 size_t ct_orig,
const int2* system_pairs,
int copy_count,
956 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
957 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
958 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
960template <
typename Torig>
962 const std::vector<int2> &system_pairs,
963 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
964 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
965 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
967template <
typename Torig>
970 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
971 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
972 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
975 TrajectoryKind kind,
const int2* system_pairs,
int copy_count,
976 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
977 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
978 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
981 CoordinateCycle orientation,
const std::vector<int2> &system_pairs,
982 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
983 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
984 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
987 const std::vector<int2> &system_pairs,
988 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
989 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
990 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
993 const std::vector<int2> &system_pairs,
994 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
995 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
996 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
999 CoordinateCycle orientation,
const Hybrid<int2> &system_pairs,
1000 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
1001 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
1002 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
1006 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
1007 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
1008 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
1012 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
1013 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
1014 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
1017 const int2* system_pairs,
int copy_count,
1018 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
1019 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
1020 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
1023 const std::vector<int2> &system_pairs,
1024 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
1025 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
1026 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
1029 HybridTargetLevel destination_tier = HybridTargetLevel::HOST,
1030 HybridTargetLevel origin_tier = HybridTargetLevel::HOST,
1031 const GpuDetails &gpu = null_gpu, HpcKernelSync sync = HpcKernelSync::MEMORY_AUTO);
1051template <
typename Tdest>
1054 const int2* system_pairs,
int copy_count,
1055 HybridTargetLevel destination_tier, HybridTargetLevel origin_tier);
1060#include "coordinate_copy.tpp"
Pertinent aspects of one particular GPU. Condensing the data for each GPU in this manner helps to ens...
Definition gpu_details.h:27
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
Condense the data format, and possibly offer a reduced representation of coordinates,...
Definition condensate.h:146
A fixed-precision representation of coordinates, velocities, and forces to manage a set of simulation...
Definition phasespace_synthesis.h:325
Store the coordinates and box information for a frame, only. This abridged struct can serve when the ...
Definition coordinateframe.h:111
Store the coordinates and box information for a series of frames, in one of several levels of precisi...
Definition coordinate_series.h:137
An object to complement a topology and hold positions, velocities, and forces of all particles in a s...
Definition phasespace.h:141
Read-only abstract for the Condensate class. In most cases, the read-only abstract will be preferred ...
Definition condensate.h:102
Writeable abstract for the Condensate class, wherein coordinates (only) can be modified as a conseque...
Definition condensate.h:64
The reader for a PhaseSpaceSynthesis object, containing all of the data relevant for propagating dyna...
Definition phasespace_synthesis.h:199
The writer for a PhaseSpaceSynthesis object, containing all of the data relevant for propagating dyna...
Definition phasespace_synthesis.h:87
Collect C-style pointers for the elements of a read-only CoordinateFrame object.
Definition coordinateframe.h:65
Collect C-style pointers for the elements of a writable CoordinateFrame object.
Definition coordinateframe.h:30
Collect C-style pointers and critical constants for a read-only CoordinateSeries object.
Definition coordinate_series.h:96
Collect C-style pointers and critical constants for a writeable CoordinateSeries object.
Definition coordinate_series.h:66
Collect constants and pointers to the components of a read-only PhaseSpace object.
Definition phasespace.h:81
Collect constants and pointers to the components of a modifiable PhaseSpace object.
Definition phasespace.h:31