aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers
diff options
context:
space:
mode:
authorNunigan <michaelschmid13@hotmail.com>2021-08-10 06:37:20 +0200
committerNunigan <michaelschmid13@hotmail.com>2021-08-10 06:37:20 +0200
commitce9f4591847c6bd2dc6ebaa30fc5d72714e0280c (patch)
tree020a1e2eb82f501eec916ec0ac03c586ca599d63 /buch/papers
parentMerge branch 'AndreasFMueller:master' into master (diff)
downloadSeminarMatrizen-ce9f4591847c6bd2dc6ebaa30fc5d72714e0280c.tar.gz
SeminarMatrizen-ce9f4591847c6bd2dc6ebaa30fc5d72714e0280c.zip
new measurements
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.py77
-rw-r--r--buch/papers/multiplikation/code/c_matrix.h204
-rw-r--r--buch/papers/multiplikation/code/c_meas_4096.pdfbin17448 -> 22360 bytes
-rw-r--r--buch/papers/multiplikation/code/ci.txt0
-rwxr-xr-xbuch/papers/multiplikation/code/helper_class.py3
-rw-r--r--buch/papers/multiplikation/code/meas/MM.txt118
-rw-r--r--buch/papers/multiplikation/code/meas/MM_dc.txt118
-rw-r--r--buch/papers/multiplikation/code/meas/blas.txt114
-rw-r--r--buch/papers/multiplikation/code/meas/ci/MM.txt11
-rw-r--r--buch/papers/multiplikation/code/meas/ci/Wino.txt11
-rw-r--r--buch/papers/multiplikation/code/meas/ci/blas.txt11
-rw-r--r--buch/papers/multiplikation/code/meas/ci/dc.txt11
-rw-r--r--buch/papers/multiplikation/code/meas/ci/strassen.txt11
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/MM.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/blas.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/strassen.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/8196/winograd.txt1
-rw-r--r--buch/papers/multiplikation/code/meas/old/MM.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/MM_dc.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/blas.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/strassen.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/old/winograd.txt12
-rw-r--r--buch/papers/multiplikation/code/meas/strassen.txt122
-rw-r--r--buch/papers/multiplikation/code/meas/winograd.txt116
-rw-r--r--buch/papers/multiplikation/code/meas_4096.pdfbin12952 -> 17369 bytes
-rw-r--r--buch/papers/multiplikation/code/meas_4096.txt6
-rw-r--r--buch/papers/multiplikation/images/algo_tab.pdfbin0 -> 34251 bytes
-rw-r--r--buch/papers/multiplikation/images/algo_tab.tex122
-rw-r--r--buch/papers/multiplikation/images/meas_c.pdfbin23161 -> 23552 bytes
-rw-r--r--buch/papers/multiplikation/images/meas_c.tex9
-rwxr-xr-xbuch/papers/multiplikation/loesungsmethoden.tex48
-rwxr-xr-xbuch/papers/multiplikation/problemstellung.tex145
35 files changed, 1096 insertions, 245 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..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))
diff --git a/buch/papers/multiplikation/code/c_matrix.h b/buch/papers/multiplikation/code/c_matrix.h
index 14389fc..63d5390 100644
--- a/buch/papers/multiplikation/code/c_matrix.h
+++ b/buch/papers/multiplikation/code/c_matrix.h
@@ -1,101 +1,177 @@
-/* Seminar Matrizen, autogenerated File, Michael Schmid, 02/08/2021, 22:48:43 */
+/* Seminar Matrizen, autogenerated File, Michael Schmid, 10/08/2021, 05:46:32 */
#include <stdint.h>
const int A0[][2] =
{
- {75,47},
- {-41,-24}
+ {60,-84},
+ {-66,-1}
};
const int B0[][2] =
{
- {-53,-95},
- {-93,30}
+ {-45,87},
+ {-38,-73}
};
const double dB0[][2] =
{
- {-53,-95},
- {-93,30}
+ {-45,87},
+ {-38,-73}
};
const double dA0[][2] =
{
- {75,47},
- {-41,-24}
+ {60,-84},
+ {-66,-1}
};
const int A1[][4] =
{
- {47,11,-66,8},
- {36,98,39,82},
- {-32,12,40,-79},
- {61,-20,-85,-98}
+ {-72,-19,-91,62},
+ {-36,-74,-44,-47},
+ {-39,-31,50,-93},
+ {-81,2,-17,-86}
};
const int B1[][4] =
{
- {37,75,-53,9},
- {37,-33,-67,38},
- {70,39,-93,43},
- {43,41,23,-4}
+ {-66,39,-23,52},
+ {-88,-13,13,-13},
+ {-45,-70,28,-20},
+ {96,5,88,96}
};
const double dB1[][4] =
{
- {37,75,-53,9},
- {37,-33,-67,38},
- {70,39,-93,43},
- {43,41,23,-4}
+ {-66,39,-23,52},
+ {-88,-13,13,-13},
+ {-45,-70,28,-20},
+ {96,5,88,96}
};
const double dA1[][4] =
{
- {47,11,-66,8},
- {36,98,39,82},
- {-32,12,40,-79},
- {61,-20,-85,-98}
+ {-72,-19,-91,62},
+ {-36,-74,-44,-47},
+ {-39,-31,50,-93},
+ {-81,2,-17,-86}
};
const int A2[][8] =
{
- {-54,-87,87,69,52,-21,-86,55},
- {19,-75,-61,-50,-55,-23,66,-92},
- {-73,-67,-36,19,84,-11,24,46},
- {-98,62,-76,57,-100,6,-23,-51},
- {62,46,1,-64,42,-9,85,-12},
- {35,-59,-17,-47,78,86,-50,74},
- {-15,45,33,-59,-9,-81,49,96},
- {-57,22,-43,7,-30,-45,-5,13}
+ {-36,-2,-58,-32,34,-89,49,-55},
+ {-68,-73,52,-3,-51,-37,-31,70},
+ {73,-90,-21,-79,-15,96,-99,12},
+ {68,-25,38,-73,-60,35,-99,72},
+ {-43,-87,48,-84,-100,37,80,53},
+ {-27,88,-5,-82,-57,-27,20,10},
+ {-91,-47,54,-90,-99,-76,50,-18},
+ {69,-36,76,5,-67,-38,-95,91}
};
const int B2[][8] =
{
- {-71,-82,-80,-78,83,-97,48,-24},
- {15,75,15,-60,-63,-53,1,-50},
- {-84,63,67,-2,78,93,-13,95},
- {61,-26,-88,56,56,27,26,1},
- {2,54,21,36,9,-41,53,53},
- {85,-11,42,-51,-6,3,27,97},
- {10,-2,90,-76,-75,0,8,-37},
- {10,-64,47,-69,66,-50,89,-66}
+ {-84,22,-13,-66,-42,51,66,0},
+ {37,-65,66,-85,-10,-23,77,5},
+ {1,41,-79,0,63,-37,-10,29},
+ {72,66,-99,92,-28,65,25,-40},
+ {69,-49,65,-18,64,-97,-47,30},
+ {36,86,66,-12,-17,89,1,-37},
+ {-100,11,27,23,-75,-23,96,-9},
+ {68,90,-87,-99,-70,-28,98,-76}
};
const double dB2[][8] =
{
- {-71,-82,-80,-78,83,-97,48,-24},
- {15,75,15,-60,-63,-53,1,-50},
- {-84,63,67,-2,78,93,-13,95},
- {61,-26,-88,56,56,27,26,1},
- {2,54,21,36,9,-41,53,53},
- {85,-11,42,-51,-6,3,27,97},
- {10,-2,90,-76,-75,0,8,-37},
- {10,-64,47,-69,66,-50,89,-66}
+ {-84,22,-13,-66,-42,51,66,0},
+ {37,-65,66,-85,-10,-23,77,5},
+ {1,41,-79,0,63,-37,-10,29},
+ {72,66,-99,92,-28,65,25,-40},
+ {69,-49,65,-18,64,-97,-47,30},
+ {36,86,66,-12,-17,89,1,-37},
+ {-100,11,27,23,-75,-23,96,-9},
+ {68,90,-87,-99,-70,-28,98,-76}
};
const double dA2[][8] =
{
- {-54,-87,87,69,52,-21,-86,55},
- {19,-75,-61,-50,-55,-23,66,-92},
- {-73,-67,-36,19,84,-11,24,46},
- {-98,62,-76,57,-100,6,-23,-51},
- {62,46,1,-64,42,-9,85,-12},
- {35,-59,-17,-47,78,86,-50,74},
- {-15,45,33,-59,-9,-81,49,96},
- {-57,22,-43,7,-30,-45,-5,13}
- };
-const int *Ap[3] = {(int*) A0,(int*) A1,(int*) A2};
-const int *Bp[3] = {(int*) B0,(int*) B1,(int*) B2};
-const double *dAp[3] = {(double*) dA0,(double*) dA1,(double*) dA2};
-const double *dBp[3] = {(double*) dB0,(double*) dB1,(double*) dB2};
-int n[3] = {2,4,8};
-int n_arrays = 3;
+ {-36,-2,-58,-32,34,-89,49,-55},
+ {-68,-73,52,-3,-51,-37,-31,70},
+ {73,-90,-21,-79,-15,96,-99,12},
+ {68,-25,38,-73,-60,35,-99,72},
+ {-43,-87,48,-84,-100,37,80,53},
+ {-27,88,-5,-82,-57,-27,20,10},
+ {-91,-47,54,-90,-99,-76,50,-18},
+ {69,-36,76,5,-67,-38,-95,91}
+ };
+const int A3[][16] =
+ {
+ {-24,65,21,19,94,70,-90,-81,53,-41,-23,-1,58,-80,-54,59},
+ {-42,76,-19,98,29,-56,92,14,45,11,82,83,48,-13,81,66},
+ {43,-57,-67,95,5,72,11,0,-47,55,-24,36,84,54,-31,-54},
+ {-39,-40,19,97,-82,-56,27,95,81,-21,-50,-74,-35,-87,-28,-26},
+ {-74,-98,79,92,-24,-48,99,94,55,-83,70,98,-24,18,-67,14},
+ {20,76,11,-23,-56,21,0,42,64,86,-74,44,93,-76,-30,97},
+ {13,20,-73,-11,-30,80,53,-8,60,21,17,-42,82,-72,-6,-80},
+ {36,-93,-64,-21,20,-85,15,24,99,81,-52,64,71,-56,52,63},
+ {32,9,-2,-85,17,62,-98,-35,75,-58,-44,-20,-47,89,-95,52},
+ {93,-43,86,68,-6,-25,90,57,60,-10,65,-97,43,46,-60,-41},
+ {43,-33,0,50,-100,26,-60,95,39,-70,-61,-81,9,-23,-99,-4},
+ {20,61,15,43,-96,93,-55,38,-29,-1,-10,26,-87,18,64,6},
+ {-98,-84,51,16,-14,86,52,59,44,-39,-2,10,82,-66,54,19},
+ {89,-49,-37,-6,-53,40,-11,46,-51,-56,86,34,11,13,-20,-49},
+ {-90,14,28,-45,-25,-56,-51,-61,28,-8,51,91,95,-10,-85,58},
+ {8,-44,88,-71,-27,11,89,37,86,-78,-44,-56,-87,0,-42,-61}
+ };
+const int B3[][16] =
+ {
+ {62,-30,62,92,29,-93,-95,44,-33,-88,-29,9,-88,-42,-90,-70},
+ {60,37,-44,-93,-87,6,-53,2,-29,53,-49,59,6,83,-15,50},
+ {-19,85,-49,-14,84,-4,12,88,-83,-81,-24,-16,-12,-42,-63,-71},
+ {-42,-78,-58,-61,-29,67,-28,-46,64,7,6,-13,88,-42,95,-24},
+ {-90,-56,8,-30,-89,70,37,-29,24,-8,-10,-2,-25,-63,-95,-91},
+ {10,-81,42,-28,-13,-68,-72,-20,-22,5,-79,-50,-88,62,57,69},
+ {-67,24,-71,-43,11,48,33,-93,-82,-65,-4,5,-15,25,-54,-45},
+ {-49,19,-29,90,-97,-87,78,-39,-75,-85,-79,-35,54,3,-73,7},
+ {-7,39,70,-42,32,-100,56,4,-24,-57,38,-49,-50,-44,79,-42},
+ {37,-65,-55,22,-97,-42,-76,95,97,-27,38,11,0,-81,-23,35},
+ {26,-70,10,-29,47,-70,-52,29,-13,-18,5,34,18,32,87,91},
+ {-84,41,-19,96,-51,-19,81,75,81,92,2,-40,-42,-69,-10,-61},
+ {-30,98,71,-51,91,-59,58,86,86,-22,-84,7,66,-55,-52,23},
+ {-71,-44,-9,90,26,18,26,-10,-85,64,-47,3,72,81,74,-8},
+ {52,-59,-91,22,8,-63,84,9,-11,-54,-78,-71,-98,42,96,57},
+ {18,-39,34,-50,-62,-96,-2,-78,52,94,-33,2,-19,-9,-86,-75}
+ };
+const double dB3[][16] =
+ {
+ {62,-30,62,92,29,-93,-95,44,-33,-88,-29,9,-88,-42,-90,-70},
+ {60,37,-44,-93,-87,6,-53,2,-29,53,-49,59,6,83,-15,50},
+ {-19,85,-49,-14,84,-4,12,88,-83,-81,-24,-16,-12,-42,-63,-71},
+ {-42,-78,-58,-61,-29,67,-28,-46,64,7,6,-13,88,-42,95,-24},
+ {-90,-56,8,-30,-89,70,37,-29,24,-8,-10,-2,-25,-63,-95,-91},
+ {10,-81,42,-28,-13,-68,-72,-20,-22,5,-79,-50,-88,62,57,69},
+ {-67,24,-71,-43,11,48,33,-93,-82,-65,-4,5,-15,25,-54,-45},
+ {-49,19,-29,90,-97,-87,78,-39,-75,-85,-79,-35,54,3,-73,7},
+ {-7,39,70,-42,32,-100,56,4,-24,-57,38,-49,-50,-44,79,-42},
+ {37,-65,-55,22,-97,-42,-76,95,97,-27,38,11,0,-81,-23,35},
+ {26,-70,10,-29,47,-70,-52,29,-13,-18,5,34,18,32,87,91},
+ {-84,41,-19,96,-51,-19,81,75,81,92,2,-40,-42,-69,-10,-61},
+ {-30,98,71,-51,91,-59,58,86,86,-22,-84,7,66,-55,-52,23},
+ {-71,-44,-9,90,26,18,26,-10,-85,64,-47,3,72,81,74,-8},
+ {52,-59,-91,22,8,-63,84,9,-11,-54,-78,-71,-98,42,96,57},
+ {18,-39,34,-50,-62,-96,-2,-78,52,94,-33,2,-19,-9,-86,-75}
+ };
+const double dA3[][16] =
+ {
+ {-24,65,21,19,94,70,-90,-81,53,-41,-23,-1,58,-80,-54,59},
+ {-42,76,-19,98,29,-56,92,14,45,11,82,83,48,-13,81,66},
+ {43,-57,-67,95,5,72,11,0,-47,55,-24,36,84,54,-31,-54},
+ {-39,-40,19,97,-82,-56,27,95,81,-21,-50,-74,-35,-87,-28,-26},
+ {-74,-98,79,92,-24,-48,99,94,55,-83,70,98,-24,18,-67,14},
+ {20,76,11,-23,-56,21,0,42,64,86,-74,44,93,-76,-30,97},
+ {13,20,-73,-11,-30,80,53,-8,60,21,17,-42,82,-72,-6,-80},
+ {36,-93,-64,-21,20,-85,15,24,99,81,-52,64,71,-56,52,63},
+ {32,9,-2,-85,17,62,-98,-35,75,-58,-44,-20,-47,89,-95,52},
+ {93,-43,86,68,-6,-25,90,57,60,-10,65,-97,43,46,-60,-41},
+ {43,-33,0,50,-100,26,-60,95,39,-70,-61,-81,9,-23,-99,-4},
+ {20,61,15,43,-96,93,-55,38,-29,-1,-10,26,-87,18,64,6},
+ {-98,-84,51,16,-14,86,52,59,44,-39,-2,10,82,-66,54,19},
+ {89,-49,-37,-6,-53,40,-11,46,-51,-56,86,34,11,13,-20,-49},
+ {-90,14,28,-45,-25,-56,-51,-61,28,-8,51,91,95,-10,-85,58},
+ {8,-44,88,-71,-27,11,89,37,86,-78,-44,-56,-87,0,-42,-61}
+ };
+const int *Ap[4] = {(int*) A0,(int*) A1,(int*) A2,(int*) A3};
+const int *Bp[4] = {(int*) B0,(int*) B1,(int*) B2,(int*) B3};
+const double *dAp[4] = {(double*) dA0,(double*) dA1,(double*) dA2,(double*) dA3};
+const double *dBp[4] = {(double*) dB0,(double*) dB1,(double*) dB2,(double*) dB3};
+int n[4] = {2,4,8,16};
+int n_arrays = 4;
diff --git a/buch/papers/multiplikation/code/c_meas_4096.pdf b/buch/papers/multiplikation/code/c_meas_4096.pdf
index 5236afb..b42082f 100644
--- a/buch/papers/multiplikation/code/c_meas_4096.pdf
+++ b/buch/papers/multiplikation/code/c_meas_4096.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/ci.txt b/buch/papers/multiplikation/code/ci.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/buch/papers/multiplikation/code/ci.txt
diff --git a/buch/papers/multiplikation/code/helper_class.py b/buch/papers/multiplikation/code/helper_class.py
index 485fa76..ad67909 100755
--- a/buch/papers/multiplikation/code/helper_class.py
+++ b/buch/papers/multiplikation/code/helper_class.py
@@ -101,5 +101,6 @@ if __name__ == '__main__':
helper = Helper()
# n = np.arange(2,10)
- n = np.logspace(1,3,3,base=2,dtype=(np.int))
+ n = np.logspace(1,4,4,base=2,dtype=(np.int))
+ # n=[8192]
C = helper.write_c_matrix(n)
diff --git a/buch/papers/multiplikation/code/meas/MM.txt b/buch/papers/multiplikation/code/meas/MM.txt
index e296dd7..7bffb6e 100644
--- a/buch/papers/multiplikation/code/meas/MM.txt
+++ b/buch/papers/multiplikation/code/meas/MM.txt
@@ -1,12 +1,110 @@
-0.000001,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
0.000001,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000001,4
+0.000001,4
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000001,8
0.000001,8
-0.000010,16
-0.000081,32
-0.000654,64
-0.005556,128
-0.054253,256
-0.487317,512
-4.162845,1024
-125.909034,2048
-1111.312696,4096
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000021,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000090,32
+0.000093,32
+0.000083,32
+0.000082,32
+0.000090,32
+0.000080,32
+0.000080,32
+0.000080,32
+0.000089,32
+0.000126,32
+0.000771,64
+0.000651,64
+0.000651,64
+0.000651,64
+0.000731,64
+0.000673,64
+0.000745,64
+0.000672,64
+0.000671,64
+0.000707,64
+0.005642,128
+0.005579,128
+0.005768,128
+0.005745,128
+0.005518,128
+0.005877,128
+0.005513,128
+0.005850,128
+0.005769,128
+0.005581,128
+0.052188,256
+0.051988,256
+0.051888,256
+0.051518,256
+0.051709,256
+0.051543,256
+0.051707,256
+0.051845,256
+0.051495,256
+0.051834,256
+0.507020,512
+0.504111,512
+0.502049,512
+0.529743,512
+0.501028,512
+0.502097,512
+0.503490,512
+0.502079,512
+0.506688,512
+0.504163,512
+4.538722,1024
+4.291473,1024
+4.516302,1024
+4.374630,1024
+4.719557,1024
+4.438999,1024
+4.641680,1024
+4.407959,1024
+4.441451,1024
+4.677313,1024
+129.433279,2048
+129.277802,2048
+129.284817,2048
+129.086884,2048
+129.197444,2048
+129.350999,2048
+129.264250,2048
+129.295723,2048
+129.402601,2048
+129.300820,2048
diff --git a/buch/papers/multiplikation/code/meas/MM_dc.txt b/buch/papers/multiplikation/code/meas/MM_dc.txt
index f6be928..b78b925 100644
--- a/buch/papers/multiplikation/code/meas/MM_dc.txt
+++ b/buch/papers/multiplikation/code/meas/MM_dc.txt
@@ -1,12 +1,110 @@
0.000003,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
0.000002,4
-0.000010,8
-0.000068,16
-0.000594,32
-0.004264,64
-0.036289,128
-0.324645,256
-2.612010,512
-19.928951,1024
-159.333884,2048
-1147.106865,4096
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000001,4
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000007,8
+0.000007,8
+0.000007,8
+0.000007,8
+0.000018,8
+0.000008,8
+0.000075,16
+0.000063,16
+0.000088,16
+0.000062,16
+0.000086,16
+0.000092,16
+0.000081,16
+0.000080,16
+0.000070,16
+0.000085,16
+0.000581,32
+0.000659,32
+0.000584,32
+0.000714,32
+0.000666,32
+0.000574,32
+0.000616,32
+0.000534,32
+0.000506,32
+0.000506,32
+0.004567,64
+0.004502,64
+0.004332,64
+0.004578,64
+0.004543,64
+0.004426,64
+0.004497,64
+0.004329,64
+0.004288,64
+0.004277,64
+0.036456,128
+0.034901,128
+0.034545,128
+0.034283,128
+0.035150,128
+0.034663,128
+0.034901,128
+0.034022,128
+0.034368,128
+0.035154,128
+0.296292,256
+0.297592,256
+0.302464,256
+0.299557,256
+0.299367,256
+0.306394,256
+0.287616,256
+0.292630,256
+0.289542,256
+0.277019,256
+2.331956,512
+2.224501,512
+2.203910,512
+2.198937,512
+2.206083,512
+2.199477,512
+2.199847,512
+2.225379,512
+2.202491,512
+2.235926,512
+17.649432,1024
+17.636769,1024
+17.639024,1024
+17.625402,1024
+17.722286,1024
+17.611777,1024
+17.653120,1024
+17.748270,1024
+17.691817,1024
+17.614448,1024
+141.943689,2048
+141.580812,2048
+141.882050,2048
+141.516253,2048
+141.351237,2048
+141.641167,2048
+141.596407,2048
+141.607048,2048
+141.469723,2048
+141.515550,2048
diff --git a/buch/papers/multiplikation/code/meas/blas.txt b/buch/papers/multiplikation/code/meas/blas.txt
index 92a61b9..9414d8f 100644
--- a/buch/papers/multiplikation/code/meas/blas.txt
+++ b/buch/papers/multiplikation/code/meas/blas.txt
@@ -1,12 +1,110 @@
0.000001,2
-0.000001,4
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
0.000001,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
+0.000000,8
0.000003,16
-0.000022,32
-0.000179,64
+0.000003,16
+0.000003,16
+0.000003,16
+0.000003,16
+0.000003,16
+0.000012,16
+0.000003,16
+0.000003,16
+0.000003,16
+0.000021,32
+0.000019,32
+0.000030,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000020,32
+0.000180,64
+0.000192,64
+0.000163,64
+0.000153,64
+0.000153,64
+0.000197,64
+0.000163,64
+0.000267,64
+0.000226,64
+0.000164,64
+0.001216,128
+0.001233,128
+0.001364,128
0.001278,128
-0.010165,256
-0.074739,512
-0.704748,1024
-6.845095,2048
-55.845038,4096
+0.001211,128
+0.001295,128
+0.001206,128
+0.001371,128
+0.001225,128
+0.001250,128
+0.009733,256
+0.009497,256
+0.009586,256
+0.009600,256
+0.009768,256
+0.009566,256
+0.009731,256
+0.009550,256
+0.009664,256
+0.009794,256
+0.077453,512
+0.076616,512
+0.088812,512
+0.075990,512
+0.076925,512
+0.076303,512
+0.075915,512
+0.075600,512
+0.075122,512
+0.075029,512
+0.769186,1024
+0.775780,1024
+0.753906,1024
+0.757834,1024
+0.772001,1024
+0.770950,1024
+0.791317,1024
+0.753319,1024
+0.747228,1024
+0.752347,1024
+7.625205,2048
+7.652278,2048
+7.640682,2048
+7.649428,2048
+7.632806,2048
+7.579347,2048
+7.612317,2048
+7.676742,2048
+7.632979,2048
+7.619210,2048
diff --git a/buch/papers/multiplikation/code/meas/ci/MM.txt b/buch/papers/multiplikation/code/meas/ci/MM.txt
new file mode 100644
index 0000000..e4ad1ba
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/MM.txt
@@ -0,0 +1,11 @@
+0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
+2.999999999999999864e-07 -4.555021440490437016e-08 6.455502144049043430e-07
+1.800000000000000130e-06 1.498379044967867836e-06 2.101620955032132425e-06
+1.199999999999999861e-05 9.737842837259007037e-06 1.426215716274099018e-05
+8.930000000000000221e-05 7.942767152586658090e-05 9.917232847413342352e-05
+6.922999999999999684e-04 6.611729768299406300e-04 7.234270231700593067e-04
+5.684200000000000363e-03 5.587928563282692010e-03 5.780471436717308717e-03
+5.177150000000000502e-02 5.161257221154376407e-02 5.193042778845624596e-02
+5.062468000000001078e-01 5.001729723042721565e-01 5.123206276957280592e-01
+4.504808599999999608e+00 4.404751183933223402e+00 4.604866016066775813e+00
+1.292894618999999921e+02 1.292188312556721144e+02 1.293600925443278697e+02
diff --git a/buch/papers/multiplikation/code/meas/ci/Wino.txt b/buch/papers/multiplikation/code/meas/ci/Wino.txt
new file mode 100644
index 0000000..4ec0106
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/Wino.txt
@@ -0,0 +1,11 @@
+9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07
+0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
+2.000000000000000333e-06 1.999999999999999909e-06 2.000000000000000757e-06
+1.199999999999999861e-05 9.737842837259007037e-06 1.426215716274099018e-05
+8.329999999999999189e-05 7.952898408510092581e-05 8.707101591489905797e-05
+6.478999999999999733e-04 6.173195729945008762e-04 6.784804270054990705e-04
+5.287299999999999986e-03 5.226513788941518357e-03 5.348086211058481615e-03
+5.267459999999999504e-02 5.240389179019239174e-02 5.294530820980759833e-02
+5.249752000000000862e-01 5.233835466989910090e-01 5.265668533010091634e-01
+4.671160999999999675e+00 4.572509907501117965e+00 4.769812092498881384e+00
+1.366769777000000090e+02 1.363957928284978891e+02 1.369581625715021289e+02
diff --git a/buch/papers/multiplikation/code/meas/ci/blas.txt b/buch/papers/multiplikation/code/meas/ci/blas.txt
new file mode 100644
index 0000000..5d7ff7b
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/blas.txt
@@ -0,0 +1,11 @@
+9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07
+0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
+9.999999999999999547e-08 -1.262157162740991459e-07 3.262157162740991104e-07
+3.899999999999999929e-06 1.864058553533107683e-06 5.935941446466892176e-06
+2.100000000000000223e-05 1.871284586667546976e-05 2.328715413332453469e-05
+1.858000000000000168e-04 1.595988766828141249e-04 2.120011233171859087e-04
+1.264900000000000009e-03 1.221091632895032926e-03 1.308708367104967091e-03
+9.648900000000000185e-03 9.575266909835235610e-03 9.722533090164764760e-03
+7.737650000000000083e-02 7.445101996220353235e-02 8.030198003779646931e-02
+7.643868000000000329e-01 7.545731380187049586e-01 7.742004619812951072e-01
+7.632099399999999534e+00 7.613379481172315444e+00 7.650819318827683624e+00
diff --git a/buch/papers/multiplikation/code/meas/ci/dc.txt b/buch/papers/multiplikation/code/meas/ci/dc.txt
new file mode 100644
index 0000000..df268a9
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/dc.txt
@@ -0,0 +1,11 @@
+2.999999999999999864e-07 -3.786471488222973584e-07 9.786471488222972253e-07
+1.100000000000000056e-06 8.737842837259009412e-07 1.326215716274099171e-06
+8.600000000000000670e-06 6.210712693650135778e-06 1.098928730634986641e-05
+7.819999999999998990e-05 7.075203863371232107e-05 8.564796136628765873e-05
+5.940000000000001269e-04 5.439534118129448707e-04 6.440465881870553830e-04
+4.433900000000000167e-03 4.349138038034851966e-03 4.518661961965148369e-03
+3.484430000000000166e-02 3.435947773230259988e-02 3.532912226769740344e-02
+2.948473000000000344e-01 2.887830472415335303e-01 3.009115527584665384e-01
+2.222850699999999957e+00 2.193855611791002858e+00 2.251845788208997057e+00
+1.765923450000000372e+01 1.762601016688562439e+01 1.769245883311438305e+01
+1.416103936000000090e+02 1.414816028568733657e+02 1.417391843431266523e+02
diff --git a/buch/papers/multiplikation/code/meas/ci/strassen.txt b/buch/papers/multiplikation/code/meas/ci/strassen.txt
new file mode 100644
index 0000000..983fed9
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/ci/strassen.txt
@@ -0,0 +1,11 @@
+0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
+2.099999999999999799e-06 1.572163328693768390e-06 2.627836671306231420e-06
+1.130000000000000023e-05 7.484018077564905836e-06 1.511598192243509547e-05
+7.069999999999999733e-05 6.500652995675561090e-05 7.639347004324438376e-05
+5.040999999999999474e-04 4.766428619697257881e-04 5.315571380302741610e-04
+3.595999999999999804e-03 3.528938496002300557e-03 3.663061503997699052e-03
+2.544810000000000128e-02 2.513634544137222787e-02 2.575985455862777468e-02
+1.781816999999999984e-01 1.773043765864557864e-01 1.790590234135442105e-01
+1.255500000000000060e+00 1.247847949398645628e+00 1.263152050601354492e+00
+8.830237099999999728e+00 8.790366960647805428e+00 8.870107239352194028e+00
+6.190186909999999898e+01 6.183048085945843297e+01 6.197325734054156499e+01
diff --git a/buch/papers/multiplikation/code/meas/old/8196/MM.txt b/buch/papers/multiplikation/code/meas/old/8196/MM.txt
new file mode 100644
index 0000000..0edf9f6
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/MM.txt
@@ -0,0 +1 @@
+9376.173434,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt b/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt
new file mode 100644
index 0000000..36f6ff0
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/MM_dc.txt
@@ -0,0 +1 @@
+9606.402522,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/blas.txt b/buch/papers/multiplikation/code/meas/old/8196/blas.txt
new file mode 100644
index 0000000..b5989fb
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/blas.txt
@@ -0,0 +1 @@
+478.429957,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/strassen.txt b/buch/papers/multiplikation/code/meas/old/8196/strassen.txt
new file mode 100644
index 0000000..ca06e97
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/strassen.txt
@@ -0,0 +1 @@
+3014.235467,8192
diff --git a/buch/papers/multiplikation/code/meas/old/8196/winograd.txt b/buch/papers/multiplikation/code/meas/old/8196/winograd.txt
new file mode 100644
index 0000000..2a529c4
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/8196/winograd.txt
@@ -0,0 +1 @@
+10071.512655,8192
diff --git a/buch/papers/multiplikation/code/meas/old/MM.txt b/buch/papers/multiplikation/code/meas/old/MM.txt
new file mode 100644
index 0000000..e296dd7
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/MM.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000001,4
+0.000001,8
+0.000010,16
+0.000081,32
+0.000654,64
+0.005556,128
+0.054253,256
+0.487317,512
+4.162845,1024
+125.909034,2048
+1111.312696,4096
diff --git a/buch/papers/multiplikation/code/meas/old/MM_dc.txt b/buch/papers/multiplikation/code/meas/old/MM_dc.txt
new file mode 100644
index 0000000..f6be928
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/MM_dc.txt
@@ -0,0 +1,12 @@
+0.000003,2
+0.000002,4
+0.000010,8
+0.000068,16
+0.000594,32
+0.004264,64
+0.036289,128
+0.324645,256
+2.612010,512
+19.928951,1024
+159.333884,2048
+1147.106865,4096
diff --git a/buch/papers/multiplikation/code/meas/old/blas.txt b/buch/papers/multiplikation/code/meas/old/blas.txt
new file mode 100644
index 0000000..92a61b9
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/blas.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000001,4
+0.000001,8
+0.000003,16
+0.000022,32
+0.000179,64
+0.001278,128
+0.010165,256
+0.074739,512
+0.704748,1024
+6.845095,2048
+55.845038,4096
diff --git a/buch/papers/multiplikation/code/meas/old/strassen.txt b/buch/papers/multiplikation/code/meas/old/strassen.txt
new file mode 100644
index 0000000..fdfbf2b
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/strassen.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000003,4
+0.000010,8
+0.000066,16
+0.000470,32
+0.003368,64
+0.024232,128
+0.172000,256
+1.209262,512
+8.457472,1024
+59.267256,2048
+414.648901,4096
diff --git a/buch/papers/multiplikation/code/meas/old/winograd.txt b/buch/papers/multiplikation/code/meas/old/winograd.txt
new file mode 100644
index 0000000..d185906
--- /dev/null
+++ b/buch/papers/multiplikation/code/meas/old/winograd.txt
@@ -0,0 +1,12 @@
+0.000001,2
+0.000001,4
+0.000002,8
+0.000011,16
+0.000100,32
+0.000654,64
+0.005229,128
+0.057440,256
+0.517850,512
+4.539413,1024
+130.627663,2048
+1179.261048,4096
diff --git a/buch/papers/multiplikation/code/meas/strassen.txt b/buch/papers/multiplikation/code/meas/strassen.txt
index fdfbf2b..d6e040e 100644
--- a/buch/papers/multiplikation/code/meas/strassen.txt
+++ b/buch/papers/multiplikation/code/meas/strassen.txt
@@ -1,12 +1,110 @@
-0.000001,2
-0.000003,4
-0.000010,8
-0.000066,16
-0.000470,32
-0.003368,64
-0.024232,128
-0.172000,256
-1.209262,512
-8.457472,1024
-59.267256,2048
-414.648901,4096
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000004,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000002,4
+0.000001,4
+0.000020,8
+0.000018,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000008,8
+0.000019,8
+0.000080,16
+0.000075,16
+0.000078,16
+0.000085,16
+0.000065,16
+0.000065,16
+0.000065,16
+0.000064,16
+0.000065,16
+0.000065,16
+0.000546,32
+0.000480,32
+0.000563,32
+0.000551,32
+0.000502,32
+0.000504,32
+0.000463,32
+0.000462,32
+0.000508,32
+0.000462,32
+0.003675,64
+0.003665,64
+0.003493,64
+0.003708,64
+0.003465,64
+0.003502,64
+0.003710,64
+0.003537,64
+0.003637,64
+0.003568,64
+0.025342,128
+0.025179,128
+0.026475,128
+0.025758,128
+0.025333,128
+0.024988,128
+0.025727,128
+0.025298,128
+0.025283,128
+0.025098,128
+0.181311,256
+0.178432,256
+0.177075,256
+0.177474,256
+0.177025,256
+0.177805,256
+0.177944,256
+0.178151,256
+0.177858,256
+0.178742,256
+1.283374,512
+1.246682,512
+1.245898,512
+1.251547,512
+1.250288,512
+1.250495,512
+1.257037,512
+1.255247,512
+1.255382,512
+1.259050,512
+8.784102,1024
+8.845725,1024
+8.771100,1024
+8.770184,1024
+8.955977,1024
+8.849161,1024
+8.806902,1024
+8.808937,1024
+8.848900,1024
+8.861383,1024
+61.787123,2048
+61.972599,2048
+61.822434,2048
+62.051331,2048
+61.946171,2048
+61.911404,2048
+61.872671,2048
+61.791260,2048
+61.818110,2048
+62.045588,2048
diff --git a/buch/papers/multiplikation/code/meas/winograd.txt b/buch/papers/multiplikation/code/meas/winograd.txt
index d185906..970a3f4 100644
--- a/buch/papers/multiplikation/code/meas/winograd.txt
+++ b/buch/papers/multiplikation/code/meas/winograd.txt
@@ -1,12 +1,110 @@
0.000001,2
-0.000001,4
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,2
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
+0.000000,4
0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000002,8
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000011,16
+0.000021,16
+0.000011,16
0.000011,16
-0.000100,32
-0.000654,64
-0.005229,128
-0.057440,256
-0.517850,512
-4.539413,1024
-130.627663,2048
-1179.261048,4096
+0.000092,32
+0.000092,32
+0.000081,32
+0.000081,32
+0.000081,32
+0.000081,32
+0.000088,32
+0.000079,32
+0.000079,32
+0.000079,32
+0.000670,64
+0.000739,64
+0.000609,64
+0.000609,64
+0.000700,64
+0.000648,64
+0.000626,64
+0.000626,64
+0.000626,64
+0.000626,64
+0.005321,128
+0.005286,128
+0.005180,128
+0.005223,128
+0.005249,128
+0.005299,128
+0.005205,128
+0.005268,128
+0.005464,128
+0.005378,128
+0.053123,256
+0.052325,256
+0.052729,256
+0.052930,256
+0.052207,256
+0.053178,256
+0.052122,256
+0.052681,256
+0.052965,256
+0.052486,256
+0.527028,512
+0.525201,512
+0.521822,512
+0.525147,512
+0.525241,512
+0.527725,512
+0.526321,512
+0.526479,512
+0.524020,512
+0.520768,512
+4.732299,1024
+4.617253,1024
+4.647425,1024
+4.519233,1024
+4.917471,1024
+4.564929,1024
+4.870771,1024
+4.555407,1024
+4.727473,1024
+4.559349,1024
+136.409028,2048
+136.390557,2048
+136.541672,2048
+136.598491,2048
+137.720790,2048
+136.825926,2048
+136.367686,2048
+136.650627,2048
+136.642195,2048
+136.622805,2048
diff --git a/buch/papers/multiplikation/code/meas_4096.pdf b/buch/papers/multiplikation/code/meas_4096.pdf
index e889d17..9e8fcea 100644
--- a/buch/papers/multiplikation/code/meas_4096.pdf
+++ b/buch/papers/multiplikation/code/meas_4096.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/code/meas_4096.txt b/buch/papers/multiplikation/code/meas_4096.txt
index e69de29..cae1bc6 100644
--- a/buch/papers/multiplikation/code/meas_4096.txt
+++ b/buch/papers/multiplikation/code/meas_4096.txt
@@ -0,0 +1,6 @@
+2.048000000000000000e+03 4.096000000000000000e+03
+6.154183513402938843e+03 4.681333474493026733e+04
+7.375929301261901855e+03 5.846600176072120667e+04
+3.860573610544204712e+03 2.290433094644546509e+04
+4.884613198995590210e+03 4.359707747149467468e+04
+2.157390117645263672e-01 1.491588830947875977e+00
diff --git a/buch/papers/multiplikation/images/algo_tab.pdf b/buch/papers/multiplikation/images/algo_tab.pdf
new file mode 100644
index 0000000..7f2bb4f
--- /dev/null
+++ b/buch/papers/multiplikation/images/algo_tab.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/algo_tab.tex b/buch/papers/multiplikation/images/algo_tab.tex
new file mode 100644
index 0000000..50ce392
--- /dev/null
+++ b/buch/papers/multiplikation/images/algo_tab.tex
@@ -0,0 +1,122 @@
+\documentclass{article}
+\usepackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{times}
+\usepackage{geometry}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{algorithm}
+\usepackage{algpseudocode}
+\usepackage{mathrsfs}
+\usepackage{amsfonts}
+\usepackage{amsthm}
+\usepackage{lipsum}
+\usepackage{amscd}
+\usepackage{graphicx}
+\usepackage{fancyhdr}
+\usepackage{textcomp}
+\usepackage{pgfplots}
+\usepackage{txfonts}
+\usepackage[all]{xy}
+\usepackage{paralist}
+\usepackage[colorlinks=true]{hyperref}
+\usepackage{array}
+\usepackage{tikz}
+\usepackage{slashed}
+\usepackage{pdfpages}
+\usepackage{multicol}
+\usepackage{cite}
+\usepackage{url}
+\usepackage{amsmath,amsfonts,amssymb}
+\usepackage{tikz}
+\usetikzlibrary{arrows,matrix,positioning}
+\usetikzlibrary{overlay-beamer-styles}
+\usetikzlibrary{matrix.skeleton}
+\usetikzlibrary{automata,positioning}
+\usetikzlibrary{decorations.text}
+\usepackage{listings}
+\usepackage{multirow}
+\usepackage{color}
+
+\begin{document}
+
+
+
+\begin{table}[t]
+ \begin{tabular}{ll}
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B1}{$a, b$}
+ \State \textbf{return} $a+b$
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b2}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B2}{$a, b$}
+ \State $ x \gets a+b $
+ \State $ y \gets a \cdot b $
+ \State \textbf{return} $x+y$
+ \EndFunction
+ \end{algorithmic}
+\end{algorithm}
+
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
+\begin{table}
+ \begin{tabular}[t]{ll}
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \label{multiplikation:alg:linear}
+ \Function{L}{$\mathbf{a}, \mathbf{b}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[i] $
+ \EndFor
+
+ \State \textbf{return} $sum$
+
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.4\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:q1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{Q}{$\mathbf{A}, \mathbf{B}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \For{$j = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[j] $
+ \EndFor
+ \EndFor
+ \State \textbf{return} $sum$
+ \EndFunction
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
+dhdfh
+\end{document}
diff --git a/buch/papers/multiplikation/images/meas_c.pdf b/buch/papers/multiplikation/images/meas_c.pdf
index 3a4cfd8..e6af618 100644
--- a/buch/papers/multiplikation/images/meas_c.pdf
+++ b/buch/papers/multiplikation/images/meas_c.pdf
Binary files differ
diff --git a/buch/papers/multiplikation/images/meas_c.tex b/buch/papers/multiplikation/images/meas_c.tex
index 818a7e6..647a322 100644
--- a/buch/papers/multiplikation/images/meas_c.tex
+++ b/buch/papers/multiplikation/images/meas_c.tex
@@ -43,8 +43,8 @@
\begin{tikzpicture}
\begin{axis}[
xmode=log, ymode=log,
-xmin=60, xmax=5000,
-ymin=1e-4, ymax=2e3,
+xmin=60, xmax=10000,
+ymin=1e-4, ymax=2e4,
grid=both,
major grid style={black!50},
xlabel = data Input ($n$),
@@ -70,6 +70,7 @@ width=12cm, height=8cm,
(1024,4.539413)
(2048,130.627663)
(4096,1179.261048)
+(8192,10071.512655)
};
\addlegendentry{Strassen}
\addplot [ color=black,
@@ -86,6 +87,7 @@ width=12cm, height=8cm,
(1024,8.457472 )
(2048,59.267256)
(4096,414.648901)
+(8192,3014.235467)
};
\addlegendentry{MM div and conq}
@@ -103,6 +105,7 @@ width=12cm, height=8cm,
(1024,19.928951 )
(2048,159.333884 )
(4096,1147.106865)
+(8192,9606.402522)
};
\addlegendentry{MM}
@@ -120,6 +123,7 @@ width=12cm, height=8cm,
(1024,4.162845 )
(2048,125.909034 )
(4096,1111.312696)
+(8192,9376.173434)
};
\addlegendentry{BLAS}
\addplot[ color=blue,
@@ -136,6 +140,7 @@ width=12cm, height=8cm,
(1024,0.704748 )
(2048,6.845095 )
(4096,55.845038)
+(8192,478.429957)
};
\end{axis}
\end{tikzpicture}
diff --git a/buch/papers/multiplikation/loesungsmethoden.tex b/buch/papers/multiplikation/loesungsmethoden.tex
index a7612e1..464085d 100755
--- a/buch/papers/multiplikation/loesungsmethoden.tex
+++ b/buch/papers/multiplikation/loesungsmethoden.tex
@@ -39,13 +39,13 @@ Die \texttt{for i} Schleife iteriert \"uber alle Zeilen der $\mathbf{A}$ Matrix,
\end{algorithmic}
\end{algorithm}
-Die Laufzeit dieser Struktur mit drei \texttt{For} Schleifen ist $\mathcal{O}\left(n^3\right)$
+Die Laufzeit dieser Struktur mit drei \texttt{For} Schleifen ist $\mathcal{O} (n^3)$
\subsubsection{Divide and Conquer Methode}
F\"ur gewisse Algorithmen f\"uhren \textit{Divide and Conquer} Ans\"atze \cite{multiplikation:DAC} zu markant besseren Laufzeiten.
Die Grundidee ist, dass ein Problem in mehrere, meist simplere und kleinere Teilprobleme aufgeteilt wird.
-Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die Laufzeit von $\mathcal{O}\left(n^2\right)$ zu $\mathcal{O}(n \log n)$ verbessert werden kann.
+Das bekannteste Beispiel ist wohl die \textit{Fast Fourier Transform} wobei die Laufzeit von $\mathcal{O} (n^2)$ zu $\mathcal{O}(n \log n)$ verbessert werden kann.
Die Matrizenmultiplikation kann ebenfalls mit solch einem Ansatz berechnet werden.
Zur vereinfachten Veranschaulichung kann die Situation mit $\mathbf{A}$ und $\mathbf{B}$ der Gr\"osse $2^n \times 2^n$ verwendet werden.
@@ -68,7 +68,7 @@ Das Matrizen Produkt
\end{bmatrix},
\end{equation}
\begin{equation}
-\mathbf{C}_{ij} = \sum_{k=1}2n \mathbf{A}_{ik} \mathbf{B}_{kj}
+\mathbf{C}_{ij} = \sum_{k=1}^{2n} \mathbf{A}_{ik} \mathbf{B}_{kj}
\label{multiplikation:eq:MM_block}
\end{equation}
ist identisch zu der Gleichung \eqref{multiplikation:eq:MM}, f\"ur die Multiplikation der Untermatrize $\mathbf{A}_{ik}$ und $\mathbf{B}_{kj}$ wird die Matrizenmultiplikation verwendet.
@@ -109,7 +109,7 @@ Die Laufzeit dieser rekursiven Funktion kann mit dem \textit{Master Theorem} \ci
Ohne auf dieses vertieft einzugehen, bestimmt die Anzahl rekursiver Aufrufe $\mathcal{T} $ der Funktion die Laufzeit.
In diesem Fall wird die Funktion pro Durchlauf acht mal rekursiv aufgerufen, dies f\"uhrt
\begin{equation} \label{multiplikation:eq:laufzeitdac}
- \mathcal{T}(n) = 8 \cdot \mathcal{T}\left (\frac{n}{2}\right ) + n^2 = \mathcal{O}(n^{\log_2 8}) = \mathcal{O}\left (n^{3} \right )
+ \mathcal{T}(n) = 8 \cdot \mathcal{T} \left(\frac{n}{2}\right ) + n^2 = \mathcal{O}(n^{\log_2 8}) = \mathcal{O} (n^{3} )
\end{equation}
zu einer kubischen Laufzeit.
Die Addition zweier Matrizen $\mathbf{A} + \mathbf{B} = \mathbf{C}$ hat eine Laufzeit von $\mathcal{O}(n^{2})$ und kann neben dem dominierendem Anteil von $\mathcal{O}(n^{3})$ ignoriert werden.
@@ -202,7 +202,7 @@ Die Funktion wird sieben mal rekursiv aufgerufen.
Dies f\"uhrt nach dem \textit{Master Theorem} zu einer Laufzeit von
\begin{equation} \label{multiplikation:eq:laufzeitstrassen}
\mathcal{T}(n) =
-7 \cdot \mathcal{T}(\frac{n}{2}) + n^2 = \mathcal{O}\left(n^{\log_2 7}\right ) = \mathcal{O}\left(n^{2.8074} \right )
+7 \cdot \mathcal{T}\left(\frac{n}{2}\right) + n^2 = \mathcal{O}(n^{\log_2 7} ) = \mathcal{O}(n^{2.8074} )
\end{equation}
und ist somit schneller als die Standardmethode.
Man beachte, dass die Anzahl von Additionen und Subtraktionen gr\"osser und die Anzahl der Multiplikationen kleiner wurde.
@@ -267,7 +267,7 @@ sein, damit man etwas einspart.
Die Implementation kann Algorithmus \ref{multiplikation:alg:winograd} entnommen werden.
Falls $m=n=p$ werden $\frac{n^3}/{2}$ Multiplikationen benötigt.
Im Abschnitt \ref{muliplikation:sec:bigo} wurde bereits erläutert: falls $n \rightarrow \infty$ können Konstanten vernachlässigt werden und
- somit entsteht für diesen Algorithmus wieder die Ursprüngliche Laufzeit von $\mathcal{O}\left(n^3 \right)$.
+ somit entsteht für diesen Algorithmus wieder die Ursprüngliche Laufzeit von $\mathcal{O}(n^3 )$.
\begin{algorithm}\footnotesize\caption{Winograds Matrizenmultiplikation}
\setlength{\lineskip}{7pt}
\label{multiplikation:alg:winograd}
@@ -336,33 +336,33 @@ Die meisten Numerischen Bibliotheken von High-Level Skriptsprachen wie \texttt{M
\item Level 2
\begin{itemize}
\item Operationen der Art: $\mathbf{y} \leftarrow \alpha \mathbf{A}\mathbf{x}+\beta \mathbf{y}$
- \item Dieses Level hat $\mathcal{O}\left(n^2\right)$ Charakteristik
+ \item Dieses Level hat $\mathcal{O}(n^2)$ Charakteristik
\end{itemize}
\item Level 3
\begin{itemize}
\item Operationen der Art: $\mathbf{C} \leftarrow \alpha \mathbf{A}\mathbf{B}+\beta\mathbf{C}$
- \item Dieses Level hat $\mathcal{O}\left(n^3\right)$ Charakteristik
+ \item Dieses Level hat $\mathcal{O}(n^3)$ Charakteristik
\end{itemize}
\end{itemize}
Die \textit{BLAS} sind auf die modernen Computer Prozessoren optimiert und k\"onnen dank einer ausgeklügelter Verwendung der Speicherarchitektur zu erheblichen Leistungsoptimierungen f\"uhren.
-\subsubsection{General Matrix Multiplication (GEMM)}
-
-Die \textit{Double-GEMM} \cite{multiplikation:DGEMM} ist definiert als:
-
-\textit{DGEMM performs one of the matrix-matrix operations}
-$$
- C := \alpha \cdot op( A )\cdot op( B ) + \beta \cdot C,
- $$
- \textit{where op( X ) is one of}
-$$
-op( X ) = X \quad \text{ or } \quad op( X ) = X^T,
-$$
- \textit{alpha and beta are scalars, and A, B and C are matrices, with op( A )
- an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
- }
+%\subsubsection{General Matrix Multiplication (GEMM)}
+%
+%Die \textit{Double-GEMM} \cite{multiplikation:DGEMM} ist definiert als:
+%
+%\textit{DGEMM performs one of the matrix-matrix operations}
+%$$
+% C := \alpha \cdot op( A )\cdot op( B ) + \beta \cdot C,
+% $$
+% \textit{where op( X ) is one of}
+%$$
+%op( X ) = X \quad \text{ or } \quad op( X ) = X^T,
+%$$
+% \textit{alpha and beta are scalars, and A, B and C are matrices, with op( A )
+% an m by k matrix, op( B ) a k by n matrix and C an m by n matrix.
+% }
%Die Implementation von $\alpha\mathbf{A}\mathbf{B} + \beta \mathbf{C} = \mathbf{C}$, wobei $\alpha = 1.0$ und $\beta = 0.0$ in der \texttt{C}-Version von \textit{BLAS}, ist als
%\begin{lstlisting}[style=multiplikationC]
@@ -379,7 +379,7 @@ $$
Folgende Algorithmen wurden jeweils in \texttt{C} und \texttt{Python} implementiert.
\begin{itemize}
\item Standard Matrizenmultiplikation
- \item \textit{Devide and Conquer} Matrizenmultiplikation
+ \item \textit{Divide and Conquer} Matrizenmultiplikation
\item Strassens Matrizenmultiplikation
\item Winograds Matrizenmultiplikation
\item \texttt{BLAS} Matrizenmultiplikation in \texttt{C}
diff --git a/buch/papers/multiplikation/problemstellung.tex b/buch/papers/multiplikation/problemstellung.tex
index e53b0de..c8ba274 100755
--- a/buch/papers/multiplikation/problemstellung.tex
+++ b/buch/papers/multiplikation/problemstellung.tex
@@ -14,87 +14,102 @@ Gezielt wird auf Algorithmen eingegangen, welche das Problem schneller als der S
Die Big $\mathcal{O}$ Notation beschreibt die Laufzeitkomplexit\"at eines Algorithmus in Abhängigkeit zur Inputgrösse \cite{multiplikation:bigo}.
$f(x) \in \mathcal{O}(g(x))$ besagt, dass die Funktion $f$ nicht wesentlich schneller w\"achst als $g$ wenn $x \rightarrow \infty$.
% Es gibt eine Konstante $K$ derart, dass $f(x) \le K g(x)$ für $x\to\infty$
-Als Beispiel: benötigt eine Funktion $g$ $\mathcal{O}\left(n^2 \right)$ Multiplikationen, so wächst $f$ mit $\mathcal{O}\left(n+ n^2 \right)$ nicht wesentlich schneller falls $x\to\infty$.
+Als Beispiel: benötigt eine Funktion $g$ $\mathcal{O} (n^2 )$ Multiplikationen, so wächst $f$ mit $\mathcal{O} (n+ n^2 )$ nicht wesentlich schneller falls $x\to\infty$.
Vereinfacht werden f\"ur Algorithmen die folgende Notation verwendet:
\begin{itemize}
\item $f \in \mathcal{O}(1) \rightarrow f$ ist beschr\"ankt
\item $f \in \mathcal{O}(n) \rightarrow f$ w\"achst linear
- \item $f \in \mathcal{O}\left (n^2 \right ) \rightarrow f$ w\"achst quadratisch
+ \item $f \in \mathcal{O} (n^2 ) \rightarrow f$ w\"achst quadratisch
\item $f \in \mathcal{O}(\log n) \rightarrow f$ w\"achst logarithmisch
\item $f \in \mathcal{O}(n \log n) \rightarrow f$ hat super-lineares Wachstum
- \item $f \in \mathcal{O}\left (e^n \right ) \rightarrow f$ w\"achst exponentiell
+ \item $f \in \mathcal{O} (e^n ) \rightarrow f$ w\"achst exponentiell
\item usw.
\end{itemize}
In der Abbildung \ref{multiplikation:fig:bigo} k\"onnen die verschiedenen Laufzeiten miteinander verglichen werden.
Bei einer logarithmischen Darstellung werden Polynome der Form $f(x) = x^k$ als Gerade und Exponentialfunktionen der Form $f(x) = a^x$ als nach oben gekr\"ummte Kurven dargestellt.
-Sch\"on zu erkennen ist, dass Logarithmische Kurven beschr\"ankt sind.
+
\subsubsection{Beispiel Algorithmen}
Es folgen einige Beispiele von Algorithmen welche zu einer bestimmten Zeitkomplexit\"atsklasse zugeteilt werden k\"onnen.
-\begin{minipage}{0.4\textwidth}
- \begin{algorithm}[H]\footnotesize\caption{}
- \label{multiplikation:alg:b1}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \Function{B1}{$a, b$}
- \State \textbf{return} $a+b$
- \EndFunction
- \end{algorithmic}
- \end{algorithm}
-
- \begin{algorithm}[H]\footnotesize\caption{}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \label{multiplikation:alg:linear}
- \Function{L}{$\mathbf{a}, \mathbf{b}$,n}
- \State $ sum \gets 0$
- \For{$i = 0,1,2 \dots,n$}
- \State $ sum \gets sum + A[i] \cdot B[i] $
- \EndFor
-
- \State \textbf{return} $sum$
-
- \EndFunction
- \end{algorithmic}
- \end{algorithm}
-\end{minipage}
-\hspace{2cm}
-\begin{minipage}{0.4\textwidth}
-
- \begin{algorithm}[H]\footnotesize\caption{}
- \label{multiplikation:alg:b2}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \Function{B2}{$a, b$}
- \State $ x \gets a+b $
- \State $ y \gets a \cdot b $
- \State \textbf{return} $x+y$
- \EndFunction
- \end{algorithmic}
- \end{algorithm}
-
-
- \begin{algorithm}[H]\footnotesize\caption{}
- \label{multiplikation:alg:q1}
- \setlength{\lineskip}{7pt}
- \begin{algorithmic}
- \Function{Q}{$\mathbf{A}, \mathbf{B}$,n}
- \State $ sum \gets 0$
- \For{$i = 0,1,2 \dots,n$}
- \For{$j = 0,1,2 \dots,n$}
- \State $ sum \gets sum + A[i] \cdot B[j] $
- \EndFor
- \EndFor
- \State \textbf{return} $sum$
- \EndFunction
- \end{algorithmic}
- \end{algorithm}
-
-\end{minipage}
+
+\begin{table}[t]
+ \begin{tabular}{ll}
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B1}{$a, b$}
+ \State \textbf{return} $a+b$
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:b2}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{B2}{$a, b$}
+ \State $ x \gets a+b $
+ \State $ y \gets a \cdot b $
+ \State \textbf{return} $x+y$
+ \EndFunction
+ \end{algorithmic}
+ \end{algorithm}
+
+ \end{minipage}
+ \end{tabular}
+\end{table}
+
+\begin{table}
+ \begin{tabular}[t]{ll}
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \label{multiplikation:alg:linear}
+ \Function{L}{$\mathbf{a}, \mathbf{b}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[i] $
+ \EndFor
+
+ \State \textbf{return} $sum$
+
+ \EndFunction
+ \State
+ \State
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ &
+ \begin{minipage}{0.48\textwidth}
+ \begin{algorithm}[H]\footnotesize\caption{}
+ \label{multiplikation:alg:q1}
+ \setlength{\lineskip}{7pt}
+ \begin{algorithmic}
+ \Function{Q}{$\mathbf{A}, \mathbf{B}$,n}
+ \State $ sum \gets 0$
+ \For{$i = 0,1,2 \dots,n$}
+ \For{$j = 0,1,2 \dots,n$}
+ \State $ sum \gets sum + A[i] \cdot B[j] $
+ \EndFor
+ \EndFor
+ \State \textbf{return} $sum$
+ \EndFunction
+ \end{algorithmic}
+ \end{algorithm}
+ \end{minipage}
+ \end{tabular}
+\end{table}
\paragraph{Beschr\"ankter Algorithmus}
@@ -111,7 +126,7 @@ Die \texttt{for}-Schleife wird $n$-mal durchlaufen und f\"uhrt deshalb zu $\math
\paragraph{Quadratischer Algorithmus}
Der Algorithmus \ref{multiplikation:alg:q1} hat ein quadratisches Verhalten.
-Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O}\left(n^2\right)$.
+Die beiden \texttt{for}-Schleifen werden jeweils $n$-mal durchlaufen und f\"uhrt deshalb zu $\mathcal{O} (n^2 )$.
\begin{figure}