aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers/multiplikation/code/MM
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xbuch/papers/multiplikation/code/MMbin26848 -> 0 bytes
-rwxr-xr-xbuch/papers/multiplikation/code/MM.c19
-rw-r--r--buch/papers/multiplikation/code/MM.py79
3 files changed, 58 insertions, 40 deletions
diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM
deleted file mode 100755
index d52dda4..0000000
--- a/buch/papers/multiplikation/code/MM
+++ /dev/null
Binary files differ
diff --git a/buch/papers/multiplikation/code/MM.c b/buch/papers/multiplikation/code/MM.c
index a897d4f..2588262 100755
--- a/buch/papers/multiplikation/code/MM.c
+++ b/buch/papers/multiplikation/code/MM.c
@@ -28,11 +28,12 @@ int main() {
// omp_set_num_threads(4);
// run_algo(openMP_MM, "openMP_MM",0);
run_algo(MM_dc, "MM_dc",0);
+
run_algo(strassen, "strassen",0);
run_algo(MM, "MM", 0);
- run_algo(winograd, "winograd", 0);
- run_algo_cblas(0);
+ run_algo(winograd, "winograd", 0);
+ run_algo_cblas(0);
return 0;
}
@@ -414,12 +415,12 @@ void run_algo(void (*algo)(), char alog_name[], int print)
for(int i=0; i<n_arrays; ++i)
{
- for(int j = 0; j<1; ++j)
+ for(int j = 0; j<10; ++j)
{
- int *C = (int*) malloc(n[i] * n[i] * sizeof(int));
- double dtime = omp_get_wtime();
- algo(Ap[i], Bp[i], (int*) C, n[i]);
- dtime = omp_get_wtime() - dtime;
+ int *C = (int*) malloc(n[i] * n[i] * sizeof(int));
+ double dtime = omp_get_wtime();
+ algo(Ap[i], Bp[i], (int*) C, n[i]);
+ dtime = omp_get_wtime() - dtime;
// printf("The %s program took %f seconds to execute \n", alog_name, dtime);
fprintf(fptr, "%f,%d\n", dtime, n[i]);
@@ -428,7 +429,7 @@ void run_algo(void (*algo)(), char alog_name[], int print)
printMatrix((int*)C, n[i]);
}
free(C);
- }
+ }
}
fclose(fptr);
@@ -442,7 +443,7 @@ void run_algo_cblas(int print)
fptr = fopen("meas/blas.txt", "w");
for(int i=0; i<n_arrays; ++i)
{
- for(int j = 0; j<1; ++j)
+ for(int j = 0; j<10; ++j)
{
double *dC = (double*) malloc(n[i] * n[i] * sizeof(double));
double dtime = omp_get_wtime();
diff --git a/buch/papers/multiplikation/code/MM.py b/buch/papers/multiplikation/code/MM.py
index 7220ae1..8057850 100644
--- a/buch/papers/multiplikation/code/MM.py
+++ b/buch/papers/multiplikation/code/MM.py
@@ -5,6 +5,7 @@ Created on Fri Mar 19 07:31:29 2021
@author: nunigan
"""
+import scipy.stats
import numpy as np
import time
import matplotlib.pyplot as plt
@@ -133,9 +134,6 @@ def winograd2(A, B):
def test_perfomance(n):
- import mkl
- mkl.set_num_threads(1)
-
t_mm = []
t_mm_dc = []
t_mm_strassen = []
@@ -148,21 +146,21 @@ def test_perfomance(n):
# A = np.random.randint(-100, 100,(i, i))
# B = np.random.randint(-100, 100,(i, i))
- # start = time.time()
- # C3 = strassen(A, B)
- # t_mm_strassen.append(time.time() - start)
+ start = time.time()
+ C3 = strassen(A, B)
+ t_mm_strassen.append(time.time() - start)
- # start = time.time()
- # C1 = MM(A, B)
- # t_mm.append(time.time() - start)
+ start = time.time()
+ C1 = MM(A, B)
+ t_mm.append(time.time() - start)
- # start = time.time()
- # C2 = MM_dc(A, B)
- # t_mm_dc.append(time.time() - start)
+ start = time.time()
+ C2 = MM_dc(A, B)
+ t_mm_dc.append(time.time() - start)
- # start = time.time()
- # C4 = winograd2(A, B)
- # t_wino.append(time.time() - start)
+ start = time.time()
+ C4 = winograd2(A, B)
+ t_wino.append(time.time() - start)
start = time.time()
C = A@B
@@ -173,10 +171,10 @@ def test_perfomance(n):
plt.rc('axes', labelsize=23)
plt.rc('xtick', labelsize=23)
plt.rc('ytick', labelsize=23)
- # plt.plot(n, t_mm, label='Standard', lw=5)
- # plt.plot(n, t_mm_dc, label='Divide and conquer', lw=5)
- # plt.plot(n, t_mm_strassen, label='Strassen', lw=5)
- # plt.plot(n, t_wino, label='Winograd', lw=5)
+ plt.plot(n, t_mm, label='Standard', lw=5)
+ plt.plot(n, t_mm_dc, label='Divide and conquer', lw=5)
+ plt.plot(n, t_mm_strassen, label='Strassen', lw=5)
+ plt.plot(n, t_wino, label='Winograd', lw=5)
plt.plot(n, t_np, label='NumPy A@B', lw=5)
# plt.xscale('log', base=2)
plt.legend()
@@ -186,9 +184,9 @@ def test_perfomance(n):
plt.tight_layout()
# plt.yscale('log')
plt.legend(fontsize=19)
- # plt.savefig('meas_' + str(max(n))+ '.pdf')
- # arr = np.array([n, t_mm, t_mm_dc, t_mm_strassen, t_wino, t_np])
- # np.savetxt('meas_' + str(max(n))+ '.txt',arr)
+ plt.savefig('meas_' + str(max(n))+ '.pdf')
+ arr = np.array([n, t_mm, t_mm_dc, t_mm_strassen, t_wino, t_np])
+ np.savetxt('meas_' + str(max(n))+ '.txt',arr)
return t_np
@@ -249,6 +247,8 @@ def plot_c_res(ave, num):
# blas_t = np.mean(blas_t.reshape(-1,ave),axis=1)
# blas_n = np.mean(blas_n.reshape(-1,ave),axis=1)
+
+
def func(x, a,b):
return b*x**a
@@ -261,11 +261,11 @@ def plot_c_res(ave, num):
plt.rc('axes', labelsize=23)
plt.rc('xtick', labelsize=23)
plt.rc('ytick', labelsize=23)
- plt.loglog(MM_n, MM_t, label='3 For Loops', lw=5)
- plt.loglog(winograd_n, winograd_t, label='Winograd MM', lw=5)
- plt.loglog(blas_n, blas_t, label='Blas', lw=5)
- plt.loglog(strassen_n, strassen_t, label='Strassen', lw=5)
- plt.loglog(MM_dc_n, MM_dc_t, label='Divide and Conquer', lw=5)
+ plt.loglog(MM_n, MM_t, '.', label='3 For Loops', lw=5)
+ plt.loglog(winograd_n, winograd_t, '.', label='Winograd MM', lw=5)
+ plt.loglog(blas_n, blas_t, '.', label='Blas', lw=5)
+ plt.loglog(strassen_n, strassen_t, '.', label='Strassen', lw=5)
+ plt.loglog(MM_dc_n, MM_dc_t, '.', label='Divide and Conquer', lw=5)
plt.xlabel("n")
# plt.yscale('log', base=10)
# plt.xscale('log', base=2)
@@ -281,16 +281,33 @@ def plot_c_res(ave, num):
plt.legend()
# return [MM_n,winograd_n,blas_n,strassen_n,MM_dc_n]
+
+
return [MM_t,winograd_t,blas_t,strassen_t,MM_dc_t]
+def mean_confidence_interval(data, confidence=0.95):
+ a = 1.0 * np.array(data)
+ n = len(a)
+ m, se = np.mean(a), scipy.stats.sem(a)
+ h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
+ return m, h
+
# test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if __name__ == '__main__':
- # A = plot_c_res(1, 4096)
-
-
- arr = plot(1024)
+ # A = plot_c_res(10, 4096)
+ # name = ['MM', 'Wino', 'blas', 'strassen', 'dc']
+ # for i in range(5):
+ # ci_inner = []
+ # print(name[i])
+ # for j in range(11):
+ # m,h=mean_confidence_interval(A[i][j*10:(j+1)*10])
+ # print("({},{})".format(2**(j+1),m))
+ # np.savetxt('meas/ci/' + name[i]+'.txt',ci_inner)
+
+ arr = plot(4096)
# n = np.logspace(1,12,12,base=2,dtype=(np.int))
+ # n=[2048,4096]
# n = np.arange(1,50,2)
# A = np.random.randint(-10, 6, (5,3))
# B = np.random.randint(-10, 6, (3,5))