diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/make_qsub_files.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/make_qsub_files.py similarity index 100% rename from 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/make_qsub_files.py rename to 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/make_qsub_files.py diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/matrix_running_time_for_different_num_of_cpu_cores.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/matrix_running_time_for_different_num_of_cpu_cores.py similarity index 100% rename from 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/matrix_running_time_for_different_num_of_cpu_cores.py rename to 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/matrix_running_time_for_different_num_of_cpu_cores.py diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/plot_result_of_running_time1.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/plot_result_of_running_time1.py similarity index 100% rename from 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/plot_result_of_running_time1.py rename to 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/plot_result_of_running_time1.py diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/plot_result_of_running_time2.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/plot_result_of_running_time2.py similarity index 100% rename from 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/plot_result_of_running_time2.py rename to 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/plot_result_of_running_time2.py diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/qsub_task.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/qsub_task.py similarity index 100% rename from 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/qsub_task.py rename to 2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_1/qsub_task.py diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/make_qsub_files.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/make_qsub_files.py new file mode 100644 index 0000000..0f05500 --- /dev/null +++ b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/make_qsub_files.py @@ -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) \ No newline at end of file diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/matrix_running_time_for_different_num_of_cpu_cores_writing_into_files.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/matrix_running_time_for_different_num_of_cpu_cores_writing_into_files.py new file mode 100644 index 0000000..8a96fcc --- /dev/null +++ b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/matrix_running_time_for_different_num_of_cpu_cores_writing_into_files.py @@ -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) \ No newline at end of file diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/plot_result_of_running_time_by_reading_files.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/plot_result_of_running_time_by_reading_files.py new file mode 100644 index 0000000..50d01de --- /dev/null +++ b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/plot_result_of_running_time_by_reading_files.py @@ -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() \ No newline at end of file diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/plot_task.sh b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/plot_task.sh new file mode 100644 index 0000000..d988ade --- /dev/null +++ b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/plot_task.sh @@ -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 \ No newline at end of file diff --git a/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/qsub_task.py b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/qsub_task.py new file mode 100644 index 0000000..ac2e405 --- /dev/null +++ b/2025.03.09_matrix_running_time_for_different_num_of_cpu_cores/code_2/qsub_task.py @@ -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') \ No newline at end of file