From 55b6abdf7458e31df3ad01796d67c2332c776948 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Thu, 7 Jun 2018 14:08:12 -0500 Subject: [PATCH] Enforce consistent datatypes in most object APIs. Details: - Added logic to level-1v, -1d, -1f, -1m, -2, and -3 operations' _check() functions to ensure that all operands are of the same datatype. There are some exceptions that were left out, such as the _check() function for the various norm operations since they have a different idea of datatype consistency (ie: the norm object must be the real projection of the primary input vector/matrix object). --- frame/1/bli_l1v_check.c | 25 +++++++++++++++ frame/1d/bli_l1d_check.c | 10 ++++++ frame/1f/bli_l1f_check.c | 52 ++++++++++++++++++++++++++++++ frame/1m/bli_l1m_check.c | 10 ++++++ frame/2/bli_l2_check.c | 68 ++++++++++++++++++++++++++++++++++++++++ frame/3/bli_l3_check.c | 38 ++++++++++++++++++++++ 6 files changed, 203 insertions(+) diff --git a/frame/1/bli_l1v_check.c b/frame/1/bli_l1v_check.c index 54c856b45..7ca5e1291 100644 --- a/frame/1/bli_l1v_check.c +++ b/frame/1/bli_l1v_check.c @@ -203,6 +203,11 @@ void bli_l1v_xy_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_vector_object( x ); @@ -243,6 +248,11 @@ void bli_l1v_axy_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); @@ -289,6 +299,11 @@ void bli_l1v_xby_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( beta ); @@ -339,6 +354,11 @@ void bli_l1v_axby_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); @@ -402,6 +422,11 @@ void bli_l1v_dot_check e_val = bli_check_nonconstant_object( rho ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); diff --git a/frame/1d/bli_l1d_check.c b/frame/1d/bli_l1d_check.c index 3846d99ef..118908657 100644 --- a/frame/1d/bli_l1d_check.c +++ b/frame/1d/bli_l1d_check.c @@ -121,6 +121,11 @@ void bli_l1d_xy_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_matrix_object( x ); @@ -161,6 +166,11 @@ void bli_l1d_axy_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); diff --git a/frame/1f/bli_l1f_check.c b/frame/1f/bli_l1f_check.c index a64b9c7db..4ba9dc034 100644 --- a/frame/1f/bli_l1f_check.c +++ b/frame/1f/bli_l1f_check.c @@ -66,6 +66,14 @@ void bli_axpy2v_check e_val = bli_check_floating_object( z ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( x, z ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alphax ); @@ -132,6 +140,14 @@ void bli_axpyf_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); @@ -203,6 +219,17 @@ void bli_dotaxpyv_check e_val = bli_check_floating_object( z ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, xt ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( x, z ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); @@ -299,6 +326,23 @@ void bli_dotxaxpyf_check e_val = bli_check_floating_object( z ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, at ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, w ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, z ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); @@ -407,6 +451,14 @@ void bli_dotxf_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); diff --git a/frame/1m/bli_l1m_check.c b/frame/1m/bli_l1m_check.c index d2ae6c5c4..ad8c409a7 100644 --- a/frame/1m/bli_l1m_check.c +++ b/frame/1m/bli_l1m_check.c @@ -106,6 +106,11 @@ void bli_l1m_xy_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_matrix_object( x ); @@ -146,6 +151,11 @@ void bli_l1m_axy_check e_val = bli_check_floating_object( y ); bli_check_error_code( e_val ); + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( x, y ); + bli_check_error_code( e_val ); + // Check object dimensions. e_val = bli_check_scalar_object( alpha ); diff --git a/frame/2/bli_l2_check.c b/frame/2/bli_l2_check.c index 84dda521f..d8f66ff87 100644 --- a/frame/2/bli_l2_check.c +++ b/frame/2/bli_l2_check.c @@ -53,6 +53,14 @@ void bli_gemv_check e_val = bli_check_general_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); } @@ -80,6 +88,14 @@ void bli_hemv_check e_val = bli_check_hermitian_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); } @@ -107,6 +123,14 @@ void bli_symv_check e_val = bli_check_symmetric_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); } @@ -132,6 +156,11 @@ void bli_trmv_check e_val = bli_check_triangular_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); } @@ -157,6 +186,11 @@ void bli_trsv_check e_val = bli_check_triangular_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); } @@ -178,6 +212,14 @@ void bli_ger_check e_val = bli_check_general_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); } @@ -203,6 +245,11 @@ void bli_her_check e_val = bli_check_hermitian_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); } @@ -229,6 +276,14 @@ void bli_her2_check e_val = bli_check_hermitian_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); } @@ -254,6 +309,11 @@ void bli_syr_check e_val = bli_check_symmetric_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); } @@ -280,6 +340,14 @@ void bli_syr2_check e_val = bli_check_symmetric_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( a, x ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( a, y ); + bli_check_error_code( e_val ); } diff --git a/frame/3/bli_l3_check.c b/frame/3/bli_l3_check.c index 3dfd9bbf4..1a14ba93f 100644 --- a/frame/3/bli_l3_check.c +++ b/frame/3/bli_l3_check.c @@ -294,6 +294,14 @@ void bli_gemm_basic_check e_val = bli_check_level3_dims( a, b, c ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( c, a ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( c, b ); + bli_check_error_code( e_val ); } void bli_hemm_basic_check @@ -330,6 +338,14 @@ void bli_hemm_basic_check e_val = bli_check_square_object( a ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( c, a ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( c, b ); + bli_check_error_code( e_val ); } void bli_herk_basic_check @@ -365,6 +381,14 @@ void bli_herk_basic_check e_val = bli_check_general_object( ah ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( c, a ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( c, ah ); + bli_check_error_code( e_val ); } void bli_her2k_basic_check @@ -412,6 +436,20 @@ void bli_her2k_basic_check e_val = bli_check_general_object( ah ); bli_check_error_code( e_val ); + + // Check for consistent datatypes. + + e_val = bli_check_consistent_object_datatypes( c, a ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( c, ah ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( c, b ); + bli_check_error_code( e_val ); + + e_val = bli_check_consistent_object_datatypes( c, bh ); + bli_check_error_code( e_val ); } void bli_l3_basic_check