Article View: pl.comp.programming
Article #217473Re: Jak liczyć cykle na bajt?
From: Wojciech Muła
Date: Tue, 15 Jun 2021 05:46
Date: Tue, 15 Jun 2021 05:46
40 lines
3311 bytes
3311 bytes
On Saturday, June 5, 2021 at 12:19:23 PM UTC+2, slawek wrote: > Przy "dużych" CPU (takich jak Intel I9, w odróżnieniu od jakichś > popierdułek w rodzaju 8 bitowego ATmega8) jest jeszcze > ciekawiej: > > 1. Jest zegar, np. 3.5 GHz. > 2. Ale w trybie boost leci do 5GHz - jeżeli jeden rdzeń tylko pracuje. > 3. przetworzenie rozkazu może zająć kilka faktów (wczytanie > rozkazu, wczytanie danych, zapisanie danych) To jest szczegół techniczny, o którym należy zapomnieć. W rzeczywistości potoki są głębokie (co najmniej kilkanaście etapów). Dekodowanie rozkazów, ich scheduling na fizyczne jednostki wykonawcze i ich faktyczne wykonywanie są asynchroniczne. Procesor Skylake może obsługiwać ponad 200 rozkazów w jednej chwili. Z punktu widzenia programisty istotne są tylko dwie liczby charakteryzujące instrukcje: - opóźnienie (latency) - po ilu cyklach zegara wynik instrukcji będzie dostępny, - przepustowość (throughput) - co ile cykli zegara można odpalać dany rozkaz. Np. mnożenie ma latency=3, ale throughput=1, co znaczy, że jak masz wykonać 10 mnożeń, to ich wynik może być dostępny w najgorszym przypadku po 10*3 cyklach, a w najlepszym po 3 + 9*1 cyklach. Albo latency=1, throughput=0.33 dla dodawania całkowitoliczbowego oznacza, że wynik będzie po cyklu, ale jak scheduler da radę i będą wolne jednostki wykonawcze, to trzy dodawania zostaną przekazane do wykonania w 1 cyklu. > 4. Ale jest pipeline i na jednym core jest na raz kilka rozkazów > (na różnych etapach realizacji) > 5. Są rozkazy SIMD i rejestry o długości tak z 2KB - teoretycznie > operacje na nich też są "w jednym cyklu" Nie istnieją takie duże rejestry SIMD. Największe obecnie to 64 bajty w AVX512 i niektórych implementacjach SVE; większość to 16 lub 32 bajty. Latency dla dużej części operacji wektorowych wynosi jeden cykl, bez cudzysłowu. Dlatego procesory się grzeją. :) w.
Technical Details
Message-ID:
<ee3915bc-18f9-4394-bd8b-7b1cf0da290bn@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<0809806c-74dd-4b8a-a3c8-fefac50e5257n@googlegroups.com> <20210526180907.75b69dd3@mateusz> <s9fj3a$j92$1@news.icm.edu.pl>Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:5c8c:: with SMTP id r12mr20105948qta.265.1623735977542; Mon, 14 Jun 2021 22:46:17 -0700 (PDT) X-Received: by 2002:a05:6214:1843:: with SMTP id d3mr3315356qvy.60.1623735977235; Mon, 14 Jun 2021 22:46:17 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Mon, 14 Jun 2021 22:46:17 -0700 (PDT) In-Reply-To: <s9fj3a$j92$1@news.icm.edu.pl> Injection-Info: google-groups.googlegroups.com; posting-host=178.43.4.126; posting-account=VFwkXwoAAADdT4-lLKRZrMYkTjizGoyn NNTP-Posting-Host: 178.43.4.126 References: <0809806c-74dd-4b8a-a3c8-fefac50e5257n@googlegroups.com> <20210526180907.75b69dd3@mateusz> <s9fj3a$j92$1@news.icm.edu.pl> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <ee3915bc-18f9-4394-bd8b-7b1cf0da290bn@googlegroups.com> Subject: Re: Jak liczyć cykle na bajt? From: Wojciech Muła <wojtek.mula@gmail.com> Injection-Date: Tue, 15 Jun 2021 05:46:17 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit