Esempio n. 1
0
def choose_params(params: Parameters) -> BlockedParameters:

    print("dxsp_blocked.choose_params")
    pattern = Matrix.load_pattern(params.mtx_filename)

    #TODO: Choose bk,bn better
    bm = 8 if params.bm is None else params.bm
    bn = 8 if params.bn is None else params.bn
    bk = 8 if params.bk is None else params.bk
    params.bm = bm
    params.bn = bn
    params.bk = bk

    # TODO: Currently does not support fringe
    Bk, Bn = params.k // bk, params.n // bn
    patterns = []
    blocks = Matrix.full(Bk, Bn, -1)
    x = 0
    for Bni in range(Bn):
        for Bki in range(Bk):
            block = pattern[(Bki * bk):((Bki + 1) * bk),
                            (Bni * bn):((Bni + 1) * bn)]
            found = False
            for pi in range(len(patterns)):
                if patterns[pi] == block:
                    blocks[Bki, Bni] = pi
                    found = True
            if not found:
                blocks[Bki, Bni] = x
                x += 1
                patterns.append(block)

    return BlockedParameters(params, blocks, patterns)
Esempio n. 2
0
def choose_params(params: Parameters) -> TiledParameters:
    """ Augment the generic user-supplied parameters with optimal tiled-specific ones"""

    print("dxsp_tiled.choose_params")
    full_mtx = Matrix.load_pattern(params.mtx_filename)

    #TODO: Choose optimal bm,bn,bk given m,n,k,full_mtx
    bm = 8 if params.bm is None else params.bm
    bn = 8 if params.bn is None else params.bn
    bk = 8 if params.bk is None else params.bk
    params.bm = bm
    params.bn = bn
    params.bk = bk

    #TODO: Generate better funcname
    params.output_funcname = f"gemm_tiled_{params.m}x{params.n}x{params.k}"

    # Take tile pattern to be upper left-hand corner
    # TODO: Take logical union of all tiles
    pattern_mtx = full_mtx[:bk,:bn]
    return TiledParameters(params, pattern_mtx)