51chameleon_getenv_householder(
char *
string, cham_householder_t default_value) {
79chameleon_getenv_translation(
char *
string, cham_translation_t default_value) {
114 CHAM_context_t *chamctxt;
117 chameleon_error(
"chameleon_context_create",
"a context is already existing\n");
121 chamctxt = (CHAM_context_t*)malloc(
sizeof(CHAM_context_t));
122 if (chamctxt == NULL) {
129 chamctxt->nb = chameleon_getenv_get_value_int(
"CHAMELEON_TILE_SIZE", 384 );
130 chamctxt->ib = chameleon_getenv_get_value_int(
"CHAMELEON_INNER_BLOCK_SIZE", 48 );
131 chamctxt->rhblock = chameleon_getenv_get_value_int(
"CHAMELEON_HOUSEHOLDER_SIZE", 4 );
132 chamctxt->lookahead = chameleon_getenv_get_value_int(
"CHAMELEON_LOOKAHEAD", 1 );
134 chamctxt->nworkers = 1;
135 chamctxt->ncudas = 0;
136 chamctxt->nthreads_per_worker = 1;
138 chamctxt->warnings_enabled = chameleon_env_on_off(
"CHAMELEON_WARNINGS", CHAMELEON_TRUE );
139 chamctxt->autotuning_enabled = chameleon_env_on_off(
"CHAMELEON_AUTOTUNING", CHAMELEON_FALSE );
140 chamctxt->parallel_enabled = chameleon_env_on_off(
"CHAMELEON_PARALLEL_KERNEL", CHAMELEON_FALSE );
141 chamctxt->statistics_enabled = chameleon_env_on_off(
"CHAMELEON_GENERATE_STATS", CHAMELEON_FALSE );
142 chamctxt->progress_enabled = chameleon_env_on_off(
"CHAMELEON_PROGRESS", CHAMELEON_FALSE );
143 chamctxt->generic_enabled = chameleon_env_on_off(
"CHAMELEON_GENERIC", CHAMELEON_FALSE );
144 chamctxt->autominmax_enabled = chameleon_env_on_off(
"CHAMELEON_AUTOMINMAX", CHAMELEON_TRUE );
145 chamctxt->optlacpy_enabled = chameleon_env_on_off(
"CHAMELEON_OPTIMIZED_LACPY", CHAMELEON_TRUE );
147 chamctxt->runtime_paused = CHAMELEON_FALSE;
149 chamctxt->householder = chameleon_getenv_householder(
"CHAMELEON_HOUSEHOLDER_MODE", ChamFlatHouseholder );
150 chamctxt->translation = chameleon_getenv_translation(
"CHAMELEON_TRANSLATION_MODE", ChamInPlace );
153 chamctxt->first_step = chameleon_getenv_get_value_int(
"CHAMELEON_FIRST_STEP", 0 );
154 chamctxt->first_step = chameleon_max( chamctxt->first_step, 0 );
155 chamctxt->last_step = chameleon_getenv_get_value_int(
"CHAMELEON_LAST_STEP", INT_MAX );
156 chamctxt->last_step = ( chamctxt->last_step >= 0 ) ? chamctxt->last_step : 0;
159 RUNTIME_context_create(chamctxt);
211 CHAM_context_t *chamctxt;
214 if (chamctxt == NULL) {
216 return CHAMELEON_ERR_NOT_INITIALIZED;
221 case CHAMELEON_WARNINGS:
222 chamctxt->warnings_enabled = CHAMELEON_TRUE;
224 case CHAMELEON_AUTOTUNING:
225 chamctxt->autotuning_enabled = CHAMELEON_TRUE;
227 case CHAMELEON_GENERATE_TRACE:
228 RUNTIME_start_profiling();
230 case CHAMELEON_GENERATE_STATS:
231 chamctxt->statistics_enabled = CHAMELEON_TRUE;
233 case CHAMELEON_PROGRESS:
234 chamctxt->progress_enabled = CHAMELEON_TRUE;
236 case CHAMELEON_GEMM3M:
237#if defined(CBLAS_HAS_ZGEMM3M) && !defined(CHAMELEON_SIMULATION)
238 set_coreblas_gemm3m_enabled(1);
240 chameleon_error(
"CHAMELEON_Enable",
"cannot enable GEMM3M (not available in cblas)");
243 case CHAMELEON_PARALLEL_KERNEL:
244 chamctxt->parallel_enabled = CHAMELEON_TRUE;
246 case CHAMELEON_GENERIC:
247 chamctxt->generic_enabled = CHAMELEON_TRUE;
251 return CHAMELEON_ERR_ILLEGAL_VALUE;
252 case CHAMELEON_BOUND:
257 RUNTIME_enable( chamctxt->schedopt, option );
259 return CHAMELEON_SUCCESS;
287 CHAM_context_t *chamctxt;
290 if (chamctxt == NULL) {
292 return CHAMELEON_ERR_NOT_INITIALIZED;
296 case CHAMELEON_WARNINGS:
297 chamctxt->warnings_enabled = CHAMELEON_FALSE;
299 case CHAMELEON_AUTOTUNING:
300 chamctxt->autotuning_enabled = CHAMELEON_FALSE;
302 case CHAMELEON_GENERATE_TRACE:
303 RUNTIME_stop_profiling();
305 case CHAMELEON_GENERATE_STATS:
306 chamctxt->statistics_enabled = CHAMELEON_FALSE;
308 case CHAMELEON_PROGRESS:
309 chamctxt->progress_enabled = CHAMELEON_FALSE;
311 case CHAMELEON_GEMM3M:
312#if defined(CBLAS_HAS_ZGEMM3M) && !defined(CHAMELEON_SIMULATION)
313 set_coreblas_gemm3m_enabled(0);
316 case CHAMELEON_PARALLEL_KERNEL:
317 chamctxt->parallel_enabled = CHAMELEON_FALSE;
319 case CHAMELEON_GENERIC:
320 chamctxt->generic_enabled = CHAMELEON_FALSE;
324 return CHAMELEON_ERR_ILLEGAL_VALUE;
328 RUNTIME_disable( chamctxt->schedopt, option );
330 return CHAMELEON_SUCCESS;
357 CHAM_context_t *chamctxt;
360 if (chamctxt == NULL) {
362 return CHAMELEON_ERR_NOT_INITIALIZED;
365 case CHAMELEON_TILE_SIZE:
368 return CHAMELEON_ERR_ILLEGAL_VALUE;
370 chamctxt->nb = value;
371 if ( chamctxt->autotuning_enabled ) {
372 chamctxt->autotuning_enabled = CHAMELEON_FALSE;
373 chameleon_warning(
"CHAMELEON_Set",
"autotuning has been automatically disable\n");
376 chamctxt->ib = chameleon_min( chamctxt->nb, chamctxt->ib );
378 case CHAMELEON_INNER_BLOCK_SIZE:
381 return CHAMELEON_ERR_ILLEGAL_VALUE;
383 if (value > chamctxt->nb) {
386 chamctxt->ib = value;
388 chamctxt->ib = chameleon_min( chamctxt->nb, chamctxt->ib );
390 if ( chamctxt->autotuning_enabled ) {
391 chamctxt->autotuning_enabled = CHAMELEON_FALSE;
392 chameleon_warning(
"CHAMELEON_Set",
"autotuning has been automatically disable\n");
395 case CHAMELEON_HOUSEHOLDER_MODE:
396 if (value != ChamFlatHouseholder && value != ChamTreeHouseholder) {
397 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_HOUSEHOLDER_MODE");
398 return CHAMELEON_ERR_ILLEGAL_VALUE;
400 chamctxt->householder = value;
402 case CHAMELEON_HOUSEHOLDER_SIZE:
405 return CHAMELEON_ERR_ILLEGAL_VALUE;
407 chamctxt->rhblock = value;
409 case CHAMELEON_TRANSLATION_MODE:
410 if (value != ChamInPlace && value != ChamOutOfPlace) {
411 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_TRANSLATION_MODE");
412 return CHAMELEON_ERR_ILLEGAL_VALUE;
414 chamctxt->translation = value;
416 case CHAMELEON_LOOKAHEAD:
418 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_LOOKAHEAD");
419 return CHAMELEON_ERR_ILLEGAL_VALUE;
421 chamctxt->lookahead = value;
425 return CHAMELEON_ERR_ILLEGAL_VALUE;
428 return CHAMELEON_SUCCESS;
460 CHAM_context_t *chamctxt;
463 if (chamctxt == NULL) {
465 return CHAMELEON_ERR_NOT_INITIALIZED;
468 case CHAMELEON_TILE_SIZE:
469 *value = chamctxt->nb;
470 return CHAMELEON_SUCCESS;
471 case CHAMELEON_INNER_BLOCK_SIZE:
472 *value = chamctxt->ib;
473 return CHAMELEON_SUCCESS;
474 case CHAMELEON_HOUSEHOLDER_MODE:
475 *value = chamctxt->householder;
476 return CHAMELEON_SUCCESS;
477 case CHAMELEON_HOUSEHOLDER_SIZE:
478 *value = chamctxt->rhblock;
479 return CHAMELEON_SUCCESS;
480 case CHAMELEON_TRANSLATION_MODE:
481 *value = chamctxt->translation;
482 return CHAMELEON_SUCCESS;
483 case CHAMELEON_LOOKAHEAD:
484 *value = chamctxt->lookahead;
485 return CHAMELEON_SUCCESS;
486 case CHAMELEON_RUNTIME:
487 *value = chamctxt->scheduler;
488 return CHAMELEON_SUCCESS;
491 return CHAMELEON_ERR_ILLEGAL_VALUE;
494 return CHAMELEON_SUCCESS;
static CHAM_context_t * chameleon_ctxt
CHAM_context_t * chameleon_context_self()
CHAM_context_t * chameleon_context_create()
int chameleon_context_destroy()