-
Data: 2014-10-12 17:25:46
Temat: Re: Algorytmiczny problem lamera... :-)
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 12.10.2014 13:39, M.M. wrote:
> On Sunday, October 12, 2014 12:53:04 PM UTC+2, bartekltg wrote:
>
> http://pastebin.com/sinjnRRw
Trochę porównujesz inne rzeczy.
Test odpalasz 10 razy. Ale pamięć dla tablic alokujesz tylko
raz, dla kontenerów 10 razy:>
BTW,
static int data[CNT_ROWS][CNT_COLS];
Zdecydowanie nie leży na stosie ;-) Przez to static.
Znasz rozmiary statycznie, a jednak nie używasz resize.
przez co alokujesz to co trzeba, ale też polowę, ćwiartkę...
Rules jako tablica tablic możę bie być najlepsza? I tak każda
reguła jest inaczej używana, nie wsadzisz więc tego w pętlę.
Czemu nie struktura? [update, zaminiłem ma pair, przyszpieszenie
znikome]
> for( int i=0 ; i<LOOPS ; i++ ) {
> for( int i=0 ; i<CNT_ROWS ; i++ ) {
Nie rób tak ;-)
Wrzuciłem napisaną przez siebie wersję na vector.
Ciut wolniejsza, ale nie aż tak;-)
testRaw
9.14884s sum=-191116600
testRaw2
6.54265s sum=-191116600
testVectBrt
10.0932s sum=-191116600
testVect2Brt
9.03653s sum=-191116600
testQVector
38.9511s sum=-191116600
testQVector2
21.9616s sum=-191116600
testQList
41.9841s sum=-191116600
testQList2
19.1983s sum=-191116600
testQList3
19.162s sum=-191116600
long long testVector()
{
vector< vector<int> > data( CNT_ROWS, vector<int>(CNT_COLS,0) );
for( int i=0 ; i<CNT_ROWS ; i++ )
{
for(auto it = data[i].begin(); it!=data[i].end(); ++it )
*it = ( rand() % 1000 );
}
vector< vector<int> > rules(CNT_COLS, vector<int>(2,0));
for( auto it = rules.begin(); it!=rules.end();++it )
{
(*it)[0]=( rand()%100 );
(*it)[1]=( 900 + rand()%100 );
}
long long sum = 0;
for( int l=0 ; l<LOOPS ; l++ ) {
for( auto it=data.begin(); it !=data.end(); ++it ) {
int j=0;
while( j < CNT_COLS && (*it)[j] >= rules[j][0] && (*it)[j]
<= rules[j][1] )
{
j++;
}
sum += (j==CNT_COLS) ? +1 : -1;
}
}
return sum;
}
long long testVector2()
{
vector< vector<int> > data( CNT_ROWS, vector<int>(CNT_COLS,0) );
for( int i=0 ; i<CNT_ROWS ; i++ )
{
for(auto it = data[i].begin(); it!=data[i].end(); ++it )
*it = ( rand() % 1000 );
}
vector< pair<int,int> > rules(CNT_COLS);
for( auto it = rules.begin(); it!=rules.end();++it )
{
it->first=rand()%100 ;
it->second=900 + rand()%100 ;
}
long long sum = 0;
for( int l=0 ; l<LOOPS ; l++ ) {
for( auto it=data.begin(); it !=data.end(); ++it ) {
auto dit = (*it).begin();
auto rit = rules.begin();
while( rit!=rules.end() && *dit >= rit->first && *dit <=
rit->second )
{
++rit;
++dit;
}
sum += (rit-rules.begin()==CNT_COLS) ? +1 : -1;
}
}
return sum;
}
>> Jeśli zawsze i wszędzie masz 30, może array<int,30> coś poprawi.
> Bedę mial jeszcze wieksza sieczke, tamto na pastebin stanowi tylko
> zgrubny test. Docelowo mniej / wiecej:
> struct A {
> QVector<int> iv;
> QVector<float> fv;
> };
Nadal nie powiedziałeś, czemu vector z QT, a nie STL? ;-)
>
> struct B {
> QVector< A > vs;
> };
Coś w tę strukturę jeszcze kiedyś wlezie? Jeśli nie, to tylko nadgarstek
męczysz wpisywaniem kropek;-)
> B b;
> for( i=0 ; i<b.vs.size() ; i++ ) {
> bool all = true;
> int j = 0;
> while( all && j<b.vs[i].iv.size() ) {
> all = b.vs[i].vi[j] >= mini[j] && b.vs[i].vi[j] <= maxi[j];
> j++;
> }
> j = 0;
> while( all && j<b.vs[i].fv.size() ) {
> all = b.vs[i].vf[j] >= minf[j] && b.vs[i].vf[j] <= maxf[j];
> j++;
> }
> if( all ) coś();
> }
:-)
>
>
>> Albo nawet adresować wszytko liniowo (skoro nie boisz się
>> bawić wskaźnikami, i to nie powinno być problemem.)
> Pewnie druga wersja bedzie na samych wskaznikach i malloc.
>> To się cudownie równoległa;-)
> Tak! Ale to potem.
>
> Ciekawe czy na dlugich rejestrach by sie dalo sprawdzic kilka
> warunkow w jednej iteracji. Na karcie grafiki tez powinno
> niezle przyspieszyc, ale moja ksiazka do CUDA lezy od ponad
> roku na polce i jeszcze do teraz smierdzi drukarnia :D
Czytaj, czytaj, nigdy nie wiadomo, kiedy się przyda;>
pzdr
bartekltg
Następne wpisy z tego wątku
- 12.10.14 19:53 M.M.
- 12.10.14 21:03 bartekltg
- 12.10.14 22:03 M.M.
- 24.10.14 10:55 m...@g...com
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-20 "betamaxy" i inne voip-y dzisiaj
- 2024-11-21 Strach się bać
- 2024-11-21 Koniec smrodów
- 2024-11-20 Krematorium
- 2024-11-20 Taki tam szkolny problem...
- 2024-11-20 LIR2032 a ML2032
- 2024-11-20 SmartWatch Multimetr bezprzewodowy
- 2024-11-21 Środa Wielkopolska => Konsultant SAP <=
- 2024-11-21 Łódź => Spedytor Międzynarodowy <=
- 2024-11-21 Wrocław => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-21 Kraków => Lead Java EE Developer <=
- 2024-11-21 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=