51chameleon_getenv_householder(
char *
string, cham_householder_t default_value) {
79chameleon_getenv_translation(
char *
string, cham_translation_t default_value) {
111chameleon_getenv_dag_color_mode(
char *
string, cham_dag_color_t default_value) {
147 CHAM_context_t *chamctxt;
150 chameleon_error(
"chameleon_context_create",
"a context is already existing\n");
154 chamctxt = (CHAM_context_t*)malloc(
sizeof(CHAM_context_t));
155 if (chamctxt == NULL) {
162 chamctxt->nb = chameleon_getenv_get_value_int(
"CHAMELEON_TILE_SIZE", 384 );
163 chamctxt->ib = chameleon_getenv_get_value_int(
"CHAMELEON_INNER_BLOCK_SIZE", 48 );
164 chamctxt->rhblock = chameleon_getenv_get_value_int(
"CHAMELEON_HOUSEHOLDER_SIZE", 4 );
165 chamctxt->lookahead = chameleon_getenv_get_value_int(
"CHAMELEON_LOOKAHEAD", 1 );
167 chamctxt->nworkers = 1;
168 chamctxt->ncudas = 0;
169 chamctxt->nthreads_per_worker = 1;
171 chamctxt->warnings_enabled = chameleon_env_on_off(
"CHAMELEON_WARNINGS", CHAMELEON_TRUE );
172 chamctxt->autotuning_enabled = chameleon_env_on_off(
"CHAMELEON_AUTOTUNING", CHAMELEON_FALSE );
173 chamctxt->parallel_enabled = chameleon_env_on_off(
"CHAMELEON_PARALLEL_KERNEL", CHAMELEON_FALSE );
174 chamctxt->statistics_enabled = chameleon_env_on_off(
"CHAMELEON_GENERATE_STATS", CHAMELEON_FALSE );
175 chamctxt->progress_enabled = chameleon_env_on_off(
"CHAMELEON_PROGRESS", CHAMELEON_FALSE );
176 chamctxt->generic_enabled = chameleon_env_on_off(
"CHAMELEON_GENERIC", CHAMELEON_FALSE );
177 chamctxt->autominmax_enabled = chameleon_env_on_off(
"CHAMELEON_AUTOMINMAX", CHAMELEON_TRUE );
178 chamctxt->optlacpy_enabled = chameleon_env_on_off(
"CHAMELEON_OPTIMIZED_LACPY", CHAMELEON_TRUE );
180 chamctxt->runtime_paused = CHAMELEON_FALSE;
182 chamctxt->householder = chameleon_getenv_householder(
"CHAMELEON_HOUSEHOLDER_MODE", ChamFlatHouseholder );
183 chamctxt->translation = chameleon_getenv_translation(
"CHAMELEON_TRANSLATION_MODE", ChamInPlace );
184#if defined(CHAMELEON_ENABLE_DAG_COLORS)
185 chamctxt->dag_color_mode = chameleon_getenv_dag_color_mode(
"CHAMELEON_DAG_COLOR_MODE", ChamDagColorAlgorithm );
189 chamctxt->first_step = chameleon_getenv_get_value_int(
"CHAMELEON_FIRST_STEP", 0 );
190 chamctxt->first_step = chameleon_max( chamctxt->first_step, 0 );
191 chamctxt->last_step = chameleon_getenv_get_value_int(
"CHAMELEON_LAST_STEP", INT_MAX );
192 chamctxt->last_step = ( chamctxt->last_step >= 0 ) ? chamctxt->last_step : 0;
195 RUNTIME_context_create(chamctxt);
247 CHAM_context_t *chamctxt;
250 if (chamctxt == NULL) {
252 return CHAMELEON_ERR_NOT_INITIALIZED;
257 case CHAMELEON_WARNINGS:
258 chamctxt->warnings_enabled = CHAMELEON_TRUE;
260 case CHAMELEON_AUTOTUNING:
261 chamctxt->autotuning_enabled = CHAMELEON_TRUE;
263 case CHAMELEON_GENERATE_TRACE:
264 RUNTIME_start_profiling();
266 case CHAMELEON_GENERATE_STATS:
267 chamctxt->statistics_enabled = CHAMELEON_TRUE;
269 case CHAMELEON_PROGRESS:
270 chamctxt->progress_enabled = CHAMELEON_TRUE;
272 case CHAMELEON_GEMM3M:
273#if defined(CBLAS_HAS_ZGEMM3M) && !defined(CHAMELEON_SIMULATION)
274 set_coreblas_gemm3m_enabled(1);
276 chameleon_error(
"CHAMELEON_Enable",
"cannot enable GEMM3M (not available in cblas)");
279 case CHAMELEON_PARALLEL_KERNEL:
280 chamctxt->parallel_enabled = CHAMELEON_TRUE;
282 case CHAMELEON_GENERIC:
283 chamctxt->generic_enabled = CHAMELEON_TRUE;
287 return CHAMELEON_ERR_ILLEGAL_VALUE;
288 case CHAMELEON_BOUND:
293 RUNTIME_enable( chamctxt->schedopt, option );
295 return CHAMELEON_SUCCESS;
323 CHAM_context_t *chamctxt;
326 if (chamctxt == NULL) {
328 return CHAMELEON_ERR_NOT_INITIALIZED;
332 case CHAMELEON_WARNINGS:
333 chamctxt->warnings_enabled = CHAMELEON_FALSE;
335 case CHAMELEON_AUTOTUNING:
336 chamctxt->autotuning_enabled = CHAMELEON_FALSE;
338 case CHAMELEON_GENERATE_TRACE:
339 RUNTIME_stop_profiling();
341 case CHAMELEON_GENERATE_STATS:
342 chamctxt->statistics_enabled = CHAMELEON_FALSE;
344 case CHAMELEON_PROGRESS:
345 chamctxt->progress_enabled = CHAMELEON_FALSE;
347 case CHAMELEON_GEMM3M:
348#if defined(CBLAS_HAS_ZGEMM3M) && !defined(CHAMELEON_SIMULATION)
349 set_coreblas_gemm3m_enabled(0);
352 case CHAMELEON_PARALLEL_KERNEL:
353 chamctxt->parallel_enabled = CHAMELEON_FALSE;
355 case CHAMELEON_GENERIC:
356 chamctxt->generic_enabled = CHAMELEON_FALSE;
360 return CHAMELEON_ERR_ILLEGAL_VALUE;
364 RUNTIME_disable( chamctxt->schedopt, option );
366 return CHAMELEON_SUCCESS;
394 CHAM_context_t *chamctxt;
397 if (chamctxt == NULL) {
399 return CHAMELEON_ERR_NOT_INITIALIZED;
402 case CHAMELEON_TILE_SIZE:
405 return CHAMELEON_ERR_ILLEGAL_VALUE;
407 chamctxt->nb = value;
408 if ( chamctxt->autotuning_enabled ) {
409 chamctxt->autotuning_enabled = CHAMELEON_FALSE;
410 chameleon_warning(
"CHAMELEON_Set",
"autotuning has been automatically disable\n");
413 chamctxt->ib = chameleon_min( chamctxt->nb, chamctxt->ib );
415 case CHAMELEON_INNER_BLOCK_SIZE:
418 return CHAMELEON_ERR_ILLEGAL_VALUE;
420 if (value > chamctxt->nb) {
423 chamctxt->ib = value;
425 chamctxt->ib = chameleon_min( chamctxt->nb, chamctxt->ib );
427 if ( chamctxt->autotuning_enabled ) {
428 chamctxt->autotuning_enabled = CHAMELEON_FALSE;
429 chameleon_warning(
"CHAMELEON_Set",
"autotuning has been automatically disable\n");
432 case CHAMELEON_HOUSEHOLDER_MODE:
433 if (value != ChamFlatHouseholder && value != ChamTreeHouseholder) {
434 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_HOUSEHOLDER_MODE");
435 return CHAMELEON_ERR_ILLEGAL_VALUE;
437 chamctxt->householder = value;
439 case CHAMELEON_HOUSEHOLDER_SIZE:
442 return CHAMELEON_ERR_ILLEGAL_VALUE;
444 chamctxt->rhblock = value;
446 case CHAMELEON_TRANSLATION_MODE:
447 if (value != ChamInPlace && value != ChamOutOfPlace) {
448 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_TRANSLATION_MODE");
449 return CHAMELEON_ERR_ILLEGAL_VALUE;
451 chamctxt->translation = value;
453 case CHAMELEON_LOOKAHEAD:
455 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_LOOKAHEAD");
456 return CHAMELEON_ERR_ILLEGAL_VALUE;
458 chamctxt->lookahead = value;
460#if defined(CHAMELEON_ENABLE_DAG_COLORS)
461 case CHAMELEON_DAG_COLOR_MODE:
462 if ( ( value != ChamDagColorAlgorithm ) &&
463 ( value != ChamDagColorTask ) )
465 chameleon_error(
"CHAMELEON_Set",
"illegal value of CHAMELEON_DAG_COLOR_MODE");
466 return CHAMELEON_ERR_ILLEGAL_VALUE;
468 chamctxt->dag_color_mode = value;
473 return CHAMELEON_ERR_ILLEGAL_VALUE;
476 return CHAMELEON_SUCCESS;
509 CHAM_context_t *chamctxt;
512 if (chamctxt == NULL) {
514 return CHAMELEON_ERR_NOT_INITIALIZED;
517 case CHAMELEON_TILE_SIZE:
518 *value = chamctxt->nb;
519 return CHAMELEON_SUCCESS;
520 case CHAMELEON_INNER_BLOCK_SIZE:
521 *value = chamctxt->ib;
522 return CHAMELEON_SUCCESS;
523 case CHAMELEON_HOUSEHOLDER_MODE:
524 *value = chamctxt->householder;
525 return CHAMELEON_SUCCESS;
526 case CHAMELEON_HOUSEHOLDER_SIZE:
527 *value = chamctxt->rhblock;
528 return CHAMELEON_SUCCESS;
529 case CHAMELEON_TRANSLATION_MODE:
530 *value = chamctxt->translation;
531 return CHAMELEON_SUCCESS;
532 case CHAMELEON_LOOKAHEAD:
533 *value = chamctxt->lookahead;
534 return CHAMELEON_SUCCESS;
535 case CHAMELEON_RUNTIME:
536 *value = chamctxt->scheduler;
537 return CHAMELEON_SUCCESS;
538#if defined(CHAMELEON_ENABLE_DAG_COLORS)
539 case CHAMELEON_DAG_COLOR_MODE:
540 *value = chamctxt->dag_color_mode;
541 return CHAMELEON_SUCCESS;
545 return CHAMELEON_ERR_ILLEGAL_VALUE;
548 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()