AMD64 - kdo doda HW?

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Listopad 23 02:12:48 CET 2003


On Fri, 21 Nov 2003, Pavel Janoušek wrote:

> 
> a) pouziva int (CPU/architecture depend)
> b) vubec nezjistuje, zda-li bezi na "vetsi" (64-bit) platforme
> 

> 	Na jednu stranu to usnadnuje vyvoj na stranu druhou to zaroven
> znamena, ze vse, co aplikace dela je "implementovano" do 32 bitu, coz
> naprosto zbtecne zdrzuje, uz jen z duvodu, ze 64-bitovy prefetch v CPU
> proste zpracovava sice 64-bitovy kod, ale se spoustou vaty, protoze
> programator pouzil pouze 32-bit funkce/volani...

Vata by vznikala v pripade, ze by program predpokladal, ze int je 32
bitovy a obsahoval kod navic, aby byl schopen pracovat s vetsimi cisly.
Jenze to je pomerne vyjimecna situace, vetsine kodu je uplne jedno, jestli
je int 32 bitovy nebo 64 bitovy, nebot mu tech 32 bitu bohate staci,
maximalne by se dalo zoptimalizovat to, ze se misto int bude psat
int_fast32_t (nebo jak (pokud jestli) to v tom C99 je), aby se zbytecne
nepracovalo s celymi 64 bity (a neukladaly se cele v pameti s tim, ze
pulka obsazeneho mista budou same nuly) v pripade, ze hardware umi stejne
dobre pracovat i s 32 bitovymi hodnotami.

> 	Popisu konkretni situaci, na ktere to IMHO musi byt silne videt.
> Je znamo kolik se vejde do int v 32-bitovem rezimu. Je to nekde v radu
> GB dat.

Nevim jak u Vas, ale na mych pocitacich se do 32-bitoveho intu vejde
prave 32 bitu. I kdyz co ja vim, treba soudruzi ze Sovetskeho svazu
uz dokazou do 32 bitu nacpat i nekolik GB dat. ;)

Mozna mate na mysli prostor, ktery lze adresovat, ale v civilizovanych
zemich se k tomu pouzivaji ukazatele a ne typ int.

> Proto mame v Linuxu klasickou funkci fseek, fseeko, lseek,
> llseek. fseek nam nepomuze, protoze ma offset jako long (=> vzdy
> 32-bit = je to pravda? - vychazim z tohoto: "On many architectures
> both off_t and long are 32-bit types, but compilation with #define
> _FILE_OFFSET_BITS 64 will turn off_t into a 64-bit type" - o long ani
> zminka, ze by se "zvetsoval"). fseeko ma offset jiz jako off_t, jenze
> ten je 64-bitovy pouze v pripade #define _FILE_OFFSET_BITS 64 - kolik
> aplikaci (source) to ma detekovano a nastavovano? lseek sice pouziva
> offset jako off_t, ale situace je podobna jako v fseeko - kolik
> aplikaci ma nastaveno patricne makro. llseek je kapitola sama pro
> sebe, protoze sice ma "lo" a "hi" cast, ale kompilatoru na 64-bit
> platforme nezbyde nic jineho nez do "ulong" udelat padding => CPU musi
> v datove casti precist dvojnasobne mnozstvi dat, nez bylo treba.

I kdyby ten popsany problem byl relevantni (jako ze moc neni), tak se tech
par cyklu navic uspesne ztrati v rezii toho, ze se vubec provadi neco se
souborem (coz mame rezii na syscall, plus v pripade seeku navic temer
jiste diskovou operaci, ve ktere uz se ztrati skoro vsechno, co se tyka
CPU).


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux