필요한 모듈을 임포트합니다.
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]:
결과를 저장할 두개의 리스트를 만듭니다.
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()
In [10]:
print("Single CPU computation time: " + str(t2_1-t1_1))