Laptopy mają zwykle najwyżej cztery rdzenie, a podwójne rdzenie są prawdopodobnie bardziej powszechne. Ostatnio przeszedłem z quadcore na dualcore i mogę potwierdzić, że istnieje ograniczona liczba przypadków użycia quadcore, nawet przy zadaniach intensywnie wykorzystujących procesor.
Z drugiej strony, w telefonach komórkowych, quadcores, heksakory i oktakory wydają się być powszechne. Dlaczego? Jakie zadania mogą z nich skorzystać?
Rozumiem, że big.LITTLE może być częścią odpowiedzi. Oznacza to, że główną zaletą tak wielu rdzeni nie jest możliwość korzystania z nich wszystkich jednocześnie, ale raczej użycie rdzenia o zużyciu energii odpowiednim do bieżącego obciążenia pracą. Jednak na przykład Snapdragon 625 ma osiem rdzeni Cortex-A53, co nie wydaje się być przypadkiem dużego.LITTLE.
Być może architektura ARM ma niższy punkt optymalnej wydajności na wat. Oznacza to, że dostosowanie jednego rdzenia do optymalnej wydajności na wat skutkuje niższą wydajnością ARM niż Intela. Dlatego więcej rdzeni jest używanych w celu zapewnienia wydajności. To tylko hipoteza.
Ale nawet w tym przypadku nie widzę, ile obciążenia może efektywnie wykorzystać, powiedzmy, osiem rdzeni w telefonie komórkowym. Na laptopach mogę sobie wyobrazić kilka takich jak pełna (nie przyrostowa) kompilacja projektu. Ale na telefonach?
- Gry mogą wymagać dużej wydajności, ale zazwyczaj wymagają raczej wydajności GPU niż procesora, prawda?
- Teoretycznie wiele rdzeni może przyspieszyć kompilację systemu Android Lollipop / Marshmallow AOT podczas instalacji lub aktualizacji (tj. W fazie „Optymalizacja aplikacji 3/121”). Nie jestem jednak pewien, czy może to wykorzystywać wiele rdzeni. O ile pamiętam kod, kompilowana jest tylko jedna aplikacja na raz, ale być może istnieje pewien paralelizm w samym procesie kompilacji.
- Również Android 7+ może wykorzystywać wiele rdzeni podczas kompilacji. Ale ponieważ podobno kompiluje się w stanie bezczynności i ładowania, korzyść wydaje się raczej minimalna. Przynajmniej gdy ktoś ładuje telefon przez noc - tak naprawdę nie obchodzi mnie, czy w takim przypadku zajmie to 30 minut lub dwie godziny.
Odpowiedzi:
Jak już wspomniano, big.LITTLE strategia kombinacja (technicznie, HMP , heterogeniczne Wielu tworzenie klastrów) jest głównym powodem tak wielu (a czasem zdecydowanie wielu) rdzeni. Urządzenie mobilne często napotyka wiele scenariuszy, zarówno tych o dużym obciążeniu, jak i o niskim obciążeniu.
Skrajnym przykładem klasy konsumenckiej jest Helio X20 firmy MediaTek, która ma 2 rdzenie A72 zorientowane na wydajność, 4 rdzenie zrównoważone A53 oraz 4 energooszczędne rdzenie A35. Jest to bardzo elastyczne w różnych przypadkach użycia. Myślę jednak, że
8 rdzeni2 skupień zwykle wystarcza.Jest też inny przykład biurkowy, Qualcomm Snapdragon 800 series (S 800, S 801 i S 805). W każdym SoC są tylko 4 rdzenie tej samej mikroarchitektury, z 2 wyższymi taktowanymi i 2 niższymi taktowanymi. Qualcomm stworzył te SoC, ponieważ byli bardzo pewni swojej własnej mikroarchitektury (Krait 400 i Krait 450).
W przypadku gier, nawet jeśli pozornie wymagają one wydajności GPU niż procesora, nadal obciążają procesor. Karta graficzna nie może działać sama bez dostarczenia jej danych do przetworzenia, a to jedno z głównych zadań wykonywanych przez procesor podczas grania. W większości przypadków GPU renderuje tylko grafikę, podczas gdy wszystkie inne zadania, takie jak ładowanie danych, zasobów i zasobów oraz obliczanie mechaniki gry, takiej jak system, środowisko i fizyka, wykonywane są przez procesor. Nie zaobserwujesz większej liczby klatek na sekundę, jeśli uaktualnisz swój GPU, pozostając przy niskiej wydajności procesora.
Drugim powodem jest wykorzystanie zasobów procesora przez system Android . Android tworzy własne środowisko aplikacji. Używa wyłącznie kodów (i interfejsów API) z Javy, ale ma własną maszynę wirtualną o nazwie Dalvik, która została później zastąpiona przez ART (API Poziom 21).
.class
Pliki APK mają kody wykonywalne w „neutralnym” formacie, podobnie jak pliki w Javie. Przed uruchomieniem kody są ponownie kompilowane w natywnych instrukcjach maszyny [1] . Proces kompilacji jest wielowątkowy i może wykorzystywać wiele rdzeni w celu zwiększenia wydajności.Kiedy aplikacja jest uruchomiona, istnieje kilka innych procesów i mechanizmów (takich jak Garbage Collector), które działają równolegle lub równolegle do aplikacji. Więcej rdzeni może pozwolić na wydajniejsze działanie procesów wspierających, a także głównej aplikacji.
1. Jeśli użyjesz identyfikatora typu pliku, przekonasz się, że „zoptymalizowane” pliki dex są w formacie ELF, podczas gdy „neutralne” pliki dex mają tylko własny format.
Innym mniejszym powodem jest to, że rdzenie ARM nie mogą działać tak szybko, jak układ Intel x86 . Mikroarchitektura Intel x86 może być datowana na 1976 r., Kiedy to zaczęto projektować układ Intel 8086 , co oznacza, że x86 rozwijał się przez długi czas. Pojedynczy nowoczesny wysokiej klasy rdzeń ARM Cortex-A73 jest tak potężny jak rdzeń Intel Clarkdale, biorąc na przykład Core i5-660 (GeekBench, jednordzeniowy). Wynika to z faktu, że x86 to mikroarchitektura CISC, a ARM to RISCmikroarchitektura. Na pewno nie chcesz telefonu, który staje się opóźniony, mając tylko dwie lub więcej aktywnych aplikacji. Więcej rdzeni pomoże zmniejszyć nacisk. Dlatego dwurdzeniowe układy SoC są stosunkowo popularne tylko w inteligentnych zegarkach. Kto potrzebuje wydajności na inteligentnym zegarku?
Co ciekawe, więcej rdzeni spowoduje mniejszą moc niż pojedynczy rdzeń przy tym samym obciążeniu . Zależność między częstotliwością procesora a zużyciem energii jest bardziej niż liniowa, więc dwukrotność częstotliwości zawsze będzie wymagała ponad dwukrotnie, a nawet trzykrotnie lub czterokrotnie większej mocy, przy jednoczesnym zapewnieniu mniej niż dwukrotnej wydajności (z powodu innych ograniczeń zasobów, takich jak pamięć podręczna ). Tak więc 4 rdzenie mogą z łatwością pokonać pojedynczy rdzeń przy tym samym obciążeniu, zapewniając lepszą wydajność i jednocześnie wymagając mniejszej mocy.
Dalsza lektura:
źródło
Powód jest równie prosty, co skomplikowany.
Krótka odpowiedź brzmi „ponieważ rynek telefonów komórkowych nigdy nie był i nie jest napędzany przez Intel”.
Długa odpowiedź jest o wiele za długa, aby ją tu wznowić, ale podstawową koncepcją jest to, że Intel dominował na rynku komputerów PC od lat wszelkimi możliwymi środkami, do tego stopnia, że płacił i korumpował (i został za to ukarany), aby jego procesory stały się pierwszy i jedyny wybór dla producentów komputerów.
Pełna kontrola nad rynkiem pozwoliła Intelowi zawyżać ceny procesorów, jednocześnie sztucznie decydując, które funkcje i ile mocy obliczeniowej powinni chcieć użytkownicy, a jeśli przeanalizujesz nieco historię Intela, zauważysz, że jego główną siłą jest wzrost częstotliwości procesorów, więc najczęściej nigdy nie próbował zrobić czegoś naprawdę inteligentnego lub innowacyjnego; i nie potrzebował tego, ponieważ może po prostu powiedzieć ludziom: „nie potrzebujesz więcej rdzeni, ale mam te nowe, soczyste procesory, które działają o 100 MHz szybciej”. Jednocześnie może sprzedawać procesory wielordzeniowe na rynku serwerów po absurdalnie wysokich cenach (ponieważ serwery zawsze potrzebowałyton równoległej mocy, do tego stopnia, że istnieje trend w próbach realizacji serwerów, które używają ... zgadnij co? Setki tanich procesorów telefonicznych pracujących równolegle)
To z kolei znalazło odzwierciedlenie w społeczności programistów, która nigdy nie zrozumiała znaczenia programowania równoległego, tak więc wielu, jeśli nie większość z nich, nigdy nie zadawało sobie trudu używania więcej niż jednego wątku na raz - lub, aby wyrazić to w sposób technicznie, ponieważ ich oprogramowanie wykonuje więcej niż jedno zadanie na raz. Co, nawiasem mówiąc, ma sens, gdy 99% bazy klientów ma maksymalnie dwa rdzenie. Niestety doprowadziło to do legendy, że algorytmy równoległe są naprawdę trudne do wdrożenia i dotyczą tylko niewielkiej części problemów.
Zamiast tego wreszcie rynek mobilny nigdy nie widział sukcesu Intela; wręcz przeciwnie, w rzeczywistości, ponieważ przez większość czasu Intel próbuje zrobić coś innego niż zwykła architektura X86. Tak więc brakuje wpływu i kontroli rynku, inny producent procesorów poszedł w kierunku, który był normalny od wieków poza rynkiem komputerów osobistych: przetwarzanie równoległe.
źródło
Działają dwa czynniki, jeden bardzo praktyczny, a drugi historyczny.
Praktycznym powodem jest zastosowanie architektur mieszanych w telefonach. Zużycie energii ma zasadnicze znaczenie dla telefonów, a telefony spędzają dużo czasu w trybach, w których wymagają one bardzo małej wydajności. Sensowne jest zoptymalizowanie niektórych rdzeni pod kątem minimalnego zużycia energii, gdy wymagana jest niewielka wydajność, a zoptymalizowanie niektórych rdzeni w celu zapewnienia maksymalnej wydajności, gdy jest to potrzebne.
Drugi powód jest w dużej mierze historyczny. Do około 2005 r. Wszystkie komputery stacjonarne były pojedynczymi rdzeniami. Poprawa wydajności procesora pulpitu polegała prawie wyłącznie na stworzeniu rdzenia, który może wykonywać jak najwięcej instrukcji na sekundę. Nawet dzisiaj tak wiele programów komputerowych nie może w pełni wykorzystać wielu rdzeni, że wiele osób wolałoby procesor z 4 rdzeniami niż 8-rdzeniowy procesor z rdzeniami o 20% wolniejszy.
Uzyskanie jak największej wydajności z jednego rdzenia wymaga ogromnej ilości procesora. To nieruchomości, które w innym przypadku mogłyby zostać wykorzystane do zapewnienia większej liczby rdzeni. Właśnie dlatego najnowsze procesory Kaby Lake Intela mają maksymalnie 4 rdzenie, a ludzie kupują je, ponieważ każdy rdzeń jest szybszy niż rdzenie ich poprzedników. Dla wielu są to ulepszenia nawet z procesorów o większej liczbie rdzeni.
Z czasem spodziewaj się, że znacznie więcej oprogramowania komputerowego będzie w pełni zoptymalizowane do obsługi większej liczby rdzeni. Gdy tak się stanie, kompromisy inżynieryjne zaczną faworyzować więcej rdzeni nad szybszymi rdzeniami na komputerach stacjonarnych. Chociaż rdzenie prawie na pewno będą jeszcze szybsze, zaczniesz widzieć ludzi preferujących 8-rdzeniowy procesor zamiast 4-rdzeniowego procesora, nawet jeśli każdy rdzeń jest o 20% wolniejszy. Projektanci układów podążą za rynkiem.
źródło
Bardzo ważne jest, aby telefon był w stanie zapewnić moc obliczeniową w krótkich seriach (potrzebujemy szybkich aplikacji), ale także aby uniknąć przegrzania (rozpraszanie ciepła jest znacznie trudniejsze dla telefonów niż dla laptopów lub komputerów stacjonarnych). Aby to osiągnąć, architekci projektują telefony tak, aby korzystały z jednego rdzenia, gdy obciążenie jest niewielkie, i zapewniały dodatkowe rdzenie, aby zwiększyć wydajność, gdy jest to potrzebne. Gdyby telefony używały mniejszej liczby rdzeni, przegrzanie stanowiłoby problem, nawet jeśli obciążenie jest dość niewielkie.
Źródło: Absolwent kursu architektury komputerowej.
źródło
Po pierwsze, wirtualna maszyna Java może w przeszłości czerpać więcej korzyści z wielordzeniowego oprogramowania niż typowe oprogramowanie komputerowe. Nawet jeśli napiszesz aplikację jednowątkową w Javie, będzie działać szybciej na wielordzeniu, ponieważ większość kodu modułu wyrzucania elementów bezużytecznych będzie działać razem z twoją aplikacją.
Po drugie, w tle na telefonie dzieje się wiele rzeczy: automatyczne aktualizacje, pobieranie reklam, oprogramowanie antywirusowe, zarządzanie modułem GSM itp. Na laptopie wszystkie te zadania ledwo zajmowałyby jeden rdzeń, ale rdzenie ARM są znacznie mniej wydajne, więc jeśli chcesz mieć responsywny system, możesz chcieć mieć przynajmniej kilka z nich przeznaczonych do zadań w tle.
Wreszcie jest marketing. Niewielu użytkowników jest w stanie ocenić, czy skorzystaliby z 8 rdzeni, ale 8-rdzeniowy smartfon z pewnością brzmi drożej niż 2 lub 4-rdzeniowy.
źródło
Dotychczasowe odpowiedzi wyjaśniają niektóre aspekty problemu prowadzącego do tak dużej liczby rdzeni procesorów w telefonach z Androidem. Przeczytaj to jeszcze raz; Telefony z Androidem. IPhone od dawna utknął w zaledwie kilku rdzeniach i nadal działa znacznie płynniej niż jakikolwiek flagowy system Android.
Projektanci Androida podjęli ogromny hazard, decydując się na wybór oprogramowania Java, aw konsekwencji JVM jako środowiska wykonawczego aplikacji. Java, ze względu na swoje zasady projektowania, rozwiązuje problem konieczności kompilacji i kompilacji kodu dla każdej architektury procesora, zanim będzie można na nim uruchomić, poświęcając wydajność. Java wprowadza ciężką i nieporęczną maszynę wirtualną zwaną zwykle JVM. JVM faktycznie emuluje procesor na poziomie oprogramowania, aby uniknąć konieczności osobnego kompilowania kodu dla każdego urządzenia. Pomyśl o JVM jako o wirtualnym procesorze, który ma te same właściwości niezależnie od uruchomionego urządzenia, więc kod musi zostać skompilowany tylko raz dla JVM, a następnie można go uruchomić na każdym urządzeniu. Pozwala to producentom na rzucenie dowolnego sprzętu, zanim będą musieli martwić się kompatybilnością aplikacji.
Sama maszyna JVM jest jedynie specyfikacją, a ludzie mają swobodę opracowywania własnej maszyny JVM, o ile jest ona zgodna z tą specyfikacją. Oryginalny JVM na Androida nazywał się Dalvik. Obecnie Google zastąpił to ART.
Jaki jest problem z JVM? Jest to duże oprogramowanie, które zużywa wiele zasobów obliczeniowych. Dodaj do tego niektóre inne właściwości języka Java, takie jak Garbage Collection, a zużycie zasobów JVM staje się po prostu zbyt duże dla urządzenia o skromnej mocy sprzętowej. Każda aplikacja i usługa systemowa otwarta na twoim urządzeniu jest sama instancją ART JVM i do tej pory możesz stwierdzić, że zarządzanie nimi wszystkimi wymaga naprawdę sprawnego sprzętu. Sprawa będzie jeszcze gorsza, gdy zajdzie potrzeba rysowania interfejsów użytkownika.
Każda aplikacja działa na wielu wątkach. Każdy rdzeń procesora może działać tylko jeden wątek na raz. Każda aplikacja ma jeden główny wątek, w którym wykonuje czynności związane z interfejsem użytkownika. Może być o wiele więcej wątków na aplikację do uzyskiwania dostępu do plików, sieci itp. Zasadniczo więcej aplikacji (i usług systemowych) jest otwartych niż rdzeni procesora, w wyniku czego zwykle jest o wiele więcej wątków niż rdzeni procesora. Każdy rdzeń musi więc ciągle przełączać się między przetwarzaniem różnych wątków, wykonując trochę każdego z nich i przechodząc do następnego. Przełączanie zajmuje dużo czasu procesorowi, aw przypadku aplikacji będących w zasadzie maszynami JVM, zadanie to staje się jeszcze bardziej wyczerpujące.
Na podstawie tego wyjaśnienia można wywnioskować, że Android potrzebuje wydajnego sprzętu, aby działać płynnie. Wczesne generacje urządzeń z Androidem słynęły z opóźnień, awarii i wielu innych niefortunnych rzeczy. Ale z biegiem lat problemy te zostały w większości rozwiązane dzięki silnemu sprzętowi.
Z drugiej strony aplikacje iOS są kompilowane do natywnego kodu maszynowego, a zatem nie wymagają wirtualizacji. Użyty język i system operacyjny są również bardziej wydajne, dzięki czemu urządzenia te pozostają płynne bez konieczności korzystania z chipsetu z nadmiarem.
źródło
Wracając do powyższego, mogę powiedzieć, że przypadki użycia komputera i telefonu są zupełnie inne. Komputer najczęściej używany w jednej lub kilku aplikacjach (oczywiście przeglądarka z wieloma kartami wymaga wielu rdzeni procesora, może opóźniać się nawet na górze i-3), telefony używane do wielozadaniowości. Przynajmniej połączenie sieciowe, rysowanie interfejsu użytkownika, wyzwalacze systemowe, powiadomienia. Jeśli otworzysz menedżera zadań na komputerze PC, istnieje również wiele procesów, ale zużywają one mniej niż kilka% mocy procesora, nawet w starym duecie Core 2. 4 rdzenie są dość tanie (MTK 65x2 kosztował 1 USD na początku dla OEM) Jest to również RYZYKO vs CISC, gdy ostatni brak wydajności na rdzeń. Energooszczędny! = Mocny, jak widzimy tutaj . Wielordzeniowy jest idealny na urządzenia mobilne, ponieważ nie wymaga dużego obciążenia pojedynczego bieżnika, a doświadczenie ukierunkowane na wiele zadań (ale widzimy, że iPhone'y potrzebują mniej rdzeni i pamięci RAM z powodu dobrego oprogramowaniajak w tym filmie lub innych )
źródło
Myślę, że jednym z głównych czynników napędzających poza 4 lub 8 (dla dużych: małych konfiguracji) jest właśnie marketing.
Jednym z ogromnych problemów związanych z wysoką liczbą rdzeni jest rozważenie wielkości pamięci. Zwykle w aplikacjach komputerowych, gdy chcesz poprawić wykorzystanie wielu rdzeni, musisz powielić struktury i zużyć znacznie więcej pamięci niż w jednej aplikacji wątkowej.
Nie dzieje się tak, ponieważ pamięć RAM jest bardzo droga (szczególnie w sytuacji kryzysowej pamięci RAM 2017/2018). Marketing chce wysokich liczb, ale kontroling chce obniżyć ceny komponentów. Jeśli widzisz saldo mniejsze niż 1 gigabajt pamięci RAM na rdzeń, oznacza to nieudany kompromis.
źródło