|
libflame
revision_anchor
|
Functions | |
| FLA_Error | FLASH_Eig_gest (FLA_Inv inv, FLA_Uplo uplo, FLA_Obj A, FLA_Obj B) |
Variables | |
| fla_eig_gest_t * | flash_eig_gest_cntl |
References FLA_Abort(), FLA_Check_error_level(), FLA_Eig_gest_check(), FLA_Eig_gest_internal(), FLA_Print_message(), FLASH_Obj_create_conf_to(), FLASH_Obj_free(), FLASH_Queue_begin(), FLASH_Queue_end(), and FLASH_Queue_stack_depth().
{
FLA_Obj Y;
FLA_Error r_val;
// Check parameters.
if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
FLA_Eig_gest_check( inv, uplo, A, B );
// The temporary matrix object Y must exist when execution occurs, NOT just
// when enqueuing occurs. So if the SuperMatrix stack depth is positive, then
// it means the user has declared a "parallel region" in his code, and thus
// execution won't occur until sometime after FLASH_Eig_gest() returns, at
// which time Y will have been deallocated. Thus, we disallow this scenario
// for now, until we can think of a more general solution.
if ( FLASH_Queue_stack_depth() > 0 )
{
FLA_Print_message( "FLASH_Eig_gest() MUST be invoked with standalone parallelism, and may not be called from within a user-level parallel region",
__FILE__, __LINE__ );
FLA_Abort();
}
FLASH_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &Y );
// Begin a parallel region.
FLASH_Queue_begin();
// Enqueue tasks via a SuperMatrix-aware control tree.
r_val = FLA_Eig_gest_internal( inv, uplo, A, Y, B, flash_eig_gest_cntl );
// End the parallel region.
FLASH_Queue_end();
FLASH_Obj_free( &Y );
return r_val;
}
1.7.6.1