Diskuze: Jak upravit program pro hledání hesla ?
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Po úspěšném spuštění prvního testovacího programu na GPU (Visual Studio 2022 a CUDA Toolkit) se pokouším převést program výše z Linuxu do Visual Studia 2022 (VS 2022).
Potřeboval bych poradit, jakou knihovnou ve VS 2022 nahradit Linuxovou knihovnu:
#include <sys/time.h>
Při měření času je v programu použita funkce:
long long timems() {
struct timeval end;
gettimeofday(&end, NULL);
return end.tv_sec * 1000LL + end.tv_usec / 1000;
}
#include <stdio.h>
#include <winsock2.h> // struct timeval
#include <windows.h> // timeGetTime()
#pragma comment( lib, "winmm.lib") // timeGetTime()
typedef unsigned long DWORD;
int gettimeofday(struct timeval* tp, void* tzp);
long long timems(void);
int main(void) {
long long val = timems();
printf("%lld\n", val);
return 0;
}
int gettimeofday(struct timeval* tp, void* tzp) {
DWORD t;
t = timeGetTime();
tp->tv_sec = t / 1000;
tp->tv_usec = t % 1000;
return 0;
}
long long timems(void) {
struct timeval end;
gettimeofday(&end, NULL);
return end.tv_sec * 1000LL + end.tv_usec / 1000;
}
Super skvělý, díky, na to bych nepřišel. Chyby u času již zmizely
.
Poslední problém je jak nahradit funkce (ovládání vláken):
pthread_mutex_init()
pthread_mutex_lock()
pthread_create()
pthread_mutex_unlock()
Linux knihovny:
#include <pthread.h>
část programu viz výše:
pthread_mutex_init(&solutionLock, NULL);
pthread_mutex_lock(&solutionLock);
unsigned long** processedPtrs = (unsigned long**)malloc(sizeof(unsigned long*) * GPUS);
pthread_t* tids = (pthread_t*)malloc(sizeof(pthread_t) * GPUS);
long long start = timems();
for (int i = 0; i < GPUS; i++) {
HandlerInput* hi = (HandlerInput*)malloc(sizeof(HandlerInput));
hi->device = i;
hi->hashesProcessed = 0;
processedPtrs[i] = &hi->hashesProcessed;
pthread_create(tids + i, NULL, launchGPUHandlerThread, hi);
usleep(10);
}
funkcemi CUDA Toolkit. Dal jsem dotaz do fóra developer.nvidia.com
Nebylo by rychlejsi misto volani cyklu pouzit primo instrukci?
for (int k=0; k < 3; k++) d[k] = s[k];
d[0] = s[0];
d[1] = s[1];
d[2] = s[2];
Zvlast, kdyz to cele provadis opakovane 1000x, tak by to mohlo mit vyznam
@Peter Mlich
Nerozumím tvému komentáři ohledně volání cyklu. Jaký cyklus myslíš ?
P.S. Program v úvodu běží na Linuxu (KALI) na mém notebooku s GPU NVIDIA
GeForce 960M v pohodě rychlostí cca 32 Gh/s
. Upravuji ho, abych ho mohl spustit
pod Visual Studio 2022 s NVIDIA Toolkitem. Hledám také nějaký příklad, jak
naprogramovat funkci PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256) aby
běžela co nejrychleji (s využitím nejnovějších instrukcí CPU a během ve
více warpech na GPU).
for (int k=0; k < 3; k++) d[k] = s[k]; // tohle tam mas, a je to preci totez jako:
d[0] = s[0];
d[1] = s[1];
d[2] = s[2];
Az na to, ze, bez cyklu to pobezi rychleji a spotrebuje mene pameti.
Ale, nevim, jaky zpusobem funguji moderni urychlovace cyklu. Je mozne, ze to cpu
dokaze zpracovat paralelne a ten rozdil je pak minimalni.
Tez je zajimave, ze mas cykly:
for (i = 0; i < 64; ++i) // 1
for (int k=0; k < 11; k++) // 2
// kde ++i by melo byt rychlejsi jez i++
Proste, to vypada jako slepenec nekolika kodu, kde vlastne ani nerozumis, co
to dela a proc a to se pokousis prepsat na neco jineho, cemu take nerozumis?
Jen mi to prislo zvlastni,
jako.
Díky, jen upřesňuji, že kód je jiného autora viz odkaz zde. Prvotní odkaz na video programu v chodu je tady.
Také mi připadá, že je to celé nějaké zmatečné. Snažím se pochopit co to vlastně dělá a udělat vlastní program od začátku. Nejdříve to chci rozchodit ve Windows (Visual Studio 2022 a CUDA Toolkit), pochopit co to dělá (např. debugem proměnných) a pak to zkusit udělat od začátku nově pro funkci PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256), aby to i na obyčejné grafické kartě běželo s maximální rychlostí.
Ano, takovéto kopírování je rychlejší, ale hodí se pro velmi malý počet kopírování. V drtivé většině se používá traversování pomocí cyklu.
Kopírování prvků pole musí mít význam, v opačném případě stačí pouze předat ukazatel na pole.
Co se týká inkrementace v prefixové podobě ++i proti postfixové podobě i++, již jsem to zde na fóru psal. Pro vestavěné typy zde není žádný rozdíl. Drobný rozdíl je u tzv. compound typů, tedy typů co vytváří programátor, struktury, objekty, unie, tam je prefixová podoba zápisu nepatrně rychlejší.
Překladače ale za dobu své existence jistě neusnuly na vavřínech a dost pravděpodobně dokáží rozpoznat kód a optimalizovat jej tak, že nebude rozdíl mezi prefixovou a postfixovou formou zápisu.
Take tam vidim parkrat cislo * 8, to by slo tez resit
shiftovanim, ne? cislo << 3
Zobrazeno 10 zpráv z 10.