AQUAgpusph 5.0.4
Loading...
Searching...
No Matches
Aqua::CalcServer::LinkList Class Reference

Complex tool to perform the link-list based on an array. This tool include the following steps: More...

#include <LinkList.hpp>

Inheritance diagram for Aqua::CalcServer::LinkList:
Collaboration diagram for Aqua::CalcServer::LinkList:

Public Member Functions

 LinkList (const std::string tool_name, const std::string input="r", const std::string input_min="r_min", const std::string input_max="r_max", const std::string ihoc="ihoc", const std::string icell="icell", const std::string n_cells="n_cells", const std::string permutations="id_unsorted", const std::string inv_permutations="id_sorted", bool recompute_grid=true, const std::string sorter="radix-sort", bool once=false)
 ~LinkList ()
void setup ()
cl_event getUserEvent () const
 Get the user event generated by this tool to mark when ncells have been successfully computed and the required memory allocated.
Public Member Functions inherited from Aqua::CalcServer::Tool
 Tool (const std::string tool_name, bool once=false)
virtual ~Tool ()
virtual void execute ()
 Execute the tool measuring the elapsed time.
virtual Toolnext_tool ()
Toolprev_tool () const
void prev_tool (Tool *tool)
size_t allocatedMemory () const
unsigned int used_times () const
void addElapsedTime (float elapsed_time)
 Add new data to the average and squared elapsed times.
float elapsedTime (bool averaged=true) const
float elapsedTimeVariance () const
float elapsedTimeDeviation () const
virtual int scope_modifier () const
std::vector< InputOutput::Variable * > getInputDependencies () const
 Get the input depedencies of the tool.
std::vector< InputOutput::Variable * > getOutputDependencies () const
 Get the output depedencies of the tool.
std::tuple< std::vector< InputOutput::Variable * >, std::vector< InputOutput::Variable * > > getDependencies () const
 Get the depedencies of the tool.
cl_event getEvent () const
 Get the tool event.
void parent (Tool *tool)
 Set the tool parent.
Toolparent ()
 Get the tool parent.
Public Member Functions inherited from Aqua::CalcServer::Named
 Named (const std::string name)
 ~Named ()
void name (const std::string tool_name)
const std::string name () const
 Get the name.
Public Member Functions inherited from Aqua::CalcServer::Profiler
 Profiler ()
 ~Profiler ()
std::vector< Profile * > substages () const
 Get the substages.

Protected Member Functions

template<typename T>
void nCells ()
 Compute the number of cells.
void allocate ()
 Allocate the "ihoc" array.
void setVariables ()
 Update the changed variables.
cl_event _execute (const std::vector< cl_event > events)
template<>
void nCells ()
template<>
void nCells ()
Protected Member Functions inherited from Aqua::CalcServer::Tool
int id_in_pipeline () const
std::string varPrefix () const
 Produce a variable name prefix.
void next_tool (Tool *tool)
void allocatedMemory (size_t mem_size)
virtual cl_event _execute (const UNUSED_PARAM std::vector< cl_event > events)
void setDependencies (std::vector< std::string > inputs, std::vector< std::string > outputs)
 Set the depedencies of the tool.
void setDependencies (std::vector< InputOutput::Variable * > inputs, std::vector< InputOutput::Variable * > outputs)
 Set the depedencies of the tool.
void setDependencies (std::vector< std::string > vars)
 Set the depedencies of the tool.
void setInputDependencies (std::vector< std::string > vars)
 Set the reading depedencies of the tool.
void setInputDependencies (std::vector< InputOutput::Variable * > vars)
 Set the reading depedencies of the tool.
void setOutputDependencies (std::vector< std::string > vars)
 Set the writing depedencies of the tool.
void setOutputDependencies (std::vector< InputOutput::Variable * > vars)
 Set the writing depedencies of the tool.
void setDependencies (std::vector< InputOutput::Variable * > vars)
 Set the depedencies of the tool.
const std::vector< cl_event > getEvents (dep_events which=dep_events::all) const
 Get the list of events that this tool shall wait for.
Protected Member Functions inherited from Aqua::CalcServer::Profiler
void substages (std::vector< Profile * > instances)
 Set the tool substages.

