@@ -45,8 +45,14 @@ qvi_pthread_start_routine(
45
45
void *arg
46
46
) {
47
47
qvi_pthread_args *args = (qvi_pthread_args *)arg;
48
- // TODO(skg) Check return code.
49
- args->scope ->bind_push ();
48
+
49
+ const int rc = args->scope ->bind_push ();
50
+ if (qvi_unlikely (rc != QV_SUCCESS)) {
51
+ qvi_log_error (
52
+ " An error occurred in bind_push(): {} ({})" , rc, qv_strerr (rc)
53
+ );
54
+ pthread_exit (nullptr );
55
+ }
50
56
51
57
void *const ret = args->th_routine (args->th_routine_argp );
52
58
qvi_delete (&args);
@@ -61,9 +67,9 @@ qv_pthread_scope_split(
61
67
int nthreads,
62
68
qv_scope_t ***subscope
63
69
) {
64
- const bool invld_args = !scope || npieces < 0 || !color_array ||
65
- nthreads < 0 || !subscope;
66
- if (qvi_unlikely (invld_args )) {
70
+ const bool invalid_args = !scope || npieces < 0 || !color_array ||
71
+ nthreads < 0 || !subscope;
72
+ if (qvi_unlikely (invalid_args )) {
67
73
return QV_ERR_INVLD_ARG;
68
74
}
69
75
try {
@@ -143,50 +149,42 @@ int
143
149
qv_pthread_colors_fill (
144
150
int *color_array,
145
151
int array_size,
146
- qv_policy_t policy,
152
+ qv_pthread_placement_t policy,
147
153
int stride,
148
154
int npieces
149
155
) {
150
- int rc = QV_SUCCESS;
151
-
152
- if (stride < 1 ) return QV_ERR_INVLD_ARG;
153
-
156
+ const bool invalid_args = !color_array || array_size < 0 ||
157
+ stride < 1 || npieces < 1 ;
158
+ if (qvi_unlikely (invalid_args)) return QV_ERR_INVLD_ARG;
159
+ // TODO(skg) We should use the mapping algorithms in qvi-map for these. The
160
+ // problem is that its interfaces aren't yet suited for this type of
161
+ // mapping.
154
162
switch (policy) {
155
- case QV_POLICY_SPREAD:
156
- {
163
+ case QV_POLICY_PACKED: {
164
+ // TODO(skg) This looks more like spread.
165
+ for (int idx = 0 ; idx < array_size ; idx++){
166
+ // color_array[idx] = (idx+idx*(stride-1))%(npieces);
167
+ color_array[idx] = (idx*stride)%(npieces);
168
+ }
157
169
break ;
158
170
}
159
-
160
- case QV_POLICY_DISTRIBUTE:
161
- // case QV_POLICY_ALTERNATE:
162
- // case QV_POLICY_CORESFIRST:
163
- {
164
- break ;
171
+ case QV_POLICY_SPREAD: {
172
+ return QV_ERR_NOT_SUPPORTED;
165
173
}
166
-
167
- case QV_POLICY_SCATTER:
168
- {
169
- break ;
174
+ case QV_POLICY_DISTRIBUTE: {
175
+ return QV_ERR_NOT_SUPPORTED;
170
176
}
171
-
172
- case QV_POLICY_CHOOSE:
173
- {
174
- break ;
177
+ case QV_POLICY_SCATTER: {
178
+ return QV_ERR_NOT_SUPPORTED;
175
179
}
176
-
177
- case QV_POLICY_PACKED:
178
- // case QV_POLICY_COMPACT:
179
- // case QV_POLICY_CLOSE:
180
- default :
181
- {
182
- for (int idx = 0 ; idx < array_size ; idx++){
183
- // color_array[idx] = (idx+idx*(stride-1))%(npieces);
184
- color_array[idx] = (idx*stride)%(npieces);
185
- }
186
- break ;
180
+ case QV_POLICY_CHOOSE: {
181
+ return QV_ERR_NOT_SUPPORTED;
182
+ }
183
+ default : {
184
+ return QV_ERR_INVLD_ARG;
187
185
}
188
186
}
189
- return rc ;
187
+ return QV_SUCCESS ;
190
188
}
191
189
192
190
/*
0 commit comments