Avatar billede heltsikkert Nybegynder
16. oktober 2008 - 21:46 Der er 11 kommentarer og
1 løsning

Findes der c++ lister, der kun eksisterer på compilerniveau?

Hej Eksperter!

Jeg er i gang med at opbygge et lille framework i C++, der kan håndtere forskellige problemer vha. templates. I kernen af min algoritme har jeg noget kode, der skal køres millioner af gange, så det skal være så effektivt kodet som overhovedet muligt. På samme tid, vil jeg gerne have at det bliver så pænt som muligt at tilgå det udefra.
Mit spørgsmål er: Er det muligt at lave en (fixed size) liste af variable, der kun eksisterer på compiler niveau? Alle elementer i listen vil blive kørt igennem et for-loop, som jeg håber også at kunne holde på compiler-niveau. Er dette overhovedet muligt? Der er for meget overhead i at køre en rigtig løkke. Så vil jeg hellere gentage kommandoen 5-10 gange i koden for de forskellige variable.

På forhånd tak.
Avatar billede arne_v Ekspert
16. oktober 2008 - 21:52 #1
En fixed size liste er et array.

Prøv og forklar lidt mere hvad du vil.
Avatar billede heltsikkert Nybegynder
16. oktober 2008 - 22:17 #2
Jeg kan godt se at ordet "liste" måske ikke var helt velvalgt. Jeg mente ikke som sådan at det skulle være en STL list.
Jeg kan komme med et simpelt eksempel på, hvad det er jeg vil.
Jeg ville gerne skrive noget kode i stil med:

int list[3] = {1, 2, 3};
int sum = 0;
for (int i=0; i<3; i++) {
  sum += list[i];
}

Men det skal ikke køres som en "normal" løkke. Jeg vil gerne have det til at compile til det samme som det følgende ville compile til:

sum = 0;
sum += list[0];
sum += list[1];
sum += list[2];
cout << sum << endl;

På den måde ungår jeg overhead i forbindelse med i-variablen.
Giver det mening?
Avatar billede heltsikkert Nybegynder
16. oktober 2008 - 22:18 #3
Bare glem linien med cout - den er ikke relevant her.
Avatar billede arne_v Ekspert
16. oktober 2008 - 22:26 #4
Du kan selv skrive de 3 enkelt statements.

Eller du kan bare lave løkken og så lade compileren tage sig af optimeringen.

Jeg vil klart anbefale de sidste !

Moderne compilere kan lave f.eks. loop unrollinf af inner loops, hvilket er
en problemstilling tæt beslægtet med det du viser.

Jeg tror ikke at den ville finde det umagen værd at spare løkken i dit eksempel.
Avatar billede heltsikkert Nybegynder
16. oktober 2008 - 22:41 #5
Nej, ikke i eksemplet her.. Men dette kommer til at ligge dybt inde i min algoritme og vil som sagt blive kørt millioner af gange. Problemet er lidt mere komplekst end det illustrative eksempel. Der vil typisk være væsentligt flere end 3 variable. Antallet bliver angiver via templates og derfor ville det være super, hvis compileren selv kunne "udrulle" løkken.
Jeg vil være helt sikker på at løkken aldrig compiles som en normal løkke, og derfor er jeg ikke så vild med idéen om at lade compileren klare det selv, og håbe på det bedste.
Avatar billede arne_v Ekspert
17. oktober 2008 - 00:17 #6
Det vil den også kunne afhængig af hvilken compiler det er, koden og hvilke
compile options du bruger !
Avatar billede arne_v Ekspert
17. oktober 2008 - 00:54 #7
Hvis GCC så check options på:
  http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Der er et hav af options som påvirker loop unrolling.
Avatar billede bertelbrander Novice
17. oktober 2008 - 02:02 #8
Med mindre du selv kan og vil skrive koden i assembler i hånden, tror jeg at compileren er bedre til at optimere end du selv er.

Det er ikke sikkert at det er hurtigere at lave loop unrolling. Hvis koden bliver meget større, kan der være meget mindre i cachen og så ryger fordelen.
Avatar billede heltsikkert Nybegynder
17. oktober 2008 - 04:28 #9
@bertelbrander: det kan godt være at compileren er god til at optimere, men jeg har trods alt noget problemspecifik viden, som jeg vil være sikker på at den benytter.

Jeg fandt ud af at man i "boost" har implementeret denne preprocessing feature. Fandt et forslag, der løser min problemstilling her:
http://bytes.com/forum/thread63769.html

Jeg vil dog gerne give point for de gode forslag alligevel, så hvis I lægger et svar, uddeler jeg point.
Tak for hjælpen.
Avatar billede bertelbrander Novice
17. oktober 2008 - 13:01 #10
Jeg samler ikke på point.
Avatar billede heltsikkert Nybegynder
02. december 2008 - 21:10 #11
Heller ingen point til arne_v?
Avatar billede arne_v Ekspert
02. december 2008 - 21:17 #12
tjo - hvis du synes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester