18
18
* reserved.
19
19
* Copyright (c) 2024 Triad National Security, LLC. All rights
20
20
* reserved.
21
+ * Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved.
21
22
* $COPYRIGHT$
22
23
*
23
24
* Additional copyrights may follow
39
40
PROTOTYPE ERROR_CLASS init_thread (INT_OUT argc , ARGV argv , INT required ,
40
41
INT_OUT provided )
41
42
{
42
- int err , safe_required = MPI_THREAD_SERIALIZED ;
43
+ int err , err_arg_required = false, safe_required = MPI_THREAD_SERIALIZED ;
43
44
char * env ;
44
45
45
46
ompi_hook_base_mpi_init_thread_top (argc , argv , required , provided );
46
47
47
48
/* Detect an incorrect thread support level, but dont report until we have the minimum
48
49
* infrastructure setup.
49
50
*/
50
- if ( (MPI_THREAD_SINGLE == required ) || (MPI_THREAD_SERIALIZED == required ) ||
51
- (MPI_THREAD_FUNNELED == required ) || (MPI_THREAD_MULTIPLE == required ) ) {
51
+ err_arg_required = (required != MPI_THREAD_SINGLE && required != MPI_THREAD_FUNNELED &&
52
+ required != MPI_THREAD_SERIALIZED && required != MPI_THREAD_MULTIPLE );
53
+ if (!err_arg_required ) {
54
+ safe_required = required ;
55
+ }
52
56
53
- if (NULL != (env = getenv ("OMPI_MPI_THREAD_LEVEL" ))) {
54
- safe_required = atoi (env );
55
- }
56
- else {
57
- safe_required = required ;
57
+ /* check for environment overrides for required thread level. If
58
+ * there is, check to see that it is a valid/supported thread level.
59
+ * if it is lower than argument required, set it anyway, program can
60
+ * check provided == required to verify that required has been ignored
61
+ */
62
+ if (NULL != (env = getenv ("OMPI_MPI_THREAD_LEVEL" ))) {
63
+ int env_required = atoi (env );
64
+ err_arg_required = err_arg_required ||
65
+ (env_required != MPI_THREAD_SINGLE && env_required != MPI_THREAD_FUNNELED &&
66
+ env_required != MPI_THREAD_SERIALIZED && env_required != MPI_THREAD_MULTIPLE );
67
+ if (!err_arg_required ) {
68
+ safe_required = env_required ;
58
69
}
59
70
}
60
71
@@ -70,7 +81,7 @@ PROTOTYPE ERROR_CLASS init_thread(INT_OUT argc, ARGV argv, INT required,
70
81
err = ompi_mpi_init (0 , NULL , safe_required , provided , false);
71
82
}
72
83
73
- if ( safe_required != required ) {
84
+ if ( err_arg_required ) {
74
85
/* Trigger the error handler for the incorrect argument. Keep it separate from the
75
86
* check on the ompi_mpi_init return and report a nice, meaningful error message to
76
87
* the user. */
0 commit comments