Úvod do B4B36PDV. Organizace předmětu a seznámení se s paralelizací. B4B36PDV Paralelní a distribuované výpočty

Podobné dokumenty
Paralelní a distribuované výpočty (B4B36PDV)

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Paralelní a distribuované výpočty (B4B36PDV)

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní a distribuované výpočty (B4B36PDV)

Martin Lísal. Úvod do MPI

4. Úvod do paralelismu, metody paralelizace

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Operační systémy. Přednáška 1: Úvod

Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování

OPS Paralelní systémy, seznam pojmů, klasifikace

Úvod do OpenMP. Jiří Fürst

Profilová část maturitní zkoušky 2017/2018

Paralelní programování

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Cvičení MI-PRC I. Šimeček

Profilová část maturitní zkoušky 2013/2014

IB109 Návrh a implementace paralelních systémů. Analytický model paralelních programů. RNDr. Jiří Barnat, Ph.D.

Matematika v programovacích

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Motivace. Software. Literatura a odkazy

Ukázka zkouškové písemka OSY

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

C2115 Praktický úvod do superpočítání

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Hardware - komponenty počítačů Von Neumannova koncepce počítače. Von Neumannova koncepce počítače

Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35

Paměti cache. Cache může být realizována softwarově nebo hardwarově.

Kvantitativní principy návrhu počítačů

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Hlavní využití počítačů

Poslední nenulová číslice faktoriálu

Procesy a vlákna (Processes and Threads)

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Středoškolská technika Encryption Protection System

Operační systémy 2: Zápočtové úkoly

Programování v C++, 2. cvičení

Využijte plný výkon procesorů s více jádry v LabVIEW 8.5

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

C# &.NET. Cvičení Mgr. Filip Krijt.

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur

Paralelní programování

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Základní operace. Prefix sum. Segmentovaný prefix-sum

Úvod do GPGPU J. Sloup, I. Šimeček

Architektura počítačů Agenda

Operační systémy. Přednáška 4: Komunikace mezi procesy

Vláknové programování část I

Asymetrické šifry. Pavla Henzlová FJFI ČVUT v Praze. Pavla Henzlová (FJFI ČVUT v Praze) Asymetrické šifry 28.3.

NPRG051 Pokročilé programování v C /17 Úkol 2

Static Load Balancing Applied to Time Dependent Mechanical Problems

Architektury paralelních počítačů I.

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Šifrová ochrana informací věk počítačů PS5-2

1. Zpracování událostí na pozadí aplikace

Základy programování (IZP)

Organizace předmětu, podmínky pro získání klasifikovaného zápočtu

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Představení procesorů od firmy Tilera a jejich architektura

Zimní semestr akademického roku 2014/ prosince 2014

C# konzole Podíl dvou čísel, podmínka IF

PŘIJÍMACÍ TEST z informatiky a matematiky pro navazující magisterské studium Fakulta informatiky a managementu Univerzity Hradec Králové

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Paralelní algoritmy v lineární algebře. Násobení matic

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 12.2.

Základy programování (IZP)

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. RNDr. Jiří Barnat, Ph.D.

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Blue Gene Vysoká škola báňská-technická univerzita Ostrava. Blue Gene. Karel Chrastina. Úvod. Blue Gene L. Blue Gene P.

Paralelní programování

Struktura a architektura počítačů (BI-SAP) 11

PRINCIPY OPERAČNÍCH SYSTÉMŮ

Pokročilé architektury počítačů

SUPERPOČÍTAČE DANIEL LANGR ČVUT FIT / VZLÚ

Základy programování (IZP)

IB111 Úvod do programování skrze Python

Paralelní výpočty ve finančnictví

Ladění ovladačů pomocí virtuálního stroje...2 Úvod...2 Ladění ovladačů pomocí dvou fyzických počítačů...2 Ladění ovladačů pomocí jednoho fyzického

Základy šifrování a kódování

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Základy programování (IZP)

Aplikace metody BDDC

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

6. Cvičení [MI-KRY Pokročilá kryptologie]

Paralelizace výpočtů v systému Mathematica

Šifrování flash a jiných datových úložišť

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Migrace CIDUG. Ing. Pavel Krutina

Programování a algoritmizace: úvod

Disková pole (RAID) 1

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Základy programování (IZP)

Základy programování (IZP)

Databáze, sítě a techniky programování X33DSP

Transkript:

Úvod do B4B36PDV Organizace předmětu a seznámení se s paralelizací B4B36PDV Paralelní a distribuované výpočty

Osnova Čím se budeme zabývat? Hodnocení předmětu Úvod do paralelního hardwaru a softwaru 1

Organizace předmětu

Důležité informace Přednášející: Branislav Bošanský Michal Jakob Cvičící: Daniel Fišer Karel Horák Peter Macejko Jan Mrkos Petr Tomášek Důležité odkazy: https://cw.fel.cvut.cz/wiki/courses/b4b36pdv https://cw.felk.cvut.cz/forum/ https://cw.felk.cvut.cz/brute/ 2

Čím se budeme zabývat? Paralelní a Distribuované výpočty 3

Čím se budeme zabývat? Paralelní a Distribuované výpočty Paralelní výpočty Jeden výpočet provádí současně více vláken Vlákna typicky sdílí pamět a výpočetní prostředky Cíl: Zrychlit výpočet úlohy (7 týdnů) 3

Čím se budeme zabývat? Paralelní a Distribuované výpočty Paralelní výpočty Jeden výpočet provádí současně více vláken Vlákna typicky sdílí pamět a výpočetní prostředky Cíl: Zrychlit výpočet úlohy (7 týdnů) Distribuované výpočty Výpočet provádí současně více oddělených výpočetních uzlů (často i geograficky) Cíle: Zrychlit výpočet Robustnost výpočtu (6 týdnů) 3

Čím se budeme zabývat? Paralelní a Distribuované výpočty Paralelní výpočty Jeden výpočet provádí současně více vláken Vlákna typicky sdílí pamět a výpočetní prostředky Cíl: Zrychlit výpočet úlohy (7 týdnů) Distribuované výpočty Výpočet provádí současně více oddělených výpočetních uzlů (často i geograficky) Cíle: Zrychlit výpočet Robustnost výpočtu (6 týdnů) 3

Hodnocení předmětu Paralelní výpočty 5 malých programovacích úloh Semestrální práce 10 bodů 12 bodů Distribuované výpočty 2 malé úlohy Semestrální práce 4 body 14 bodů Praktická zkouška Praktická část zkoušky (min. 15b) (Vyřešení zadaného problému za použití paralelizace.) Teoretická část zkoušky (min. 15b) 30 bodů 30 bodů V semestru musíte získat alespoň 20 bodů Celkem: 100 bodů 4

Hodnocení předmětu Vyžadujeme samostatnou práci na všech úlohách. Plagiáty jsou zakázané. Nepřidělávejte prosím starosti nám, ani sobě. 5

Pozdní odevzdání úloh Domácí úlohy budou mít striktní deadline, ale... V rámci semestru máte k dispozici 7 tzv. late-days. Za každý den, o který se při odevzdávání úlohy opozdíte, Vám odečteme 1 den. Pokud se v součtu opozdíte o méně jak 7 dnů, žádné body Vám nestrhneme. V opačném případě budou některé Vaše odevzdané úlohy hodnoceny za 0 bodů. 6

Pozdní odevzdání úloh Domácí úlohy budou mít striktní deadline, ale... V rámci semestru máte k dispozici 7 tzv. late-days. Za každý den, o který se při odevzdávání úlohy opozdíte, Vám odečteme 1 den. Pokud se v součtu opozdíte o méně jak 7 dnů, žádné body Vám nestrhneme. V opačném případě budou některé Vaše odevzdané úlohy hodnoceny za 0 bodů. Body dostanete za takovou podmnožinu odevzdaných úkolů, u kterých jste se opozdili v součtu o méně jak 7 dnů. Tuto podmnožinu vybereme tak, abyste za úkoly v součtu dostali nejvíce bodů (tj., ve Váš prospěch). 6

Hodnocení předmětu Docházka na cvičení není povinná. To ale neznamená, že byste na cvičení neměli chodit... Budeme probírat látku, která se Vám bude hodit u úkolů a u zkoušky. Dostanete prostor pro práci na semestrálních pracích. Konzultace budou probíhat primárně na cvičeních. Ušetříme Vám čas a nervy (nebo v to alespoň doufáme ;-) Pokud se na cvičení rozhodnete nechodit, budeme předpokládat, že probírané látce dokonale rozumíte. Případné konzultace v žádném případě nenahrazují cvičení! 7

Na čem budeme stavět? Programování v jazyce C/C++ (B0B36PRP) Základy programování v jazyce C/C++ Kompilace programů v jazyce C/C++ Základy objektového programování (znalost C++11 výhodou) 8

Na čem budeme stavět? Programování v jazyce C/C++ (B0B36PRP) Základy programování v jazyce C/C++ Kompilace programů v jazyce C/C++ Základy objektového programování (znalost C++11 výhodou) Technologické předpoklady paralelizace (B4B36OSY) Vlákna a jejich princip Metody synchronizace a komunikace vláken 8

Na čem budeme stavět? Programování v jazyce C/C++ (B0B36PRP) Základy programování v jazyce C/C++ Kompilace programů v jazyce C/C++ Základy objektového programování (znalost C++11 výhodou) Technologické předpoklady paralelizace (B4B36OSY) Vlákna a jejich princip Metody synchronizace a komunikace vláken Základní znalost fungování počítače a procesoru (B4B35APO) 8

Na čem budeme stavět? Programování v jazyce C/C++ (B0B36PRP) Základy programování v jazyce C/C++ Kompilace programů v jazyce C/C++ Základy objektového programování (znalost C++11 výhodou) Technologické předpoklady paralelizace (B4B36OSY) Vlákna a jejich princip Metody synchronizace a komunikace vláken Základní znalost fungování počítače a procesoru (B4B35APO) Znalost základních algoritmů (B4B33ALG) 8

Opakování

Kompilace programů v C/C++ tutorial_01.zip Ruční kompilace g++ -o hello.bin -std=c++11 -Wall -O2 -pthread -fopenmp hello.cpp (Linux & Mac) g++ -o hello.bin -std=c++11 -Wall -O2 -pthread -fopenmp hello.cpp (Windows Cygwin / WSL) CMake cmake./cmakelists.txt && make hello Nebo použijte IDE s dobrou podporou C++, například CLion (multiplatformní) nebo Visual Studio (Windows) 9

Bylo, nebylo... Pro připomenutí: Cílem paralelních výpočtů je dosáhnout zvýšení výkonu CPU 1 vlákno von Neumannova architektura Jaké má nevýhody? Jak bychom je mohli opravit? A jak bychom dále mohli navýšit výkon procesoru? PAMĚŤ memory.cpp / make memory 10

Bylo, nebylo... Pro připomenutí: Cílem paralelních výpočtů je dosáhnout zvýšení výkonu CPU 1 vlákno von Neumannova architektura Jaké má nevýhody? Jak bychom je mohli opravit? A jak bychom dále mohli navýšit výkon procesoru? PAMĚŤ memory.cpp / make memory Vyzkoušejte si prosím, že Vám funguje přístup do BRUTE a odevzdejte soubor memory.cpp. 10

Moderní procesor vnitřní komunikace Core#1 1 vlákno Core#2 1 vlákno Core#n 1 vlákno L1-cache, L2-cache L1-cache, L2-cache L1-cache, L2-cache L3-cache PAMĚŤ a zbytek systému 11

Moderní procesor Pipelining (procesor) Paralelizace Vlákna (Vy :-) Vektorizace (kompilátor) 12

Moderní procesor Pipelining (procesor) Paralelizace Vlákna (Vy :-) Vektorizace (kompilátor) 12

Moderní procesor Pipelining (procesor) Paralelizace Vlákna (Vy :-) Vektorizace (kompilátor) 12

Moderní procesor Pipelining (procesor) Paralelizace Vlákna (Vy :-) Vektorizace (kompilátor) 12

Moderní procesor Možné nástrahy použití moderního procesoru s více jádry a cache: Komunikace s pamětí je stále pomalá (problém cache-miss) Přístup ke sdíleným datům více vlákny (true sharing) Udržování koherence cache může být drahé (false sharing)... a jiné 13

Cache-miss memory.cpp / make memory matrix.cpp / make matrix 14

True sharing void multiply(int * number, int multiplyby) { *number = (*number) * multiplyby; } Předpokládejme int number = 1; a mějme dvě vlákna: Vlákno 1: multiply(&number,2) Vlákno 2: multiply(&number,3) Co bude v proměnné number po skončení obou vláken? 15

True sharing void multiply(int * number, int multiplyby) { *number = (*number) * multiplyby; } imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret 16

True sharing void multiply(int * number, int multiplyby) { *number = (*number) * multiplyby; } imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret http://godbolt.org 16

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Výsledek: number = 6 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Výsledek: number = 6 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Výsledek: number = 3 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Výsledek: number = 2 17

True sharing Vlákno 1 / mov esi, 2 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Vlákno 2 / mov esi, 3 imul esi, DWORD PTR [rdi] mov DWORD PTR [rdi], esi ret Jaké máme možnosti, abychom dosáhli deterministického výsledku (který pravděpodobně chceme)? 17

False-sharing Moderní procesor pracuje s pamětí po blocích, které se mapují do cache. I když vlákna nepracují se stejnými proměnnými, mohou chtít pracovat se stejným blokem. Jeden blok se pak nutně musí nacházet v cachích různých jader a ve více kopiích Core#1 Core#2 Cache x y Cache x y Paměť x y 18

False-sharing Moderní procesor pracuje s pamětí po blocích, které se mapují do cache. I když vlákna nepracují se stejnými proměnnými, mohou chtít pracovat se stejným blokem. Jeden blok se pak nutně musí nacházet v cachích různých jader a ve více kopiích Core#1 Core#2 Cache z y Cache x y Paměť x y 18

False-sharing Moderní procesor pracuje s pamětí po blocích, které se mapují do cache. I když vlákna nepracují se stejnými proměnnými, mohou chtít pracovat se stejným blokem. Jeden blok se pak nutně musí nacházet v cachích různých jader a ve více kopiích Core#1 Core#2 Cache z y Cache???????? modified (M) invalid (I) Paměť z y 18

False-sharing Moderní procesor pracuje s pamětí po blocích, které se mapují do cache. I když vlákna nepracují se stejnými proměnnými, mohou chtít pracovat se stejným blokem. Jeden blok se pak nutně musí nacházet v cachích různých jader a ve více kopiích Core#1 Core#2 Cache z y Cache???????? modified (M) invalid (I) Paměť z y 18

False-sharing Moderní procesor pracuje s pamětí po blocích, které se mapují do cache. I když vlákna nepracují se stejnými proměnnými, mohou chtít pracovat se stejným blokem. Jeden blok se pak nutně musí nacházet v cachích různých jader a ve více kopiích Core#1 Cache z y Cache z Core#2 y modified (M) Paměť z y 18

False-sharing Moderní procesor pracuje s pamětí po blocích, které se mapují do cache. I když vlákna nepracují se stejnými proměnnými, mohou chtít pracovat se stejným blokem. Jeden blok se pak nutně musí nacházet v cachích různých jader a ve více kopiích Core#1 Cache z y Cache z Core#2 y modified (M) Paměť z y Ale právě té komunikaci s pamětí jsme se chtěli použitím cache vyhnout! 18

False-sharing false_sharing.cpp / make false_sharing 19

Paralelizace v praxi

Je následující tvrzení pravdivé? Mějme procesor s p jádry a úlohu, která při využití jednoho jádra trvá T milisekund. Využijeme-li všech p jader pro vyřešení úlohy, vyřešení úlohy zvládneme za T/p milisekund. 20

Je následující tvrzení pravdivé? Mějme procesor s p jádry a úlohu, která při využití jednoho jádra trvá T milisekund. Využijeme-li všech p jader pro vyřešení úlohy, vyřešení úlohy zvládneme za T/p milisekund. Tvrzení není pravdivé. Proč? Zkuste vymyslet co možná nejvíce důvodů, proč tomu tak není. 20

Je následující tvrzení pravdivé? Mějme procesor s p jádry a úlohu, která při využití jednoho jádra trvá T milisekund. Využijeme-li všech p jader pro vyřešení úlohy, vyřešení úlohy zvládneme za T/p milisekund. Tvrzení není pravdivé. Proč? Zkuste vymyslet co možná nejvíce důvodů, proč tomu tak není. O úlohách, kde toto tvrzení platí říkáme, že jsou tzv. lineární nebo také embarassingly parallel. Takových úloh ale v praxi potkáme velmi málo. 20

