Exemple #1
0
            # Rank inner product
            nbytes = (one[0].global_bytes() + two[0].global_bytes()) * N * n * n
            for use_accelerator, compute_name, access in [
                (False, "host", access_host),
                (True, "accelerator", access_accelerator),
            ]:

                # Time
                dt = 0.0
                cgpt.timer_begin()
                for it in range(N + Nwarmup):
                    access(one)
                    access(two)
                    if it >= Nwarmup:
                        dt -= g.time()
                    ip = g.rank_inner_product(one, two, use_accelerator)
                    if it >= Nwarmup:
                        dt += g.time()

                # Report
                GBPerSec = nbytes / dt / 1e9
                cgpt_t = g.timer("rip")
                cgpt_t += cgpt.timer_end()
                g.message(
                    f"""{N} rank_inner_product
    Object type                 : {tp.__name__}
    Block                       : {n} x {n}
    Data resides in             : {access.__name__[7:]}
    Performed on                : {compute_name}
    Time to complete            : {dt:.2f} s
    Effective memory bandwidth  : {GBPerSec:.2f} GB/s
Exemple #2
0
g.copy(new, src)

# cshift into a new lattice dst
dst = g.cshift(src, 0, 1)
# dst[x] = src[x+1] -> src[0] == dst[15]
assert abs(dst[15, 0, 0, 0] - complex(2, 1)) < 1e-6

################################################################################
# Test multi inner_product
################################################################################
for grid in [grid_dp, grid_sp]:
    for dtype in [g.vspincolor, lambda grid: g.vcomplex(grid, 12), g.complex]:
        left = [dtype(grid) for i in range(2)]
        right = [dtype(grid) for i in range(3)]
        rng.cnormal([left, right])
        host_result = g.rank_inner_product(left, right, False)
        acc_result = g.rank_inner_product(left, right, True)
        eps = np.linalg.norm(host_result - acc_result) / np.linalg.norm(host_result)
        g.message(f"Test multi inner product host<>accelerator: {eps}")
        assert eps < 1e-13
        for i in range(2):
            for j in range(3):
                host_result_individual = g.rank_inner_product(left[i], right[j], False)
                acc_result_individual = g.rank_inner_product(left[i], right[j], True)
                eps = abs(host_result_individual - host_result[i, j]) / abs(
                    host_result[i, j]
                )
                assert eps < 1e-13
                eps = abs(acc_result_individual - acc_result[i, j]) / abs(
                    acc_result[i, j]
                )
Exemple #3
0
g.default.pop_verbose()

# outer product and inner product of tensors
lhs = g.vcolor([rng.cnormal() for i in range(3)])
rhs = g.vcolor([rng.cnormal() for i in range(3)])

outer = lhs * g.adj(rhs)
inner = g.adj(lhs) * rhs
inner_comp = 0.0
for i in range(3):
    inner_comp += lhs.array.conjugate()[i] * rhs.array[i]
    for j in range(3):
        assert abs(outer.array[i, j] -
                   lhs.array[i] * rhs.array.conjugate()[j]) < 1e-14
assert abs(inner_comp - inner) < 1e-14
assert abs(inner_comp - g.rank_inner_product(lhs, rhs)) < 1e-14

# TODO: the following is already implemented for vcomplex but should
# be implemented for all vectors
# cwise = lhs * rhs

# inner product for vcomplex
lhs = g.vcomplex([1.0] * 10 + [2] * 10 + [3] * 10 + [4] * 10, 40)
rhs = g.vcomplex([5.0] * 10 + [6] * 10 + [7] * 10 + [8] * 10, 40)

inner = g.adj(lhs) * rhs
inner_comp = 0.0
for i in range(40):
    inner_comp += lhs.array.conjugate()[i] * rhs.array[i]
assert abs(inner_comp - inner) < 1e-14
assert inner.real == 700.0