Additional Inherited Members

Protected Types inherited from Aqua::CalcServer::Tool
enum  dep_events { in = 0x01 , out = 0x02 , all = 0x03 }
Static Protected Member Functions inherited from Aqua::CalcServer::Tool
static std::vector< cl_kernel > compile (const std::string source, const std::vector< std::string > names, const std::string flags="")
 Compile an OpenCL source code and generate the corresponding kernel.
static cl_kernel compile_kernel (const std::string source, const std::string kernel_name, const std::string flags="")
 Compile an OpenCL source code and generate the corresponding kernel.

Detailed Description

Complex tool to perform the link-list based on an array. This tool include the following steps:

  1. Minimum and maximum positions computations
    1. Number of cells calculation
    2. "ihoc" array allocation
    3. "ihoc" and "icell" calculations
    4. Radix sort of "icell", computing permutation array "id_sorted" and "id_unsorted" as well.
      Note
      Hardcoded versions of the files CalcServer/LinkList.cl.in and CalcServer/LinkList.hcl.in are internally included as a text array.
      Warning
      This tool is assuming that "support" and "h" variables remains constant

Constructor & Destructor Documentation

◆ LinkList()

Aqua::CalcServer::LinkList::LinkList ( const std::string tool_name,
const std::string input = "r",
const std::string input_min = "r_min",
const std::string input_max = "r_max",
const std::string ihoc = "ihoc",
const std::string icell = "icell",
const std::string n_cells = "n_cells",
const std::string permutations = "id_unsorted",
const std::string inv_permutations = "id_sorted",
bool recompute_grid = true,
const std::string sorter = "radix-sort",
bool once = false )

Constructor.

Parameters
tool_nameTool name.
inputInput array to be used as the particles positions.
input_minMinimum of the particles positions.
input_maxMaximum of the particles positions.
ihocHead of cells array.
icellCell of each particle.
n_cellsNumber of cells.
permutationsVariable where the permutations will be stored.
inv_permutationsVariable where the inverse permutations will be stored.
recompute_gridShould be input_min and input_max recomputed or readed from the variables.
sorterThe sorting tool, either "bitonic" or "radix-sort"
onceRun this tool just once. Useful to make initializations.
Note
ihoc array is marked as reallocatable with Aqua::InputOutput::ArrayVariable::reallocatable(), since it might need to be extended
Here is the call graph for this function:

◆ ~LinkList()

Aqua::CalcServer::LinkList::~LinkList ( )

Destructor

Member Function Documentation

◆ _execute()

cl_event Aqua::CalcServer::LinkList::_execute ( const std::vector< cl_event > events)
protected

Execute the tool

Parameters
eventsList of events that shall be waited before safe execution
Returns
OpenCL event to be waited before accessing the dependencies
Here is the call graph for this function:

◆ allocate()

void Aqua::CalcServer::LinkList::allocate ( )
protected

Allocate the "ihoc" array.

Note
This method is publicly available to make it accessible from an OpenCL callback
Here is the call graph for this function:

◆ getUserEvent()

cl_event Aqua::CalcServer::LinkList::getUserEvent ( ) const
inline

Get the user event generated by this tool to mark when ncells have been successfully computed and the required memory allocated.

Returns
The event

◆ nCells() [1/3]

template<>
void Aqua::CalcServer::LinkList::nCells ( )
protected
Here is the call graph for this function:

◆ nCells() [2/3]

template<>
void Aqua::CalcServer::LinkList::nCells ( )
protected
Here is the call graph for this function:

◆ nCells() [3/3]

template<typename T>
void Aqua::CalcServer::LinkList::nCells ( )
protected

Compute the number of cells.

Note
This method is publicly available to make it accessible from an OpenCL callback
Here is the call graph for this function:

◆ setup()

void Aqua::CalcServer::LinkList::setup ( )
virtual

Initialize the tool.

Reimplemented from Aqua::CalcServer::Tool.

Here is the call graph for this function:

◆ setVariables()

void Aqua::CalcServer::LinkList::setVariables ( )
protected

Update the changed variables.

Note
This method is publicly available to make it accessible from an OpenCL callback
Here is the call graph for this function:

The documentation for this class was generated from the following files: