필요한 모듈을 임포트합니다.


In [1]:
import numpy as np
import tensorflow as tf
import datetime

10 제곱을 계산합니다.


In [2]:
n = 10

1000x1000개의 난수를 갖는 행렬 두개를 만듭니다.


In [3]:
A = np.random.rand(1000, 1000).astype('float32')
B = np.random.rand(1000, 1000).astype('float32')

In [4]:
A.shape, B.shape


Out[4]:
((1000, 1000), (1000, 1000))

결과를 저장할 두개의 리스트를 만듭니다.


In [5]:
c1 = []
c2 = []

재귀함수를 사용하여 행렬의 거듭제곱을 계산하는 함수 matpow를 만듭니다.


In [6]:
def matpow(M, n):
    if n < 1: #Abstract cases where n < 1
        return M
    else:
        return tf.matmul(M, matpow(M, n-1))

GPU가 있는 경우 아래 '/cpu:0'을 '/gpu:1'로 바꾸어 주세요.


In [7]:
with tf.device('/cpu:0'):
    a = tf.constant(A)
    b = tf.constant(B)
    #compute A^n and B^n and store results in c1
    c1.append(matpow(a, n))
    c1.append(matpow(b, n))

CPU를 사용하여 C1의 엘리먼트 값을 모두 더합니다.


In [8]:
with tf.device('/cpu:0'):
  sum = tf.add_n(c1) #Addition of all elements in c1, i.e. A^n + B^n

세션을 만들고 그래프를 실행합니다. 주피터 노트북을 실행한 쉘에 선택한 디바이스에 대한 로그가 나타납니다.


In [9]:
t1_1 = datetime.datetime.now()
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    # Runs the op.
    print(sess.run(sum))
t2_1 = datetime.datetime.now()


[[  9.74978161e+26   9.66636986e+26   9.71124710e+26 ...,   9.90500284e+26
    9.96335949e+26   9.84750065e+26]
 [  9.64085285e+26   9.55614540e+26   9.59861866e+26 ...,   9.79049136e+26
    9.85194853e+26   9.73621366e+26]
 [  9.76986200e+26   9.68365077e+26   9.72637933e+26 ...,   9.92086188e+26
    9.98376675e+26   9.86628755e+26]
 ..., 
 [  9.55115887e+26   9.46676133e+26   9.50842957e+26 ...,   9.69857418e+26
    9.76027116e+26   9.64535975e+26]
 [  9.76829771e+26   9.68154858e+26   9.72379605e+26 ...,   9.91831992e+26
    9.98214639e+26   9.86439492e+26]
 [  9.84891589e+26   9.76198302e+26   9.80503772e+26 ...,   1.00010971e+27
    1.00645502e+27   9.94611252e+26]]

In [10]:
print("Single CPU computation time: " + str(t2_1-t1_1))


Single CPU computation time: 0:00:00.475806