Merge branch 'stacksize' into fares

This commit is contained in:
Mylloon 2024-05-05 14:23:01 +02:00
commit c325664733
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
18 changed files with 837 additions and 417 deletions

View file

@ -1,6 +1,6 @@
CC = gcc CC = gcc
RM = rm -rf RM = rm -rf
TAR = tar -cf TAR = tar -czf
CP = cp -r CP = cp -r
MKDIR = mkdir -p MKDIR = mkdir -p
@ -63,11 +63,11 @@ pdf-clean:
$(MAKE) clean $(MAKE) clean
clean: pdf-clean clean: pdf-clean
$(RM) $(ALL_OBJECTS) "$(EXE)$(EXE_EXT)" "$(ARCHIVE_NAME).tar" $(RM) $(ALL_OBJECTS) "$(EXE)$(EXE_EXT)" "$(ARCHIVE_NAME).tar.gz"
archive: pdf-make archive: pdf-make
$(MKDIR) "$(ARCHIVE_NAME)" $(MKDIR) "$(ARCHIVE_NAME)"
$(CP) "$(SRC_DIR)" "$(INC_DIR)" Makefile README "$(ARCHIVE_NAME)" $(CP) "$(SRC_DIR)" "$(INC_DIR)" Makefile README "$(ARCHIVE_NAME)"
$(CP) "$(wildcard $(PDF_DIR)/*.pdf)" "$(ARCHIVE_NAME)/$(PDF_NEWNAME).pdf" $(CP) "$(wildcard $(PDF_DIR)/*.pdf)" "$(ARCHIVE_NAME)/$(PDF_NEWNAME).pdf"
$(TAR) "$(ARCHIVE_NAME).tar" "$(ARCHIVE_NAME)" $(TAR) "$(ARCHIVE_NAME).tar.gz" "$(ARCHIVE_NAME)"
$(RM) "$(ARCHIVE_NAME)" $(RM) "$(ARCHIVE_NAME)"

11
README
View file

@ -14,6 +14,8 @@ Paramètres disponibles :
* -m : lance le benchmark avec mandelbrot * -m : lance le benchmark avec mandelbrot
* -t n : où `n` est le nombre de threads à utiliser, 0 signifie qu'on utilise * -t n : où `n` est le nombre de threads à utiliser, 0 signifie qu'on utilise
tous les cœurs disponibles. tous les cœurs disponibles.
* -n x : où `x` est le nombre minimum de tâches simultanées supporter
par l'ordonnanceur
* -s : n'utilises pas d'ordonnanceur * -s : n'utilises pas d'ordonnanceur
Exemple : quicksort en utilisant tous les cœurs disponibles Exemple : quicksort en utilisant tous les cœurs disponibles
@ -21,8 +23,8 @@ Exemple : quicksort en utilisant tous les cœurs disponibles
./ordonnanceur.elf -qt 0 ./ordonnanceur.elf -qt 0
Cible du makefile Cibles du makefile
-------------- ------------------
Il est possible d'utiliser d'autres implémentations d'ordonnanceur en changeant Il est possible d'utiliser d'autres implémentations d'ordonnanceur en changeant
la cible du Makefile. la cible du Makefile.
@ -33,9 +35,10 @@ la cible du Makefile.
* `make ws` : work-stealing * `make ws` : work-stealing
Infos Informations
----- ------------
Le rapport se trouve dans le dossier courant. Le rapport se trouve dans le dossier courant.
Lien vers le dépôt : https://git.mylloon.fr/Paris7/work-stealing-scheduler
Anri Kennel 22302653 Anri Kennel 22302653

View file

@ -3,4 +3,4 @@
/* Lance le benchmark avec mandelbrot (TP10) /* Lance le benchmark avec mandelbrot (TP10)
* *
* Renvoie le temps d'exécution */ * Renvoie le temps d'exécution */
double benchmark_mandelbrot(int, int); double benchmark_mandelbrot(int, int, int);

View file

@ -3,4 +3,4 @@
/* Lance le benchmark avec quicksort (fournis) /* Lance le benchmark avec quicksort (fournis)
* *
* Renvoie le temps d'exécution */ * Renvoie le temps d'exécution */
double benchmark_quicksort(int, int); double benchmark_quicksort(int, int, int);

View file

@ -5,11 +5,13 @@ SRC = $(TEX)
PDF = $(TEX:.tex=.pdf) PDF = $(TEX:.tex=.pdf)
TEXMK = latexmk -shell-escape -lualatex -interaction=nonstopmode TEXMK = latexmk -shell-escape -lualatex -interaction=nonstopmode
QPDF = qpdf --linearize --replace-input
all: $(PDF) all: $(PDF)
$(PDF): %.pdf: %.tex $(PDF): %.pdf: %.tex
$(TEXMK) $< $(TEXMK) $<
@$(QPDF) $@ 2>/dev/null |:
EXTS = aux fdb_latexmk fls log nav out snm synctex.gz toc EXTS = aux fdb_latexmk fls log nav out snm synctex.gz toc
clean: clean:

View file

@ -1,103 +1,101 @@
serial;solution1;solution2;solution3;solution4 serial;solution1;solution2;solution3;solution4
3,699373;5,488023;0,47237;0,478026;0,433025 3,699373;69,908451;0,748724;0,724536;0,4388
3,700028;5,455712;0,494962;0,43337;0,417979 3,700028;69,651509;0,758207;0,735602;0,452657
3,706003;5,525636;0,454447;0,4357;0,433579 3,706003;70,409085;0,760916;0,77577;0,471077
3,680465;5,782133;0,449261;0,448702;0,420426 3,680465;68,879508;0,754408;0,856882;0,463803
3,755356;5,760779;0,430482;0,432999;0,421888 3,755356;68,715224;0,758946;0,735604;0,436798
3,773443;5,628832;0,437057;0,451089;0,425781 3,773443;70,05263;0,742368;0,715597;0,485953
3,762929;5,534626;0,451706;0,442623;0,434668 3,762929;61,071574;0,757395;0,709591;0,449706
3,728524;5,547798;0,449807;0,435755;0,423926 3,728524;61,826388;0,76639;0,709813;0,432972
3,765843;5,544817;0,437969;0,428514;0,416397 3,765843;60,281954;0,755399;0,724667;0,443676
3,760712;5,559137;0,456097;0,459615;0,443395 3,760712;59,989333;0,760786;0,731358;0,482156
;;0,435231;0,447139;0,417403 ;;0,753061;0,751812;0,486163
;;0,435863;0,431024;0,422645 ;;0,732515;0,737792;0,463441
;;0,47099;0,442824;0,438633 ;;0,766985;0,727256;0,461299
;;0,444217;0,426627;0,424975 ;;0,755468;0,758367;0,452605
;;0,441064;0,428842;0,426369 ;;0,754449;0,743946;0,463087
;;0,464321;0,455673;0,440124 ;;0,763504;0,737184;0,508087
;;0,440808;0,431802;0,421606 ;;0,816164;0,718047;0,443023
;;0,444501;0,431392;0,417215 ;;0,818466;0,707516;0,466842
;;0,466562;0,451748;0,438959 ;;0,820094;0,714751;0,427232
;;0,444408;0,440035;0,4254 ;;0,777806;0,72513;0,454773
;;0,440298;0,429963;0,418044 ;;0,756754;0,736922;0,481304
;;0,469805;0,445796;0,429213 ;;0,756295;0,726482;0,457485
;;0,435337;0,428611;0,429957 ;;0,764344;0,725604;0,435368
;;0,428776;0,430837;0,418727 ;;0,812846;0,703642;0,454735
;;0,439373;0,445644;0,428272 ;;0,794532;0,701544;0,439924
;;0,430075;0,439031;0,439621 ;;0,802799;0,714291;0,432497
;;0,448776;0,431147;0,414435 ;;0,776952;0,701825;0,456261
;;0,453934;0,452697;0,413957 ;;0,811182;0,731952;0,435513
;;0,436708;0,43642;0,438138 ;;0,867716;0,725562;0,434193
;;0,437682;0,439661;0,426635 ;;0,786163;0,744599;0,438291
;;0,458744;0,448007;0,422047 ;;0,817451;0,744788;0,45231
;;0,46211;0,439246;0,439724 ;;0,814847;0,705125;0,456504
;;0,439103;0,436682;0,420238 ;;0,775259;0,715851;0,428383
;;0,455765;0,443933;0,420346 ;;0,873499;0,726173;0,470819
;;0,435958;0,443765;0,441586 ;;0,833682;0,714716;0,485135
;;0,443098;0,43171;0,421882 ;;0,788488;0,71715;0,464806
;;0,46374;0,465626;0,420092 ;;0,803513;0,72059;0,448136
;;0,448221;0,434924;0,437275 ;;0,765686;0,736539;0,471816
;;0,45311;0,427708;0,421062 ;;0,764588;0,715728;0,441337
;;0,450469;0,427194;0,424122 ;;0,780008;0,724693;0,427149
;;0,430775;0,433748;0,422986 ;;0,759503;0,711983;0,448329
;;0,442299;0,420065;0,439952 ;;0,769281;0,70784;0,461468
;;0,449738;0,426692;0,495084 ;;0,759218;0,741248;0,438958
;;0,434351;0,437632;0,528238 ;;0,762445;0,697456;0,447645
;;0,42759;0,431623;0,525092 ;;0,766437;0,710466;0,44675
;;0,458849;0,42209;0,485978 ;;0,762647;0,71167;0,448525
;;0,441104;0,438151;0,464852 ;;0,760154;0,705879;0,415549
;;0,435596;0,422125;0,444847 ;;0,762126;0,724284;0,448755
;;0,451678;0,413834;0,452927 ;;0,772651;0,70883;0,446395
;;0,431298;0,449076;0,545694 ;;0,770516;0,709702;0,47213
;;0,434293;0,418434;0,472326 ;;0,765692;0,723043;0,422993
;;0,450405;0,425737;0,500946 ;;0,776426;0,704135;0,41982
;;0,429664;0,435361;0,507181 ;;0,75852;0,701932;0,451463
;;0,434408;0,428158;0,461463 ;;0,757897;0,72304;0,479726
;;0,44453;0,429692;0,46309 ;;0,752233;0,705475;0,465615
;;0,447389;0,428587;0,487651 ;;0,762813;0,706186;0,470113
;;0,44155;0,433786;0,50062 ;;0,774626;0,742427;0,448547
;;0,431118;0,423676;0,488046 ;;0,76221;0,704019;0,436901
;;0,448942;0,426093;0,471528 ;;0,770988;0,710307;0,457316
;;0,427483;0,44348;0,462296 ;;0,773389;0,740255;0,41779
;;0,429674;0,420654;0,456372 ;;0,765078;0,707632;0,41624
;;0,446553;0,422958;0,453673 ;;0,75806;0,70628;0,439199
;;0,426328;0,436407;0,428236 ;;0,840276;0,711741;0,444
;;0,427325;0,422546;0,461682 ;;0,809256;0,718686;0,435362
;;0,450518;0,426066;0,437946 ;;0,831878;0,706377;0,424162
;;0,437274;0,439085;0,426752 ;;0,818649;0,747162;0,46451
;;0,430804;0,417064;0,449537 ;;0,82472;0,703069;0,458657
;;0,448709;0,422231;0,451591 ;;0,821336;0,712093;0,451079
;;0,436712;0,437314;0,461608 ;;0,774274;0,721804;0,444846
;;0,430153;0,426393;0,501439 ;;0,816145;0,713959;0,404737
;;0,444711;0,421434;0,471776 ;;0,833468;0,725223;0,444446
;;0,428339;0,430742;0,469594 ;;0,84426;0,721485;0,441903
;;0,422936;0,430833;0,449374 ;;0,814416;0,717384;0,439355
;;0,443323;0,419846;0,501901 ;;0,806517;0,728766;0,446225
;;0,424732;0,434814;0,470192 ;;0,774625;0,71279;0,447389
;;0,427097;0,442446;0,452176 ;;0,799289;0,709757;0,401106
;;0,444068;0,456833;0,439405 ;;0,790709;0,731097;0,431719
;;0,426348;0,438789;0,455701 ;;0,823297;0,722108;0,420039
;;0,421448;0,437946;0,528443 ;;0,814804;0,708578;0,439513
;;0,440158;0,430192;0,50939 ;;0,842211;0,732622;0,426168
;;0,442971;0,42516;0,482255 ;;0,86405;0,715635;0,440741
;;0,483969;0,456829;0,478885 ;;0,820204;0,711505;0,443982
;;0,427999;0,431844;0,465756 ;;0,815872;0,732674;0,481752
;;0,436225;0,435414;0,497307 ;;0,809534;0,713409;0,47172
;;0,423702;0,444849;0,523557 ;;0,826922;0,715205;0,43914
;;0,436075;0,420309;0,448597 ;;0,806153;0,716027;0,510146
;;0,438504;0,424081;0,515072 ;;0,87398;0,706652;0,414881
;;0,428824;0,439707;0,50559 ;;0,801666;0,729932;0,436974
;;0,435219;0,418414;0,442364 ;;0,796379;0,719451;0,418621
;;0,443414;0,425195;0,448883 ;;0,77153;0,709199;0,418687
;;0,435936;0,432847;0,429692 ;;0,761019;0,728372;0,424339
;;0,430754;0,426698;0,421615 ;;0,776813;0,703809;0,441159
;;0,440062;0,420274;0,435846 ;;0,797319;0,705532;0,450558
;;0,429719;0,440123;0,421792 ;;0,766324;0,731904;0,457835
;;0,427208;0,426243;0,425134 ;;0,809568;0,709436;0,462539
;;0,445394;0,419549;0,424762 ;;0,794211;0,718473;0,444126
;;0,422881;0,421731;0,428183 ;;0,779595;0,71933;0,416904
;;0,41912;0,433301;0,437734 ;;0,777302;0,707086;0,422294
;;0,431884;0,420508;0,422997 ;;0,786113;0,721242;0,45898
;;0,425924;0,423692;0,450753 ;;0,779815;0,718811;0,419718
;;;;
=AVERAGE(A2:A101);=AVERAGE(B2:B101);=AVERAGE(C2:C101);=AVERAGE(D2:D101);=AVERAGE(E2:E101)

