-
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
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-05 Shrek, wzrośnie cena prądu :-)
- 2025-07-05 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-07-05 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-05 Środa Wielkopolska => SAP FI/CO Konsultant wewnętrzny <=
- 2025-07-06 Płacić za wodę ze studni
- 2025-07-06 Kolejny inżynier...
- 2025-07-05 UE ustępuje pod presją Trumpa. Socjaldemokraci: oddaliśmy miliardy
- 2025-07-04 od kiedy można obrażać Plastusia i do kiedy Batyra?
- 2025-07-05 UE ustępuje pod presją Trumpa. Socjaldemokraci: oddaliśmy miliardy
- 2025-07-03 Trybik
- 2025-07-04 Renault Symbioz
- 2025-07-04 Architektura IIIRP: Wyjątkowa, a prymitywniejsza niż stodoła pod zaborami
- 2025-07-04 Warszawa => International Freight Forwarder <=
- 2025-07-04 Wrocław => SAP ABAP Developer <=
- 2025-07-04 Warszawa => Mid/Senior IT Recruiter <=