|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
24.7.2011, 21:32 | #1 |
V.I.P. Programiranje
|
Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Jedno kratko pitanje.
Imam klasu sa nizom koji je definisan tako da se alignuje na 128-bitnoj (16-bajtnoj) granici. Ovo mi je potrebno zbog SSE optimizacija koje ovo zahtevaju ali znaju da budu i do 300% brže od običnih verzija. Međutim, otkrio sam da kompajler ne može da prosledi ovakvu klasu po vrednosti (što je i logično s obzirom na calling konvenciju). Primer: Kod:
class Test { public: __attribute__ ((aligned (16))) float x[4]; }; void f(Test a) // ovde se pojavljuje greška { ... } |
25.7.2011, 14:26 | #2 | |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Nisam se jos "zezao" sa specificnim procesorskim instrukcijama i alignment-om tako da neznam konkretno zasto nece da funkcionise kad se prosledjujes po vrednosti. Evo jednog "objasnjenja" sa GameDev-a sto sam uspeo da nadjem za sad:
Citat:
|
|
25.7.2011, 15:00 | #3 |
V.I.P. Programiranje
|
Re: Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Jasno je meni zašto je tako nešto nemoguće (u stvari, tehnički bi bilo moguće da prvi parametar na steku bude na 16-bajtnoj granici ali ne verujem da se to koristi), ali ne znam da li bi ovo predstavljalo prepreku eventualnim korisnicima ove biblioteke?
Ne, koristim Microsoft Visual C++ kao IDE i debug kompajler, ali Release verzije uvek kompajlujem sa GCC-om (mingw na Windowsu) zato što radi bolje optimizaciju. |
25.7.2011, 16:21 | #4 | ||
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Citat:
Kod:
#include <vector> class vec4 { public: __m128 m; }; class FooNode { public: vec4 v; }; int main() { FooNode fn; std::vector<FooNode> v; v.push_back(fn); return 0; } Citat:
|
||
25.7.2011, 18:52 | #5 | |
Starosedelac
|
Re: Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Pa znas kako, i Bullet koristi alignment pa eto, dosta ljudi ga koristi
Sto se tice std::vectora, evo sta sam pronasao: http://bulletphysics.org/Bullet/phpB...php?f=9&t=3638 Citat:
|
|
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci: | ||
Belphegor (25.7.2011) |
25.7.2011, 20:16 | #6 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Ja ne bi' bas rekao da je "buggy", bolje je reci nedostatak (nije da ih branim nesto ).
Vidim da predlazu drugu implementaciju STL-a ali me mrzi sad da probam . |
25.7.2011, 21:48 | #7 |
V.I.P. Programiranje
|
Re: Memory alignment i prosleđivanje po vrednosti - kolika je prepreka?
Postoje i alternative, na primer korišćenje dinamičke alokacije aligned memorije pomoću posix_memalign ili _aligned_malloc (za Win), pa ću videti da to uradim (u konstruktoru alociram a u destruktoru samo dealociram, u slučaju da se koristi alignment).
A da, M$ stvarno ima faličnu implementaciju vektora, a o novim C++0x kontejnerima da ne govorim... Ali su IDE i debugger odlični. |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Gothic III | Guardian | Role-Play | 1579 | 25.5.2020 18:56 |
[Matična ploča] Asus M4A89GTD Pro | veseliburek | Opisi, recenzije i testovi | 25 | 12.5.2011 21:26 |