Beispiel #1
0
def tree_of(template, sizes, context):
    if issubclass(template, sc.templates.elementwise_1d):
        N, = sizes
        x = sc.empty(N, dtype=sc.float32, context=context)
        y = sc.empty(N, dtype=sc.float32, context=context)
        return sc.assign(y, x + y), (x, y)
    elif issubclass(template, sc.templates.reduce_1d):
        N, = sizes
        x = sc.empty(N, context=context)
        y = sc.empty(N, context=context)
        return sc.dot(x, y), (x, y)
    elif issubclass(template, sc.templates.elementwise_2d):
        M, N = sizes
        A = sc.empty((M, N), context=context)
        B = sc.empty((M, N), context=context)
        return A + B, (A, B)
    elif issubclass(template, sc.templates.reduce_2d):
        T = template is sc.templates.reduce_2d_cols
        M, N = sizes[::-1] if T else sizes
        A = sc.empty((M, N), context=context)
        x = sc.empty(N, context=context)
        return sc.dot(A.T, x) if T else sc.dot(A, x), (A, x)
    elif issubclass(template, sc.templates.matrix_product):
        AT = template is sc.templates.matrix_product_tn or template is sc.templates.matrix_product_tt
        BT = template is sc.templates.matrix_product_nt or template is sc.templates.matrix_product_tt
        M, N, K = sizes
        A = sc.empty((K, M) if AT else (M, K), context=context)
        B = sc.empty((N, K) if BT else (K, N), context=context)
        AA = A.T if AT else A
        BB = B.T if BT else B
        return sc.dot(AA, BB), (A, B)
Beispiel #2
0
def tree_of(template, sizes, context):
    if issubclass(template, sc.templates.elementwise_1d):
        N, = sizes
        x = sc.empty(N, dtype=sc.float32, context=context)
        y = sc.empty(N, dtype=sc.float32, context=context)
        return sc.assign(y, x + y), (x, y)
    elif issubclass(template, sc.templates.reduce_1d):
        N, = sizes
        x = sc.empty(N, context=context)
        y = sc.empty(N, context=context)
        return sc.dot(x, y), (x, y)
    elif issubclass(template, sc.templates.elementwise_2d):
        M, N = sizes
        A = sc.empty((M,N), context=context)
        B = sc.empty((M,N), context=context)
        return A + B, (A, B)
    elif issubclass(template, sc.templates.reduce_2d):
        T = template is sc.templates.reduce_2d_cols
        M, N = sizes[::-1] if T else sizes
        A = sc.empty((M,N), context=context)
        x = sc.empty(N, context=context)
        return sc.dot(A.T, x) if T else sc.dot(A, x), (A, x)
    elif issubclass(template, sc.templates.matrix_product):
        AT = template is sc.templates.matrix_product_tn or template is sc.templates.matrix_product_tt
        BT = template is sc.templates.matrix_product_nt or template is sc.templates.matrix_product_tt
        M, N, K = sizes
        A = sc.empty((K, M) if AT else (M, K), context=context)
        B = sc.empty((N, K) if BT else (K, N), context=context)
        AA = A.T if AT else A
        BB = B.T if BT else B
        return sc.dot(AA, BB), (A, B)
Beispiel #3
0
import isaac as sc
import isaac.templates as templates

sc.driver.default.queue_properties = sc.driver.PROFILING_ENABLE
sc.driver.default.device = 0;

#Construct vectors using the default device.
M, N, K = 972, 1541, 793
A = sc.empty((M, K), sc.float32)
B = sc.empty((K, N), sc.float32)

#Get command queue
queue = A.context.queues[0]

#Benchmark profile 1
queue.profiles[sc.templates.gemm_nn, sc.float32] = sc.profile(templates.gemm_nn(1,8,16,8,1,8,1,8,templates.FETCH_FROM_LOCAL,templates.FETCH_FROM_LOCAL,8,8), sc.float32, queue)
C, events = sc.driver.enqueue(sc.reduce_1d(A, B))
C.context.synchronize()
print 'Profile 1 finished in', sum([e.elapsed_time for e in events])*1e-9, 's'

#Benchmark profile 2
queue.profiles[sc.templates.gemm_nn, sc.float32] = sc.profile(templates.gemm_nn(1,8,16,16,1,8,1,8,templates.FETCH_FROM_LOCAL,templates.FETCH_FROM_LOCAL,8,16), sc.float32, queue)
C, events = sc.driver.enqueue(sc.reduce_1d(A, B))
C.context.synchronize()
print 'Profile 2 finished in', sum([e.elapsed_time for e in events])*1e-9, 's'
Beispiel #4
0
import isaac as sc

