🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #310011

Re: Optymalizacja kodu

#310011
From: Maciek Godek
Date: Wed, 25 Dec 2019 10:55
17 lines
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-mail
References: <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