-
11. Data: 2017-11-29 07:00:27
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: Adam Klobukowski <a...@g...com>
W dniu środa, 29 listopada 2017 04:53:41 UTC+1 użytkownik s...@g...com napisał:
> > Musi to być w miarę proste i szybkie (implementacja bedzie w asemblerze).
>
> Skoro jesteśmy już przy Asemblerze, to może... użyj sprzętowego generatora
> liczb pseudolosowych. Intel kiedyś (jakieś 15+ lat temu) się chwalił, że
> używa szumu termicznego i nasłuchiwania na magistral (nie wiem jakich) i z
> tego dostaje się wartości które są super przypadkowe. Myślę, że do dzisiaj
> AMD też opanowało tą technologię, tak, że nie jest to rozwiązanie jedynie
> intelowskie. Myślę, że jest to jakieś urządzenie pod jakimś adresem pamięci,
> tak, że wystarczy to odczytać 1 instrukcją i już masz dobrą wartość
> pseudolosową...
Nic nie pisałem że w asemblerze x86. Więc napiszę: nie w asemblerze x86.
AdamK
-
12. Data: 2017-11-29 07:55:20
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "Radoslaw Szwed" <r...@p...fm>
Użytkownik "Adam Klobukowski" <a...@g...com> napisał w wiadomości
news:b7e9c7d1-798a-4a0b-8167-a214ebcce75d@googlegrou
ps.com...
> > > Liczb bede generowal ok. 1000000. Zakres 0-44 jest podany tylko
> > przykladowo=
> > > i podczas generacji kolejnych bedzie się zmieniał. Musi to by?=
> > > ? w miarę proste i szybkie (implementacja bedzie w asemblerze).
> >
> >
> > Primo, dlaczego w Asemblerze? Secundo, tego rodzaju kawałki ogólnie
> > są proste, nie ma różnicy czy będzie trochę więcej jakichś add czy
> > mul
>
> Takie widzimisie.
Poniżej generator pseudolosowy oparty na algorytmie Parka-Millera
Gdyby procedura była za wolna użyj koprocesora.
proc Losowe
; Generator pseudolosowy Park-Miller [0..eax-1]
; Wejście :eax
; Wyjście :eax
mov ebx, eax
mov eax, [ziarno]
xor edx, edx
mov ecx, 127773
div ecx
mov ecx, eax
mov eax, 16807
mul edx
mov edx, ecx
mov ecx, eax
mov eax, 2836
mul edx
sub ecx, eax
xor edx, edx
mov eax, ecx
mov [ziarno], ecx
div ebx
mov eax, edx
ret
endp
ziarno dd 2037280626
-
13. Data: 2017-11-29 09:41:25
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "M.M." <m...@g...com>
On Tuesday, November 28, 2017 at 2:50:58 PM UTC+1, s...@g...com wrote:
> W dniu wtorek, 28 listopada 2017 09:48:28 UTC+1 użytkownik Adam Klobukowski
napisał:
> > Poszukuję prostego (szybkiego) generatora pseudolosowego liczb 8bitowych z górnym
limitem, tj. jak bym chciał sobie wylosować liczbę z zakresu 0-44. Możecie coś
polecić?
>
> Możecie! A czy Wy czytacie jedyną gazetę programistyczną w Polsze?!?
> Rozwiązanie jest na stronie 21 nr 9/2017:
>
> #include <random>
> #include <iostream>
> [...]
>
> std::random_device device;
> std::mt19937 egine{device()};
> std::uniform_int_distribution<> dist(0, 44);
>
> std::cout << dist(engine) << '\n';
>
> Jest to C++11 i gwarantuje rozkład normalny otrzymywanych liczb...
Jeśli ktoś pyta o szybki generator liczb losowych, to rozumiem, że
bardzo dobrze zna mt i szuka czegoś szybszego, być może kosztem
jakości generowanych liczb. Ale jeśli szybkość mt wystarcza... to
pewnie, należy użyć mt.
-
14. Data: 2017-11-29 09:41:41
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Wed, 29 Nov 2017 01:20:36 +0100, "AK" <n...@n...net> wrote:
> PS: W "moich czasach" standard to byla ksiazka Zielinski
""Generatory liczb pseudolosowych"
> czy jakos tak.
Z rzeczy praktycznych Numerical Recipes mają rozdział o generatorach
liczb losowych.
-
15. Data: 2017-11-29 09:44:49
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Tue, 28 Nov 2017 19:53:39 -0800 (PST), s...@g...com wrote:
> Skoro jesteśmy już przy Asemblerze, to może... użyj spr=
> zętowego generatora liczb pseudolosowych. Intel kiedyś (jakie?=
> ? 15+ lat temu) się chwalił, że używa szumu termiczne=
> go i nasłuchiwania na magistral (nie wiem jakich) i z tego dostaje
si=
> ę wartości które są super przypadkowe. Myślę,=
Syf w tym że to nie działało na sprzęcie kupowanym poza USA.
Dziś można kupić "pendrive" z takim generatorem lub zrobić sobie
samemu na MCU.
-
16. Data: 2017-11-29 09:48:54
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "M.M." <m...@g...com>
On Wednesday, November 29, 2017 at 1:21:03 AM UTC+1, AK wrote:
> Użytkownik "M.M." <m...@g...com> napisał:
>
> > Za punkt wyjścia bym wziął liniowy lub fibonacciego, potem bym szukał
> > czy jest jakaś sztuczka na modulo 45... a może kompilator zna odpowiednią
> > sztuczkę?
>
> A po cholere jakies sztuczki?
Bo chciałeś szybko a OGÓLNY algorytm modulo jest wolny. Algorytm dla
konkretnej wartości (np. modulo 45) czasami jest dużo szybszy - w sumie
myślałem, że to jest oczywiste dla Ciebie.
> Majac generator o rozkladzie jednostajnym (czyli <0, 1) ) przez
> proste skalowanie otrzymuje
> sie generator w potrzebnym przedziale.
Obawiam się, że generator zaimplementowany na liczbach zmiennoprzecinkowych
nie będzie szybki, a tu jeszcze jedno mnożenie na skalowanie...
> Generalnie na podstawie generatora jednostajnego droga
> obliczania odwrotnej dystrubuanty
> mozna otrzymac generator o innym rockladzie niz jednostajny.
To wszystko prawda, ale do czego pijesz?
> PS: W "moich czasach" standard to byla ksiazka Zielinski ""Generatory
> liczb pseudolosowych"
> czy jakos tak.
No tak, ale znowu pytanie, co z tego? Tam są ogólne i znane generatory
liczb losowych, nie znajdziesz w tej książeczce specjalistycznego, z
podniesioną wydajnością np. kosztem jakości albo dzięki implementacji
wykorzystującej specyficzne cechy nowych procesorów.
Pozdrawiam
-
17. Data: 2017-11-29 10:19:08
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Wed, 29 Nov 2017 00:48:54 -0800 (PST), "M.M." <m...@g...com>
wrote:
> liczb losowych, nie znajdziesz w tej książeczce specjalistycznego=
> , z
> podniesioną wydajnością np. kosztem jakości albo dzi?=
> ?ki implementacji
> wykorzystującej specyficzne cechy nowych procesorów.
Złe nastawienie.
Czytałeś? Czy tylko tak ci się wydaje? Jak nie czytałeś to przeczytaj
- głupszy od tego nie będziesz.
Przeczytaj rozdział o generatorach w Numerical Recipes, obejrzyj
sobie jak jest napisany generator w jakiejś bibliotece Open Source,
np. GSL czy Scipy, ew. CERNLIB. Dogłębnie poznaj czym jest "Mersenne
Twister".
Ale przede wszystkim określ czym dla ciebie są liczby losowe.
Poszukaj pakietu "Die hard" do testowania liczb losowych. Wymyśl swój
generator. Puść przez testy. Spróbuj uzasadnić matematycznie że twój
generator to akurat to co ci potrzebne.
Jeżeli twój hardware na to pozwala to dolutuj hardwareowy generator.
Uwaga: odczyt z wiszącego pinu NIE daje liczby losowej.
Co do asemblera: zwykle program w C jest równie dobry jak asembler.
Chyba że nie jest. Ale aby tak było musisz znać asembler w stopniu
przy którym nie ma znaczenia czy w asemblerze napiszesz 20 linijek
czy 100.
I najważniejsze: napisz sobie na tekturce odpowiedź na proste pytanie
- DLACZEGO STANDARDOWY GENERATOR LICZB LOSOWYCH JEST ABSOLUTNIE NIE
DO PRZYJĘCIA?
-
18. Data: 2017-11-29 11:23:29
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: "M.M." <m...@g...com>
On Wednesday, November 29, 2017 at 10:19:11 AM UTC+1, slawek wrote:
> On Wed, 29 Nov 2017 00:48:54 -0800 (PST), "M.M." <m...@g...com>
> wrote:
> > liczb losowych, nie znajdziesz w tej książeczce specjalistycznego=
> > , z
> > podniesioną wydajnością np. kosztem jakości albo dzi?=
> > ?ki implementacji
> > wykorzystującej specyficzne cechy nowych procesorów.
>
>
> Złe nastawienie.
Ale czyje? Moje nastawienie? A jakie masz wyobrażenie o moim
nastawieniu, poprawnie zdekodowałeś moje nastawienie?
> Czytałeś? Czy tylko tak ci się wydaje? Jak nie czytałeś to przeczytaj
> - głupszy od tego nie będziesz.
Ale co czytałem i co mi się wydaje? A głupszy może będę od tego, bo
czas nie jest z gumy i nie będę mógł w tym czasie robić czegoś innego.
> Przeczytaj rozdział o generatorach w Numerical Recipes, obejrzyj
> sobie jak jest napisany generator w jakiejś bibliotece Open Source,
> np. GSL czy Scipy, ew. CERNLIB. Dogłębnie poznaj czym jest "Mersenne
> Twister".
Dlaczego mam to czytać i dogłębniej poznawać?
> Ale przede wszystkim określ czym dla ciebie są liczby losowe.
Chyba zwracasz się do osoby zakładającej wątek :)
> Poszukaj pakietu "Die hard" do testowania liczb losowych. Wymyśl swój
> generator. Puść przez testy. Spróbuj uzasadnić matematycznie że twój
> generator to akurat to co ci potrzebne.
Kiedyś to robiłem, testowałem różne odmiany generatorów fibonacciego.
Moje wnioski są takie: generatory fibonacciego są dużo szybsze od
ranluxa, i (dobrze sparametryzowane) zazwyczaj przechodzą testy tak
samo dobrze ranlux, chociaż g. f. mogą wymagać dłuższej inicjalizacji i
większej ilości pamięci. Tyle że ta rozmowa chyba była o czymś
całkiem innym. Chcesz zmienić temat na generatory fibonnaciego?
Chętnie poczytam taki wątek, a może i coś napiszę.
> Jeżeli twój hardware na to pozwala to dolutuj hardwareowy generator.
> Uwaga: odczyt z wiszącego pinu NIE daje liczby losowej.
To już totalnie odlecieliśmy, moim zdaniem daje liczbę losową, ale
rozkład jest baaaardzo nierównomierny.
> Co do asemblera: zwykle program w C jest równie dobry jak asembler.
Ja też mówię że zwykły C jest równie dobry jak asm, o ile w C można
optymalnie wykorzystać specyficzne cechy sprzętu.
> Chyba że nie jest. Ale aby tak było musisz znać asembler w stopniu
> przy którym nie ma znaczenia czy w asemblerze napiszesz 20 linijek
> czy 100.
No pewnie.
> I najważniejsze: napisz sobie na tekturce odpowiedź na proste pytanie
> - DLACZEGO STANDARDOWY GENERATOR LICZB LOSOWYCH JEST ABSOLUTNIE NIE
> DO PRZYJĘCIA?
Ja zrozumiałem tak: ponieważ działa za wolno i być może za dobrze.
Mnie w 99% zastosowań wystarcza generator liniowy lub mersen lub
ranlux lub fibonnaci.
Pozdrawiam
-
19. Data: 2017-11-29 14:01:41
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Wed, 29 Nov 2017 02:23:29 -0800 (PST), "M.M." <m...@g...com>
wrote:
> Ale czyje? Moje nastawienie? A jakie masz wyobrażenie o moim
> nastawieniu, poprawnie zdekodowałeś moje nastawienie?
Domagasz się pomocy, a nawet nie zdefiniowałeś dokładnie problemu.
Chcesz pisać w Asemblerze, ale nie chcesz się przepracować. Chcesz
pomocy, ale nie piszesz o jaki CPU chodzi (tyle że to nie x86).
Chcesz pisać swój własny generator. Ale nie masz narzędzi do jego
testowania. Chcesz szybko i byle jak, ale nie masz pojęcia jak i jak
zacząć. No i fajnie.
A książek nie będziesz czytać bo nie. Też zupełnie gites.
-
20. Data: 2017-11-29 14:04:25
Temat: Re: Prosty generator pseudolosowy 8bit z limitem
Od: slawek <f...@f...com>
On Wed, 29 Nov 2017 02:23:29 -0800 (PST), "M.M." <m...@g...com>
wrote:
> To już totalnie odlecieliśmy, moim zdaniem daje liczbę losow=
> ą, ale
> rozkład jest baaaardzo nierównomierny.
Twoje zdanie, twoja sprawa. Ale... są konkretne wyniki, ludzie
napisali i opublikowali.