Пример #1
0
def cli_mat_mat(mat_shape, optimize, **kwargs):
    """``AB = C``."""
    i, j, k = dimensions('i j k')
    A = Function(name='A', shape=mat_shape, dimensions=(i, j))
    B = Function(name='B', shape=mat_shape, dimensions=(j, k))
    C = Function(name='C', shape=mat_shape, dimensions=(i, k))
    mat_mat(A, B, C, optimize)
Пример #2
0
def cli_transpose_mat_vec(mat_shape, vec_shape, optimize, **kwargs):
    """``A -> A^T, A^Tx = b``."""
    i, j = dimensions('i j')
    A = Function(name='A', shape=mat_shape, dimensions=(i, j))
    x = Function(name='x', shape=vec_shape, dimensions=(j,))
    b = Function(name='b', shape=vec_shape, dimensions=(i,))
    transpose_mat_vec(A, x, b, optimize)
Пример #3
0
def default_dim_allocator(count):
    global dim_index
    names = ''
    for i in range(count):
        names += 'd' + str(dim_index) + ' '
        dim_index += 1
    names = names[:-1]
    return dimensions(names)
Пример #4
0
def cli_chain_contractions(mat_shape, optimize, **kwargs):
    """``AB + AC = D, DE = F``."""
    i, j, k, l = dimensions('i j k l')
    A = Function(name='A', shape=mat_shape, dimensions=(i, j))
    B = Function(name='B', shape=mat_shape, dimensions=(j, k))
    C = Function(name='C', shape=mat_shape, dimensions=(j, k))
    D = Function(name='D', shape=mat_shape, dimensions=(i, k))
    E = Function(name='E', shape=mat_shape, dimensions=(k, l))
    F = Function(name='F', shape=mat_shape, dimensions=(i, l))
    chain_contractions(A, B, C, D, E, F, optimize)
Пример #5
0
    def test_edge_cases(self, exprs, simd_level, expected):
        # Tests for issue #1695
        t, x, y = dimensions('t x y')

        g = TimeFunction(name='g',
                         shape=(1, 3),
                         dimensions=(t, x),
                         time_order=0,
                         dtype=np.int32)
        g.data[0, :] = [0, 1, 2]
        h1 = TimeFunction(name='h1',
                          shape=(1, 3),
                          dimensions=(t, y),
                          time_order=0)
        h1.data[0, :] = 0

        # List comprehension would need explicit locals/globals mappings to eval
        for i, e in enumerate(list(exprs)):
            exprs[i] = eval(e)

        op = Operator(exprs, opt=('advanced', {'openmp': True}))

        iterations = FindNodes(Iteration).visit(op)
        try:
            assert 'omp for collapse' in iterations[0].pragmas[0].value
            if simd_level:
                assert 'omp simd' in iterations[simd_level].pragmas[0].value
        except:
            # E.g. gcc-5 doesn't support array reductions, so the compiler will
            # generate different legal code
            assert not Ompizer._support_array_reduction(
                configuration['compiler'])
            assert any('omp for collapse' in i.pragmas[0].value
                       for i in iterations if i.pragmas)

        op.apply()
        assert (h1.data == expected).all()