コード例 #1
0
ファイル: my_stra_gen_ab.py プロジェクト: zggl/tblis-strassen
def write_stra_matC(myfile, coeff_idx, coeffs, idx, dim_name, dims, level):
    mat_name = (getName(coeff_idx))[0]
    nonzero_coeffs = [coeff for coeff in coeffs if is_nonzero(coeff)]

    #add = 'std::array<unsigned, ' + str(len(nonzero_coeffs)) + '> ' + mat_name + str(idx) + '_subid = {'
    #add += ', '.join(['%s' % getActualBlockIndex( coeff_idx, i, dims, level ) \
    #                           for i, c in enumerate(coeffs) if is_nonzero(c)])
    #add += '};'
    #write_line(myfile, 1, add)

    add = 'std::array<T*,' + str(
        len(nonzero_coeffs)) + '> ' + mat_name + str(idx) + '_list = {'
    #add += ', '.join( [ str(c) for i, c in enumerate(coeffs) if is_nonzero(c) ] )
    add += ', '.join([
        'const_cast<T*>(%s)' % (getBlockName(coeff_idx, i, dims, level))
        for i, c in enumerate(coeffs) if is_nonzero(c)
    ])
    add += '};'
    write_line(myfile, 1, add)

    add = 'std::array<T,' + str(
        len(nonzero_coeffs)) + '> ' + mat_name + str(idx) + '_coeff_list = {'
    add += ', '.join([str(c) for i, c in enumerate(coeffs) if is_nonzero(c)])
    add += '};'
    write_line(myfile, 1, add)
コード例 #2
0
ファイル: my_stra_gen_ab.py プロジェクト: zggl/tblis-strassen
def write_stra_matAB(myfile, coeff_idx, coeffs, idx, dim_name, dims, level):
    mat_name = (getName(coeff_idx))[0]
    nonzero_coeffs = [coeff for coeff in coeffs if is_nonzero(coeff)]

    add = 'std::array<unsigned, ' + str(
        len(nonzero_coeffs)) + '> ' + mat_name + str(idx) + '_subid = {'
    add += ', '.join(['%s' % getActualBlockIndex( coeff_idx, i, dims, level ) \
                               for i, c in enumerate(coeffs) if is_nonzero(c)])
    add += '};'
    write_line(myfile, 1, add)

    add = 'std::array<T,' + str(
        len(nonzero_coeffs)) + '> ' + mat_name + str(idx) + '_coeff_list = {'
    add += ', '.join([str(c) for i, c in enumerate(coeffs) if is_nonzero(c)])
    add += '};'
    write_line(myfile, 1, add)

    add = 'stra_tensor_view<T,' + str(len(nonzero_coeffs)) + '> '
    add += mat_name + 'v' + str(idx)
    add += '(my_len_' + dim_name[0] + ', '
    add += 'my_len_' + dim_name[1] + ', '
    add += mat_name + '_divisor, const_cast<T*>(' + mat_name + '), '
    add += mat_name + str(idx) + '_subid, ' + mat_name + str(
        idx) + '_coeff_list, '
    add += 'my_stride_' + mat_name + '_' + dim_name[0] + ','
    add += ' my_stride_' + mat_name + '_' + dim_name[1]
    add += ');'

    write_line(myfile, 1, add)
コード例 #3
0
def write_stra_mat(myfile, coeff_idx, coeffs, idx, dim_name, dims, level):
    mat_name = (getName(coeff_idx))[0]
    nonzero_coeffs = [coeff for coeff in coeffs if is_nonzero(coeff)]
    add = 'stra_matrix_view<T,' + str(len(nonzero_coeffs)) + '> '
    add += mat_name + 'v' + str(idx) + '({' + dim_name + '}, {'
    #add += ', '.join( ['const_cast<T*>(%s)' % (getSubMatName(coeff_idx, i, dims, level) ) for i, c in enumerate(coeffs) if is_nonzero(c)] )
    add += ', '.join([
        'const_cast<T*>(%s)' % (getBlockName(coeff_idx, i, dims, level))
        for i, c in enumerate(coeffs) if is_nonzero(c)
    ])
    add += '}, {'
    add += ', '.join([str(c) for i, c in enumerate(coeffs) if is_nonzero(c)])
    add += '}, {rs_' + mat_name + ', cs_' + mat_name + '});'

    write_line(myfile, 1, add)
コード例 #4
0
def getActualBlockIndex( coeff_idx, item_idx, dims, level=1 ):
    my_mat_name = ( getName( coeff_idx ) )[ 0 ]

    if( coeff_idx == 0 ):
        mm = dims[0]
        nn = dims[1]
    elif( coeff_idx == 1 ):
        mm = dims[1]
        nn = dims[2]
    elif( coeff_idx == 2 ):
        mm = dims[0]
        nn = dims[2]
    else:
        print "Wrong coeff_idx\n"

    #my_partition_ii = item_idx / nn
    #my_partition_jj = item_idx % nn
    submat_idx = ""
    dividend = item_idx
    mm_base = 1
    nn_base = 1
    ii_idx = 0
    jj_idx = 0
    for level_idx in range( level ):
        remainder = dividend % ( mm * nn )
        #remainder -> i, j (m_axis, n_axis)
        ii = remainder / nn
        jj = remainder % nn
        ii_idx = ii * mm_base + ii_idx
        jj_idx = jj * nn_base + jj_idx
        #submat_idx = str(remainder) + submat_idx
        dividend = dividend / ( mm * nn )
        mm_base = mm_base * mm
        nn_base = nn_base * nn

    #return  [ str(ii_idx), str(jj_idx) ] 

    return  str(ii_idx * nn_base + jj_idx)