1 serial solution1 solution2 solution3 solution4
2 3,699373 5,488023 69,908451 0,47237 0,748724 0,478026 0,724536 0,433025 0,4388
3 3,700028 5,455712 69,651509 0,494962 0,758207 0,43337 0,735602 0,417979 0,452657
4 3,706003 5,525636 70,409085 0,454447 0,760916 0,4357 0,77577 0,433579 0,471077
5 3,680465 5,782133 68,879508 0,449261 0,754408 0,448702 0,856882 0,420426 0,463803
6 3,755356 5,760779 68,715224 0,430482 0,758946 0,432999 0,735604 0,421888 0,436798
7 3,773443 5,628832 70,05263 0,437057 0,742368 0,451089 0,715597 0,425781 0,485953
8 3,762929 5,534626 61,071574 0,451706 0,757395 0,442623 0,709591 0,434668 0,449706
9 3,728524 5,547798 61,826388 0,449807 0,76639 0,435755 0,709813 0,423926 0,432972
10 3,765843 5,544817 60,281954 0,437969 0,755399 0,428514 0,724667 0,416397 0,443676
11 3,760712 5,559137 59,989333 0,456097 0,760786 0,459615 0,731358 0,443395 0,482156
12 0,435231 0,753061 0,447139 0,751812 0,417403 0,486163
13 0,435863 0,732515 0,431024 0,737792 0,422645 0,463441
14 0,47099 0,766985 0,442824 0,727256 0,438633 0,461299
15 0,444217 0,755468 0,426627 0,758367 0,424975 0,452605
16 0,441064 0,754449 0,428842 0,743946 0,426369 0,463087
17 0,464321 0,763504 0,455673 0,737184 0,440124 0,508087
18 0,440808 0,816164 0,431802 0,718047 0,421606 0,443023
19 0,444501 0,818466 0,431392 0,707516 0,417215 0,466842
20 0,466562 0,820094 0,451748 0,714751 0,438959 0,427232
21 0,444408 0,777806 0,440035 0,72513 0,4254 0,454773
22 0,440298 0,756754 0,429963 0,736922 0,418044 0,481304
23 0,469805 0,756295 0,445796 0,726482 0,429213 0,457485
24 0,435337 0,764344 0,428611 0,725604 0,429957 0,435368
25 0,428776 0,812846 0,430837 0,703642 0,418727 0,454735
26 0,439373 0,794532 0,445644 0,701544 0,428272 0,439924
27 0,430075 0,802799 0,439031 0,714291 0,439621 0,432497
28 0,448776 0,776952 0,431147 0,701825 0,414435 0,456261
29 0,453934 0,811182 0,452697 0,731952 0,413957 0,435513
30 0,436708 0,867716 0,43642 0,725562 0,438138 0,434193
31 0,437682 0,786163 0,439661 0,744599 0,426635 0,438291
32 0,458744 0,817451 0,448007 0,744788 0,422047 0,45231
33 0,46211 0,814847 0,439246 0,705125 0,439724 0,456504
34 0,439103 0,775259 0,436682 0,715851 0,420238 0,428383
35 0,455765 0,873499 0,443933 0,726173 0,420346 0,470819
36 0,435958 0,833682 0,443765 0,714716 0,441586 0,485135
37 0,443098 0,788488 0,43171 0,71715 0,421882 0,464806
38 0,46374 0,803513 0,465626 0,72059 0,420092 0,448136
39 0,448221 0,765686 0,434924 0,736539 0,437275 0,471816
40 0,45311 0,764588 0,427708 0,715728 0,421062 0,441337
41 0,450469 0,780008 0,427194 0,724693 0,424122 0,427149
42 0,430775 0,759503 0,433748 0,711983 0,422986 0,448329
43 0,442299 0,769281 0,420065 0,70784 0,439952 0,461468
44 0,449738 0,759218 0,426692 0,741248 0,495084 0,438958
45 0,434351 0,762445 0,437632 0,697456 0,528238 0,447645
46 0,42759 0,766437 0,431623 0,710466 0,525092 0,44675
47 0,458849 0,762647 0,42209 0,71167 0,485978 0,448525
48 0,441104 0,760154 0,438151 0,705879 0,464852 0,415549
49 0,435596 0,762126 0,422125 0,724284 0,444847 0,448755
50 0,451678 0,772651 0,413834 0,70883 0,452927 0,446395
51 0,431298 0,770516 0,449076 0,709702 0,545694 0,47213
52 0,434293 0,765692 0,418434 0,723043 0,472326 0,422993
53 0,450405 0,776426 0,425737 0,704135 0,500946 0,41982
54 0,429664 0,75852 0,435361 0,701932 0,507181 0,451463
55 0,434408 0,757897 0,428158 0,72304 0,461463 0,479726
56 0,44453 0,752233 0,429692 0,705475 0,46309 0,465615
57 0,447389 0,762813 0,428587 0,706186 0,487651 0,470113
58 0,44155 0,774626 0,433786 0,742427 0,50062 0,448547
59 0,431118 0,76221 0,423676 0,704019 0,488046 0,436901
60 0,448942 0,770988 0,426093 0,710307 0,471528 0,457316
61 0,427483 0,773389 0,44348 0,740255 0,462296 0,41779
62 0,429674 0,765078 0,420654 0,707632 0,456372 0,41624
63 0,446553 0,75806 0,422958 0,70628 0,453673 0,439199
64 0,426328 0,840276 0,436407 0,711741 0,428236 0,444
65 0,427325 0,809256 0,422546 0,718686 0,461682 0,435362
66 0,450518 0,831878 0,426066 0,706377 0,437946 0,424162
67 0,437274 0,818649 0,439085 0,747162 0,426752 0,46451
68 0,430804 0,82472 0,417064 0,703069 0,449537 0,458657
69 0,448709 0,821336 0,422231 0,712093 0,451591 0,451079
70 0,436712 0,774274 0,437314 0,721804 0,461608 0,444846
71 0,430153 0,816145 0,426393 0,713959 0,501439 0,404737
72 0,444711 0,833468 0,421434 0,725223 0,471776 0,444446
73 0,428339 0,84426 0,430742 0,721485 0,469594 0,441903
74 0,422936 0,814416 0,430833 0,717384 0,449374 0,439355
75 0,443323 0,806517 0,419846 0,728766 0,501901 0,446225
76 0,424732 0,774625 0,434814 0,71279 0,470192 0,447389
77 0,427097 0,799289 0,442446 0,709757 0,452176 0,401106
78 0,444068 0,790709 0,456833 0,731097 0,439405 0,431719
79 0,426348 0,823297 0,438789 0,722108 0,455701 0,420039
80 0,421448 0,814804 0,437946 0,708578 0,528443 0,439513
81 0,440158 0,842211 0,430192 0,732622 0,50939 0,426168
82 0,442971 0,86405 0,42516 0,715635 0,482255 0,440741
83 0,483969 0,820204 0,456829 0,711505 0,478885 0,443982
84 0,427999 0,815872 0,431844 0,732674 0,465756 0,481752
85 0,436225 0,809534 0,435414 0,713409 0,497307 0,47172
86 0,423702 0,826922 0,444849 0,715205 0,523557 0,43914
87 0,436075 0,806153 0,420309 0,716027 0,448597 0,510146
88 0,438504 0,87398 0,424081 0,706652 0,515072 0,414881
89 0,428824 0,801666 0,439707 0,729932 0,50559 0,436974
90 0,435219 0,796379 0,418414 0,719451 0,442364 0,418621
91 0,443414 0,77153 0,425195 0,709199 0,448883 0,418687
92 0,435936 0,761019 0,432847 0,728372 0,429692 0,424339
93 0,430754 0,776813 0,426698 0,703809 0,421615 0,441159
94 0,440062 0,797319 0,420274 0,705532 0,435846 0,450558
95 0,429719 0,766324 0,440123 0,731904 0,421792 0,457835
96 0,427208 0,809568 0,426243 0,709436 0,425134 0,462539
97 0,445394 0,794211 0,419549 0,718473 0,424762 0,444126
98 0,422881 0,779595 0,421731 0,71933 0,428183 0,416904
99 0,41912 0,777302 0,433301 0,707086 0,437734 0,422294
100 0,431884 0,786113 0,420508 0,721242 0,422997 0,45898
101 0,425924 0,779815 0,423692 0,718811 0,450753 0,419718
=AVERAGE(A2:A101) =AVERAGE(B2:B101) =AVERAGE(C2:C101) =AVERAGE(D2:D101) =AVERAGE(E2:E101)

View file

@ -99,5 +99,3 @@ serial;solution1;solution2;solution3;solution4
0,848781;;0,255499;0,38121;0,240645 0,848781;;0,255499;0,38121;0,240645
0,843061;;0,258374;0,413357;0,227622 0,843061;;0,258374;0,413357;0,227622
0,848842;;0,262713;0,383977;0,219846 0,848842;;0,262713;0,383977;0,219846
;;;;
=AVERAGE(A2:A101);=AVERAGE(B2:B101);=AVERAGE(C2:C101);=AVERAGE(D2:D101);=AVERAGE(E2:E101)

1 serial solution1 solution2 solution3 solution4
99 0,848781 0,255499 0,38121 0,240645
100 0,843061 0,258374 0,413357 0,227622
101 0,848842 0,262713 0,383977 0,219846
=AVERAGE(A2:A101) =AVERAGE(B2:B101) =AVERAGE(C2:C101) =AVERAGE(D2:D101) =AVERAGE(E2:E101)

View file

@ -1,103 +1,101 @@
serial;solution1;solution2;solution3;solution4 serial;solution1;solution2;solution3;solution4
6,456785;7,686787;1,052787;1,035684;1,056697 6,456785;41,649159;1,961234;1,75471;0,858611
5,961551;7,456977;1,090401;1,078624;1,070915 5,961551;41,159579;1,867443;1,889605;0,894257
5,978221;7,492764;0,945853;0,940012;0,941003 5,978221;40,853888;1,850687;1,9106;0,852761
5,987699;7,487839;0,961475;0,930909;0,947027 5,987699;41,108181;1,844775;1,889086;0,889301
5,994593;7,475912;0,948906;0,93964;0,948985 5,994593;41,039507;1,859437;1,870542;0,894762
5,978152;7,501028;0,96521;0,945842;0,960884 5,978152;40,552478;1,846758;1,892396;0,898126
6,008653;7,492859;0,943485;0,938186;0,944773 6,008653;40,871344;1,846668;1,887571;0,905322
5,931275;7,508583;0,947526;0,936625;0,958647 5,931275;40,921027;1,856589;1,882765;0,929054
5,984718;7,48269;0,969535;0,941158;0,954904 5,984718;41,185944;1,850752;1,887107;0,906014
5,926464;7,521487;1,095308;0,962646;0,952086 5,926464;41,262677;1,871987;1,865323;0,910078
;;1,187541;1,120839;0,9507 ;;1,83989;1,916642;0,923592
;;1,180552;1,117982;1,011738 ;;1,852396;1,89344;0,95798
;;1,178994;1,101996;1,127789 ;;1,862238;1,866349;1,154997
;;1,198735;1,115272;1,118482 ;;1,858035;1,883279;1,181362
;;1,187537;1,114234;1,11758 ;;1,846289;1,894672;1,168078
;;1,169716;1,122988;1,129877 ;;1,843845;1,886991;1,170702
;;1,183357;1,116626;1,124217 ;;1,851448;1,867351;1,17776
;;1,201513;1,11083;1,114629 ;;1,839527;1,874013;1,169461
;;1,189228;1,112732;1,119815 ;;1,846443;1,897992;1,153499
;;1,185339;1,191832;1,111635 ;;1,841239;1,812167;1,166388
;;1,205089;1,1096;1,122624 ;;1,861473;1,885996;1,150545
;;1,190949;1,102573;1,116943 ;;1,832398;1,869662;1,149051
;;1,182796;1,104611;1,108262 ;;1,854925;1,854097;1,158301
;;1,182168;1,110547;1,112515 ;;1,876801;1,882358;1,186379
;;1,18521;1,120449;1,130948 ;;1,84395;1,861017;1,148933
;;1,186162;1,107524;1,10815 ;;1,861973;1,871175;1,621548
;;1,171052;1,104342;1,11375 ;;1,853741;1,863857;1,188869
;;1,174987;1,115831;1,063593 ;;1,832475;1,867693;1,172454
;;1,170191;1,115308;1,054527 ;;1,864345;1,863113;1,166068
;;1,183476;1,117734;1,067821 ;;1,853464;1,866527;1,180661
;;1,181003;1,098069;1,091237 ;;1,85081;1,885281;1,167348
;;1,176937;1,099926;1,063959 ;;1,889002;1,875104;1,186249
;;1,183003;1,104753;1,05376 ;;1,860324;1,871488;1,39919
;;1,164995;1,129294;1,068562 ;;1,854712;1,874508;1,179918
;;1,189621;1,103004;1,072569 ;;1,855974;1,873498;1,177229
;;1,189487;1,101624;1,05788 ;;1,851012;1,877581;1,174236
;;1,17728;1,107398;1,053151 ;;1,865635;1,868135;1,17737
;;1,176664;1,107917;1,054929 ;;1,853532;1,868136;1,158592
;;1,190181;1,106081;1,067136 ;;1,854242;1,853068;1,245401
;;1,171804;1,110127;1,056735 ;;1,870519;1,873454;1,145411
;;1,181075;1,103754;1,060074 ;;1,845472;1,863465;1,137178
;;1,171117;1,105473;1,048996 ;;1,838413;1,856358;1,13146
;;1,234976;1,111731;1,054774 ;;1,857152;1,875315;1,1778
;;1,19734;1,100651;1,063619 ;;1,857796;1,846695;1,194727
;;1,183142;1,106409;1,051499 ;;1,867392;1,914703;1,165279
;;1,184678;1,102033;1,051034 ;;1,844359;1,867281;1,157697
;;1,188219;1,111736;1,055196 ;;1,851905;1,840478;1,170331
;;1,169105;1,101426;1,056565 ;;1,864936;1,884241;1,14201
;;1,169737;1,102269;1,057922 ;;1,851607;1,860397;1,137485
;;1,182779;1,102808;1,052283 ;;1,867725;1,893906;1,159054
;;1,179676;1,103962;1,051546 ;;1,851121;1,874498;1,172483
;;1,192515;1,114528;1,054307 ;;1,862048;1,889899;1,161742
;;1,173776;1,104606;1,059195 ;;1,885169;1,868436;1,152555
;;1,18694;1,111368;1,065876 ;;1,873032;1,906535;1,145294
;;1,167176;1,10553;1,059063 ;;1,856007;1,88278;1,14767
;;1,184172;1,121461;1,055983 ;;1,857178;1,882084;1,137471
;;1,173655;1,101533;1,071379 ;;1,847874;1,874691;1,15807
;;1,174559;1,109685;1,059781 ;;1,845905;1,906517;1,173693
;;1,180622;1,105634;1,052543 ;;1,871005;1,866356;1,244258
;;1,186669;1,102102;1,052587 ;;1,854912;1,875587;1,126782
;;1,186964;1,110219;1,050079 ;;1,873241;1,889467;1,13651
;;1,180694;1,108002;1,055051 ;;1,846162;1,892907;1,141141
;;1,18293;1,112525;1,060719 ;;1,845868;1,844845;1,152296
;;1,185275;1,105263;1,053945 ;;1,868418;1,885305;1,149503
;;1,186219;1,114569;1,058368 ;;1,868781;1,857484;1,129044
;;1,186204;1,10186;1,044708 ;;1,866335;1,894812;1,136199
;;1,176664;1,103141;1,064363 ;;1,896873;1,862369;1,156769
;;1,188062;1,101297;1,058389 ;;1,846406;1,874016;1,131681
;;1,186302;1,107418;1,052813 ;;1,868205;1,88935;1,159828
;;1,174208;1,109082;1,057208 ;;1,851202;1,870441;1,189857
;;1,182153;1,103994;1,051057 ;;1,856573;1,874161;1,123324
;;1,169753;1,099634;1,069187 ;;1,857687;1,901919;1,131326
;;1,179525;1,10862;1,054363 ;;1,846702;1,887909;1,158933
;;1,176094;1,118282;1,049696 ;;1,844168;1,927572;1,127763
;;1,180424;1,109521;1,049554 ;;1,873514;1,885122;1,147745
;;1,174649;1,111231;1,059195 ;;1,868296;1,902559;1,156985
;;1,176279;1,109939;1,068946 ;;1,869302;1,959778;1,139736
;;1,185085;1,105018;1,055443 ;;1,856765;1,896785;1,15666
;;1,172958;1,119652;1,060145 ;;1,940473;1,859601;1,141663
;;1,179878;1,102493;1,0528 ;;1,882615;1,895935;1,145446
;;1,18904;1,103832;1,049931 ;;1,853098;1,87943;1,162117
;;1,185939;1,10617;1,068577 ;;1,851497;1,867225;1,127709
;;1,184071;1,110488;1,053296 ;;1,857364;1,900579;1,089162
;;1,176863;1,10142;1,053043 ;;1,857159;1,871569;1,121629
;;1,180537;1,10233;1,053079 ;;1,869184;1,913335;1,132436
;;1,175333;1,110237;1,064754 ;;1,849316;1,861857;1,172125
;;1,181432;1,102337;1,05552 ;;1,83884;1,916172;1,166059
;;1,176338;1,124259;1,053189 ;;1,855392;1,973927;1,128083
;;1,182357;1,160978;1,056288 ;;1,85446;1,954403;1,116037
;;1,188036;1,107052;1,056224 ;;1,864228;2,023192;1,153666
;;1,178734;1,107852;1,059644 ;;1,862845;1,896327;1,146614
;;1,248277;1,109694;1,060426 ;;1,840648;1,892307;1,142001
;;1,177892;1,106097;1,047429 ;;1,857235;1,882943;1,141889
;;1,192703;1,104682;1,052129 ;;1,861538;1,91871;1,164709
;;1,187199;1,105608;1,059152 ;;1,844699;1,892722;1,141951
;;1,190741;1,10163;1,062313 ;;1,873747;1,913999;1,101117
;;1,192773;1,110093;1,052282 ;;1,849665;1,923279;1,158205
;;1,17697;1,107769;1,055542 ;;1,855647;2,02672;1,118689
;;1,18526;1,109078;1,051843 ;;1,876364;2,004184;1,093833
;;1,177081;1,103607;1,056059 ;;1,855262;2,000091;1,120682
;;;;
=AVERAGE(A2:A101);=AVERAGE(B2:B101);=AVERAGE(C2:C101);=AVERAGE(D2:D101);=AVERAGE(E2:E101)

1 serial solution1 solution2 solution3 solution4
2 6,456785 7,686787 41,649159 1,052787 1,961234 1,035684 1,75471 1,056697 0,858611
3 5,961551 7,456977 41,159579 1,090401 1,867443 1,078624 1,889605 1,070915 0,894257
4 5,978221 7,492764 40,853888 0,945853 1,850687 0,940012 1,9106 0,941003 0,852761
5 5,987699 7,487839 41,108181 0,961475 1,844775 0,930909 1,889086 0,947027 0,889301
6 5,994593 7,475912 41,039507 0,948906 1,859437 0,93964 1,870542 0,948985 0,894762
7 5,978152 7,501028 40,552478 0,96521 1,846758 0,945842 1,892396 0,960884 0,898126
8 6,008653 7,492859 40,871344 0,943485 1,846668 0,938186 1,887571 0,944773 0,905322
9 5,931275 7,508583 40,921027 0,947526 1,856589 0,936625 1,882765 0,958647 0,929054
10 5,984718 7,48269 41,185944 0,969535 1,850752 0,941158 1,887107 0,954904 0,906014
11 5,926464 7,521487 41,262677 1,095308 1,871987 0,962646 1,865323 0,952086 0,910078
12 1,187541 1,83989 1,120839 1,916642 0,9507 0,923592
13 1,180552 1,852396 1,117982 1,89344 1,011738 0,95798
14 1,178994 1,862238 1,101996 1,866349 1,127789 1,154997
15 1,198735 1,858035 1,115272 1,883279 1,118482 1,181362
16 1,187537 1,846289 1,114234 1,894672 1,11758 1,168078
17 1,169716 1,843845 1,122988 1,886991 1,129877 1,170702
18 1,183357 1,851448 1,116626 1,867351 1,124217 1,17776
19 1,201513 1,839527 1,11083 1,874013 1,114629 1,169461
20 1,189228 1,846443 1,112732 1,897992 1,119815 1,153499
21 1,185339 1,841239 1,191832 1,812167 1,111635 1,166388
22 1,205089 1,861473 1,1096 1,885996 1,122624 1,150545
23 1,190949 1,832398 1,102573 1,869662 1,116943 1,149051
24 1,182796 1,854925 1,104611 1,854097 1,108262 1,158301
25 1,182168 1,876801 1,110547 1,882358 1,112515 1,186379
26 1,18521 1,84395 1,120449 1,861017 1,130948 1,148933
27 1,186162 1,861973 1,107524 1,871175 1,10815 1,621548
28 1,171052 1,853741 1,104342 1,863857 1,11375 1,188869
29 1,174987 1,832475 1,115831 1,867693 1,063593 1,172454
30 1,170191 1,864345 1,115308 1,863113 1,054527 1,166068
31 1,183476 1,853464 1,117734 1,866527 1,067821 1,180661
32 1,181003 1,85081 1,098069 1,885281 1,091237 1,167348
33 1,176937 1,889002 1,099926 1,875104 1,063959 1,186249
34 1,183003 1,860324 1,104753 1,871488 1,05376 1,39919
35 1,164995 1,854712 1,129294 1,874508 1,068562 1,179918
36 1,189621 1,855974 1,103004 1,873498 1,072569 1,177229
37 1,189487 1,851012 1,101624 1,877581 1,05788 1,174236
38 1,17728 1,865635 1,107398 1,868135 1,053151 1,17737
39 1,176664 1,853532 1,107917 1,868136 1,054929 1,158592
40 1,190181 1,854242 1,106081 1,853068 1,067136 1,245401
41 1,171804 1,870519 1,110127 1,873454 1,056735 1,145411
42 1,181075 1,845472 1,103754 1,863465 1,060074 1,137178
43 1,171117 1,838413 1,105473 1,856358 1,048996 1,13146
44 1,234976 1,857152 1,111731 1,875315 1,054774 1,1778
45 1,19734 1,857796 1,100651 1,846695 1,063619 1,194727
46 1,183142 1,867392 1,106409 1,914703 1,051499 1,165279
47 1,184678 1,844359 1,102033 1,867281 1,051034 1,157697
48 1,188219 1,851905 1,111736 1,840478 1,055196 1,170331
49 1,169105 1,864936 1,101426 1,884241 1,056565 1,14201
50 1,169737 1,851607 1,102269 1,860397 1,057922 1,137485
51 1,182779 1,867725 1,102808 1,893906 1,052283 1,159054
52 1,179676 1,851121 1,103962 1,874498 1,051546 1,172483
53 1,192515 1,862048 1,114528 1,889899 1,054307 1,161742
54 1,173776 1,885169 1,104606 1,868436 1,059195 1,152555
55 1,18694 1,873032 1,111368 1,906535 1,065876 1,145294
56 1,167176 1,856007 1,10553 1,88278 1,059063 1,14767
57 1,184172 1,857178 1,121461 1,882084 1,055983 1,137471
58 1,173655 1,847874 1,101533 1,874691 1,071379 1,15807
59 1,174559 1,845905 1,109685 1,906517 1,059781 1,173693
60 1,180622 1,871005 1,105634 1,866356 1,052543 1,244258
61 1,186669 1,854912 1,102102 1,875587 1,052587 1,126782
62 1,186964 1,873241 1,110219 1,889467 1,050079 1,13651
63 1,180694 1,846162 1,108002 1,892907 1,055051 1,141141
64 1,18293 1,845868 1,112525 1,844845 1,060719 1,152296
65 1,185275 1,868418 1,105263 1,885305 1,053945 1,149503
66 1,186219 1,868781 1,114569 1,857484 1,058368 1,129044
67 1,186204 1,866335 1,10186 1,894812 1,044708 1,136199
68 1,176664 1,896873 1,103141 1,862369 1,064363 1,156769
69 1,188062 1,846406 1,101297 1,874016 1,058389 1,131681
70 1,186302 1,868205 1,107418 1,88935 1,052813 1,159828
71 1,174208 1,851202 1,109082 1,870441 1,057208 1,189857
72 1,182153 1,856573 1,103994 1,874161 1,051057 1,123324
73 1,169753 1,857687 1,099634 1,901919 1,069187 1,131326
74 1,179525 1,846702 1,10862 1,887909 1,054363 1,158933
75 1,176094 1,844168 1,118282 1,927572 1,049696 1,127763
76 1,180424 1,873514 1,109521 1,885122 1,049554 1,147745
77 1,174649 1,868296 1,111231 1,902559 1,059195 1,156985
78 1,176279 1,869302 1,109939 1,959778 1,068946 1,139736
79 1,185085 1,856765 1,105018 1,896785 1,055443 1,15666
80 1,172958 1,940473 1,119652 1,859601 1,060145 1,141663
81 1,179878 1,882615 1,102493 1,895935 1,0528 1,145446
82 1,18904 1,853098 1,103832 1,87943 1,049931 1,162117
83 1,185939 1,851497 1,10617 1,867225 1,068577 1,127709
84 1,184071 1,857364 1,110488 1,900579 1,053296 1,089162
85 1,176863 1,857159 1,10142 1,871569 1,053043 1,121629
86 1,180537 1,869184 1,10233 1,913335 1,053079 1,132436
87 1,175333 1,849316 1,110237 1,861857 1,064754 1,172125
88 1,181432 1,83884 1,102337 1,916172 1,05552 1,166059
89 1,176338 1,855392 1,124259 1,973927 1,053189 1,128083
90 1,182357 1,85446 1,160978 1,954403 1,056288 1,116037
91 1,188036 1,864228 1,107052 2,023192 1,056224 1,153666
92 1,178734 1,862845 1,107852 1,896327 1,059644 1,146614
93 1,248277 1,840648 1,109694 1,892307 1,060426 1,142001
94 1,177892 1,857235 1,106097 1,882943 1,047429 1,141889
95 1,192703 1,861538 1,104682 1,91871 1,052129 1,164709
96 1,187199 1,844699 1,105608 1,892722 1,059152 1,141951
97 1,190741 1,873747 1,10163 1,913999 1,062313 1,101117
98 1,192773 1,849665 1,110093 1,923279 1,052282 1,158205
99 1,17697 1,855647 1,107769 2,02672 1,055542 1,118689
100 1,18526 1,876364 1,109078 2,004184 1,051843 1,093833
101 1,177081 1,855262 1,103607 2,000091 1,056059 1,120682
=AVERAGE(A2:A101) =AVERAGE(B2:B101) =AVERAGE(C2:C101) =AVERAGE(D2:D101) =AVERAGE(E2:E101)

View file

