@@ -267,6 +267,41 @@ ompi_osc_sm_get(void *origin_addr,
267267}
268268
269269
270+ int
271+ ompi_osc_sm_get_with_notify (void * origin_addr ,
272+ size_t origin_count ,
273+ struct ompi_datatype_t * origin_dt ,
274+ int target ,
275+ ptrdiff_t target_disp ,
276+ size_t target_count ,
277+ struct ompi_datatype_t * target_dt ,
278+ int notify ,
279+ struct ompi_win_t * win )
280+ {
281+ int ret ;
282+ ompi_osc_sm_module_t * module =
283+ (ompi_osc_sm_module_t * ) win -> w_osc_module ;
284+ void * remote_address ;
285+
286+ OPAL_OUTPUT_VERBOSE ((50 , ompi_osc_base_framework .framework_output ,
287+ "get: 0x%lx, %zu, %s, %d, %d, %zu, %s, 0x%lx" ,
288+ (unsigned long ) origin_addr , origin_count ,
289+ origin_dt -> name , target , (int ) target_disp ,
290+ target_count , target_dt -> name ,
291+ (unsigned long ) win ));
292+
293+ remote_address = ((char * ) (module -> bases [target ])) + module -> disp_units [target ] * target_disp ;
294+
295+ ret = ompi_datatype_sndrcv (remote_address , target_count , target_dt ,
296+ origin_addr , origin_count , origin_dt );
297+ // TODO: do the same for put_with_notify
298+ opal_atomic_rmb ();
299+ opal_atomic_add (& module -> notify_counters [target ][notify ], 1 );
300+
301+ return ret ;
302+ }
303+
304+
270305int
271306ompi_osc_sm_accumulate (const void * origin_addr ,
272307 size_t origin_count ,
0 commit comments