Article View: pl.comp.lang.c
Article #310011Re: Optymalizacja kodu
From: Maciek Godek
Date: Wed, 25 Dec 2019 10:55
Date: Wed, 25 Dec 2019 10:55
17 lines
2833 bytes
2833 bytes
W dniu wtorek, 24 grudnia 2019 20:25:33 UTC+1 użytkownik M.M. napisał: > Czasami potrzebuję całkowite liczby pseudolosowe z małego > przedziału, przy czym losowość tychże liczb nie musi być > wysokiej jakości, ale za to generowanie musi być bardzo > szybkie. Standardowy sposób na uzyskanie takich liczb jest > zapewne wszystkim czytelnikom tej grupy znany, ale przypomnijmy: > > random() % (MAX-MIN+1) + MIN; > > Od razu widać zabójczą dla wydajności operację modulo :/ Co > można na to poradzić? Jeżeli prawy operand do modulo jest potęgą dwójki, to wykonanie tej operacji to tylko maska bitowa, a więc operacja bardzo tania. Jeżeli nie jest, to pytanie, czy nie można tego zwiększyć do potęgi dwójki. Jeżeli można to świetnie, a jeżeli nie, to można: - sprawdzić, na ile kosztowna będzie instrukcja warunkowa (może być kosztowna, ale nie musi, bo teoretycznie - na Intelu przynajmniej - kompilator może wciągnąć rejest znaczników w wir operacji arytmetycznych, efektywnie nie wykonując instrukcji skoku warunkowego) - zbudować tablicę posiadającą tyle elementów, ile jest w najmniejszej potędze dwójki obejmującej zarkes, i przezmapować elementy, które nie mieszczą się w zakresie na takie, które się w zakresie mieszczą Oczywiście to rozwiązanie też może być kosztowne, bo to dodatkowa warstwa zapośredniczenia, i jeżeli nie będzie się mieścić w cache'u, albo rywalizować o cache z innymi danymi, to bida.
Technical Details
Message-ID:
<b010dc08-d015-4a47-88be-75fa3b91cd07@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!g89no6792152qtd.0!news-out.google.com!w29ni875qtc.0!nntp.google.com!g89no6792148qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<ed3041b7-c05f-43f3-887a-9a12a9633741@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:6214:1090:: with SMTP id o16mr32439997qvr.105.1577271332415; Wed, 25 Dec 2019 02:55:32 -0800 (PST) X-Received: by 2002:a0d:f185:: with SMTP id a127mr29934860ywf.206.1577271332198; Wed, 25 Dec 2019 02:55:32 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!g89no6792152qtd.0!news-out.google.com!w29ni875qtc.0!nntp.google.com!g89no6792148qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Wed, 25 Dec 2019 02:55:31 -0800 (PST) In-Reply-To: <ed3041b7-c05f-43f3-887a-9a12a9633741@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=83.25.232.15; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 83.25.232.15 References: <ed3041b7-c05f-43f3-887a-9a12a9633741@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <b010dc08-d015-4a47-88be-75fa3b91cd07@googlegroups.com> Subject: Re: Optymalizacja kodu From: Maciek Godek <godek.maciek@gmail.com> Injection-Date: Wed, 25 Dec 2019 10:55:32 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit