Hej,
próbuję ogarnąć teraz m. in. język maszynowy, może mi pomożecie ciut. Generalnie z tego co się orientuję, to instrukcje są wykonywane sekwencyjnie na rejestrach.
Opiszę trzy podejścia do obliczeń, i jakby ktoś mi to ogarnął ogólnie, albo podał jakiś link do ciekawych opracowań na ten temat to byłby wdzięczny.
-
Wykonywanie instrukcji za pomocą kodu maszynowego. Instrukcje są wykonywane sekwencyjnie. Czy są jakieś przypadki wpółbieżności/równoległości wykonywania instrukcji na rejestrach na jednym rdzeniu procka ??
-
Współbieżność (na przykładach wątków w Javie). Czy te wątki są wykonywane rzeczywiście równolegle w zależności od ilości rdzeni procesora ?? Czyli jak mamy cztery rdzenie, to jest możliwość odpalenia procka tak, aby cztery rdzenie pracowały na full ?? Jak wygląda sprawa związana z dwoma równocześnie odpalonymi programami (niekoniecznie w Javie) ?? Czy to działa na zasadzie współbieżności ?? Czy wątki są przeplatane na procku (czyli jest sekwencja), a my mamy złudzenie działania równoległego/współbieżnego ??
-
Obliczanie równoległe (MapReduce/Hadoop): tu sytuacja jest powiedzmy prosta. Mamy pliki zapisane w odpowiednim formacie, chyba .hdfs i są one rozproszone po różnych węzłach klastra (pytanie jak to rozproszenie wygląda, czy jest to robione według jakiegoś klucza ?? ktoś coś ?? jest jakaś reguła współdzielenia pliku na różnych kompach ??). I idea wykonywania obliczeń jest w miarę prosta, wykonujemy obliczanie na każdym węźle, a potem MapReduce nam to zbiera w całość.
Na razie tyle :)