![]() |
User Guide
|
Visitor for printing C++ code with OpenACC backend More...
Visitor for printing C++ code with OpenACC backend
Definition at line 30 of file codegen_acc_visitor.hpp.
#include <codegen_acc_visitor.hpp>
Protected Member Functions | |
std::string | backend_name () const override |
name of the code generation backend More... | |
void | print_backend_includes () override |
common includes : standard c++, coreneuron and backend specific More... | |
void | print_parallel_iteration_hint (BlockType type, const ast::Block *block) override |
ivdep like annotation for channel iterations More... | |
void | print_atomic_reduction_pragma () override |
atomic update pragma for reduction statements More... | |
void | print_memory_allocation_routine () const override |
memory allocation routine More... | |
void | print_abort_routine () const override |
abort routine More... | |
void | print_kernel_data_present_annotation_block_begin () override |
annotations like "acc enter data present(...)" for main kernel More... | |
void | print_kernel_data_present_annotation_block_end () override |
end of annotation like "acc enter data" More... | |
void | print_net_init_acc_serial_annotation_block_begin () override |
start of annotation "acc kernels" for net_init kernel More... | |
void | print_net_init_acc_serial_annotation_block_end () override |
end of annotation "acc kernels" for net_init kernel More... | |
void | print_nrn_cur_matrix_shadow_update () override |
update to matrix elements with/without shadow vectors More... | |
void | print_nrn_cur_matrix_shadow_reduction () override |
reduction to matrix elements from shadow vectors More... | |
void | print_fast_imem_calculation () override |
fast membrane current calculation More... | |
void | print_rhs_d_shadow_variables () override |
setup method for setting matrix shadow vectors More... | |
bool | nrn_cur_reduction_loop_required () override |
if reduction block in nrn_cur required More... | |
void | print_global_variable_device_update_annotation () override |
update global variable from host to the device More... | |
void | print_newtonspace_transfer_to_device () const override |
transfer newtonspace structure to device More... | |
void | print_instance_struct_transfer_routine_declarations () override |
declare helper functions for copying the instance struct to the device More... | |
void | print_instance_struct_transfer_routines (const std::vector< std::string > &ptr_members) override |
define helper functions for copying the instance struct to the device More... | |
void | print_instance_struct_copy_to_device () override |
call helper function for copying the instance struct to the device More... | |
void | print_instance_struct_delete_from_device () override |
call helper function that deletes the instance struct from the device More... | |
void | print_deriv_advance_flag_transfer_to_device () const override |
update derivimplicit advance flag on the gpu device More... | |
void | print_net_send_buf_count_update_to_host () const override |
update NetSendBuffer_t count from device to host More... | |
void | print_net_send_buf_update_to_host () const override |
update NetSendBuffer_t from device to host More... | |
void | print_net_send_buf_count_update_to_device () const override |
update NetSendBuffer_t count from host to device More... | |
void | print_dt_update_to_device () const override |
update dt from host to device More... | |
void | print_device_stream_wait () const override |
Print the code to synchronise/wait on stream specific to NrnThread. More... | |
void | print_device_atomic_capture_annotation () const override |
print atomic capture pragma More... | |
void | print_net_send_buffering_cnt_update () const override |
print atomic update of NetSendBuffer_t cnt More... | |
void | print_net_send_buffering_grow () override |
Replace default implementation by a no-op since the buffer cannot be grown up during gpu execution. More... | |
![]() | |
std::string | simulator_name () override |
Name of the simulator the code was generated for. More... | |
std::string | backend_name () const override |
Name of the code generation backend. More... | |
int | num_thread_objects () const noexcept |
Determine the number of threads to allocate. More... | |
bool | needs_v_unused () const override |
int | position_of_float_var (const std::string &name) const override |
Determine the position in the data array for a given float variable. More... | |
int | position_of_int_var (const std::string &name) const override |
Determine the position in the data array for a given int variable. More... | |
std::string | process_verbatim_token (const std::string &token) |
Process a token in a verbatim block for possible variable renaming. More... | |
virtual bool | is_constant_variable (const std::string &name) const |
Check if variable is qualified as constant. More... | |
virtual void | print_global_method_annotation () |
Print backend specific global method annotation. More... | |
bool | optimize_ion_variable_copies () const override |
Check if ion variable copies should be avoided. More... | |
void | print_function_prototypes () override |
Print function and procedures prototype declaration. More... | |
void | print_check_table_thread_function () |
Print check_table functions. More... | |
void | print_function_or_procedure (const ast::Block &node, const std::string &name, const std::unordered_set< CppObjectSpecifier > &specifiers={ CppObjectSpecifier::Inline}) override |
Print nmodl function or procedure (common code) More... | |
void | print_function_procedure_helper (const ast::Block &node) override |
Common helper function to help printing function or procedure blocks. More... | |
void | add_variable_tqitem (std::vector< IndexVariableInfo > &variables) override |
Add the variable tqitem during get_int_variables . More... | |
void | add_variable_point_process (std::vector< IndexVariableInfo > &variables) override |
Add the variable point_process during get_int_variables . More... | |
std::string | internal_method_arguments () override |
Arguments for functions that are defined and used internally. More... | |
ParamVector | internal_method_parameters () override |
Parameters for internally defined functions. More... | |
const std::string | external_method_arguments () noexcept override |
Arguments for external functions called from generated code. More... | |
const ParamVector | external_method_parameters (bool table=false) noexcept override |
Parameters for functions in generated code that are called back from external code. More... | |
std::string | nrn_thread_arguments () const override |
Arguments for "_threadargs_" macro in neuron implementation. More... | |
std::string | nrn_thread_internal_arguments () override |
Arguments for "_threadargs_" macro in neuron implementation. More... | |
std::pair< ParamVector, ParamVector > | function_table_parameters (const ast::FunctionTableBlock &node) override |
Parameters of the function itself "{}" and "table_{}" . More... | |
std::string | replace_if_verbatim_variable (std::string name) |
Replace commonly used verbatim variables. More... | |
std::string | process_verbatim_text (std::string const &text) |
Process a verbatim block for possible variable renaming. More... | |
std::string | register_mechanism_arguments () const override |
Arguments for register_mech or point_register_mech function. More... | |
void | append_conc_write_statements (std::vector< ShadowUseStatement > &statements, const Ion &ion, const std::string &concentration) override |
Generate Function call statement for nrn_wrote_conc. More... | |
void | print_first_pointer_var_index_getter () |
Print the getter method for index position of first pointer variable. More... | |
void | print_first_random_var_index_getter () |
Print the getter method for index position of first RANDOM variable. More... | |
void | print_num_variable_getter () |
Print the getter methods for float and integer variables count. More... | |
void | print_net_receive_arg_size_getter () |
Print the getter method for getting number of arguments for net_receive. More... | |
void | print_mech_type_getter () |
Print the getter method for returning mechtype. More... | |
void | print_memb_list_getter () |
Print the getter method for returning membrane list from NrnThread. More... | |
virtual std::string | namespace_name () override |
Name of "our" namespace. More... | |
void | print_thread_getters () |
Print the getter method for thread variables and ids. More... | |
std::string | float_variable_name (const SymbolType &symbol, bool use_instance) const override |
Determine the name of a float variable given its symbol. More... | |
std::string | int_variable_name (const IndexVariableInfo &symbol, const std::string &name, bool use_instance) const override |
Determine the name of an int variable given its symbol. More... | |
std::string | global_variable_name (const SymbolType &symbol, bool use_instance=true) const override |
Determine the variable name for a global variable given its symbol. More... | |
std::string | get_variable_name (const std::string &name, bool use_instance=true) const override |
Determine variable name in the structure of mechanism properties. More... | |
void | print_standard_includes () override |
Print standard C/C++ includes. More... | |
void | print_coreneuron_includes () |
Print includes from coreneuron. More... | |
void | print_sdlists_init (bool print_initializers) override |
void | print_mechanism_global_var_structure (bool print_initializers) override |
Print the structure that wraps all global variables used in the NMODL. More... | |
void | print_global_variables_for_hoc () override |
Print byte arrays that register scalar and vector variables for hoc interface. More... | |
void | print_mechanism_register () override |
Print the mechanism registration function. More... | |
void | print_thread_memory_callbacks () |
Print thread related memory allocation and deallocation callbacks. More... | |
void | print_ion_var_structure () |
Print structure of ion variables used for local copies. More... | |
virtual void | print_ion_var_constructor (const std::vector< std::string > &members) |
Print constructor of ion variables. More... | |
void | print_ion_variable () override |
Print the ion variable struct. More... | |
void | print_setup_range_variable () |
Print the function that initialize range variable with different data type. More... | |
std::string | get_range_var_float_type (const SymbolType &symbol) |
Returns floating point type for given range variable symbol. More... | |
void | print_initial_block (const ast::InitialBlock *node) |
Print initial block statements. More... | |
virtual void | print_global_function_common_code (BlockType type, const std::string &function_name="") override |
Print common code for global functions like nrn_init, nrn_cur and nrn_state. More... | |
void | print_nrn_init (bool skip_init_check=true) |
Print the nrn_init function definition. More... | |
virtual void | print_before_after_block (const ast::Block *node, size_t block_id) |
Print NMODL before / after block in target backend code. More... | |
void | print_nrn_constructor () override |
Print nrn_constructor function definition. More... | |
void | print_nrn_destructor () override |
Print nrn_destructor function definition. More... | |
void | print_nrn_alloc () override |
Print nrn_alloc function definition. More... | |
void | print_watch_activate () |
Print watch activate function. More... | |
void | print_watch_check () |
Print watch activate function. More... | |
void | print_net_receive_common_code (const ast::Block &node, bool need_mech_inst=true) |
Print the common code section for net receive related methods. More... | |
void | print_net_send_call (const ast::FunctionCall &node) override |
Print call to net_send . More... | |
void | print_net_move_call (const ast::FunctionCall &node) override |
Print call to net_move. More... | |
void | print_net_event_call (const ast::FunctionCall &node) override |
Print call to net_event. More... | |
void | print_function_table_call (const ast::FunctionCall &node) override |
Print special code when calling FUNCTION_TABLEs. More... | |
void | print_net_init () |
Print initial block in the net receive block. More... | |
void | print_send_event_move () |
Print send event move block used in net receive as well as watch. More... | |
virtual std::string | net_receive_buffering_declaration () |
Generate the target backend code for the net_receive_buffering function delcaration. More... | |
virtual void | print_get_memb_list () |
Print the target backend code for defining and checking a local Memb_list variable. More... | |
virtual void | print_net_receive_loop_begin () |
Print the code for the main net_receive loop. More... | |
virtual void | print_net_receive_loop_end () |
Print the code for closing the main net_receive loop. More... | |
void | print_net_receive_buffering (bool need_mech_inst=true) |
Print kernel for buffering net_receive events. More... | |
void | print_net_send_buffering () |
Print kernel for buffering net_send events. More... | |
void | print_net_receive_kernel () |
Print net_receive kernel function definition. More... | |
void | print_net_receive () |
Print net_receive function definition. More... | |
void | print_derivimplicit_kernel (const ast::Block &block) |
Print derivative kernel when derivimplicit method is used. More... | |
void | print_nrn_state () override |
Print nrn_state / state update function definition. More... | |
void | print_nrn_current (const ast::BreakpointBlock &node) override |
Print the nrn_current kernel. More... | |
void | print_nrn_cur_conductance_kernel (const ast::BreakpointBlock &node) override |
Print the nrn_cur kernel with NMODL conductance keyword provisions. More... | |
void | print_nrn_cur_non_conductance_kernel () override |
Print the nrn_cur kernel without NMODL conductance keyword provisions. More... | |
void | print_nrn_cur_kernel (const ast::BreakpointBlock &node) override |
Print main body of nrn_cur function. More... | |
void | print_fast_imem_calculation () override |
Print fast membrane current calculation code. More... | |
void | print_nrn_cur () override |
Print nrn_cur / current update function definition. More... | |
void | print_headers_include () override |
Print all includes. More... | |
void | print_common_getters () |
Print common getters. More... | |
void | print_data_structures (bool print_initializers) override |
Print all classes. More... | |
void | print_v_unused () const override |
Set v_unused (voltage) for NRN_PRCELLSTATE feature. More... | |
void | print_g_unused () const override |
Set g_unused (conductance) for NRN_PRCELLSTATE feature. More... | |
void | print_compute_functions () override |
Print all compute functions for every backend. More... | |
void | print_codegen_routines () override |
Print entry point to code generation. More... | |
void | visit_derivimplicit_callback (const ast::DerivimplicitCallback &node) override |
visit node of type ast::DerivimplicitCallback More... | |
void | visit_for_netcon (const ast::ForNetcon &node) override |
visit node of type ast::ForNetcon More... | |
void | visit_verbatim (const ast::Verbatim &node) override |
visit node of type ast::Verbatim More... | |
void | visit_watch_statement (const ast::WatchStatement &node) override |
visit node of type ast::WatchStatement More... | |
void | visit_protect_statement (const ast::ProtectStatement &node) override |
visit node of type ast::ProtectStatement More... | |
ParamVector | functor_params () override |
The parameters of the Newton solver "functor". More... | |
![]() | |
std::string | nmodl_version () const noexcept |
Return Nmodl language version. More... | |
std::string | instance_struct () const |
Name of structure that wraps range variables. More... | |
std::string | node_data_struct () const |
Name of structure that wraps node variables. More... | |
std::string | thread_variables_struct () const |
std::string | global_struct () const |
Name of structure that wraps global variables. More... | |
std::string | global_struct_instance () const |
Name of the (host-only) global instance of global_struct More... | |
const char * | local_var_type () const noexcept |
Data type for the local variables. More... | |
const char * | default_float_data_type () const noexcept |
Default data type for floating point elements. More... | |
const std::string & | float_data_type () const noexcept |
Data type for floating point elements specified on command line. More... | |
const char * | default_int_data_type () const noexcept |
Default data type for integer (offset) elements. More... | |
const char * | operator_for_rhs () const noexcept |
Operator for rhs vector update (matrix update) More... | |
const char * | operator_for_d () const noexcept |
Operator for diagonal vector update (matrix update) More... | |
std::string | get_channel_info_var_name () const noexcept |
Name of channel info variable. More... | |
bool | ion_variable_struct_required () const |
Check if a structure for ion variables is required. More... | |
template<typename T > | |
bool | has_parameter_of_name (const T &node, const std::string &name) |
Check if function or procedure node has parameter with given name. More... | |
bool | net_send_buffer_required () const noexcept |
Check if net_send_buffer is required. More... | |
bool | net_receive_buffering_required () const noexcept |
Check if net receive/send buffering kernels required. More... | |
bool | nrn_state_required () const noexcept |
Check if nrn_state function is required. More... | |
bool | nrn_cur_required () const noexcept |
Check if nrn_cur function is required. More... | |
bool | net_receive_required () const noexcept |
Check if net_receive function is required. More... | |
bool | range_variable_setup_required () const noexcept |
Check if setup_range_variable function is required. More... | |
bool | net_receive_exist () const noexcept |
Check if net_receive node exist. More... | |
bool | breakpoint_exist () const noexcept |
Check if breakpoint node exist. More... | |
bool | defined_method (const std::string &name) const |
Check if given method is defined in this model. More... | |
bool | is_net_send (const std::string &name) const noexcept |
Checks if given function name is net_send . More... | |
bool | is_nrn_pointing (const std::string &name) const noexcept |
bool | is_net_move (const std::string &name) const noexcept |
Checks if given function name is net_move . More... | |
bool | is_net_event (const std::string &name) const noexcept |
Checks if given function name is net_event . More... | |
bool | is_function_table_call (const std::string &name) const |
int | float_variables_size () const |
Number of float variables in the model. More... | |
int | int_variables_size () const |
Number of integer variables in the model. More... | |
std::string | format_double_string (const std::string &value) |
Convert a given double value to its string representation. More... | |
std::string | format_float_string (const std::string &value) |
Convert a given float value to its string representation. More... | |
void | update_index_semantics () |
populate all index semantics needed for registration with coreneuron More... | |
std::vector< SymbolType > | get_float_variables () const |
Determine all float variables required during code generation. More... | |
std::vector< IndexVariableInfo > | get_int_variables () |
Determine all int variables required during code generation. More... | |
std::vector< std::string > | ion_read_statements (BlockType type) const |
For a given output block type, return statements for all read ion variables. More... | |
std::vector< std::string > | ion_read_statements_optimized (BlockType type) const |
For a given output block type, return minimal statements for all read ion variables. More... | |
std::vector< ShadowUseStatement > | ion_write_statements (BlockType type) |
For a given output block type, return statements for writing back ion variables. More... | |
std::string | process_shadow_update_statement (const ShadowUseStatement &statement, BlockType type) |
Process shadow update statement. More... | |
std::string | breakpoint_current (std::string current) const |
Determine the variable name for the "current" used in breakpoint block taking into account intermediate code transformations. More... | |
virtual void | print_global_var_struct_decl () |
Instantiate global var instance. More... | |
void | print_statement_block (const ast::StatementBlock &node, bool open_brace=true, bool close_brace=true) |
Print any statement block in nmodl with option to (not) print braces. More... | |
virtual void | print_function_call (const ast::FunctionCall &node) |
Print call to internal or external function. More... | |
virtual void | print_nrn_pointing (const ast::FunctionCall &node) |
Print nrn_pointing . More... | |
void | print_procedure (const ast::ProcedureBlock &node) |
Print NMODL procedure in target backend code. More... | |
void | print_function (const ast::FunctionBlock &node) |
Print NMODL function in target backend code. More... | |
void | print_function_tables (const ast::FunctionTableBlock &node) |
Print the internal function for FUNCTION_TABLES. More... | |
bool | is_functor_const (const ast::StatementBlock &variable_block, const ast::StatementBlock &functor_block) |
Checks whether the functor_block generated by sympy solver modifies any variable outside its scope. More... | |
void | print_functor_definition (const ast::EigenNewtonSolverBlock &node) |
Based on the EigenNewtonSolverBlock passed print the definition needed for its functor. More... | |
void | print_functors_definitions () |
Print all Newton functor structs. More... | |
void | print_eigen_linear_solver (const std::string &float_type, int N) |
Print linear solver using Eigen. More... | |
template<typename T > | |
void | print_vector_elements (const std::vector< T > &elements, const std::string &separator, const std::string &prefix="") |
Print the items in a vector as a list. More... | |
std::string | add_escape_quote (const std::string &text) const |
Add quotes to string to be output. More... | |
std::string | method_name (const std::string &name) const |
Constructs the name of a function or procedure. More... | |
std::tuple< bool, int > | check_if_var_is_array (const std::string &name) |
Check if the given name exist in the symbol. More... | |
SymbolType | make_symbol (const std::string &name) const |
Creates a temporary symbol. More... | |
void | print_namespace_start () |
Prints the start of the simulator namespace. More... | |
void | print_namespace_stop () |
Prints the end of the simulator namespace. More... | |
void | print_using_namespace () |
Prints f"using namespace {namespace_name()}". More... | |
std::string | update_if_ion_variable_name (const std::string &name) const |
Determine the updated name if the ion variable has been optimized. More... | |
std::string | table_update_function_name (const std::string &block_name) const |
The name of the function that updates the table value if the parameters changed. More... | |
int | get_int_variable_index (const std::string &var_name) |
void | print_backend_info () |
Print top file header printed in generated code. More... | |
virtual void | print_global_var_struct_assertions () const |
Print static assertions about the global variable struct. More... | |
virtual void | print_global_struct_function_table_ptrs () |
Print the entries of for FUNCTION_TABLEs in the global struct. More... | |
void | print_prcellstate_macros () const |
Print declaration of macro NRN_PRCELLSTATE for debugging. More... | |
void | print_mechanism_info () |
Print backend code for byte array that has mechanism information (to be registered with NEURON/CoreNEURON) More... | |
void | print_nmodl_constants () |
Print the nmodl constants used in backend code. More... | |
void | print_top_verbatim_blocks () |
Print top level (global scope) verbatim blocks. More... | |
void | visit_binary_expression (const ast::BinaryExpression &node) override |
visit node of type ast::BinaryExpression More... | |
void | visit_binary_operator (const ast::BinaryOperator &node) override |
visit node of type ast::BinaryOperator More... | |
void | visit_boolean (const ast::Boolean &node) override |
visit node of type ast::Boolean More... | |
void | visit_double (const ast::Double &node) override |
visit node of type ast::Double More... | |
void | visit_else_if_statement (const ast::ElseIfStatement &node) override |
visit node of type ast::ElseIfStatement More... | |
void | visit_else_statement (const ast::ElseStatement &node) override |
visit node of type ast::ElseStatement More... | |
void | visit_float (const ast::Float &node) override |
visit node of type ast::Float More... | |
void | visit_from_statement (const ast::FromStatement &node) override |
visit node of type ast::FromStatement More... | |
void | visit_function_call (const ast::FunctionCall &node) override |
visit node of type ast::FunctionCall More... | |
void | visit_if_statement (const ast::IfStatement &node) override |
visit node of type ast::IfStatement More... | |
void | visit_indexed_name (const ast::IndexedName &node) override |
visit node of type ast::IndexedName More... | |
void | visit_integer (const ast::Integer &node) override |
visit node of type ast::Integer More... | |
void | visit_local_list_statement (const ast::LocalListStatement &node) override |
visit node of type ast::LocalListStatement More... | |
void | visit_name (const ast::Name &node) override |
visit node of type ast::Name More... | |
void | visit_paren_expression (const ast::ParenExpression &node) override |
visit node of type ast::ParenExpression More... | |
void | visit_prime_name (const ast::PrimeName &node) override |
visit node of type ast::PrimeName More... | |
void | visit_statement_block (const ast::StatementBlock &node) override |
void | visit_string (const ast::String &node) override |
visit node of type ast::String More... | |
void | visit_unary_operator (const ast::UnaryOperator &node) override |
visit node of type ast::UnaryOperator More... | |
void | visit_unit (const ast::Unit &node) override |
visit node of type ast::Unit More... | |
void | visit_var_name (const ast::VarName &node) override |
void | visit_while_statement (const ast::WhileStatement &node) override |
visit node of type ast::WhileStatement More... | |
void | visit_update_dt (const ast::UpdateDt &node) override |
visit node of type ast::UpdateDt More... | |
void | visit_mutex_lock (const ast::MutexLock &node) override |
visit node of type ast::MutexLock More... | |
void | visit_mutex_unlock (const ast::MutexUnlock &node) override |
visit node of type ast::MutexUnlock More... | |
void | visit_solution_expression (const ast::SolutionExpression &node) override |
visit node of type ast::SolutionExpression More... | |
void | visit_eigen_newton_solver_block (const ast::EigenNewtonSolverBlock &node) override |
visit node of type ast::EigenNewtonSolverBlock More... | |
void | visit_eigen_linear_solver_block (const ast::EigenLinearSolverBlock &node) override |
visit node of type ast::EigenLinearSolverBlock More... | |
std::string | compute_method_name (BlockType type) const |
virtual void | setup (const ast::Program &node) |
void | print_table_replacement_function (const ast::Block &) |
Print replacement function for function or procedure using table. More... | |
void | print_table_check_function (const ast::Block &) |
Print check_function() for functions or procedure using table. More... | |
const ast::TableStatement * | get_table_statement (const ast::Block &) |
std::string | get_object_specifiers (const std::unordered_set< CppObjectSpecifier > &) |
template<typename T > | |
void | print_function_declaration (const T &node, const std::string &name, const std::unordered_set< CppObjectSpecifier > &={CppObjectSpecifier::Static, CppObjectSpecifier::Inline}) |
Print prototype declarations of functions or procedures. More... | |
void | print_rename_state_vars () const |
Additional Inherited Members | |
![]() | |
void | print_instance_variable_setup () |
Print the function that initialize instance structure. More... | |
void | print_mechanism_range_var_structure (bool print_initializers) override |
Print the structure that wraps all range and int variables required for the NMODL. More... | |
CodegenCppVisitor (std::string mod_filename, std::ostream &stream, std::string float_type, const bool optimize_ionvar_copies, std::unique_ptr< nmodl::utils::Blame > blame=nullptr) | |
Constructs the C++ code generator visitor. More... | |
CodegenCppVisitor (std::string mod_filename, std::ostream &stream, std::string float_type, const bool optimize_ionvar_copies, const bool enable_cvode, std::unique_ptr< nmodl::utils::Blame > blame=nullptr) | |
![]() | |
CodegenCppVisitor (std::string mod_filename, std::ostream &stream, std::string float_type, const bool optimize_ionvar_copies, std::unique_ptr< nmodl::utils::Blame > blame=nullptr) | |
Constructs the C++ code generator visitor. More... | |
CodegenCppVisitor (std::string mod_filename, std::ostream &stream, std::string float_type, const bool optimize_ionvar_copies, const bool enable_cvode, std::unique_ptr< nmodl::utils::Blame > blame=nullptr) | |
void | visit_program (const ast::Program &program) override |
Main and only member function to call after creating an instance of this class. More... | |
![]() | |
void | visit_node (const ast::Node &node) override |
visit node of type ast::Node More... | |
void | visit_statement (const ast::Statement &node) override |
visit node of type ast::Statement More... | |
void | visit_expression (const ast::Expression &node) override |
visit node of type ast::Expression More... | |
void | visit_block (const ast::Block &node) override |
visit node of type ast::Block More... | |
void | visit_identifier (const ast::Identifier &node) override |
visit node of type ast::Identifier More... | |
void | visit_number (const ast::Number &node) override |
visit node of type ast::Number More... | |
void | visit_string (const ast::String &node) override |
visit node of type ast::String More... | |
void | visit_integer (const ast::Integer &node) override |
visit node of type ast::Integer More... | |
void | visit_float (const ast::Float &node) override |
visit node of type ast::Float More... | |
void | visit_double (const ast::Double &node) override |
visit node of type ast::Double More... | |
void | visit_boolean (const ast::Boolean &node) override |
visit node of type ast::Boolean More... | |
void | visit_name (const ast::Name &node) override |
visit node of type ast::Name More... | |
void | visit_prime_name (const ast::PrimeName &node) override |
visit node of type ast::PrimeName More... | |
void | visit_indexed_name (const ast::IndexedName &node) override |
visit node of type ast::IndexedName More... | |
void | visit_var_name (const ast::VarName &node) override |
visit node of type ast::VarName More... | |
void | visit_argument (const ast::Argument &node) override |
visit node of type ast::Argument More... | |
void | visit_react_var_name (const ast::ReactVarName &node) override |
visit node of type ast::ReactVarName More... | |
void | visit_read_ion_var (const ast::ReadIonVar &node) override |
visit node of type ast::ReadIonVar More... | |
void | visit_write_ion_var (const ast::WriteIonVar &node) override |
visit node of type ast::WriteIonVar More... | |
void | visit_nonspecific_cur_var (const ast::NonspecificCurVar &node) override |
visit node of type ast::NonspecificCurVar More... | |
void | visit_electrode_cur_var (const ast::ElectrodeCurVar &node) override |
visit node of type ast::ElectrodeCurVar More... | |
void | visit_range_var (const ast::RangeVar &node) override |
visit node of type ast::RangeVar More... | |
void | visit_global_var (const ast::GlobalVar &node) override |
visit node of type ast::GlobalVar More... | |
void | visit_pointer_var (const ast::PointerVar &node) override |
visit node of type ast::PointerVar More... | |
void | visit_random_var (const ast::RandomVar &node) override |
visit node of type ast::RandomVar More... | |
void | visit_bbcore_pointer_var (const ast::BbcorePointerVar &node) override |
visit node of type ast::BbcorePointerVar More... | |
void | visit_extern_var (const ast::ExternVar &node) override |
visit node of type ast::ExternVar More... | |
void | visit_param_block (const ast::ParamBlock &node) override |
visit node of type ast::ParamBlock More... | |
void | visit_independent_block (const ast::IndependentBlock &node) override |
visit node of type ast::IndependentBlock More... | |
void | visit_assigned_block (const ast::AssignedBlock &node) override |
visit node of type ast::AssignedBlock More... | |
void | visit_state_block (const ast::StateBlock &node) override |
visit node of type ast::StateBlock More... | |
void | visit_initial_block (const ast::InitialBlock &node) override |
visit node of type ast::InitialBlock More... | |
void | visit_constructor_block (const ast::ConstructorBlock &node) override |
visit node of type ast::ConstructorBlock More... | |
void | visit_destructor_block (const ast::DestructorBlock &node) override |
visit node of type ast::DestructorBlock More... | |
void | visit_statement_block (const ast::StatementBlock &node) override |
visit node of type ast::StatementBlock More... | |
void | visit_derivative_block (const ast::DerivativeBlock &node) override |
visit node of type ast::DerivativeBlock More... | |
void | visit_linear_block (const ast::LinearBlock &node) override |
visit node of type ast::LinearBlock More... | |
void | visit_non_linear_block (const ast::NonLinearBlock &node) override |
visit node of type ast::NonLinearBlock More... | |
void | visit_discrete_block (const ast::DiscreteBlock &node) override |
visit node of type ast::DiscreteBlock More... | |
void | visit_function_table_block (const ast::FunctionTableBlock &node) override |
visit node of type ast::FunctionTableBlock More... | |
void | visit_function_block (const ast::FunctionBlock &node) override |
visit node of type ast::FunctionBlock More... | |
void | visit_procedure_block (const ast::ProcedureBlock &node) override |
visit node of type ast::ProcedureBlock More... | |
void | visit_net_receive_block (const ast::NetReceiveBlock &node) override |
visit node of type ast::NetReceiveBlock More... | |
void | visit_solve_block (const ast::SolveBlock &node) override |
visit node of type ast::SolveBlock More... | |
void | visit_breakpoint_block (const ast::BreakpointBlock &node) override |
visit node of type ast::BreakpointBlock More... | |
void | visit_before_block (const ast::BeforeBlock &node) override |
visit node of type ast::BeforeBlock More... | |
void | visit_after_block (const ast::AfterBlock &node) override |
visit node of type ast::AfterBlock More... | |
void | visit_ba_block (const ast::BABlock &node) override |
visit node of type ast::BABlock More... | |
void | visit_for_netcon (const ast::ForNetcon &node) override |
visit node of type ast::ForNetcon More... | |
void | visit_kinetic_block (const ast::KineticBlock &node) override |
visit node of type ast::KineticBlock More... | |
void | visit_unit_block (const ast::UnitBlock &node) override |
visit node of type ast::UnitBlock More... | |
void | visit_constant_block (const ast::ConstantBlock &node) override |
visit node of type ast::ConstantBlock More... | |
void | visit_neuron_block (const ast::NeuronBlock &node) override |
visit node of type ast::NeuronBlock More... | |
void | visit_unit (const ast::Unit &node) override |
visit node of type ast::Unit More... | |
void | visit_double_unit (const ast::DoubleUnit &node) override |
visit node of type ast::DoubleUnit More... | |
void | visit_local_var (const ast::LocalVar &node) override |
visit node of type ast::LocalVar More... | |
void | visit_limits (const ast::Limits &node) override |
visit node of type ast::Limits More... | |
void | visit_number_range (const ast::NumberRange &node) override |
visit node of type ast::NumberRange More... | |
void | visit_constant_var (const ast::ConstantVar &node) override |
visit node of type ast::ConstantVar More... | |
void | visit_binary_operator (const ast::BinaryOperator &node) override |
visit node of type ast::BinaryOperator More... | |
void | visit_unary_operator (const ast::UnaryOperator &node) override |
visit node of type ast::UnaryOperator More... | |
void | visit_reaction_operator (const ast::ReactionOperator &node) override |
visit node of type ast::ReactionOperator More... | |
void | visit_paren_expression (const ast::ParenExpression &node) override |
visit node of type ast::ParenExpression More... | |
void | visit_binary_expression (const ast::BinaryExpression &node) override |
visit node of type ast::BinaryExpression More... | |
void | visit_diff_eq_expression (const ast::DiffEqExpression &node) override |
visit node of type ast::DiffEqExpression More... | |
void | visit_unary_expression (const ast::UnaryExpression &node) override |
visit node of type ast::UnaryExpression More... | |
void | visit_non_lin_equation (const ast::NonLinEquation &node) override |
visit node of type ast::NonLinEquation More... | |
void | visit_lin_equation (const ast::LinEquation &node) override |
visit node of type ast::LinEquation More... | |
void | visit_function_call (const ast::FunctionCall &node) override |
visit node of type ast::FunctionCall More... | |
void | visit_watch (const ast::Watch &node) override |
visit node of type ast::Watch More... | |
void | visit_ba_block_type (const ast::BABlockType &node) override |
visit node of type ast::BABlockType More... | |
void | visit_unit_def (const ast::UnitDef &node) override |
visit node of type ast::UnitDef More... | |
void | visit_factor_def (const ast::FactorDef &node) override |
visit node of type ast::FactorDef More... | |
void | visit_valence (const ast::Valence &node) override |
visit node of type ast::Valence More... | |
void | visit_unit_state (const ast::UnitState &node) override |
visit node of type ast::UnitState More... | |
void | visit_local_list_statement (const ast::LocalListStatement &node) override |
visit node of type ast::LocalListStatement More... | |
void | visit_model (const ast::Model &node) override |
visit node of type ast::Model More... | |
void | visit_define (const ast::Define &node) override |
visit node of type ast::Define More... | |
void | visit_include (const ast::Include &node) override |
visit node of type ast::Include More... | |
void | visit_param_assign (const ast::ParamAssign &node) override |
visit node of type ast::ParamAssign More... | |
void | visit_assigned_definition (const ast::AssignedDefinition &node) override |
visit node of type ast::AssignedDefinition More... | |
void | visit_conductance_hint (const ast::ConductanceHint &node) override |
visit node of type ast::ConductanceHint More... | |
void | visit_expression_statement (const ast::ExpressionStatement &node) override |
visit node of type ast::ExpressionStatement More... | |
void | visit_protect_statement (const ast::ProtectStatement &node) override |
visit node of type ast::ProtectStatement More... | |
void | visit_from_statement (const ast::FromStatement &node) override |
visit node of type ast::FromStatement More... | |
void | visit_while_statement (const ast::WhileStatement &node) override |
visit node of type ast::WhileStatement More... | |
void | visit_if_statement (const ast::IfStatement &node) override |
visit node of type ast::IfStatement More... | |
void | visit_else_if_statement (const ast::ElseIfStatement &node) override |
visit node of type ast::ElseIfStatement More... | |
void | visit_else_statement (const ast::ElseStatement &node) override |
visit node of type ast::ElseStatement More... | |
void | visit_watch_statement (const ast::WatchStatement &node) override |
visit node of type ast::WatchStatement More... | |
void | visit_mutex_lock (const ast::MutexLock &node) override |
visit node of type ast::MutexLock More... | |
void | visit_mutex_unlock (const ast::MutexUnlock &node) override |
visit node of type ast::MutexUnlock More... | |
void | visit_conserve (const ast::Conserve &node) override |
visit node of type ast::Conserve More... | |
void | visit_compartment (const ast::Compartment &node) override |
visit node of type ast::Compartment More... | |
void | visit_lon_diffuse (const ast::LonDiffuse &node) override |
visit node of type ast::LonDiffuse More... | |
void | visit_reaction_statement (const ast::ReactionStatement &node) override |
visit node of type ast::ReactionStatement More... | |
void | visit_lag_statement (const ast::LagStatement &node) override |
visit node of type ast::LagStatement More... | |
void | visit_constant_statement (const ast::ConstantStatement &node) override |
visit node of type ast::ConstantStatement More... | |
void | visit_table_statement (const ast::TableStatement &node) override |
visit node of type ast::TableStatement More... | |
void | visit_suffix (const ast::Suffix &node) override |
visit node of type ast::Suffix More... | |
void | visit_useion (const ast::Useion &node) override |
visit node of type ast::Useion More... | |
void | visit_nonspecific (const ast::Nonspecific &node) override |
visit node of type ast::Nonspecific More... | |
void | visit_electrode_current (const ast::ElectrodeCurrent &node) override |
visit node of type ast::ElectrodeCurrent More... | |
void | visit_range (const ast::Range &node) override |
visit node of type ast::Range More... | |
void | visit_global (const ast::Global &node) override |
visit node of type ast::Global More... | |
void | visit_random_var_list (const ast::RandomVarList &node) override |
visit node of type ast::RandomVarList More... | |
void | visit_pointer (const ast::Pointer &node) override |
visit node of type ast::Pointer More... | |
void | visit_bbcore_pointer (const ast::BbcorePointer &node) override |
visit node of type ast::BbcorePointer More... | |
void | visit_external (const ast::External &node) override |
visit node of type ast::External More... | |
void | visit_thread_safe (const ast::ThreadSafe &node) override |
visit node of type ast::ThreadSafe More... | |
void | visit_verbatim (const ast::Verbatim &node) override |
visit node of type ast::Verbatim More... | |
void | visit_line_comment (const ast::LineComment &node) override |
visit node of type ast::LineComment More... | |
void | visit_block_comment (const ast::BlockComment &node) override |
visit node of type ast::BlockComment More... | |
void | visit_ontology_statement (const ast::OntologyStatement &node) override |
visit node of type ast::OntologyStatement More... | |
void | visit_program (const ast::Program &node) override |
visit node of type ast::Program More... | |
void | visit_nrn_state_block (const ast::NrnStateBlock &node) override |
visit node of type ast::NrnStateBlock More... | |
void | visit_eigen_newton_solver_block (const ast::EigenNewtonSolverBlock &node) override |
visit node of type ast::EigenNewtonSolverBlock More... | |
void | visit_eigen_linear_solver_block (const ast::EigenLinearSolverBlock &node) override |
visit node of type ast::EigenLinearSolverBlock More... | |
void | visit_cvode_block (const ast::CvodeBlock &node) override |
visit node of type ast::CvodeBlock More... | |
void | visit_longitudinal_diffusion_block (const ast::LongitudinalDiffusionBlock &node) override |
visit node of type ast::LongitudinalDiffusionBlock More... | |
void | visit_wrapped_expression (const ast::WrappedExpression &node) override |
visit node of type ast::WrappedExpression More... | |
void | visit_derivimplicit_callback (const ast::DerivimplicitCallback &node) override |
visit node of type ast::DerivimplicitCallback More... | |
void | visit_solution_expression (const ast::SolutionExpression &node) override |
visit node of type ast::SolutionExpression More... | |
void | visit_update_dt (const ast::UpdateDt &node) override |
visit node of type ast::UpdateDt More... | |
![]() | |
virtual | ~ConstVisitor ()=default |
![]() | |
using | SymbolType = std::shared_ptr< symtab::Symbol > |
using | ParamVector = std::vector< std::tuple< std::string, std::string, std::string, std::string > > |
A vector of parameters represented by a 4-tuple of strings: More... | |
![]() | |
static bool | need_semicolon (const ast::Statement &node) |
Check if a semicolon is required at the end of given statement. More... | |
static std::string | get_parameter_str (const ParamVector ¶ms) |
Generate the string representing the procedure parameter declaration. More... | |
static std::string | get_arg_str (const ParamVector ¶ms) |
Generate the string representing the parameters in a function call. More... | |
static bool | statement_to_skip (const ast::Statement &node) |
Check if given statement should be skipped during code generation. More... | |
static std::pair< std::string, std::string > | read_ion_variable_name (const std::string &name) |
Return ion variable name and corresponding ion read variable name. More... | |
static std::pair< std::string, std::string > | write_ion_variable_name (const std::string &name) |
Return ion variable name and corresponding ion write variable name. More... | |
![]() | |
std::unique_ptr< CodePrinter > | printer |
Code printer object for target (C++) More... | |
std::string | mod_filename |
Name of mod file (without .mod suffix) More... | |
std::string | float_type = codegen::naming::DEFAULT_FLOAT_TYPE |
Data type of floating point variables. More... | |
bool | optimize_ionvar_copies = true |
Flag to indicate if visitor should avoid ion variable copies. More... | |
codegen::CodegenInfo | info |
All ast information for code generation. More... | |
symtab::SymbolTable * | program_symtab = nullptr |
Symbol table for the program. More... | |
std::vector< SymbolType > | codegen_float_variables |
All float variables for the model. More... | |
std::vector< IndexVariableInfo > | codegen_int_variables |
All int variables for the model. More... | |
std::vector< SymbolType > | codegen_global_variables |
All global variables for the model. More... | |
bool | enable_variable_name_lookup = true |
Variable name should be converted to instance name (but not for function arguments) More... | |
bool | printing_net_receive = false |
true if currently net_receive block being printed More... | |
bool | printing_net_init = false |
true if currently initial block of net_receive being printed More... | |
bool | printing_top_verbatim_blocks = false |
true if currently printing top level verbatim blocks More... | |
bool | internal_method_call_encountered = false |
true if internal method call was encountered while processing verbatim block More... | |
int | current_watch_statement = 0 |
Index of watch statement being printed. More... | |
std::unordered_map< CppObjectSpecifier, std::string > | object_specifier_map |
|
overrideprotectedvirtual |
name of the code generation backend
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 69 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
if reduction block in nrn_cur required
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 225 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
abort routine
OpenACC kernels running on GPU doesn't support abort()
.
CUDA/OpenACC supports assert()
in device kernel that can be used for similar purpose. Also, printf
is supported on device.
assert(0==1)
pattern which is used for OpenACC. Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 107 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
atomic update pragma for reduction statements
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 57 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
common includes : standard c++, coreneuron and backend specific
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 63 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update derivimplicit advance flag on the gpu device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 322 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
print atomic capture pragma
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 328 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
Print the code to synchronise/wait on stream specific to NrnThread.
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 334 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update dt from host to device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 364 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
fast membrane current calculation
Implements nmodl::codegen::CodegenCppVisitor.
Definition at line 186 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update global variable from host to the device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 230 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
call helper function for copying the instance struct to the device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 306 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
call helper function that deletes the instance struct from the device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 314 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
declare helper functions for copying the instance struct to the device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 256 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
define helper functions for copying the instance struct to the device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 268 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
annotations like "acc enter data present(...)" for main kernel
Each kernel like nrn_init, nrn_state and nrn_cur could be offloaded to accelerator.
In this case, at very top level, we print pragma for data present. For example:
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 142 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
end of annotation like "acc enter data"
End of print_kernel_enter_data_begin.
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 213 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
memory allocation routine
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 74 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
start of annotation "acc kernels" for net_init kernel
INITIAL
block from NET_RECEIVE
generates net_init
function.
The net_init
function pointer is registered with the coreneuron and called from the CPU. As the data is on GPU, we need to launch net_init
on the GPU.
serial
construct to launch serial kernels. This is during initialization but still inefficient. This should be improved when we drop MOD2C. Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 159 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
end of annotation "acc kernels" for net_init kernel
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 167 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update NetSendBuffer_t count from host to device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 356 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update NetSendBuffer_t count from device to host
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 341 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update NetSendBuffer_t from device to host
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 347 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
print atomic update of NetSendBuffer_t cnt
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 115 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
Replace default implementation by a no-op since the buffer cannot be grown up during gpu execution.
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 124 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
transfer newtonspace structure to device
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 240 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
reduction to matrix elements from shadow vectors
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 205 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
update to matrix elements with/without shadow vectors
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 173 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
ivdep like annotation for channel iterations
Depending programming model and compiler, we print compiler hint for parallelization.
For example:
#pragma ivdep for(int id=0; id<nodecount; id++) { #pragma acc parallel loop for(int id=0; id<nodecount; id++) {
Reimplemented from nmodl::codegen::CodegenCppVisitor.
Definition at line 34 of file codegen_acc_visitor.cpp.
|
overrideprotectedvirtual |
setup method for setting matrix shadow vectors
Reimplemented from nmodl::codegen::CodegenCoreneuronCppVisitor.
Definition at line 220 of file codegen_acc_visitor.cpp.