首页 > 解决方案 > 为什么不同数据类型的 GPU 性能变化如此之大

问题描述

用一段代码来测试CPU和GPU的性能差异,我发现性能差异很有趣。

float16 性能最差,但 GPU 的提升最为明显。 在此处输入图像描述

float32 性能最好,但 GPU 的提升有限。 在此处输入图像描述

float64 比 float16 好,但 gpu 不如 CPU。 在此处输入图像描述

这里的任何人都可以分享一些关于为什么的见解吗?

我的硬件是 Xeon E5-1650 + Quadro K620。
这是我的测试代码。

from __future__ import print_function
import matplotlib
import matplotlib.pyplot as plt
import tensorflow as tf
import time

def get_times(maximum_time):

    device_times = {
        "/gpu:0":[],
        "/cpu:0":[]
    }
    matrix_sizes = range(500,50000,50)

    for size in matrix_sizes:
        for device_name in device_times.keys():

            print("####### Calculating on the " + device_name + " #######")

            shape = (size,size)
            data_type = tf.float16
            with tf.device(device_name):
                r1 = tf.random_uniform(shape=shape, minval=0, maxval=1, dtype=data_type)
                r2 = tf.random_uniform(shape=shape, minval=0, maxval=1, dtype=data_type)
                dot_operation = tf.matmul(r2, r1)


            with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as session:
                    start_time = time.time()
                    result = session.run(dot_operation)
                    time_taken = time.time() - start_time
                    print(result)
                    device_times[device_name].append(time_taken)

            print(device_times)

            if time_taken > maximum_time:
                return device_times, matrix_sizes


device_times, matrix_sizes = get_times(1.5)
gpu_times = device_times["/gpu:0"]
cpu_times = device_times["/cpu:0"]

plt.plot(matrix_sizes[:len(gpu_times)], gpu_times, 'o-')
plt.plot(matrix_sizes[:len(cpu_times)], cpu_times, 'o-')
plt.ylabel('Time')
plt.xlabel('Matrix size')
plt.show()

标签: tensorflowgpu

解决方案


推荐阅读