void bli_gemm_cntl_init() { // Create blocksize objects for each dimension. gemm_mc = bli_blksz_obj_create( BLIS_DEFAULT_MC_S, BLIS_EXTEND_MC_S, BLIS_DEFAULT_MC_D, BLIS_EXTEND_MC_D, BLIS_DEFAULT_MC_C, BLIS_EXTEND_MC_C, BLIS_DEFAULT_MC_Z, BLIS_EXTEND_MC_Z ); gemm_nc = bli_blksz_obj_create( BLIS_DEFAULT_NC_S, BLIS_EXTEND_NC_S, BLIS_DEFAULT_NC_D, BLIS_EXTEND_NC_D, BLIS_DEFAULT_NC_C, BLIS_EXTEND_NC_C, BLIS_DEFAULT_NC_Z, BLIS_EXTEND_NC_Z ); gemm_kc = bli_blksz_obj_create( BLIS_DEFAULT_KC_S, BLIS_EXTEND_KC_S, BLIS_DEFAULT_KC_D, BLIS_EXTEND_KC_D, BLIS_DEFAULT_KC_C, BLIS_EXTEND_KC_C, BLIS_DEFAULT_KC_Z, BLIS_EXTEND_KC_Z ); gemm_mr = bli_blksz_obj_create( BLIS_DEFAULT_MR_S, BLIS_EXTEND_MR_S, BLIS_DEFAULT_MR_D, BLIS_EXTEND_MR_D, BLIS_DEFAULT_MR_C, BLIS_EXTEND_MR_C, BLIS_DEFAULT_MR_Z, BLIS_EXTEND_MR_Z ); gemm_nr = bli_blksz_obj_create( BLIS_DEFAULT_NR_S, BLIS_EXTEND_NR_S, BLIS_DEFAULT_NR_D, BLIS_EXTEND_NR_D, BLIS_DEFAULT_NR_C, BLIS_EXTEND_NR_C, BLIS_DEFAULT_NR_Z, BLIS_EXTEND_NR_Z ); gemm_kr = bli_blksz_obj_create( BLIS_DEFAULT_KR_S, BLIS_EXTEND_KR_S, BLIS_DEFAULT_KR_D, BLIS_EXTEND_KR_D, BLIS_DEFAULT_KR_C, BLIS_EXTEND_KR_C, BLIS_DEFAULT_KR_Z, BLIS_EXTEND_KR_Z ); // Create control tree objects for packm operations. gemm_packa_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm_mr, gemm_kr, FALSE, // already dense; densify not necessary FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_ROW_PANELS, BLIS_BUFFER_FOR_A_BLOCK ); gemm_packb_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm_kr, gemm_nr, FALSE, // already dense; densify not necessary 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 objects for packm/unpackm operations on C. gemm_packc_cntl = bli_packm_cntl_obj_create( BLIS_UNBLOCKED, BLIS_VARIANT1, gemm_mr, gemm_nr, FALSE, // already dense; densify not necessary FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_COLUMNS, BLIS_BUFFER_FOR_C_PANEL ); gemm_unpackc_cntl = bli_unpackm_cntl_obj_create( BLIS_UNBLOCKED, BLIS_VARIANT1, NULL ); // no blocksize needed // // Create a control tree for packing A and B, and streaming C. // // Create control tree object for lowest-level block-panel kernel. gemm_cntl_bp_ke = bli_gemm_cntl_obj_create( BLIS_UNB_OPT, BLIS_VARIANT2, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); // Create control tree object for outer panel (to block-panel) // problem. gemm_cntl_op_bp = bli_gemm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, gemm_mc, NULL, gemm_packa_cntl, gemm_packb_cntl, NULL, gemm_cntl_bp_ke, NULL ); // Create control tree object for general problem via multiple // rank-k (outer panel) updates. gemm_cntl_mm_op = bli_gemm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, gemm_kc, NULL, NULL, NULL, NULL, gemm_cntl_op_bp, NULL ); // Create control tree object for very large problem via multiple // general problems. gemm_cntl_vl_mm = bli_gemm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm_nc, NULL, NULL, NULL, NULL, gemm_cntl_mm_op, NULL ); // Alias the "master" gemm control tree to a shorter name. gemm_cntl = gemm_cntl_vl_mm; #if 0 // // Create a control tree for packing A, and streaming B and C. // gemm_cntl_bp_ke5 = bli_gemm_cntl_obj_create( BLIS_UNB_OPT, BLIS_VARIANT5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); gemm_cntl_pm_bp = bli_gemm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, gemm_kc, NULL, gemm_packa_cntl, NULL, //gemm_packc_cntl, NULL, gemm_cntl_bp_ke5, //gemm_unpackc_cntl ); NULL ); gemm_cntl_mm_pm = bli_gemm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT1, gemm_mc, NULL, NULL, NULL, NULL, gemm_cntl_pm_bp, NULL ); gemm_cntl_vl_mm5 = bli_gemm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, gemm_nc, NULL, NULL, NULL, NULL, gemm_cntl_mm_pm, NULL ); gemm_cntl_packa = gemm_cntl_vl_mm5; #endif }
void bli_herk_cntl_init() { // Create blocksize objects for each dimension. herk_mc = bli_blksz_obj_create( BLIS_DEFAULT_MC_S, BLIS_EXTEND_MC_S, BLIS_DEFAULT_MC_D, BLIS_EXTEND_MC_D, BLIS_DEFAULT_MC_C, BLIS_EXTEND_MC_C, BLIS_DEFAULT_MC_Z, BLIS_EXTEND_MC_Z ); herk_nc = bli_blksz_obj_create( BLIS_DEFAULT_NC_S, BLIS_EXTEND_NC_S, BLIS_DEFAULT_NC_D, BLIS_EXTEND_NC_D, BLIS_DEFAULT_NC_C, BLIS_EXTEND_NC_C, BLIS_DEFAULT_NC_Z, BLIS_EXTEND_NC_Z ); herk_kc = bli_blksz_obj_create( BLIS_DEFAULT_KC_S, BLIS_EXTEND_KC_S, BLIS_DEFAULT_KC_D, BLIS_EXTEND_KC_D, BLIS_DEFAULT_KC_C, BLIS_EXTEND_KC_C, BLIS_DEFAULT_KC_Z, BLIS_EXTEND_KC_Z ); herk_mr = bli_blksz_obj_create( BLIS_DEFAULT_MR_S, BLIS_EXTEND_MR_S, BLIS_DEFAULT_MR_D, BLIS_EXTEND_MR_D, BLIS_DEFAULT_MR_C, BLIS_EXTEND_MR_C, BLIS_DEFAULT_MR_Z, BLIS_EXTEND_MR_Z ); herk_nr = bli_blksz_obj_create( BLIS_DEFAULT_NR_S, BLIS_EXTEND_NR_S, BLIS_DEFAULT_NR_D, BLIS_EXTEND_NR_D, BLIS_DEFAULT_NR_C, BLIS_EXTEND_NR_C, BLIS_DEFAULT_NR_Z, BLIS_EXTEND_NR_Z ); herk_kr = bli_blksz_obj_create( BLIS_DEFAULT_KR_S, BLIS_EXTEND_KR_S, BLIS_DEFAULT_KR_D, BLIS_EXTEND_KR_D, BLIS_DEFAULT_KR_C, BLIS_EXTEND_KR_C, BLIS_DEFAULT_KR_Z, BLIS_EXTEND_KR_Z ); herk_ni = bli_blksz_obj_create( BLIS_DEFAULT_NI_S, 0, BLIS_DEFAULT_NI_D, 0, BLIS_DEFAULT_NI_C, 0, BLIS_DEFAULT_NI_Z, 0 ); // Create control tree objects for packm operations. herk_packa_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, herk_mr, herk_kr, FALSE, // already dense; densify not necessary FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_ROW_PANELS, BLIS_BUFFER_FOR_A_BLOCK ); herk_packb_cntl = bli_packm_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, herk_kr, herk_nr, FALSE, // already dense; densify not necessary 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 objects for packm/unpackm operations on C. herk_packc_cntl = bli_packm_cntl_obj_create( BLIS_UNBLOCKED, BLIS_VARIANT1, herk_mr, herk_nr, FALSE, // already dense; densify not necessary FALSE, // do NOT invert diagonal FALSE, // reverse iteration if upper? FALSE, // reverse iteration if lower? BLIS_PACKED_COLUMNS, BLIS_BUFFER_FOR_GEN_USE ); herk_unpackc_cntl = bli_unpackm_cntl_obj_create( BLIS_UNBLOCKED, BLIS_VARIANT1, NULL ); // no blocksize needed // Create control tree object for lowest-level block-panel kernel. herk_cntl_bp_ke = bli_herk_cntl_obj_create( BLIS_UNB_OPT, BLIS_VARIANT2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); // Create control tree object for outer panel (to block-panel) // problem. herk_cntl_op_bp = bli_herk_cntl_obj_create( BLIS_BLOCKED, //BLIS_VARIANT4, // var1 with incremental pack in iter 0 BLIS_VARIANT1, herk_mc, herk_ni, NULL, herk_packa_cntl, herk_packb_cntl, NULL, herk_cntl_bp_ke, NULL ); // Create control tree object for general problem via multiple // rank-k (outer panel) updates. herk_cntl_mm_op = bli_herk_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT3, herk_kc, NULL, NULL, NULL, NULL, NULL, herk_cntl_op_bp, NULL ); // Create control tree object for very large problem via multiple // general problems. herk_cntl_vl_mm = bli_herk_cntl_obj_create( BLIS_BLOCKED, BLIS_VARIANT2, herk_nc, NULL, NULL, NULL, NULL, NULL, herk_cntl_mm_op, NULL ); // Alias the "master" herk control tree to a shorter name. herk_cntl = herk_cntl_vl_mm; }