Je následující tvrzení pravdivé? Mějme pole o 1,000,000 prvků. S každým prvkem pole máme za úkol 100 provést magickou operaci x e ln x. Tuto úlohu lze dobře paralelizovat. void magic_operation(double * array) { for(unsigned int i = 0 ; i < 1000000 ; i++) { for(unsigned int k = 0 ; k < 500 ; k++) { array[i] = exp(log(array[i])); } } } magic.cpp / make magic 21

Je následující tvrzení pravdivé? Mějme pole o 1,000,000 prvků. S každým prvkem pole máme za úkol 100 provést magickou operaci x e ln x. Tuto úlohu lze dobře paralelizovat. void magic_operation(double * array) { for(unsigned int i = 0 ; i < 1000000 ; i++) { for(unsigned int k = 0 ; k < 500 ; k++) { array[i] = exp(log(array[i])); } } } Tvrzení je pravdivé. Jednotlivé výpočty hodnot array[i] na sobě nezávisí a můžeme je rozložit mezi různá vlákna a dosáhnout téměř lineárního nárůstu výkonu. magic.cpp / make magic 21

Je následující tvrzení pravdivé? Mějme pole o 1,000,000 prvků. S každým prvkem pole máme za úkol 100 provést magickou operaci x e ln x. Tuto úlohu lze dobře paralelizovat. void magic_operation(double * array) { for(unsigned int i = 0 ; i < 1000000 ; i++) { for(unsigned int k = 0 ; k < 500 ; k++) { array[i] = exp(log(array[i])); } } } Tvrzení je pravdivé. Jednotlivé výpočty hodnot array[i] na sobě nezávisí a můžeme je rozložit mezi různá vlákna a dosáhnout téměř lineárního nárůstu výkonu. A nebo bychom si mohli vzpomenout, že ln x a e x jsou inverzní funkce. Ale to bychom neměli co paralelizovat ;-) magic.cpp / make magic 21

Je následující tvrzení pravdivé? Mějme pole o 1,000,000 prvků. S každým prvkem pole máme za úkol 100 provést magickou operaci x e ln x. Tuto úlohu lze dobře paralelizovat. void magic_operation(double * array) { for(unsigned int i = 0 ; i < 1000000 ; i++) { for(unsigned int k = 0 ; k < 500 ; k++) { array[i] = exp(log(array[i])); } } } Proč jsme ale nedosáhli s-násobného zrychlení (kde s je počet jader procesoru?). Vzpomeňte si na Amdahlův zákon. 1 S = (1 p) + p s Dokážete říct, co tvoří neparalelizovatelnou část programu? (vyžadující (1 p)% času) magic.cpp / make magic 22

Šifra PDVCrypt s: Q R B F Y E L S I I E i Jeden krok dešifrování: [ EQRBF {}}{ ] s i s i + p 1 secret( s [i 2..i+2] ) mod Σ [ ] i i + p 2 secret(s [i 2..i+2] ) mod s... opakován N-krát Úkol: Doimplementujte dešifrovací pravidlo do metody decrypt v souboru PDVCrypt.cpp. PDVCrypt.cpp, decrypt.cpp / make decrypt decrypt_data.zip 23

Šifra PDVCrypt Je následující tvrzení pravdivé? Proces dešifrování řetězce zašifrovaného pomocí PDVCrypt lze snadno paralelizovat. PDVCrypt.cpp, decrypt.cpp / make decrypt decrypt_data.zip 24

Šifra PDVCrypt Je následující tvrzení pravdivé? Proces dešifrování řetězce zašifrovaného pomocí PDVCrypt lze snadno paralelizovat. Tvrzení není pravdivé. Proč paralelní verze dešifrovacího algoritmu vůbec nefunguje? PDVCrypt.cpp, decrypt.cpp / make decrypt decrypt_data.zip 24

Šifra PDVCrypt Je následující tvrzení pravdivé? Proces dešifrování řetězce zašifrovaného pomocí PDVCrypt lze snadno paralelizovat. Tvrzení není pravdivé. Proč paralelní verze dešifrovacího algoritmu vůbec nefunguje? Uvažujte množinu zašifrovaných řetězců, které máte za úkol dešifrovat. Mohli bychom využít více jader v tomto případě? PDVCrypt.cpp, decrypt.cpp / make decrypt decrypt_data.zip 24

Díky za pozornost! Budeme rádi za Vaši zpětnou vazbu! 24