@ -1,103 +1,101 @@
serial;solution1;solution2;solution3;solution4 serial;solution1;solution2;solution3;solution4
1,169317;18,853278;0,351625;0,437063;0,382723 1,169317;18,853278;0,351625;0,437063;0,277223
1,135357;18,647222;0,346113;0,415457;0,381181 1,135357;18,647222;0,346113;0,415457;0,30976
1,116063;18,716067;0,333315;0,478798;0,398743 1,116063;18,716067;0,333315;0,478798;0,29798
1,114389;18,852186;0,405765;0,427855;0,416678 1,114389;18,852186;0,405765;0,427855;0,296451
1,100082;18,915434;0,345879;0,417337;0,377607 1,100082;18,915434;0,345879;0,417337;0,27663
1,122489;18,859351;0,341637;0,413364;0,378226 1,122489;18,859351;0,341637;0,413364;0,289742
1,118625;18,880979;0,338688;0,424781;0,371909 1,118625;18,880979;0,338688;0,424781;0,276373
1,116783;18,896289;0,340782;0,419739;0,376049 1,116783;18,896289;0,340782;0,419739;0,298701
1,123764;18,966756;0,34598;0,419586;0,378886 1,123764;18,966756;0,34598;0,419586;0,280514
1,112053;18,961847;0,347781;0,417307;0,371564 1,112053;18,961847;0,347781;0,417307;0,282288
1,106222;;0,345977;0,418911;0,382286 1,106222;;0,345977;0,418911;0,29461
1,117542;;0,344575;0,423238;0,374463 1,117542;;0,344575;0,423238;0,283487
1,123042;;0,380316;0,423481;0,384574 1,123042;;0,380316;0,423481;0,303554
1,122666;;0,348965;0,422239;0,386472 1,122666;;0,348965;0,422239;0,277983
1,094784;;0,350091;0,428141;0,413726 1,094784;;0,350091;0,428141;0,302062
1,117887;;0,347079;0,421924;0,379888 1,117887;;0,347079;0,421924;0,279742
1,107592;;0,351519;0,422242;0,379254 1,107592;;0,351519;0,422242;0,296745
1,110112;;0,348146;0,421897;0,383506 1,110112;;0,348146;0,421897;0,281091
1,110634;;0,344438;0,423664;0,375633 1,110634;;0,344438;0,423664;0,30145
1,122727;;0,352911;0,416374;0,379337 1,122727;;0,352911;0,416374;0,28529
1,118713;;0,358144;0,425869;0,378915 1,118713;;0,358144;0,425869;0,301081
1,145003;;0,357419;0,421071;0,383542 1,145003;;0,357419;0,421071;0,277248
1,158742;;0,352318;0,429645;0,380849 1,158742;;0,352318;0,429645;0,309069
1,139315;;0,351734;0,426712;0,378048 1,139315;;0,351734;0,426712;0,28449
1,11389;;0,348296;0,428159;0,3879 1,11389;;0,348296;0,428159;0,300195
1,115792;;0,344813;0,423699;0,377888 1,115792;;0,344813;0,423699;0,280263
1,130178;;0,35095;0,418282;0,370342 1,130178;;0,35095;0,418282;0,293245
1,13437;;0,37976;0,418731;0,385092 1,13437;;0,37976;0,418731;0,277778
1,118635;;0,370856;0,414341;0,384217 1,118635;;0,370856;0,414341;0,284453
1,130626;;0,352924;0,41674;0,373857 1,130626;;0,352924;0,41674;0,284434
1,131715;;0,344628;0,424953;0,385397 1,131715;;0,344628;0,424953;0,280787
1,126394;;0,350694;0,419971;0,377804 1,126394;;0,350694;0,419971;0,282349
1,119051;;0,357199;0,420048;0,380921 1,119051;;0,357199;0,420048;0,270621
1,166946;;0,357381;0,42662;0,377479 1,166946;;0,357381;0,42662;0,324383
1,131719;;0,349864;0,423074;0,378388 1,131719;;0,349864;0,423074;0,309926
1,122401;;0,356168;0,425048;0,383581 1,122401;;0,356168;0,425048;0,318613
1,153248;;0,354049;0,419466;0,385966 1,153248;;0,354049;0,419466;0,312714
1,137804;;0,345239;0,427234;0,384223 1,137804;;0,345239;0,427234;0,31447
1,154568;;0,344695;0,415409;0,3834 1,154568;;0,344695;0,415409;0,357493
1,134548;;0,351951;0,422346;0,377832 1,134548;;0,351951;0,422346;0,304176
1,141694;;0,346957;0,420225;0,383113 1,141694;;0,346957;0,420225;0,319239
1,138798;;0,349656;0,417503;0,374977 1,138798;;0,349656;0,417503;0,314283
1,14691;;0,354899;0,417815;0,380706 1,14691;;0,354899;0,417815;0,308839
1,156523;;0,353429;0,421822;0,383708 1,156523;;0,353429;0,421822;0,322845
1,156974;;0,356433;0,42952;0,380314 1,156974;;0,356433;0,42952;0,307459
1,137881;;0,350235;0,421268;0,37869 1,137881;;0,350235;0,421268;0,311346
1,182041;;0,341791;0,422629;0,389657 1,182041;;0,341791;0,422629;0,424512
1,255355;;0,355822;0,423966;0,373055 1,255355;;0,355822;0,423966;0,295332
1,274741;;0,352674;0,422633;0,364184 1,274741;;0,352674;0,422633;0,317655
1,286123;;0,351432;0,424711;0,411692 1,286123;;0,351432;0,424711;0,30888
1,316496;;0,344587;0,425153;0,419045 1,316496;;0,344587;0,425153;0,365595
1,264997;;0,355617;0,416388;0,429214 1,264997;;0,355617;0,416388;0,317795
1,294749;;0,351376;0,425924;0,412711 1,294749;;0,351376;0,425924;0,30476
1,279336;;0,356047;0,418391;0,416824 1,279336;;0,356047;0,418391;0,324489
1,15115;;0,353281;0,419928;0,414186 1,15115;;0,353281;0,419928;0,302113
1,157065;;0,352129;0,425628;0,415634 1,157065;;0,352129;0,425628;0,320394
1,134674;;0,342187;0,425554;0,411532 1,134674;;0,342187;0,425554;0,313931
1,148537;;0,352382;0,481699;0,407371 1,148537;;0,352382;0,481699;0,313504
1,162825;;0,354259;0,42336;0,421037 1,162825;;0,354259;0,42336;0,327433
1,125219;;0,355084;0,423364;0,417315 1,125219;;0,355084;0,423364;0,303773
1,135948;;0,351672;0,394221;0,412084 1,135948;;0,351672;0,394221;0,319334
1,126676;;0,355635;0,449527;0,4207 1,126676;;0,355635;0,449527;0,306527
1,138703;;0,349666;0,464888;0,423857 1,138703;;0,349666;0,464888;0,335988
1,119315;;0,351147;0,466629;0,409047 1,119315;;0,351147;0,466629;0,312778
1,148766;;0,347634;0,462687;0,418437 1,148766;;0,347634;0,462687;0,306124
1,141104;;0,341901;0,461755;0,415447 1,141104;;0,341901;0,461755;0,325993
1,118401;;0,343974;0,476791;0,417919 1,118401;;0,343974;0,476791;0,306907
1,128814;;0,348128;0,464594;0,419329 1,128814;;0,348128;0,464594;0,316588
1,121958;;0,34178;0,464364;0,414912 1,121958;;0,34178;0,464364;0,304631
1,128093;;0,345766;0,463223;0,414757 1,128093;;0,345766;0,463223;0,317844
1,128975;;0,347413;0,452773;0,405286 1,128975;;0,347413;0,452773;0,327408
1,121784;;0,359716;0,461508;0,423785 1,121784;;0,359716;0,461508;0,312561
1,132107;;0,352905;0,467514;0,391218 1,132107;;0,352905;0,467514;0,346329
1,133611;;0,355789;0,461167;0,415502 1,133611;;0,355789;0,461167;0,307356
1,130427;;0,346789;0,457815;0,412782 1,130427;;0,346789;0,457815;0,31519
1,126433;;0,356803;0,464759;0,420365 1,126433;;0,356803;0,464759;0,322447
1,123953;;0,348465;0,474755;0,410116 1,123953;;0,348465;0,474755;0,313538
1,127655;;0,354976;0,458914;0,410436 1,127655;;0,354976;0,458914;0,401558
1,132243;;0,352192;0,468238;0,40962 1,132243;;0,352192;0,468238;0,307872
1,143742;;0,348525;0,457865;0,410799 1,143742;;0,348525;0,457865;0,304387
1,106861;;0,351524;0,460753;0,420131 1,106861;;0,351524;0,460753;0,318627
1,120433;;0,348578;0,455885;0,412946 1,120433;;0,348578;0,455885;0,308049
1,135562;;0,343631;0,466659;0,417832 1,135562;;0,343631;0,466659;0,316858
1,117834;;0,350116;0,462351;0,409707 1,117834;;0,350116;0,462351;0,308032
1,11625;;0,333757;0,459712;0,405304 1,11625;;0,333757;0,459712;0,328463
1,11195;;0,341549;0,463326;0,406791 1,11195;;0,341549;0,463326;0,319812
1,127202;;0,373114;0,466854;0,41183 1,127202;;0,373114;0,466854;0,305431
1,101792;;0,379246;0,456734;0,413631 1,101792;;0,379246;0,456734;0,322798
1,120175;;0,38736;0,466337;0,414521 1,120175;;0,38736;0,466337;0,304799
1,111876;;0,384814;0,457412;0,411496 1,111876;;0,384814;0,457412;0,316439
1,118578;;0,380565;0,461057;0,40549 1,118578;;0,380565;0,461057;0,308321
1,12683;;0,386794;0,462855;0,419142 1,12683;;0,386794;0,462855;0,315443
1,138092;;0,377734;0,459669;0,414253 1,138092;;0,377734;0,459669;0,315014
1,116206;;0,38403;0,457826;0,42314 1,116206;;0,38403;0,457826;0,316235
1,104377;;0,384854;0,456568;0,413144 1,104377;;0,384854;0,456568;0,323074
1,117096;;0,394539;0,459206;0,411529 1,117096;;0,394539;0,459206;0,305813
1,099433;;0,419737;0,473687;0,408364 1,099433;;0,419737;0,473687;0,321035
1,133824;;0,425726;0,461766;0,409931 1,133824;;0,425726;0,461766;0,302243
1,131027;;0,417199;0,467319;0,40179 1,131027;;0,417199;0,467319;0,312465
1,138425;;0,386066;0,459411;0,413237 1,138425;;0,386066;0,459411;0,321559
;;;;
=AVERAGE(A2:A101);=AVERAGE(B2:B101);=AVERAGE(C2:C101);=AVERAGE(D2:D101);=AVERAGE(E2:E101)

1 serial solution1 solution2 solution3 solution4
2 1,169317 18,853278 0,351625 0,437063 0,382723 0,277223
3 1,135357 18,647222 0,346113 0,415457 0,381181 0,30976
4 1,116063 18,716067 0,333315 0,478798 0,398743 0,29798
5 1,114389 18,852186 0,405765 0,427855 0,416678 0,296451
6 1,100082 18,915434 0,345879 0,417337 0,377607 0,27663
7 1,122489 18,859351 0,341637 0,413364 0,378226 0,289742
8 1,118625 18,880979 0,338688 0,424781 0,371909 0,276373
9 1,116783 18,896289 0,340782 0,419739 0,376049 0,298701
10 1,123764 18,966756 0,34598 0,419586 0,378886 0,280514
11 1,112053 18,961847 0,347781 0,417307 0,371564 0,282288
12 1,106222 0,345977 0,418911 0,382286 0,29461
13 1,117542 0,344575 0,423238 0,374463 0,283487
14 1,123042 0,380316 0,423481 0,384574 0,303554
15 1,122666 0,348965 0,422239 0,386472 0,277983
16 1,094784 0,350091 0,428141 0,413726 0,302062
17 1,117887 0,347079 0,421924 0,379888 0,279742
18 1,107592 0,351519 0,422242 0,379254 0,296745
19 1,110112 0,348146 0,421897 0,383506 0,281091
20 1,110634 0,344438 0,423664 0,375633 0,30145
21 1,122727 0,352911 0,416374 0,379337 0,28529
22 1,118713 0,358144 0,425869 0,378915 0,301081
23 1,145003 0,357419 0,421071 0,383542 0,277248
24 1,158742 0,352318 0,429645 0,380849 0,309069
25 1,139315 0,351734 0,426712 0,378048 0,28449
26 1,11389 0,348296 0,428159 0,3879 0,300195
27 1,115792 0,344813 0,423699 0,377888 0,280263
28 1,130178 0,35095 0,418282 0,370342 0,293245
29 1,13437 0,37976 0,418731 0,385092 0,277778
30 1,118635 0,370856 0,414341 0,384217 0,284453
31 1,130626 0,352924 0,41674 0,373857 0,284434
32 1,131715 0,344628 0,424953 0,385397 0,280787
33 1,126394 0,350694 0,419971 0,377804 0,282349
34 1,119051 0,357199 0,420048 0,380921 0,270621
35 1,166946 0,357381 0,42662 0,377479 0,324383
36 1,131719 0,349864 0,423074 0,378388 0,309926
37 1,122401 0,356168 0,425048 0,383581 0,318613
38 1,153248 0,354049 0,419466 0,385966 0,312714
39 1,137804 0,345239 0,427234 0,384223 0,31447
40 1,154568 0,344695 0,415409 0,3834 0,357493
41 1,134548 0,351951 0,422346 0,377832 0,304176
42 1,141694 0,346957 0,420225 0,383113 0,319239
43 1,138798 0,349656 0,417503 0,374977 0,314283
44 1,14691 0,354899 0,417815 0,380706 0,308839
45 1,156523 0,353429 0,421822 0,383708 0,322845
46 1,156974 0,356433 0,42952 0,380314 0,307459
47 1,137881 0,350235 0,421268 0,37869 0,311346
48 1,182041 0,341791 0,422629 0,389657 0,424512
49 1,255355 0,355822 0,423966 0,373055 0,295332
50 1,274741 0,352674 0,422633 0,364184 0,317655
51 1,286123 0,351432 0,424711 0,411692 0,30888
52 1,316496 0,344587 0,425153 0,419045 0,365595
53 1,264997 0,355617 0,416388 0,429214 0,317795
54 1,294749 0,351376 0,425924 0,412711 0,30476
55 1,279336 0,356047 0,418391 0,416824 0,324489
56 1,15115 0,353281 0,419928 0,414186 0,302113
57 1,157065 0,352129 0,425628 0,415634 0,320394
58 1,134674 0,342187 0,425554 0,411532 0,313931
59 1,148537 0,352382 0,481699 0,407371 0,313504
60 1,162825 0,354259 0,42336 0,421037 0,327433
61 1,125219 0,355084 0,423364 0,417315 0,303773
62 1,135948 0,351672 0,394221 0,412084 0,319334
63 1,126676 0,355635 0,449527 0,4207 0,306527
64 1,138703 0,349666 0,464888 0,423857 0,335988
65 1,119315 0,351147 0,466629 0,409047 0,312778
66 1,148766 0,347634 0,462687 0,418437 0,306124
67 1,141104 0,341901 0,461755 0,415447 0,325993
68 1,118401 0,343974 0,476791 0,417919 0,306907
69 1,128814 0,348128 0,464594 0,419329 0,316588
70 1,121958 0,34178 0,464364 0,414912 0,304631
71 1,128093 0,345766 0,463223 0,414757 0,317844
72 1,128975 0,347413 0,452773 0,405286 0,327408
73 1,121784 0,359716 0,461508 0,423785 0,312561
74 1,132107 0,352905 0,467514 0,391218 0,346329
75 1,133611 0,355789 0,461167 0,415502 0,307356
76 1,130427 0,346789 0,457815 0,412782 0,31519
77 1,126433 0,356803 0,464759 0,420365 0,322447
78 1,123953 0,348465 0,474755 0,410116 0,313538
79 1,127655 0,354976 0,458914 0,410436 0,401558
80 1,132243 0,352192 0,468238 0,40962 0,307872
81 1,143742 0,348525 0,457865 0,410799 0,304387
82 1,106861 0,351524 0,460753 0,420131 0,318627
83 1,120433 0,348578 0,455885 0,412946 0,308049
84 1,135562 0,343631 0,466659 0,417832 0,316858
85 1,117834 0,350116 0,462351 0,409707 0,308032
86 1,11625 0,333757 0,459712 0,405304 0,328463
87 1,11195 0,341549 0,463326 0,406791 0,319812
88 1,127202 0,373114 0,466854 0,41183 0,305431
89 1,101792 0,379246 0,456734 0,413631 0,322798
90 1,120175 0,38736 0,466337 0,414521 0,304799
91 1,111876 0,384814 0,457412 0,411496 0,316439
92 1,118578 0,380565 0,461057 0,40549 0,308321
93 1,12683 0,386794 0,462855 0,419142 0,315443
94 1,138092 0,377734 0,459669 0,414253 0,315014
95 1,116206 0,38403 0,457826 0,42314 0,316235
96 1,104377 0,384854 0,456568 0,413144 0,323074
97 1,117096 0,394539 0,459206 0,411529 0,305813
98 1,099433 0,419737 0,473687 0,408364 0,321035
99 1,133824 0,425726 0,461766 0,409931 0,302243
100 1,131027 0,417199 0,467319 0,40179 0,312465
101 1,138425 0,386066 0,459411 0,413237 0,321559
=AVERAGE(A2:A101) =AVERAGE(B2:B101) =AVERAGE(C2:C101) =AVERAGE(D2:D101) =AVERAGE(E2:E101)

