void bli_trmm_cntl_init() { // Create control tree objects for packm operations (left side). trmm_l_packa_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, // IMPORTANT: Unlike trsm, trmm does not require a // "k" dim multiple equal to mr. gemm_mr, gemm_kr, FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_ROW_PANELS, BLIS_BUFFER_FOR_A_BLOCK ); trmm_l_packb_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, // IMPORTANT: Unlike trsm, trmm does not require a // "k" dim multiple equal to mr. gemm_kr, gemm_nr, FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_COL_PANELS, BLIS_BUFFER_FOR_B_PANEL ); // Create control tree object for lowest-level block-panel kernel. trmm_cntl_bp_ke = bli_trmm_cntl_obj_create( BLIS_UNB_OPT, BLIS_VARIANT2, NULL, gemm_ukrs, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); // Create control tree object for outer panel (to block-panel) // problem (left side). trmm_l_cntl_op_bp = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, gemm_mc, gemm_ukrs, NULL, trmm_l_packa_cntl, trmm_l_packb_cntl, NULL, trmm_cntl_bp_ke, gemm_cntl_bp_ke, NULL ); // Create control tree object for general problem via multiple // rank-k (outer panel) updates (left side). trmm_l_cntl_mm_op = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, gemm_kc, gemm_ukrs, NULL, NULL, NULL, NULL, trmm_l_cntl_op_bp, NULL, NULL ); // Create control tree object for very large problem via multiple // general problems (left side). trmm_l_cntl_vl_mm = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm_nc, gemm_ukrs, NULL, NULL, NULL, NULL, trmm_l_cntl_mm_op, NULL, NULL ); // Alias the "master" trmm control trees to shorter names. trmm_l_cntl = trmm_l_cntl_vl_mm; }
void bli_trmm3m_cntl_init() { // Create control tree objects for packm operations (left side). trmm3m_l_packa_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, // IMPORTANT: for consistency with trsm, "k" dim // multiple is set to mr. gemm3m_mr, gemm3m_mr, TRUE, // densify FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_ROW_PANELS_3M, BLIS_BUFFER_FOR_A_BLOCK ); trmm3m_l_packb_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, // IMPORTANT: m dim multiple here must be mr // since "k" dim multiple is set to mr above. gemm3m_mr, gemm3m_nr, FALSE, // already dense FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_COL_PANELS_3M, BLIS_BUFFER_FOR_B_PANEL ); // Create control tree objects for packm operations (right side). trmm3m_r_packa_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, // IMPORTANT: for consistency with trsm, "k" dim // multiple is set to nr. gemm3m_mr, gemm3m_nr, FALSE, // already dense FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_ROW_PANELS_3M, BLIS_BUFFER_FOR_A_BLOCK ); trmm3m_r_packb_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, // IMPORTANT: m dim multiple here must be nr // since "k" dim multiple is set to nr above. gemm3m_nr, gemm3m_nr, TRUE, // densify FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_COL_PANELS_3M, BLIS_BUFFER_FOR_B_PANEL ); // Create control tree object for lowest-level block-panel kernel. trmm3m_cntl_bp_ke = bli_trmm_cntl_obj_create( BLIS_UNB_OPT, BLIS_VARIANT2, NULL, gemm3m_ukrs, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); // Create control tree object for outer panel (to block-panel) // problem (left side). trmm3m_l_cntl_op_bp = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, gemm3m_mc, NULL, NULL, trmm3m_l_packa_cntl, trmm3m_l_packb_cntl, NULL, trmm3m_cntl_bp_ke, gemm3m_cntl_bp_ke, NULL ); // Create control tree object for general problem via multiple // rank-k (outer panel) updates (left side). trmm3m_l_cntl_mm_op = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, gemm3m_kc, NULL, NULL, NULL, NULL, NULL, trmm3m_l_cntl_op_bp, NULL, NULL ); // Create control tree object for very large problem via multiple // general problems (left side). trmm3m_l_cntl_vl_mm = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm3m_nc, NULL, NULL, NULL, NULL, NULL, trmm3m_l_cntl_mm_op, NULL, NULL ); // Create control tree object for outer panel (to block-panel) // problem (right side). trmm3m_r_cntl_op_bp = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, gemm3m_mc, NULL, NULL, trmm3m_r_packa_cntl, trmm3m_r_packb_cntl, NULL, trmm3m_cntl_bp_ke, gemm3m_cntl_bp_ke, NULL ); // Create control tree object for general problem via multiple // rank-k (outer panel) updates (right side). trmm3m_r_cntl_mm_op = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, gemm3m_kc, NULL, NULL, NULL, NULL, NULL, trmm3m_r_cntl_op_bp, NULL, NULL ); // Create control tree object for very large problem via multiple // general problems (right side). trmm3m_r_cntl_vl_mm = bli_trmm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm3m_nc, NULL, NULL, NULL, NULL, NULL, trmm3m_r_cntl_mm_op, NULL, NULL ); // Alias the "master" trmm control trees to shorter names. trmm3m_l_cntl = trmm3m_l_cntl_vl_mm; trmm3m_r_cntl = trmm3m_r_cntl_vl_mm; }