diff options
Diffstat (limited to '')
-rwxr-xr-x | buch/papers/multiplikation/code/MM | bin | 26848 -> 0 bytes | |||
-rwxr-xr-x | buch/papers/multiplikation/code/MM.c | 19 | ||||
-rw-r--r-- | buch/papers/multiplikation/code/MM.py | 77 |
3 files changed, 56 insertions, 40 deletions
diff --git a/buch/papers/multiplikation/code/MM b/buch/papers/multiplikation/code/MM Binary files differdeleted file mode 100755 index d52dda4..0000000 --- a/buch/papers/multiplikation/code/MM +++ /dev/null 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..8a6824a 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,31 @@ 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, m-h, 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 = [] + for j in range(11): + ci_inner.append(mean_confidence_interval(A[i][j*10:(j+1)*10])) + np.savetxt('meas/ci/' + name[i]+'.txt',ci_inner) + + # arr = plot(1024) # 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)) |