这里给出自己测试 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 下运行有并行加速的效果,如果是多核的情况,后面三个计算时间会比以上运行结果更小一些。
- 在两台设备的测试中,如果发现其中一个设备的第一个计算时间较短,其他三个时间的较长,那么说明该设备的单核能力较强,并行能力较弱。反之,则说明并行能力较强,单核能力较弱。
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】