@@ -1041,17 +1041,6 @@ void CodegenCVisitor::print_channel_iteration_tiling_block_end() {
10411041}
10421042
10431043
1044- void CodegenCVisitor::print_instance_variable_transfer_to_device (
1045- std::vector<std::string> const & ptr_members) const {
1046- // backend specific, do nothing
1047- }
1048-
1049-
1050- void CodegenCVisitor::print_instance_variable_deletion_from_device () const {
1051- // backend specific, do nothing
1052- }
1053-
1054-
10551044void CodegenCVisitor::print_deriv_advance_flag_transfer_to_device () const {
10561045 // backend specific, do nothing
10571046}
@@ -1892,9 +1881,9 @@ void CodegenCVisitor::print_eigen_linear_solver(const std::string& float_type, i
18921881
18931882std::string CodegenCVisitor::internal_method_arguments () {
18941883 if (ion_variable_struct_required ()) {
1895- return " id, pnodecount, inst, ionvar, data, indexes, thread, nt, ml, v" ;
1884+ return " id, pnodecount, inst, ionvar, data, indexes, thread, nt, v" ;
18961885 }
1897- return " id, pnodecount, inst, data, indexes, thread, nt, ml, v" ;
1886+ return " id, pnodecount, inst, data, indexes, thread, nt, v" ;
18981887}
18991888
19001889
@@ -1926,7 +1915,6 @@ CodegenCVisitor::ParamVector CodegenCVisitor::internal_method_parameters() {
19261915 params.emplace_back (" const " , " Datum*" , " " , " indexes" );
19271916 params.emplace_back (param_type_qualifier (), " ThreadDatum*" , " " , " thread" );
19281917 params.emplace_back (param_type_qualifier (), " NrnThread*" , param_ptr_qualifier (), " nt" );
1929- params.emplace_back (param_type_qualifier (), " Memb_list*" , param_ptr_qualifier (), " ml" );
19301918 params.emplace_back (" " , " double" , " " , " v" );
19311919 return params;
19321920}
@@ -1961,9 +1949,9 @@ std::string CodegenCVisitor::nrn_thread_arguments() {
19611949 */
19621950std::string CodegenCVisitor::nrn_thread_internal_arguments () {
19631951 if (ion_variable_struct_required ()) {
1964- return " id, pnodecount, inst, ionvar, data, indexes, thread, nt, ml, v" ;
1952+ return " id, pnodecount, inst, ionvar, data, indexes, thread, nt, v" ;
19651953 }
1966- return " id, pnodecount, inst, data, indexes, thread, nt, ml, v" ;
1954+ return " id, pnodecount, inst, data, indexes, thread, nt, v" ;
19671955}
19681956
19691957
@@ -3200,18 +3188,15 @@ void CodegenCVisitor::print_instance_variable_setup() {
32003188 printer->fmt_line (" assert(ml->global_variables_size == sizeof({}));" , global_struct ());
32013189 };
32023190
3203- printer->fmt_line (
3204- " static inline void copy_instance_to_device(NrnThread* nt, Memb_list* ml, {} const* inst);" ,
3205- instance_struct ());
3206- printer->fmt_line (" static inline void delete_instance_from_device({}& inst);" ,
3207- instance_struct ());
3208- printer->add_newline ();
3191+ // Must come before print_instance_struct_copy_to_device and
3192+ // print_instance_struct_delete_from_device
3193+ print_instance_struct_transfer_routine_declarations ();
32093194
32103195 printer->add_line (" // Deallocate the instance structure" );
32113196 printer->fmt_start_block (" static void {}(NrnThread* nt, Memb_list* ml, int type)" ,
32123197 method_name (naming::NRN_PRIVATE_DESTRUCTOR_METHOD));
32133198 cast_inst_and_assert_validity ();
3214- printer-> add_line ( " delete_instance_from_device(*inst); " );
3199+ print_instance_struct_delete_from_device ( );
32153200 printer->add_line (" delete inst;" );
32163201 printer->add_line (" ml->instance = nullptr;" );
32173202 printer->add_line (" ml->global_variables = nullptr;" );
@@ -3269,20 +3254,10 @@ void CodegenCVisitor::print_instance_variable_setup() {
32693254 printer->fmt_line (" inst->{} = {};" , name, variable);
32703255 ptr_members.push_back (std::move (name));
32713256 }
3272- printer-> add_line ( " copy_instance_to_device(nt, ml, inst); " );
3257+ print_instance_struct_copy_to_device ( );
32733258 printer->end_block (2 ); // setup_instance
32743259
3275- printer->add_line (" // Set up the device-side copy of the instance structure" );
3276- printer->fmt_start_block (
3277- " static inline void copy_instance_to_device(NrnThread* nt, Memb_list* ml, {} const* inst)" ,
3278- instance_struct ());
3279- print_instance_variable_transfer_to_device (ptr_members);
3280- printer->end_block (2 ); // copy_instance_to_device
3281-
3282- printer->fmt_start_block (" static inline void delete_instance_from_device({}& inst)" ,
3283- instance_struct ());
3284- print_instance_variable_deletion_from_device ();
3285- printer->end_block (2 ); // delete_instance_from_device
3260+ print_instance_struct_transfer_routines (ptr_members);
32863261}
32873262
32883263
0 commit comments