科学计算, 生活

CPU性能测试Python代码

这里给出自己测试 CPU 性能的 Python 代码示例,可以作为基准,对本地电脑或服务器的 CPU 性能进行对比。计算的内容为 10 亿次的浮点加法运算、小矩阵的乘积(n=10)、大矩阵的乘积(n=1000)、超大矩阵的乘积(n=10000),总运行时长约为两三分钟。

单核和多核的影响:矩阵的乘积在多核 CPU 下运行有并行加速的效果,但没有按核数的相同倍数增加。如果要在本地电脑上测试单核 CPU 的性能,需要额外增加限制的代码,这里暂不考虑,可参考这篇的代码:在Python中使用multiprocessing实现多任务并行

说明:这里只计算了一些简单的例子,并不能代表 CPU 的综合性能,仅作为参考。实际上,应该是需要用专业的软件进行测试,或者是考虑具体的任务进行测试。

Python代码(time_test.py):

def addition_time():
    import time
    start_time = time.time()
    result = 0.0
    for _ in range(int(1e9)):
        result += 1e-9
    end_time = time.time()
    return end_time - start_time
execution_time = addition_time()
print("Execution time 0:", execution_time)

def np_dot_time():
    import numpy as np
    import time
    start_time = time.time()
    matrix_size = 10
    for _ in range(int(1e7)):
        matrix1 = np.random.rand(matrix_size, matrix_size)
        matrix2 = np.random.rand(matrix_size, matrix_size)
        result_matrix = np.dot(matrix1, matrix2)
    end_time = time.time()
    return end_time - start_time
execution_time = np_dot_time()
print("Execution time 1:", execution_time)

def np_dot_time_2():
    import numpy as np
    import time
    start_time = time.time()
    matrix_size = 1000
    for _ in range(int(1e3)):
        matrix1 = np.random.rand(matrix_size, matrix_size)
        matrix2 = np.random.rand(matrix_size, matrix_size)
        result_matrix = np.dot(matrix1, matrix2)
    end_time = time.time()
    return end_time - start_time
execution_time = np_dot_time_2()
print("Execution time 2:", execution_time)

def np_dot_time_3():
    import numpy as np
    import time
    start_time = time.time()
    matrix_size = 10000
    for _ in range(1):
        matrix1 = np.random.rand(matrix_size, matrix_size)
        matrix2 = np.random.rand(matrix_size, matrix_size)
        result_matrix = np.dot(matrix1, matrix2)
    end_time = time.time()
    return end_time - start_time
execution_time = np_dot_time_3()
print("Execution time 3:", execution_time)

在服务器上提交任务的 sh 文件(time_test.sh),为单核 CPU 运行的情况:

#!/bin/sh
#PBS -N time_test
#PBS -l nodes=1:ppn=1
python time_test.py

运行结果:

Execution time 0: 34.26491689682007
Execution time 1: 51.675291776657104
Execution time 2: 38.55372405052185
Execution time 3: 26.85602355003357

说明:

  • 第一个计算只能串行,它反应了单核 CPU 的计算能力。矩阵的乘积在多核 CPU 下运行有并行加速的效果,如果是多核的情况,后面三个计算时间会比以上运行结果更小一些。
  • 在两台设备的测试中,如果发现其中一个设备的第一个计算时间较短,其他三个时间的较长,那么说明该设备的单核能力较强,并行能力较弱。反之,则说明并行能力较强,单核能力较弱。
853 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code