Jdi na navigaci předmětu

1. Domácí úkol: Porovnání

Toto porovnání není finální, jde o odevzdání po měkkém deadline.

using DataFrames, CSV, PyPlot
** (process:8161): WARNING **: 14:10:24.419: Failed to load shared library 'libgtk-4.so.1' referenced by the typelib: /usr/bin/../lib/julia/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /usr/bin/../lib/libicuuc.so.72)

Import naměřených dat.

data = CSV.read("files/benchmark01.csv", DataFrame);
data[!, :score] = zeros(Int64, nrow(data));

Čas v původních datech je měřen v nanosekundách, paměť v bytech. Každá hodnota je medián několika běhů benchmarku z balíčku BechmarkTools.jl. Všechny výpočty běží na stejných předem vygenerovaných polynomech.

Komentář k jednotlivých sloupců je v příslušné sekci níže.

data = coalesce.(data, 1e10)
23×10 DataFrame
Rowusernamemulti_timemulti_memadd_timeadd_memdiv_timediv_memeval_timeeval_memscore
String15Float64Float64Float64Float64Float64Float64Float64Float64Int64
1kalvotom1.1556e612160.06635.7912288.055909.012336.01289.10.00
2Zuhgan1.10953e612160.04444.888464.0427382.012624.0720.190.00
3Yargug1.0e101.0e101.0e101.0e101.0e101.0e101.0e101.0e100
4Seakgu1.0e101.0e101.0e101.0e101.0e101.0e101.0e101.0e100
5Shum1.22777e612192.08767.920608.05.24856e516496.0722.3330.00
6Parfu1.15415e612160.013552.522432.01.88549e82.49252e71436.70.00
7Quordud1.15525e612160.06218.868608.01.73204e89.54898e61295.70.00
8Borkul129986.012160.06096.448128.02.419e71.27857e71201.60.00
9Jogug9.48704e512160.03384.118128.03.42316e67.01357e6623.3060.00
10Guarg1.0e101.0e101.0e101.0e101.0e101.0e101.0e101.0e100
11Wauktug1.18684e612160.04335.388128.06.48217e61.39189e7723.0270.00
12Ugghra1.27664e512160.03372.678128.02.53291e71.39273e713162.00.00
13Gilaktug924454.012160.02695.678128.03.97884e61.04558e7669.9520.00
14Xomkug1.13687e612160.0620.2250.071018.012336.01198.90.00
15Xunaakt2.04755e75.64059e79222.1721184.06.44727e92.82093e919998.00.00
16Saghig1.15524e612160.04609.948464.0254894.012672.0697.2030.00
17Zahgorim821738.012160.03860.228464.0100349.012624.0721.9220.00
18Saraugug3.48882e72.88922e77554.8320416.03.1457e66.27283e6721.2470.00
19Xig876879.012192.04595.578160.04.39854e516832.01292.00.00
20Epkagut1.16356e612160.04230.288128.01.42546e81.17047e722160.00.00
21Magub1.0e101.0e101.0e101.0e101.0e101.0e101.0e101.0e100
22Bugharz1.14116e612160.02566.79414.01.4849e81.15893e71380.30.00
23Zulgha6.07996e61.24922e73885.58128.01.93428e93.15093e91292.50.00

Poznámky

  • Vedle studentů je v tabulce i můj řádek (kalvotom).
  • Pro lepší porovnání časů provedem vždy relativní porovnání s nejrychlejším časem. Měníme proto hodnoty a význam časových sloupců!

Násobení polynomů s Float64 koeficienty

Konkrétně násobíme polynomy stupně 1000 a 500 s koeficienty mezi -2 a 2.

data[!, :multi_time] /= minimum(data.multi_time);
sort!(data, [:multi_time]);

for k in axes(data, 1)
    data[k, :score] += k
end

data[:, Cols(:username, :multi_time, :multi_mem, :score)]
23×4 DataFrame
Rowusernamemulti_timemulti_memscore
String15Float64Float64Int64
1Ugghra1.012160.01
2Borkul1.0181812160.02
3Zahgorim6.436712160.03
4Xig6.8686212192.04
5Gilaktug7.2412812160.05
6Jogug7.4312312160.06
7Zuhgan8.6909912160.07
8Xomkug8.9051412160.08
9Bugharz8.9387212160.09
10Parfu9.0404812160.010
11Saghig9.04912160.011
12Quordud9.0491412160.012
13kalvotom9.0518212160.013
14Epkagut9.1142312160.014
15Wauktug9.2965912160.015
16Shum9.6171312192.016
17Zulgha47.62451.24922e717
18Xunaakt160.3855.64059e718
19Saraugug273.282.88922e719
20Yargug78330.31.0e1020
21Seakgu78330.31.0e1021
22Guarg78330.31.0e1022
23Magub78330.31.0e1023

Relativní porovnání rychlosti běhu vzhledem k nejrychlejšímu řešení.

plt.grid()
bar(axes(data.multi_time[1:19], 1), data.multi_time[1:19], tick_label=data.username[1:19])
plt.xticks(rotation=80);

Odhad alokace paměti (v bytech).

plt.grid()
bar(axes(data.multi_mem[1:19], 1), data.multi_mem[1:19], tick_label=data.username[1:19])
plt.xticks(rotation=80);

Sčítání polynomů s Float64 koeficienty

Opět polynomy stupně 1000 a 500 s koeficienty mezi -2 a 2.

data[!, :add_time] /= minimum(data.add_time);
sort!(data, [:add_time]);

for k in axes(data, 1)
    data[k, :score] += k
end

