@@ -858,136 +858,6 @@ void update_nrnthreads_on_host(NrnThread* threads, int nthreads) {
858
858
#endif
859
859
}
860
860
861
- void update_nrnthreads_on_device (NrnThread* threads, int nthreads) {
862
- #ifdef _OPENACC
863
-
864
- for (int i = 0 ; i < nthreads; i++) {
865
- NrnThread* nt = threads + i;
866
-
867
- if (nt->compute_gpu && (nt->end > 0 )) {
868
- /* -- copy data to device -- */
869
-
870
- int ne = nrn_soa_padded_size (nt->end , 0 );
871
-
872
- nrn_pragma_acc (update device (
873
- nt->_actual_rhs [:ne],
874
- nt->_actual_d [:ne],
875
- nt->_actual_a [:ne],
876
- nt->_actual_b [:ne],
877
- nt->_actual_v [:ne],
878
- nt->_actual_area [:ne]))
879
- nrn_pragma_omp (target update to (
880
- nt->_actual_rhs [:ne],
881
- nt->_actual_d [:ne],
882
- nt->_actual_a [:ne],
883
- nt->_actual_b [:ne],
884
- nt->_actual_v [:ne],
885
- nt->_actual_area [:ne]))
886
-
887
- nrn_pragma_acc (update device (nt->_actual_diam [:ne]) if (nt->_actual_diam != nullptr ))
888
- nrn_pragma_omp (target update to (nt->_actual_diam [:ne]) if (nt->_actual_diam != nullptr ))
889
-
890
- /* @todo: nt._ml_list[tml->index] = tml->ml; */
891
-
892
- /* -- copy NrnThreadMembList list ml to host -- */
893
- for (auto tml = nt->tml ; tml; tml = tml->next ) {
894
- Memb_list* ml = tml->ml ;
895
- int type = tml->index ;
896
- int n = ml->nodecount ;
897
- int szp = corenrn.get_prop_param_size ()[type];
898
- int szdp = corenrn.get_prop_dparam_size ()[type];
899
-
900
- int pcnt = nrn_soa_padded_size (n, SOA_LAYOUT) * szp;
901
-
902
- nrn_pragma_acc (update device (ml->data [:pcnt]))
903
- nrn_pragma_omp (target update to (ml->data [:pcnt]))
904
-
905
- nrn_pragma_acc (update device (ml->nodeindices [:n])
906
- if (!corenrn.get_is_artificial ()[type]))
907
- nrn_pragma_omp (target update to (ml->nodeindices [:n])
908
- if (!corenrn.get_is_artificial ()[type]))
909
- int dpcnt = nrn_soa_padded_size (n, SOA_LAYOUT) * szdp;
910
- nrn_pragma_acc (update device (ml->pdata [:dpcnt]) if (szdp))
911
- nrn_pragma_omp (target update to (ml->pdata [:dpcnt]) if (szdp))
912
-
913
- auto nrb = tml->ml ->_net_receive_buffer ;
914
- nrn_pragma_acc (update device (nrb->_cnt ,
915
- nrb->_size ,
916
- nrb->_pnt_offset ,
917
- nrb->_displ_cnt ,
918
- nrb->_pnt_index [:nrb->_size ],
919
- nrb->_weight_index [:nrb->_size ],
920
- nrb->_displ [:nrb->_size ],
921
- nrb->_nrb_index [:nrb->_size ])
922
- if (nrb != nullptr ))
923
- nrn_pragma_omp (target update to (nrb->_cnt ,
924
- nrb->_size ,
925
- nrb->_pnt_offset ,
926
- nrb->_displ_cnt ,
927
- nrb->_pnt_index [:nrb->_size ],
928
- nrb->_weight_index [:nrb->_size ],
929
- nrb->_displ [:nrb->_size ],
930
- nrb->_nrb_index [:nrb->_size ])
931
- if (nrb != nullptr ))
932
- }
933
- int pcnt = nrn_soa_padded_size (nt->shadow_rhs_cnt , 0 );
934
- /* copy shadow_rhs to host */
935
- nrn_pragma_acc (update device (nt->_shadow_rhs [:pcnt],
936
- /* copy shadow_d to host */
937
- nt->_shadow_d [:pcnt])
938
- if (nt->shadow_rhs_cnt ))
939
- nrn_pragma_omp (target update to (nt->_shadow_rhs [:pcnt],
940
- /* copy shadow_d to host */
941
- nt->_shadow_d [:pcnt])
942
- if (nt->shadow_rhs_cnt ))
943
-
944
-
945
- nrn_pragma_acc (update device (nt->nrn_fast_imem ->nrn_sav_rhs [:nt->end ],
946
- nt->nrn_fast_imem ->nrn_sav_d [:nt->end ])
947
- if (nt->nrn_fast_imem != nullptr ))
948
- nrn_pragma_omp (target update to (nt->nrn_fast_imem ->nrn_sav_rhs [:nt->end ],
949
- nt->nrn_fast_imem ->nrn_sav_d [:nt->end ])
950
- if (nt->nrn_fast_imem != nullptr ))
951
-
952
- nrn_pragma_acc (update device (nt->pntprocs [:nt->n_pntproc ])
953
- if (nt->n_pntproc ))
954
- nrn_pragma_omp (target update to (nt->pntprocs [:nt->n_pntproc ])
955
- if (nt->n_pntproc ))
956
-
957
- nrn_pragma_acc (update device (nt->weights [:nt->n_weight ]) if (nt->n_weight ))
958
- nrn_pragma_omp (target update to (nt->weights [:nt->n_weight ]) if (nt->n_weight ))
959
-
960
- nrn_pragma_acc (update device (nt->presyns_helper [:nt->n_presyn ],
961
- nt->presyns [:nt->n_presyn ])
962
- if (nt->n_presyn ))
963
- nrn_pragma_omp (target update to (nt->presyns_helper [:nt->n_presyn ],
964
- nt->presyns [:nt->n_presyn ])
965
- if (nt->n_presyn ))
966
-
967
- {
968
- TrajectoryRequests* tr = nt->trajec_requests ;
969
- if (tr && tr->varrays ) {
970
- // The full buffers have `bsize` entries, but only `vsize`
971
- // of them are valid.
972
- for (int i = 0 ; i < tr->n_trajec ; ++i) {
973
- nrn_pragma_acc (update device (tr->varrays [i][:tr->vsize ]))
974
- nrn_pragma_omp (target update to (tr->varrays [i][:tr->vsize ]))
975
- }
976
- }
977
- }
978
-
979
- /* don't and don't update vdata, its pointer array
980
- nrn_pragma_acc(update device(nt->_vdata[:nt->_nvdata) if nt->_nvdata)
981
- nrn_pragma_omp(target update tp(nt->_vdata[:nt->_nvdata) if (nt->_nvdata))
982
- */
983
- }
984
- }
985
- #else
986
- (void ) threads;
987
- (void ) nthreads;
988
- #endif
989
- }
990
-
991
861
/* *
992
862
* Copy weights from GPU to CPU
993
863
*
0 commit comments