Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - linuxak

Stran: 1 2 3 [4] 5
46
Vývoj / Re:Segmentation fault
« kdy: 01. 04. 2020, 08:24:38 »
V tom případě Helgrind. Ale připrav se na to, že hlásí spoustu false positives pro veškerou sychronizaci, která se nedělá přes pthread sychronizační primitiva, budeš se tím muset probrat

47
Vývoj / Re:Algoritmus výplně gridu
« kdy: 05. 03. 2020, 07:18:23 »
Nevím, jestli jsem zadání pochopil úplně správně, ale připadá mi to jako Multi-dimensional knapsack problem a jaké to má důsledky, to už se dočteš na wikipedii.

48
Vývoj / Re:Využití a aplikace Machine learningu
« kdy: 21. 01. 2020, 16:01:34 »
Přímo z těchto odvětví ne, nicméně pokud tě zajímají nějaké reálné datasety a modely nad nimi, podívej se na kaggle. Tam najdeš jak reálné tak syntetické datasety z různých odvětví včetně finančnictví a vzorové modely nad nimi.

49
Vývoj / Re:Interpolace bez lineární funkce
« kdy: 20. 01. 2020, 16:24:30 »
Stale to neresi procesory kde je mul taktove "moc drahy".
Násobení lze udělat jednoduše pomocí bitových posunů a sčítání, např. 131 * X je 128 * X + 2 * X + 1 * X. Tohle funguje jen pro unsigned aritmetiku, ale to nevadí, protože si můžeš vybrat, ze které strany budeš tu interpolaci dělat.

50
Vývoj / Re:C, zápis do pole čísel a zápis mimo cache L1/L2
« kdy: 14. 01. 2020, 17:20:32 »
To je asi docela zásadní chyba pouštět to přes parallel, protože procesy nesdílí paměť. Pokud na slovník pamět normálně alokuješ mallocem a nepoužíváš mmap, tak má každý proces vlastní stránky pro slovník, takže je v RAM zbytečně 15x to stejné a nejde to sdílet v L3 cache, která je společná pro více jader. Na tuto úlohu je jednoznačně lepší použít thready a ne procesy.

51
Vývoj / Re:C, zápis do pole čísel a zápis mimo cache L1/L2
« kdy: 12. 01. 2020, 23:41:06 »
Ale tohle já přesně dělám.
Vezmu kus čísla a zjistím, jestli pro něj je v tabulce nějaká hodnota, používám jeho fixní část jako index.
Pokud daný index není NULL, pak teprve začnu provádět porovnání.
Cuckoo filtr je sofistikovanější, používá dvě různé hashovací funkce, takže každá položka se může vyskytovat na dvou různých pozicích, proto taky potřebuje dva lookupy. To umožňuje položky během kostrukce filtru (zřetězeně) přesouvat v případě kolize, takže se dá prakticky dosáhnout až 95% naplnění filtru. Opravdu jsou data relativně malá, tady je kalkulačka pro bloom filter, pro 5 milionů prvků ve filtru a pravděpodobnost 1% false positive je velikost dat 5.7 MB, což typicky vejde celé do L3 cache. Cuckoo filter je prostorově ještě úspornější, pro něj jsem ale online kalkulačku nenašel.

52
Vývoj / Re:C, zápis do pole čísel a zápis mimo cache L1/L2
« kdy: 12. 01. 2020, 22:41:46 »
To ano, ale pro každé to vstupní číslo (slovník si předpočítám) musíš spočítat hash, jestli penalizace při výpočtu hashe nebude horší než prostý formát.  ::)
Záleží na tom, co je to za data. Pokud jsou čísla víceméně náhodná, tak hash počítat vůbec nemusíš, jako hash poslouží část toho 512-bitového čísla. Pokud data moc náhodná nejsou, dá se hash spočítat třeba jako XOR částí čísla, to je rychlá operace a pro účely filtrování je to dostatečné.

Pokud se ti celý filtr podaří dostat do L2 cache, tak to škáluje s přidáváním jader lineárně, L2 je na Ryzenu exkluzivní k jádru.

53
Vývoj / Re:C, zápis do pole čísel a zápis mimo cache L1/L2
« kdy: 12. 01. 2020, 22:33:56 »
Ahoj, divoká myšlenka:

- čísla jsou 512-bitová => obor hodnot je obrovský
- slovník má kolem 400 MB, tedy v něm je asi 400/8 = 50M položek

50M je proti 2^512 tak nevýznamné číslo, že určitě půjde obrovské množství dat vytřídit pomocí předpočítaných patternů.

Kdybych to zjednodušil na bajty (8-bitová čísla), a měl slovník pro jednoduchost třeba { 0,1,128 }, tak si můžu pomocí testu (x & 0b01111110) == 0 eliminovat většinu vstupních možností a teprve pro zbytek udělám vyhledání.

Nevím jestli na předpočítání těch optimalizačních testů z obsahu slovníku existují slušné algoritmy, ale vzhledem tomu že (velikost slovníku << počet možných čísel), mohla by taková optimalizace výrazně pomoct.
Ano, takové algoritmy existují, jeden z nich se jmenuje Cuckoo filter ;). Nemá cenu znovu vymýšlet kolo, lepší je použít ověřená řešení.

54
Vývoj / Re:C, zápis do pole čísel a zápis mimo cache L1/L2
« kdy: 12. 01. 2020, 21:59:55 »
Asi mi nezůstane nic jiného, než pokusně zjistit, jaká je penalizace při zápisu mimo dostupnou stránku.  ::)
Stejně to nejspíš dopadne s tím odesíláním dat pryč, kolik takový UDP datagram sežere výkonu CPU netuším...
Proč řešíš takové složitosti, jaký zápis, k čemu? Cuckoo filtr jsou dva lookupy, které  můžeš prefetchovat, ale asi to ani nebude potřeba, protože celý filtr vejde do cache. Pokud máš náhodná data, tak to vyřeší 99+% případů. Nějaké UDP pakety a zbytečné zápisy jsou oproti tomu asi tak milionkrát pomalejší.

55
Vývoj / Re:C, zápis do pole čísel a zápis mimo cache L1/L2
« kdy: 12. 01. 2020, 05:33:21 »
Třídění bych nedělal, tím výkon asi dost zabiješ.

Pokud znáš data "dopředu", tozn. čísla chodí v nějakém streamu a nevadí ti mírné zvýšení latencí a cílíš hlavně na vysokou propustnost, můžech použít  prefetch dat z RAM do cache, před vlastním porovnáním se bude N budoucích čísel ze slovníku prefetchovat do cache. Tím zajistíš, že v okamžiku, kdy se čísla budou skutečně porovnávat, už budou data ze slovníku v cache a nečeká se na RAM.

Další možnost je použít AVX instrukce, tím se zrychlí vlastní porovnávání, ale je nutné mít data v cache, jinak se stejně čeká na RAM.

Docela dobrý trik jsou také pravděpodobnostní datové struktury, pro tento účel je asi nejlepší cuckoo filter. Hashovat nic nemusíš, "hash" se dá vytvořit třeba XORem z čísla. Z filtru vypadne výsledek buď číslo určtitě není ve slovníku, nebo číslo je možná ve slovníku (pak musíš udělat porovnání se slovníkem). Výhoda cuckoo filtru je, že jsou jeho data mnohem menší a vejdou do L2/L3 cache.

56
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 23. 10. 2019, 21:24:18 »
B-Tree vskutku není seznam, B-Tree je strom. Listy toho stromu jsou zaindexované hodnoty. Teprve od té hodnoty vede odkaz na seznam záznamů, kde se ta hodnota vyskytuje.

Ne takhle to nefunguje. B-Tree jako takové nepodporuje duplicitní záznamy. Prakticky se to omezení obchází tak, že se k indexu, který povoluje duplicitní hodnoty, interně dolepí "virtuální" sloupec, ve kterém je autoinkrementovaná hodnota. Tím se ze všech duplicitních klíčů stanou neduplicitní.

A to je ten problém, který Ti nedochází a kvůli kterému je Tebou navržená struktura zoufale neefektivní. Nelze totiž levně přejít na další záznam, který se liší nevirtuálním sloupcem. Musíš totiž buď udělat sekvenční scan, nebo pro nalezení dalšího unikátního štítku udělat nové hledání se složitostí O(log N), kde N je počet všech neunikátních štítků. S extra tabulkou pro štítky je to O(1).

Dostuduj si základy databází a normalizace dat, máš v tom dost velké mezery.

57
Vývoj / Re:Inkrementace ne levé i pravé straně přiřazení
« kdy: 05. 09. 2019, 20:27:47 »
Jen doplním, že od C++17 je vyhodnocení takového výrazu definované, nicméně souhlasím s ostatními, že je lepší to nedělat. Viz Stricter order of expression evaluation: http://www.cplusplus2017.info/c17-global-changes/

58
Vývoj / Re:Za jak dlouho se naučím C++?
« kdy: 14. 06. 2019, 07:36:33 »
a jaký jazyk byste mu doporučili?
Rust. Pro začátečníka je náročný na učení, ale to C++ taky. Výkon srovnatelný s C++. Spousta chyb, které se v C++ projeví až za běhu, odchytí Rust už při překladu.

59
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 19:24:05 »
Když dostane pointer a hodnotu, tak ti vynadá kompilátor.
Nikoli.
-Wzero-as-null-pointer-constant

60
Vývoj / Re:Ideálny programovací jazyk
« kdy: 16. 05. 2019, 19:22:57 »
Kdybyste si nalistoval diskusi asi tak pět stran zpět, psal jsem tam to samé :-) Teda až na to, že nesouhlasím, že pravidla jsou složitá – jsou naopak velmi jednoduchá, když se porovnávají primitivní typy, porovnávají se hodnoty (nic jiného porovnat nejde), když se porovnávají objektové typy, porovnávají se reference (protože objekt je pro Javu blackbox, neví nic o tom, jestli existuje něco jako hodnota toho objektu).
Ne ty tady od začátku píšeš, jak je porovnání v Javě udělané skvěle, jednoduše, každý to hned pochopí a chyby se v tom nedělají. To je prostě demagogie, obhajuješ špatný design, pravděpodobně z neznalosti.

Stran: 1 2 3 [4] 5