This commit is contained in:
guanjihuan 2025-03-11 18:46:42 +08:00
parent 7fabcff909
commit 3776c2c12a
10 changed files with 157 additions and 0 deletions

View File

@ -0,0 +1,14 @@
import guan # https://py.guanjihuan.com | install: pip install --upgrade guan
import numpy as np
import os
cpu_num_array = np.arange(1, 65)
py_filename='matrix_running_time_for_different_num_of_cpu_cores_writing_into_files'
current_directory = os.getcwd()
for cpu_num in cpu_num_array:
guan.make_directory(f'./task_{cpu_num}')
os.system(f'cp ./{py_filename}.py ./task_{cpu_num}/{py_filename}.py')
os.system(f'cd {current_directory}/task_{cpu_num}')
guan.make_sh_file_for_qsub(sh_filename=f'./task_{cpu_num}/task_{cpu_num}', command_line=f'python {py_filename}.py', cpu_num=cpu_num, task_name=f'test_{cpu_num}', cd_dir=0)

View File

@ -0,0 +1,39 @@
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/45324
"""
import numpy as np
import time
import pickle
n = 1000
A = np.random.rand(n, n)
B = np.random.rand(n, n)
test_times = 20
# 矩阵乘法
start_time = time.time()
for _ in range(test_times):
C = np.dot(A, B)
multiply_time = (time.time() - start_time)/test_times
with open(f'multiply_time_n={n}.pkl', 'wb') as f:
pickle.dump(multiply_time, f)
# 矩阵求逆
start_time = time.time()
for _ in range(test_times):
inv_A = np.linalg.inv(A)
inv_time = (time.time() - start_time)/test_times
with open(f'inv_time_n={n}.pkl', 'wb') as f:
pickle.dump(inv_time, f)
# 矩阵的特征值和特征向量
start_time = time.time()
for _ in range(test_times):
eigenvalues_A, eigenvector_A = np.linalg.eig(A)
eigen_time = (time.time() - start_time)/test_times
with open(f'eigen_time_n={n}.pkl', 'wb') as f:
pickle.dump(eigen_time, f)

View File

@ -0,0 +1,91 @@
import matplotlib.pyplot as plt
# from matplotlib.ticker import MultipleLocator
import numpy as np
import pickle
cpu_num_array = np.arange(1, 65)
n = 1000
time_array_1 = []
for cpu_num in cpu_num_array:
with open(f'./task_{cpu_num}/multiply_time_n={n}.pkl', 'rb') as f:
data = pickle.load(f)
time_array_1.append(data)
fig, ax = plt.subplots()
ax.set_title('np.dot()')
ax.set_xlabel('Number of CPU cores')
ax.set_ylabel('Time (s)')
# ax.xaxis.set_major_locator(MultipleLocator(1))
plt.plot(cpu_num_array, time_array_1, '-o', )
plt.savefig(f'multiply_time_n={n}.jpg')
# plt.show()
time_0 = time_array_1[0]
for i0 in range(len(time_array_1)):
time_array_1[i0] = time_0/time_array_1[i0]
fig, ax = plt.subplots()
ax.set_title('np.dot()')
ax.set_xlabel('Number of CPU cores')
ax.set_ylabel('Ratio')
# ax.xaxis.set_major_locator(MultipleLocator(1))
plt.plot(cpu_num_array, time_array_1, '-o', )
plt.plot(cpu_num_array, cpu_num_array, '--r')
plt.savefig(f'multiply_time_ratio_n={n}.jpg')
# plt.show()
time_array_2 = []
for cpu_num in cpu_num_array:
with open(f'./task_{cpu_num}/inv_time_n={n}.pkl', 'rb') as f:
data = pickle.load(f)
time_array_2.append(data)
fig, ax = plt.subplots()
ax.set_title('np.linalg.inv()')
ax.set_xlabel('Number of CPU cores')
ax.set_ylabel('Time (s)')
# ax.xaxis.set_major_locator(MultipleLocator(1))
plt.plot(cpu_num_array, time_array_2, '-o', )
plt.savefig(f'inv_time_n={n}.jpg')
# plt.show()
time_0 = time_array_2[0]
for i0 in range(len(time_array_2)):
time_array_2[i0] = time_0/time_array_2[i0]
fig, ax = plt.subplots()
ax.set_title('np.linalg.inv()')
ax.set_xlabel('Number of CPU cores')
ax.set_ylabel('Ratio')
# ax.xaxis.set_major_locator(MultipleLocator(1))
plt.plot(cpu_num_array, time_array_2, '-o', )
plt.plot(cpu_num_array, cpu_num_array, '--r')
plt.savefig(f'inv_time_ratio_n={n}.jpg')
# plt.show()
time_array_3 = []
for cpu_num in cpu_num_array:
with open(f'./task_{cpu_num}/eigen_time_n={n}.pkl', 'rb') as f:
data = pickle.load(f)
time_array_3.append(data)
fig, ax = plt.subplots()
ax.set_title('np.linalg.eig()')
ax.set_xlabel('Number of CPU cores')
ax.set_ylabel('Time (s)')
# ax.xaxis.set_major_locator(MultipleLocator(1))
plt.plot(cpu_num_array, time_array_3, '-o', )
plt.savefig(f'eigen_time_n={n}.jpg')
# plt.show()
time_0 = time_array_3[0]
for i0 in range(len(time_array_3)):
time_array_3[i0] = time_0/time_array_3[i0]
fig, ax = plt.subplots()
ax.set_title('np.linalg.eig()')
ax.set_xlabel('Number of CPU cores')
ax.set_ylabel('Ratio')
# ax.xaxis.set_major_locator(MultipleLocator(1))
plt.plot(cpu_num_array, time_array_3, '-o', )
plt.plot(cpu_num_array, cpu_num_array, '--r')
plt.savefig(f'eigen_time_ratio_n={n}.jpg')
# plt.show()

View File

@ -0,0 +1,4 @@
#!/bin/sh
#PBS -N plot
#PBS -l nodes=1:ppn=1
python plot_result_of_running_time_by_reading_files.py

View File

@ -0,0 +1,9 @@
import numpy as np
import os
cpu_num_array = np.arange(1, 65)
current_directory = os.getcwd()
for cpu_num in cpu_num_array:
os.system(f'cd {current_directory}/task_{cpu_num} && qsub {current_directory}/task_{cpu_num}/task_{cpu_num}.sh')