View file

@ -1,12 +1,12 @@
\DocumentMetadata{testphase = {phase-II,sec,toc,graphic,minipage,float,text}} \DocumentMetadata{testphase = {phase-II,sec,toc,graphic,minipage,text}}
\documentclass{article} \documentclass[a4paper]{article}
% Fonts
\usepackage[T1]{fontenc} % encoding \usepackage[T1]{fontenc} % encoding
\renewcommand{\familydefault}{\sfdefault} % sans-serif font \renewcommand{\familydefault}{\sfdefault} % sans-serif
\usepackage[nopatch=footnote]{microtype} % better font looking
% Langages
\usepackage[french]{babel}
\frenchsetup{SmallCapsFigTabCaptions=false}
% Add \extra info to title % Add \extra info to title
\makeatletter \makeatletter
@ -19,12 +19,45 @@
} }
\makeatother \makeatother
% Code integration % Code integration
\usepackage{minted} \usepackage{minted}
\setminted[c]{autogobble,frame=lines} \setminted[c]{autogobble,frame=lines} % code
\setminted[ada]{autogobble} % stats de vol
\usemintedstyle{emacs} \usemintedstyle{emacs}
\def\titleName{Projet : Un ordonnanceur par work stealing}
% Langages
\usepackage[french]{babel}
\frenchsetup{SmallCapsFigTabCaptions=false}
\usepackage{csquotes}
\MakeOuterQuote{"}
% Aliases
\def\coeur{c\oe{}ur}
\def\mone{\textit{Machine 1}} % fixe
\def\mtwo{\textit{Machine 2}} % portable
\def\qs{\enquote{quicksort}}
\def\mandel{\enquote{mandelbrot}}
\def\bone{\textit{Benchmark \qs}}
\def\btwo{\textit{Benchmark \mandel}}
\def\ws{\enquote{work-stealing}}
% Plots
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
% Images
\usepackage{graphicx}
\usepackage{caption}
\captionsetup{justification=centering}
% Metadatas
\def\titleName{Projet : Un ordonnanceur par work-stealing}
\def\docTitle{\href{https://www.irif.fr/~jch/enseignement/systeme/projet.pdf}{\titleName}} \def\docTitle{\href{https://www.irif.fr/~jch/enseignement/systeme/projet.pdf}{\titleName}}
\def\anri{Anri Kennel} \def\anri{Anri Kennel}
@ -44,11 +77,71 @@
\extra{\docSubject~$\cdot$ \docLocation} \extra{\docSubject~$\cdot$ \docLocation}
\date{Année universitaire 2023-2024} \date{Année universitaire 2023-2024}
% Commands
\newcommand{\docref}[1]{\textit{\nameref{#1}}} % italic nameref \newcommand{\docref}[1]{\textit{\nameref{#1}}} % italic nameref
\newcommand{\statPlot}[2]{ % plot for stats
\begin{figure}[H]
\def\side{0.5\textwidth}
\def\width{\textwidth}
\def\height{0.7\textwidth}
\def\xlabel{Itérations}
\def\ylabel{Secondes}
\def\colname{#1}
% Aliases \begin{minipage}{\side}
\def\coeurs{c\oe{}urs} \centering
\begin{tikzpicture}
\begin{axis}[
xlabel={\xlabel},
ylabel={\ylabel},
width=\width,
height=\height
]
\addplot [smooth, color=red] table [
x expr=\coordindex,
y=\colname,
col sep=semicolon,
/pgf/number format/read comma as period] {data/machine1-quicksort.csv};
\addplot [smooth, color=blue] table [
x expr=\coordindex,
y=\colname,
col sep=semicolon,
/pgf/number format/read comma as period] {data/machine2-quicksort.csv};
\end{axis}
\end{tikzpicture}
\caption{Temps d'exécution pour \bone~\textit{#2}}
\end{minipage}\hfill
\begin{minipage}{\side}
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel={\xlabel},
ylabel={\ylabel},
legend pos=outer north east,
width=\width,
height=\height
]
\addplot [smooth, color=red] table [
x expr=\coordindex,
y=\colname,
col sep=semicolon,
/pgf/number format/read comma as period] {data/machine1-mandelbrot.csv};
\addlegendentry{\mone}
\addplot [smooth, color=blue] table [
x expr=\coordindex,
y=\colname,
col sep=semicolon,
/pgf/number format/read comma as period] {data/machine2-mandelbrot.csv};
\addlegendentry{\mtwo}
\end{axis}
\end{tikzpicture}
\caption{Temps d'exécution pour \btwo~\textit{#2}}
\end{minipage}
\end{figure}
}
\begin{document} \begin{document}
\maketitle \maketitle
@ -56,58 +149,97 @@
\tableofcontents \tableofcontents
\clearpage \clearpage
% TODO: Mandelbrot
% TODO: Computer 2
\section{Descriptions} \section{Descriptions}
Description des différents algorithmes implémentés. Description des différents algorithmes implémentés.
\subsection{Naïf} \subsection{Séquentiel}\label{desc:seq}
Cette implémentation naïve correspond au mode \texttt{serial} Cette implémentation lance les tâches sur un \coeur.
de \texttt{quicksort.c}. Elle lance les tâches sans threads.
\subsection[Threads sans gestion]{Threads sans gestion} \subsection{Threads sans gestion}\label{desc:threads}
Cette implémentation correspond à simplement démarrer un nouveau thread Cette implémentation correspond à simplement démarrer un nouveau thread
pour chaque nouvelle tâche. pour chaque nouvelle tâche.
Comme cette implémentation n'ordonnance rien et que le nombre de threads créer
est important.
\subsection{Threads avec pile}\label{desc:th_pile} \subsection{Threads avec pile}\label{desc:th_pile}
Pour cette implémentation, on garde en mémoire une pile, Pour cette implémentation, nous gardons en mémoire une pile et nous démarrons
et on démarre un nombre fixe de threads et à chaque ajout d'une tâche, un nombre fixe de threads, et à chaque ajout d'une tâche, le thread l'empile.
on l'empile. Chaque thread récupère la dernière tâche ajoutée à la pile. Chaque thread récupère la dernière tâche ajoutée à la pile.
\subsubsection{Sélection aléatoire de tâche} \subsubsection{Sélection aléatoire de tâche}
Même fonctionnement que dans l'algorithme de \docref{desc:th_pile}, sauf Même fonctionnement que dans l'algorithme de \docref{desc:th_pile}, sauf
qu'au lieu de récupérer la dernière tâche, on récupère une tâche qu'au lieu de récupérer la dernière tâche, le thread récupère une tâche
aléatoire de la pile. aléatoire de la pile.
\subsection{Répartition par work-stealing} \subsection{Répartition par \ws}\label{desc:ws}
\begin{itemize} Ici, chaque \coeur~a sa propre liste de tâches. Quand un thread n'a
\item Au lieu d'avoir une pile unique, chaque thread à sa propre liste plus de tâches, il essaie d'en voler une à un autre thread.
\item Chaque tâche est ajouté sur le même thread de sa création.
\item Quand un thread n'as pas de tâches à faire, il vole une tâche à un autre
thread, en partant de la fin \section{Comportement}
\end{itemize}
Analyse du comportement des différentes implémentations.
\subsection{Threads sans gestion}
Cette implémentation n'ordonnance rien, alors le nombre de threads
créés est important.
\subsection{Listes}
Dans l'ordonnanceur LIFO, la liste est une pile. Chaque thread récupère le
premier élément de la pile, c'est-à-dire le dernier à avoir été ajouté.
Avec la répartition par \ws, la liste est une deque. Comme dans l'ordonnanceur
LIFO, chaque thread récupère le premier élément de la deque, mais quand il y a
un vol, c'est le dernier élément qui est récupéré par le thread.
\subsection{Synchronisations}
Dans mes implémentations, j'ai exclusivement utilisé des mutex ainsi que des
variables de conditions pour endormir/réveiller mes threads.
Pendant le développement, j'ai parfois utilisé \texttt{usleep} pour interrompre
à temps donné un thread au lieu des variables de conditions pour faire
attendre les threads, mais j'ai obtenu de meilleurs résultats avec les variables
de conditions. Aussi, je pense qu'avoir les variables de conditions m'assure
que mon ordonnanceur fonctionne sur n'importe quel CPU, qu'il soit lent ou rapide,
avec des performances honnêtes. En effet, choisir une valeur qui fonctionne bien
sur mon ordinateur n'assure pas qu'elle soit la meilleure pour un autre processeur.
\subsection{Nombre de threads}
Pour avoir un programme performant, il faut équilibrer le nombre de threads par
rapport aux nombres de \coeur{}s disponibles. Il faut également équilibrer la
création de nouvelles tâches par thread par rapport au véritable travail
effectué par ledit thread. Par exemple, dans le \btwo, chaque tâche crée soit
quatre nouvelles tâches, soit calcule une portion de l'image. Une plus grande
création de tâches favorise le \ws~parce qu'une pile unique atteint ses limites
quand trop de tâches sont ajoutées, car les threads n'ont pas le temps
"d'abattre le travail" assez rapidement.
\section{Statistiques}\label{sec:stats}
\section{Statistiques}
Chaque implémentation a été testée avec l'optimisation de niveau 2 Chaque implémentation a été testée avec l'optimisation de niveau 2
de \texttt{gcc}, sur 2 machines. de \texttt{gcc}, sur 2 machines.
Le programme utilisé pour tester les implémentations est le \texttt{quicksort}
fourni.
\def\mone{\textit{Machine 1}} % fixe
\def\mtwo{\textit{Machine 2}} % portable
\begin{enumerate} \begin{enumerate}
\item \textbf{12 \coeurs} pour la \mone. \item \textbf{12 \coeur{}s} pour la \mone.
\item \textbf{8 \coeurs} pour la \mtwo. \item \textbf{8 \coeur{}s} pour la \mtwo.
\end{enumerate} \end{enumerate}
\subsection{Naïf}\label{stats:naive} Les benchmarks utilisés pour tester les implémentations sont le \qs~fourni
et une adaptation de \mandel~fournie dans le
\href{https://www.irif.fr/~jch/enseignement/systeme/tp10.pdf}{TP 10}.
Pour lancer plusieurs fois le programme, j'ai utilisé la commande
\mintinline{fish}|for| du shell \texttt{fish}. Pour exemple, voici la commande
pour lancer l'ordonnanceur 100 fois avec \qs~et tous les threads disponibles :
\begin{figure}[H]
\centering
\mintinline{fish}|for i in (seq 100); ./ordonnanceur.elf -qt 0; end|
\end{figure}
\subsection{Séquentiel}\label{stats:seq}
\begin{description}
\item[\bone] \hspace{1em}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,855 secs} Le temps moyen d'exécution a été de \textbf{0,855 secs}
@ -115,9 +247,32 @@ fourni.
Le temps moyen d'exécution a été de \textbf{1,139 secs} Le temps moyen d'exécution a été de \textbf{1,139 secs}
\end{description} \end{description}
Ce programme ne bénéficie pas de toute la puissance de la machine. \item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{3,733 secs}
\item[\mtwo] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{6,020 secs}
\end{description}
\end{description}
\statPlot{serial}{en séquentiel}
\begin{figure}[H]
\centering
\includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-seq.jpg}
\caption{Exploitation des ressources sur la \mone~avec \docref{desc:seq}}
\label{fig:btm-seq}
\end{figure}
Ce programme ne bénéficie pas de toute la puissance de la machine,
visible notamment grâce à la \autoref{fig:btm-seq} où l'on voit que seulement
un \coeur~est utilisé.
\subsection{Threads sans gestion}\label{stats:th_ges} \subsection{Threads sans gestion}\label{stats:th_ges}
\begin{description}
\item[\bone] \hspace{1em}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{10 fois}. \item[\mone] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{35,985 secs} Le temps moyen d'exécution a été de \textbf{35,985 secs}
@ -125,16 +280,40 @@ Ce programme ne bénéficie pas de toute la puissance de la machine.
Le temps moyen d'exécution a été de \textbf{18,854 secs} Le temps moyen d'exécution a été de \textbf{18,854 secs}
\end{description} \end{description}
La création des threads pour chaque tâche créer un énorme \item[\btwo] \hspace{1em}
goulot d'étranglement qui réduit de grandement les performances. \begin{description}
\item[\mone] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{66,078 secs}
\item[\mtwo] Le programme a été lancé \textbf{10 fois}.
Le temps moyen d'exécution a été de \textbf{41,060 secs}
\end{description}
\end{description}
Le temps d'exécution étant long, nous pouvons voir les threads via la commande \statPlot{solution1}{avec des threads}
\texttt{top} : \mintinline{bash}|top -Hp $(pgrep ordonnanceur)|.
Pour augmenter les performances, il faut avoir une taille fixe de threads créer, \begin{figure}[H]
et donc il faut gérer les tâches et décider de quelle tâche va sur quel thread. \centering
\includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-threads.jpg}
\caption{Exploitation des ressources sur la \mone~avec \docref{desc:threads}}
\label{fig:btm-threads}
\end{figure}
La création des threads pour chaque tâche crée un énorme goulot
d'étranglement qui réduit grandement les performances. On le voit notamment
sur la \autoref{fig:btm-threads} où tous les \coeur{}s sont utilisés, mais très
peu. Créer de façon incontrôlée des threads n'est pas une manière efficace de
répartir la charge.
% Le temps d'exécution étant long, nous pouvons voir les threads avec la commande
% \texttt{top} : \mintinline{bash}|top -Hp $(pgrep ordonnanceur)|.
Pour augmenter les performances, il faut donc avoir une taille fixe de threads,
et par conséquent, il faut gérer les tâches et décider de quelle tâche va sur
quel thread.
\subsection{Threads avec pile}\label{stats:stack} \subsection{Threads avec pile}\label{stats:stack}
\begin{description}
\item[\bone] \hspace{1em}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,258 secs} Le temps moyen d'exécution a été de \textbf{0,258 secs}
@ -142,14 +321,38 @@ et donc il faut gérer les tâches et décider de quelle tâche va sur quel thre
Le temps moyen d'exécution a été de \textbf{0,356 secs} Le temps moyen d'exécution a été de \textbf{0,356 secs}
\end{description} \end{description}
Le lancement de nouveau thread étant limité, les performances \item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,787 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,858 secs}
\end{description}
\end{description}
\statPlot{solution2}{avec LIFO}
Le lancement de nouveaux threads étant limité, les performances
sont grandement améliorées par rapport aux tests de \docref{stats:th_ges}. sont grandement améliorées par rapport aux tests de \docref{stats:th_ges}.
Également grâce au fait que désormais on utilise les \coeurs~de notre CPU, Également, grâce au fait que désormais nous utilisons les \coeur{}s~de notre CPU,
les performances sont aussi améliorées par rapport aux tests de les performances sont aussi améliorées par rapport aux tests de
\docref{stats:naive}. \docref{stats:seq}.
Dans la \autoref{fig:btm-lifo}, nous observons que les \coeur{}s du CPU ne sont pas
tous utilisés à 100~\%. Ceci est dû au fait que l'accès à la liste des tâches est
limité, car partagé entre les threads.
\begin{figure}[H]
\centering
\includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-lifo.jpg}
\caption{Utilisation ressources sur la \mone~avec \docref{desc:th_pile}}
\label{fig:btm-lifo}
\end{figure}
\subsubsection{Sélection aléatoire de tâche} \subsubsection{Sélection aléatoire de tâche}
\begin{description}
\item[\bone] \hspace{1em}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,390 secs} Le temps moyen d'exécution a été de \textbf{0,390 secs}
@ -157,21 +360,146 @@ les performances sont aussi améliorées par rapport aux tests de
Le temps moyen d'exécution a été de \textbf{0,438 secs} Le temps moyen d'exécution a été de \textbf{0,438 secs}
\end{description} \end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,438 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,887 secs}
\end{description}
\end{description}
\statPlot{solution3}{avec LIFO aléatoire}
Cette implémentation est identique à \docref{stats:stack}, à l'exception que Cette implémentation est identique à \docref{stats:stack}, à l'exception que
l'on récupère une tâche aléatoire de la pile au lieu d'y prendre la dernière les threads récupèrent une tâche aléatoire de la pile au lieu d'y prendre
ajouté. la dernière ajoutée.
Cette façon de faire réduit les performances. Cette façon de faire réduit les performances.
\subsection{Répartition par work-stealing} \subsection{Répartition par \ws}
\begin{description}
\item[\bone] \hspace{1em}
\begin{description} \begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}. \item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,229 secs} Le temps moyen d'exécution a été de \textbf{0,229 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}. \item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,397 secs} Le temps moyen d'exécution a été de \textbf{0,308 secs}
\end{description} \end{description}
Dans cet implémentation, on n'utilises plus une pile mais un deque de tâches. \item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{0,447 secs}
\item[\mtwo] Le programme a été lancé \textbf{100 fois}.
Le temps moyen d'exécution a été de \textbf{1,131 secs}
\end{description}
\end{description}
\statPlot{solution4}{avec du \ws}
Dans cette implémentation, nous n'utilisons plus une pile, mais un deque de tâches.
Cette façon de faire est légèrement meilleur que \docref{desc:th_pile}. Cette façon de faire est légèrement meilleur que \docref{desc:th_pile}.
Dans la \autoref{fig:btm-ws}, nous observons que les \coeur{}s du CPU sont
proches de 100~\% d'utilisation. Comparé à \docref{stats:stack}, nous gagnons
en moyenne \approx~10~\% de l'utilisation du processeur dans son entièreté.
\begin{figure}[H]
\centering
\includegraphics[alt={Graphique},width=\textwidth]{imgs/bottom-ws.jpg}
\caption{Exploitation des ressources sur la \mone~avec \docref{desc:ws}}
\label{fig:btm-ws}
\end{figure}
Concernant les statistiques de vols, les résultats sont obtenus en récupérant
les données par thread en prenant des précautions pour ne pas dégrader les
performances de l'ordonnanceur. Les données sont récoltées par thread et ensuite
tout est additionné quand toutes les tâches sont terminées.
\begin{description}
\item[\bone] \hspace{1em}
\begin{description}
\item[\mone] \hspace{1em}
\begin{samepage}
\begin{minted}{ada}
------- Satistiques -------
Total tâches : 368439
Total vols : 5484
Total vols réussis : 5222
Total vols échoués : 262
----------------------------
\end{minted}
\end{samepage}
\item[\mtwo] \hspace{1em}
\begin{samepage}
\begin{minted}{ada}
------- Statistiques -------
Total tâches : 368439
Total vols : 2298
Total vols réussis : 2164
Total vols échoués : 134
----------------------------
\end{minted}
\end{samepage}
\end{description}
\item[\btwo] \hspace{1em}
\begin{description}
\item[\mone] \hspace{1em}
\begin{samepage}
\begin{minted}{ada}
------- Statistiques -------
Total tâches : 873813
Total vols : 23232
Total vols réussis : 23192
Total vols échoués : 40
----------------------------
\end{minted}
\end{samepage}
\item[\mtwo] \hspace{1em}
\begin{samepage}
\begin{minted}{ada}
------- Statistiques -------
Total tâches : 873813
Total vols : 21491
Total vols réussis : 21465
Total vols échoués : 26
----------------------------
\end{minted}
\end{samepage}
\end{description}
\end{description}
Nous pouvons remarquer que moins il y a de vols échoués, meilleur est
le temps d'exécution. Également, le nombre de vols échoués est faible quand
beaucoup de tâches sont créées, car la probabilité qu'un thread ait des tâches
en attente est plus grande.
\section{Interprétation}
En se basant sur les résultats des tests de \docref{sec:stats}, on remarque
que l'algorithme de \ws~est le plus performant dans la \mone~ainsi que dans
la \mtwo. Nous voyons aussi que ce système profite d'un grand nombre de
tâches créées, car le \btwo~créant quatre tâches d'un coup provoque nettement
moins de vol comparé au \bone~qui n'en crée que deux.
\clearpage
\appendix
\section{Crédits}
J'ai utilisé un bout de code de \href{https://expreg.org/amsi/C/}{Farès Belhadj}
d'un TP de L2 pour afficher une image au format \texttt{bmp} afin vérifier que
le \btwo~fonctionnait correctement. Ce qui donne la \autoref{fig:mandelbrot}.
\begin{figure}[H]
\centering
\includegraphics[alt={Fractale \mandel},width=0.7\textwidth]{imgs/mandelbrot.jpg}
\caption{Example de \mandel}
\label{fig:mandelbrot}
\end{figure}
Les captures d'écran d'exploitation des ressources ont été prises via le
programme \href{https://github.com/ClementTsang/bottom}{bottom}.
\end{document} \end{document}

BIN
report/imgs/bottom-lifo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
report/imgs/bottom-seq.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
report/imgs/bottom-ws.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -11,13 +11,14 @@ main(int argc, char *argv[])
{ {
int serial = 0; int serial = 0;
int nthreads = -1; int nthreads = -1;
int qlen = -1;
int quicksort = 0; int quicksort = 0;
int mandelbrot = 0; int mandelbrot = 0;
double delay; double delay;
int opt; int opt;
while((opt = getopt(argc, argv, "qmst:")) != -1) { while((opt = getopt(argc, argv, "qmst:n:")) != -1) {
if(opt < 0) { if(opt < 0) {
goto usage; goto usage;
} }
@ -35,6 +36,9 @@ main(int argc, char *argv[])
case 't': case 't':
nthreads = atoi(optarg); nthreads = atoi(optarg);
break; break;
case 'n':
qlen = atoi(optarg);
break;
default: default:
goto usage; goto usage;
} }
@ -44,9 +48,9 @@ main(int argc, char *argv[])
} }
if(quicksort) { if(quicksort) {
delay = benchmark_quicksort(serial, nthreads); delay = benchmark_quicksort(serial, nthreads, qlen);
} else if(mandelbrot) { } else if(mandelbrot) {
delay = benchmark_mandelbrot(serial, nthreads); delay = benchmark_mandelbrot(serial, nthreads, qlen);
} else { } else {
goto usage; goto usage;
} }

View file

@ -4,6 +4,7 @@
#include <assert.h> #include <assert.h>
#include <complex.h> #include <complex.h>
#include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
@ -121,18 +122,46 @@ draw(void *closure, struct scheduler *s)
// Sinon on recoupe le morceau // Sinon on recoupe le morceau
int mid_x = (start_x + end_x) / 2; int mid_x = (start_x + end_x) / 2;
int mid_y = (start_y + end_y) / 2; int mid_y = (start_y + end_y) / 2;
int rc;
int rc1 = sched_spawn( while((rc = sched_spawn(
draw, new_mandelbrot_args(image, start_x, start_y, mid_x, mid_y), draw,
s); new_mandelbrot_args(image, start_x, start_y, mid_x, mid_y),
int rc2 = sched_spawn( s)) < 0) {
draw, new_mandelbrot_args(image, mid_x, start_y, end_x, mid_y), s); if(errno != EAGAIN) {
int rc3 = sched_spawn( break;
draw, new_mandelbrot_args(image, start_x, mid_y, mid_x, end_y), s); }
int rc4 = sched_spawn( }
draw, new_mandelbrot_args(image, mid_x, mid_y, end_x, end_y), s); assert(rc >= 0);
assert(rc1 >= 0 && rc2 >= 0 && rc3 >= 0 && rc4 >= 0); while(
(rc = sched_spawn(
draw, new_mandelbrot_args(image, mid_x, start_y, end_x, mid_y),
s)) < 0) {
if(errno != EAGAIN) {
break;
}
}
assert(rc >= 0);
while(
(rc = sched_spawn(
draw, new_mandelbrot_args(image, start_x, mid_y, mid_x, end_y),
s)) < 0) {
if(errno != EAGAIN) {
break;
}
}
assert(rc >= 0);
while((rc = sched_spawn(
draw, new_mandelbrot_args(image, mid_x, mid_y, end_x, end_y),
s)) < 0) {
if(errno != EAGAIN) {
break;
}
}
assert(rc >= 0);
} }
} }
@ -147,15 +176,19 @@ draw_serial(unsigned int *image)
} }
double double
benchmark_mandelbrot(int serial, int nthreads) benchmark_mandelbrot(int serial, int nthreads, int qlen)
{ {
unsigned int *image; unsigned int *image;
struct timespec begin, end; struct timespec begin, end;
double delay; double delay;
int rc; int rc;
int size = WIDTH * HEIGHT; int n = WIDTH * HEIGHT;
if(!(image = malloc(size * sizeof(unsigned int)))) { if(qlen <= 0) {
qlen = n;
}
if(!(image = malloc(n * sizeof(unsigned int)))) {
perror("Image allocation"); perror("Image allocation");
return 1; return 1;
} }
@ -165,7 +198,7 @@ benchmark_mandelbrot(int serial, int nthreads)
if(serial) { if(serial) {
draw_serial(image); draw_serial(image);
} else { } else {
rc = sched_init(nthreads, size, draw, rc = sched_init(nthreads, qlen, draw,
new_mandelbrot_args(image, 0, 0, WIDTH, HEIGHT)); new_mandelbrot_args(image, 0, 0, WIDTH, HEIGHT));
assert(rc >= 0); assert(rc >= 0);
} }

View file

@ -2,6 +2,7 @@
#include "../includes/sched.h" #include "../includes/sched.h"
#include <assert.h> #include <assert.h>
#include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
@ -87,14 +88,24 @@ quicksort(void *closure, struct scheduler *s)
} }
p = partition(a, lo, hi); p = partition(a, lo, hi);
rc = sched_spawn(quicksort, new_args(a, lo, p), s);
while((rc = sched_spawn(quicksort, new_args(a, lo, p), s)) < 0) {
if(errno != EAGAIN) {
break;
}
}
assert(rc >= 0); assert(rc >= 0);
rc = sched_spawn(quicksort, new_args(a, p + 1, hi), s);
while((rc = sched_spawn(quicksort, new_args(a, p + 1, hi), s)) < 0) {
if(errno != EAGAIN) {
break;
}
}
assert(rc >= 0); assert(rc >= 0);
} }
double double
benchmark_quicksort(int serial, int nthreads) benchmark_quicksort(int serial, int nthreads, int qlen)
{ {
int *a; int *a;
struct timespec begin, end; struct timespec begin, end;
@ -102,6 +113,10 @@ benchmark_quicksort(int serial, int nthreads)
int rc; int rc;
int n = 10 * 1024 * 1024; int n = 10 * 1024 * 1024;
if(qlen <= 0) {
qlen = (n + 127) / 128;
}
a = malloc(n * sizeof(int)); a = malloc(n * sizeof(int));
unsigned long long s = 0; unsigned long long s = 0;
@ -115,8 +130,7 @@ benchmark_quicksort(int serial, int nthreads)
if(serial) { if(serial) {
quicksort_serial(a, 0, n - 1); quicksort_serial(a, 0, n - 1);
} else { } else {
rc = sched_init(nthreads, (n + 127) / 128, quicksort, rc = sched_init(nthreads, qlen, quicksort, new_args(a, 0, n - 1));
new_args(a, 0, n - 1));
assert(rc >= 0); assert(rc >= 0);
} }

View file

@ -11,11 +11,26 @@ struct task_info {
taskfunc f; taskfunc f;
}; };
/* Statistiques */
struct stats {
/* Total des vols échoués */
int total_failed_steal;
/* Total des vols */
int total_steal;
/* Total des tâches effecutés */
int total_tasks;
};
/* Structure de chaque thread */ /* Structure de chaque thread */
struct worker { struct worker {
/* Premier élément du deque (dernier ajouter) */ /* Premier élément du deque (dernier ajouter) */
int bottom; int bottom;
/* Statistiques récoltés */
struct stats data;
/* Mutex qui protège cette structure */ /* Mutex qui protège cette structure */
pthread_mutex_t mutex; pthread_mutex_t mutex;
@ -101,8 +116,10 @@ sched_init(int nthreads, int qlen, taskfunc f, void *closure)
return -1; return -1;
} }
for(int i = 0; i < nthreads; ++i) { for(int i = 0; i < nthreads; ++i) {
sched.workers[i].bottom = 0; // Statistiques
sched.workers[i].top = 0; sched.workers[i].data.total_failed_steal = 0;
sched.workers[i].data.total_steal = 0;
sched.workers[i].data.total_tasks = 0;
// Initialisation mutex // Initialisation mutex
if(pthread_mutex_init(&sched.workers[i].mutex, NULL) != 0) { if(pthread_mutex_init(&sched.workers[i].mutex, NULL) != 0) {
@ -110,13 +127,15 @@ sched_init(int nthreads, int qlen, taskfunc f, void *closure)
return sched_init_cleanup(sched, -1); return sched_init_cleanup(sched, -1);
} }
// Allocation mémoire deque // Initialisation deque
if(!(sched.workers[i].tasks = if(!(sched.workers[i].tasks =
malloc(sched.qlen * sizeof(struct task_info)))) { malloc(sched.qlen * sizeof(struct task_info)))) {
fprintf(stderr, "Thread %d: ", i); fprintf(stderr, "Thread %d: ", i);
perror("Deque list"); perror("Deque list");
return sched_init_cleanup(sched, -1); return sched_init_cleanup(sched, -1);
} }
sched.workers[i].bottom = 0;
sched.workers[i].top = 0;
} }
// Initialise l'aléatoire // Initialise l'aléatoire
@ -164,6 +183,25 @@ sched_init(int nthreads, int qlen, taskfunc f, void *closure)
} }
} }
/* Statistiques */
int total_failed_steal = 0;
int total_steal = 0;
int total_tasks = 0;
for(int i = 0; i < sched.nthreads; ++i) {
total_failed_steal += sched.workers[i].data.total_failed_steal;
total_steal += sched.workers[i].data.total_steal;
total_tasks += sched.workers[i].data.total_tasks;
}
printf("------- Statistiques -------\n");
printf(" Total tâches\t : %d\n", total_tasks);
printf(" Total vols\t : %d\n", total_steal);
printf(" Total vols réussis : %d\n", total_steal - total_failed_steal);
printf(" Total vols échoués : %d\n", total_failed_steal);
printf("----------------------------\n");
return sched_init_cleanup(sched, 1); return sched_init_cleanup(sched, 1);
} }
@ -224,6 +262,8 @@ sched_spawn(taskfunc f, void *closure, struct scheduler *s)
return -1; return -1;
} }
s->workers[th].data.total_tasks++;
s->workers[th].tasks[s->workers[th].bottom] = s->workers[th].tasks[s->workers[th].bottom] =
(struct task_info){closure, f}; (struct task_info){closure, f};
s->workers[th].bottom = next; s->workers[th].bottom = next;
@ -261,6 +301,8 @@ sched_worker(void *arg)
if(!found) { if(!found) {
// Vol car aucune tâche trouvée // Vol car aucune tâche trouvée
s->workers[curr_th].data.total_steal++;
pthread_mutex_lock(&s->mutex); pthread_mutex_lock(&s->mutex);
int nthreads = s->nthreads; int nthreads = s->nthreads;
pthread_mutex_unlock(&s->mutex); pthread_mutex_unlock(&s->mutex);
@ -285,6 +327,8 @@ sched_worker(void *arg)
// Aucune tâche à faire // Aucune tâche à faire
if(!found) { if(!found) {
s->workers[curr_th].data.total_failed_steal++;
pthread_mutex_lock(&s->mutex); pthread_mutex_lock(&s->mutex);
s->nthsleep++; s->nthsleep++;