N = 7

platforms = sc.driver.get_platforms()
devices = [d for platform in platforms for d in platform.get_devices()]
device = devices[0]
print 'Using', device.name, 'on', device.platform.name

context = sc.driver.context(device)
x = sc.empty(N, sc.float32, context)
y = sc.empty(N, sc.float32, context)

z, events = sc.driver.enqueue(x + y)
z.context.synchronize()

print z
Beispiel #5
0
def tree_of(template, sizes, context):
    if issubclass(template, sc.templates.elementwise_1d):
        N, = sizes
        x = sc.empty(N, dtype=dtype, context=context)
        y = sc.empty(N, dtype=dtype, context=context)
        return sc.assign(y, x + y), (x, y)
    elif issubclass(template, sc.templates.reduce_1d):
        N, = sizes
        x = sc.empty(N, dtype=dtype, context=context)
        y = sc.empty(N, dtype=dtype, context=context)
        return sc.dot(x, y), (x, y)
    elif issubclass(template, sc.templates.elementwise_2d):
        M, N = sizes
        A = sc.empty((M, N), dtype=dtype, context=context)
        B = sc.empty((M, N), dtype=dtype, context=context)
        return A + B, (A, B)
    elif issubclass(template, sc.templates.reduce_2d):
        T = template is sc.templates.reduce_2d_cols
        M, N = sizes[::-1] if T else sizes
        A = sc.empty((M, N), dtype=dtype, context=context)
        x = sc.empty(N, dtype=dtype, context=context)
        y = sc.empty(M, dtype=dtype, context=context)
        return sc.assign(x, sc.dot(A.T, y)) if T else sc.assign(
            y, sc.dot(A, x)), (A, x, y)
    elif issubclass(template, sc.templates.gemm):
        AT = template is sc.templates.gemm_tn or template is sc.templates.gemm_tt
        BT = template is sc.templates.gemm_nt or template is sc.templates.gemm_tt
        M, N, K = sizes
        C = sc.empty((M, N), dtype=dtype, context=context)
        A = sc.empty((K, M) if AT else (M, K), dtype=dtype, context=context)
        B = sc.empty((N, K) if BT else (K, N), dtype=dtype, context=context)
        AA = A.T if AT else A
        BB = B.T if BT else B
        return sc.assign(C, sc.dot(AA, BB)), (A, B, C)
Beispiel #6
0
def tree_of(template, sizes, context):
    if issubclass(template, sc.templates.elementwise_1d):
        N, = sizes
        x = sc.empty(N, dtype=dtype, context=context)
        y = sc.empty(N, dtype=dtype, context=context)
        return sc.assign(y, x + y), (x, y)
    elif issubclass(template, sc.templates.reduce_1d):
        N, = sizes
        x = sc.empty(N, dtype=dtype, context=context)
        y = sc.empty(N, dtype=dtype, context=context)
        return sc.dot(x, y), (x, y)
    elif issubclass(template, sc.templates.elementwise_2d):
        M, N = sizes
        A = sc.empty((M,N), dtype=dtype, context=context)
        B = sc.empty((M,N), dtype=dtype, context=context)
        return A + B, (A, B)
    elif issubclass(template, sc.templates.reduce_2d):
        T = template is sc.templates.reduce_2d_cols
        M, N = sizes[::-1] if T else sizes
        A = sc.empty((M,N), dtype=dtype, context=context)
        x = sc.empty(N, dtype=dtype, context=context)
        y = sc.empty(M, dtype=dtype, context=context)
        return sc.assign(x, sc.dot(A.T, y)) if T else sc.assign(y, sc.dot(A, x)), (A, x, y)
    elif issubclass(template, sc.templates.gemm):
        AT = template is sc.templates.gemm_tn or template is sc.templates.gemm_tt
        BT = template is sc.templates.gemm_nt or template is sc.templates.gemm_tt
        M, N, K = sizes
        C = sc.empty((M,N), dtype=dtype, context=context)
        A = sc.empty((K, M) if AT else (M, K), dtype=dtype, context=context)
        B = sc.empty((N, K) if BT else (K, N), dtype=dtype, context=context)
        AA = A.T if AT else A
        BB = B.T if BT else B
        return sc.assign(C, sc.dot(AA, BB)), (A, B, C)