data[:, Cols(:username, :add_time, :add_mem, :score)]
23×4 DataFrame
Rowusernameadd_timeadd_memscore
String15Float64Float64Int64
1Xomkug1.00.09
2Bugharz4.138349414.011
3Gilaktug4.346278128.08
4Ugghra5.437818128.05
5Jogug5.456278128.011
6Zahgorim6.223918464.09
7Zulgha6.264668128.024
8Epkagut6.820568128.022
9Wauktug6.990018128.024
10Zuhgan7.166568464.017
11Xig7.409538160.015
12Saghig7.432698464.023
13Borkul9.82948128.015
14Quordud10.02688608.026
15kalvotom10.69912288.028
16Saraugug12.180820416.035
17Shum14.136620608.033
18Xunaakt14.869121184.036
19Parfu21.85122432.029
20Yargug1.61232e71.0e1040
21Seakgu1.61232e71.0e1042
22Guarg1.61232e71.0e1044
23Magub1.61232e71.0e1046

Relativní porovnání rychlosti běhu vzhledem k nejrychlejšímu řešení.

plt.grid()
bar(axes(data.add_time[1:19], 1), data.add_time[1:19], tick_label=data.username[1:19])
plt.xticks(rotation=80);

Odhad alokace paměti (v bytech).

plt.grid()
bar(axes(data.add_mem[1:19], 1), data.add_mem[1:19], tick_label=data.username[1:19])
plt.xticks(rotation=80);

Dělení polynomu polynomem s koeficienty Float64

Opět dělení polynomu stupně 1000 polynomem stupně 500, koeficienty mezi -2 a 2.

data[!, :div_time] /= minimum(data.div_time);
sort!(data, [:div_time]);

for k in axes(data, 1)
    data[k, :score] += k
end

data[:, Cols(:username, :div_time, :div_mem, :score)]
23×4 DataFrame
Rowusernamediv_timediv_memscore
String15Float64Float64Int64
1kalvotom1.012336.029
2Xomkug1.2702412336.011
3Zahgorim1.7948612624.012
4Saghig4.5590912672.027
5Zuhgan7.6442412624.022
6Xig7.8673116832.021
7Shum9.3876716496.040
8Saraugug56.26476.27283e643
9Jogug61.22737.01357e620
10Gilaktug71.16631.04558e718
11Wauktug115.9411.39189e735
12Borkul432.6681.27857e727
13Ugghra453.0421.39273e718
14Epkagut2549.61.17047e736
15Bugharz2655.921.15893e726
16Quordud3097.979.54898e642
17Parfu3372.422.49252e746
18Zulgha34597.03.15093e942
19Xunaakt1.15317e52.82093e955
20Yargug1.78862e51.0e1060
21Seakgu1.78862e51.0e1063
22Guarg1.78862e51.0e1066
23Magub1.78862e51.0e1069

Relativní porovnání rychlosti běhu vzhledem k nejrychlejšímu řešení.

plt.grid()
bar(axes(data.div_time[1:18], 1), data.div_time[1:18], tick_label=data.username[1:18])
plt.xticks(rotation=80);

Odhad alokace paměti (v bytech).

plt.grid()
bar(axes(data.div_mem[1:18], 1), data.div_mem[1:18], tick_label=data.username[1:18])
plt.xticks(rotation=80);

Výpočet funkční hodnoty polynomy s Float64 koeficienty

Polynom stupně 500 s koeficienty mezi -2 a 2.

data[!, :eval_time] /= minimum(data.eval_time);
sort!(data, [:eval_time]);

for k in axes(data, 1)
    data[k, :score] += k
end

data[:, Cols(:username, :eval_time, :eval_mem, :score)]
23×4 DataFrame
Rowusernameeval_timeeval_memscore
String15Float64Float64Int64
1Jogug1.00.021
2Gilaktug1.074840.020
3Saghig1.118560.030
4Zuhgan1.155430.026
5Saraugug1.157130.048
6Zahgorim1.158210.018
7Shum1.158870.047
8Wauktug1.159990.043
9Xomkug1.923450.020
10Borkul1.927780.037
11kalvotom2.068170.040
12Xig2.072820.033
13Zulgha2.073620.055
14Quordud2.078750.056
15Bugharz2.214480.041
16Parfu2.304970.062
17Ugghra21.11640.035
18Xunaakt32.08380.073
19Epkagut35.55240.055
20Yargug1.60435e71.0e1080
21Seakgu1.60435e71.0e1084
22Guarg1.60435e71.0e1088
23Magub1.60435e71.0e1092
plt.grid()
bar(axes(data.eval_time[1:18], 1), data.eval_time[1:18], tick_label=data.username[1:18])
plt.xticks(rotation=80);
plt.grid()
bar(axes(data.eval_mem[1:18], 1), data.eval_mem[1:18], tick_label=data.username[1:18])
plt.xticks(rotation=80);

Skóre (čím menší hodnota, tím lépe)

sort!(data, :score)
data[:, :points] = zeros(Int64, nrow(data))

n = 0
for k in axes(data, 1)
    # kalvotom se nepočíta, zbývá 13 studentů
    if data[k, :username] == "kalvotom"
        continue
    end
    
    data[k, :points] = 5 - div(n, 4)
    n += 1
end

data[:, Cols(:username, :score, :points)]
23×3 DataFrame
Rowusernamescorepoints
String15Int64Int64
1Zahgorim185
2Gilaktug205
3Xomkug205
4Jogug215
5Zuhgan264
6Saghig304
7Xig334
8Ugghra354
9Borkul373
10kalvotom400
11Bugharz413
12Wauktug433
13Shum473
14Saraugug482
15Zulgha552
16Epkagut552
17Quordud562
18Parfu621
19Xunaakt731
20Yargug801
21Seakgu841
22Guarg880
23Magub920