12
12
* All rights reserved.
13
13
* Copyright (c) 2006-2007 Voltaire. All rights reserved.
14
14
* Copyright (c) 2009-2010 Cisco Systems, Inc. All rights reserved.
15
- * Copyright (c) 2010-2017 Los Alamos National Security, LLC.
15
+ * Copyright (c) 2010-2018 Los Alamos National Security, LLC.
16
16
* All rights reserved.
17
17
* Copyright (c) 2011 NVIDIA Corporation. All rights reserved.
18
18
* Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
@@ -68,6 +68,7 @@ static mca_base_var_enum_value_t single_copy_mechanisms[] = {
68
68
#if OPAL_BTL_VADER_HAVE_KNEM
69
69
{.value = MCA_BTL_VADER_KNEM , .string = "knem" },
70
70
#endif
71
+ {.value = MCA_BTL_VADER_EMUL , .string = "emulated" },
71
72
{.value = MCA_BTL_VADER_NONE , .string = "none" },
72
73
{.value = 0 , .string = NULL }
73
74
};
@@ -95,14 +96,6 @@ mca_btl_vader_component_t mca_btl_vader_component = {
95
96
} /* end super */
96
97
};
97
98
98
- static void mca_btl_vader_dummy_rdma (void )
99
- {
100
- /* If a backtrace ends at this function something has gone wrong with
101
- * the btl bootstrapping. Check that the btl_get function was set to
102
- * something reasonable. */
103
- abort ();
104
- }
105
-
106
99
static int mca_btl_vader_component_register (void )
107
100
{
108
101
mca_base_var_enum_t * new_enum ;
@@ -119,7 +112,7 @@ static int mca_btl_vader_component_register (void)
119
112
MCA_BASE_VAR_FLAG_SETTABLE , OPAL_INFO_LVL_9 ,
120
113
MCA_BASE_VAR_SCOPE_LOCAL ,
121
114
& mca_btl_vader_component .vader_free_list_num );
122
- mca_btl_vader_component .vader_free_list_max = 4096 ;
115
+ mca_btl_vader_component .vader_free_list_max = 512 ;
123
116
(void ) mca_base_component_var_register (& mca_btl_vader_component .super .btl_version ,
124
117
"free_list_max" , "Maximum number of fragments "
125
118
"to allocate for shared memory communication." ,
@@ -252,20 +245,42 @@ static int mca_btl_vader_component_register (void)
252
245
mca_btl_vader .super .btl_rdma_pipeline_send_length = mca_btl_vader .super .btl_eager_limit ;
253
246
mca_btl_vader .super .btl_rdma_pipeline_frag_size = mca_btl_vader .super .btl_eager_limit ;
254
247
255
- mca_btl_vader .super .btl_flags = MCA_BTL_FLAGS_SEND_INPLACE | MCA_BTL_FLAGS_SEND ;
248
+ #if OPAL_HAVE_ATOMIC_MATH_64
249
+ mca_btl_vader .super .btl_flags = MCA_BTL_FLAGS_SEND_INPLACE | MCA_BTL_FLAGS_SEND | MCA_BTL_FLAGS_RDMA |
250
+ MCA_BTL_FLAGS_ATOMIC_OPS | MCA_BTL_FLAGS_ATOMIC_FOPS ;
251
+
252
+ mca_btl_vader .super .btl_atomic_flags = MCA_BTL_ATOMIC_SUPPORTS_ADD | MCA_BTL_ATOMIC_SUPPORTS_AND |
253
+ MCA_BTL_ATOMIC_SUPPORTS_OR | MCA_BTL_ATOMIC_SUPPORTS_XOR | MCA_BTL_ATOMIC_SUPPORTS_CSWAP |
254
+ MCA_BTL_ATOMIC_SUPPORTS_GLOB | MCA_BTL_ATOMIC_SUPPORTS_SWAP ;
255
+ #if OPAL_HAVE_ATOMIC_MATH_32
256
+ mca_btl_vader .super .btl_atomic_flags |= MCA_BTL_ATOMIC_SUPPORTS_32BIT ;
257
+ #endif /* OPAL_HAVE_ATOMIC_MATH_32 */
258
+
259
+ #if OPAL_HAVE_ATOMIC_MIN_64
260
+ mca_btl_vader .super .btl_atomic_flags |= MCA_BTL_ATOMIC_SUPPORTS_MIN ;
261
+ #endif /* OPAL_HAVE_ATOMIC_MIN_64 */
262
+
263
+ #if OPAL_HAVE_ATOMIC_MAX_64
264
+ mca_btl_vader .super .btl_atomic_flags |= MCA_BTL_ATOMIC_SUPPORTS_MAX ;
265
+ #endif /* OPAL_HAVE_ATOMIC_MAX_64 */
266
+
267
+ #else
268
+ mca_btl_vader .super .btl_flags = MCA_BTL_FLAGS_SEND_INPLACE | MCA_BTL_FLAGS_SEND | MCA_BTL_FLAGS_RDMA ;
269
+ #endif /* OPAL_HAVE_ATOMIC_MATH_64 */
256
270
257
271
if (MCA_BTL_VADER_NONE != mca_btl_vader_component .single_copy_mechanism ) {
258
- mca_btl_vader .super .btl_flags |= MCA_BTL_FLAGS_RDMA ;
259
- /* Single copy mechanisms should provide better bandwidth */
272
+ /* True single copy mechanisms should provide better bandwidth */
260
273
mca_btl_vader .super .btl_bandwidth = 40000 ; /* Mbs */
261
-
262
- /* Set dummy values so the RDMA flag doesn't get unset by mca_btl_base_param_verify() */
263
- mca_btl_vader .super .btl_get = (mca_btl_base_module_get_fn_t ) mca_btl_vader_dummy_rdma ;
264
- mca_btl_vader .super .btl_put = (mca_btl_base_module_get_fn_t ) mca_btl_vader_dummy_rdma ;
265
274
} else {
266
275
mca_btl_vader .super .btl_bandwidth = 10000 ; /* Mbs */
267
276
}
268
277
278
+ mca_btl_vader .super .btl_get = mca_btl_vader_get_sc_emu ;
279
+ mca_btl_vader .super .btl_put = mca_btl_vader_put_sc_emu ;
280
+ mca_btl_vader .super .btl_atomic_op = mca_btl_vader_emu_aop ;
281
+ mca_btl_vader .super .btl_atomic_fop = mca_btl_vader_emu_afop ;
282
+ mca_btl_vader .super .btl_atomic_cswap = mca_btl_vader_emu_acswap ;
283
+
269
284
mca_btl_vader .super .btl_latency = 1 ; /* Microsecs */
270
285
271
286
/* Call the BTL based to register its MCA params */
@@ -350,7 +365,6 @@ static int mca_btl_base_vader_modex_send (void)
350
365
return rc ;
351
366
}
352
367
353
- #if OPAL_BTL_VADER_HAVE_XPMEM || OPAL_BTL_VADER_HAVE_CMA || OPAL_BTL_VADER_HAVE_KNEM
354
368
static void mca_btl_vader_select_next_single_copy_mechanism (void )
355
369
{
356
370
for (int i = 0 ; single_copy_mechanisms [i ].value != MCA_BTL_VADER_NONE ; ++ i ) {
@@ -446,8 +460,14 @@ static void mca_btl_vader_check_single_copy (void)
446
460
mca_btl_vader .super .btl_get = NULL ;
447
461
mca_btl_vader .super .btl_put = NULL ;
448
462
}
463
+
464
+ if (MCA_BTL_VADER_EMUL == mca_btl_vader_component .single_copy_mechanism ) {
465
+ mca_btl_vader_sc_emu_init ();
466
+ /* limit to the maximum fragment size */
467
+ mca_btl_vader .super .btl_put_limit = mca_btl_vader .super .btl_max_send_size - sizeof (mca_btl_vader_sc_emu_hdr_t );
468
+ mca_btl_vader .super .btl_get_limit = mca_btl_vader .super .btl_max_send_size - sizeof (mca_btl_vader_sc_emu_hdr_t );
469
+ }
449
470
}
450
- #endif
451
471
452
472
/*
453
473
* VADER component initialization
@@ -497,11 +517,10 @@ static mca_btl_base_module_t **mca_btl_vader_component_init (int *num_btls,
497
517
component -> num_fbox_in_endpoints = 0 ;
498
518
component -> fbox_count = 0 ;
499
519
500
- #if OPAL_BTL_VADER_HAVE_XPMEM || OPAL_BTL_VADER_HAVE_CMA || OPAL_BTL_VADER_HAVE_KNEM
501
520
mca_btl_vader_check_single_copy ();
502
- #endif
503
521
504
522
if (MCA_BTL_VADER_XPMEM != mca_btl_vader_component .single_copy_mechanism ) {
523
+ const char * base_dir = opal_process_info .proc_session_dir ;
505
524
char * sm_file ;
506
525
507
526
rc = asprintf (& sm_file , "%s" OPAL_PATH_SEP "vader_segment.%s.%x.%d" , mca_btl_vader_component .backing_directory ,
0 commit comments