Výkon ARM vs. x86

Lama

Re:Výkon ARM vs. x86
« Odpověď #30 kdy: 23. 10. 2016, 04:10:11 »
výsledek inteligentně dostanete struktuře - dle jazyka tvého kmene odhaduji, že jsi nějaký tatar, který dnes vyfasoval pohotovost.


kvr kvr kvr

Re:Výkon ARM vs. x86
« Odpověď #31 kdy: 23. 10. 2016, 22:07:04 »
Předpokládám že víte jak funguje v jazyku C union, takže je vám jasné, že QuadPart a LowPart+HighPart jsou jen různé pohledy na tu samou hodnotu. Pokud compiler umí 64-bitové integery, s klidem používejte QuadPart, a nevidím důvod, proč by se vám s ní počítalo špatně. Pokud je neumí, pořád máte možnost použít LowPart+HighPart.
O big-endian v MS slyšeli, ale asi také vědí, že naprostá většina dnešního HW je bi-endian: ARM 3+, PowerPC, Alpha, SPARC V9+, MIPS, PA-RISC, SuperH SH-4, IA-64 aka Itanium.

Když to shrnu, tak obhajujete platform-independent datové typy, u kterých není daná jejich šířka ani endianness. Jak vidíte u portu OpenOffice na 64-bitovou architekturu, v praxi to portabilitě nepomáhá. Co je ale horší: v takovém prostředí nemáte stabilní ABI. Windows staví na stabilním ABI, ale ve světě POSIXu nic takového neexistuje.

Tohle s ABI vůbec nesouvisí, na Linuxu bez problému pustím 20 let starou binárku. A ohledně QuadPart, LowPart a HighPart - jakože budu psat ifdefy (ehm, není to dokonalé, kdyby MyStruct byla moc velká, ale nechtěl jsem to komplikovat moc):

Kód: [Vybrat]
#ifdef VERY_OLD_COMPILER
    DWORD originalLowPart = myFileOffset.split.LowPart;
    myFileOffset.split.LowPart = myFileOffset.split.LowPart+sizeof(MyStruct);
    if (myFileOffset.split.LowPart < originalLowPart)
         myFileOffset.split.HighPart++;
#else
    myFileOffse.QuadPart = largeIntegerUsedForGainingTheOffset.QuadPart+sizeof(MyStruct);
#endif

// vs Posix:
   myFileOffset += sizeof(MyStruct);

Opravdu takhle vypadají Microsoftí programy??

DWORD byl původně double word, a postupem času se z něj stal unsigned int, by default 32-bitový. To že se z něj sufixem 64 udělá 64-bitový typ mi připadá poměrně logické. Jinak použití typů bez definované šířky (jak je nešťastným zvykem v definici jazyka C) považuji za příčinu většiny problémů v portování na 64-bitové platformy.

WORD znamená slovo, tedy základní element, se kterým se procesoru "dobře" pracuje. Už tohle má Microsoft blbě, neboť WORD chápe jako 16 bitů, což není pravda pro drtivou většinu dnešních architektur.  DWORD je double word, tedy dvakrát slovo, v řeči Microsoftu tedy 32 bitů. Stejně jako existuje jediný kilogram, žádný lehký kilogram a těžký kilogram, nelze DWORD (double word) přiřadit malý double word a velký double word. Jak to udělat správně - opět viz POSIX, glib, Qt (*int64* - je to celočíselné a má to 64 bitů - jednoduché, čitelné, přehledné, nematoucí).

A k té druhé části, to asi nebylo myšleno vážně, že? Naopak flexibilní definice typu podle jeho úlohy tu portabilitu usnaďnuje. Zároveň taky výrazně zvedá čitelnost kódu, což opět vyřeší potenciální chyby při portaci - když vidím off_t, size_t, vidím i ten význam a je-li to špatně, jsem schopen rychle říct proč. Když vidím DWORD, nevidím smysl té proměnné, nevidím nic. A přehlednost kódu je jeden z klíčů pro efektivitu vývoje a v důsledku jeho kvalitu a cenu. Takže původně banda školáků dokázala postavit něco, co konkurovalo balíku MS, za který půlka světa platí řádově tisíce korun.

Mimochodem u těch platform independent typů (size_t, off_t, uintptr_t, time_t a další) jste viděl, že portaci velkých projektů nijak nepomohly, a například u OpenOffice to zdaleka nebylo "jen o zkompilování a spuštění". Uvědomte si, že řada starších aplikací například serializuje objekty do binárního blobu, a je tak dělaná mimo jiné většina souborových formátů uvedených před XML.

Opět je to o tom, aby se ty typy používaly správně, je samozřejmě nesmysl serializovat size_t. Tohle zjevně na některých místech u OpenOffice podcenili, proto ty problémy. Ale nejspíš nebyly tak velké, když je malý tým dokázal vyřešit poměrně rychle. Což, když například porovnám jediný port MS Office na Mac, kde aplikace vypadá výrazně jinak a velká část funkcionality chybí, tak zjevně ani velká banda pracujících na MS Office ty pozůstatky nedokázala vyřešit ani za 10 let.

Když to shrnu, viděl jsem spoustu projektů, které byly postavené na logických (POSIX) typech a portace byla jen o překompilování. Neviděl jsem ___jediný___ projekt postavený na WINAPI, u kterého by byl port bez problémový - naopak jsem jich viděl dost, které skončily jako "give it up". To asi o něčem vypovídá, což?

Lael.Ophir

Re:Výkon ARM vs. x86
« Odpověď #32 kdy: 25. 10. 2016, 13:22:12 »
Tohle s ABI vůbec nesouvisí, na Linuxu bez problému pustím 20 let starou binárku.
S ABI to samozřejmě souvisí. Jak myslíte že bude fungovat aplikace, která volá open(), a čeká že ji libc vrátí 32-bitový int, když libc vrátí místo toho 64-bitový? Pochopitelně z tohoto z milionu dalších důvodů nebude fungovat. Jistě, můžete aplikaci přeložit tak, aby používala 64-bitový int. Jenže pak nejde o kompatibilitu na úrovni ABI.
Další věc: různé platformy používají různý alignment. Například 32-bitový int se typicky ukládá na adresu, která je násobkem čtyř, a pokud tato podmínka není splněna, tak buď výrazně propadne výkon, nebo dokonce dojde k výjimce. Při změně šířky datových typů tedy nedojde jen k prostému zvětšení struktur. Mezi jednotlivé members často complier nasází padding, a může se to lišit podle compileru (například gcc vs MSVC vs icc). To pak může vést k tomu, že když uložíte strukturu na disk na jedné 32-bit platformě, tak ji na jiné nepřečtete, protože se liší allignment/padding. A podobně to může být problém (se kterým se naštěstí většinou počítá) i v rámci jednoho systému, pokud přeložíte aplikaci jiným compilerem.

A ohledně QuadPart, LowPart a HighPart - jakože budu psat ifdefy (ehm, není to dokonalé, kdyby MyStruct byla moc velká, ale nechtěl jsem to komplikovat moc):
...
Opravdu takhle vypadají Microsoftí programy??
Proč byste psal ifdefy? Když píšete pro 64-bitovou platformu, máte compiler s podporou 64-bitových integerů. Ovšem pokud píšete 32-bitový kód, který má používat 64-bitové integery, může se to hodit. Předpokládám že vrstva WoW32 (tedy běh 32-bitových programů na 64-bitových Windows) je interně řešená právě takhle.
Mimochodem proč byste to na Windows řešil tak jak jste ukazoval, a ne takhle?
Kód: [Vybrat]
myFileOffset.QuadPart += sizeof(MyStruct);
WORD znamená slovo, tedy základní element, se kterým se procesoru "dobře" pracuje. Už tohle má Microsoft blbě, neboť WORD chápe jako 16 bitů, což není pravda pro drtivou většinu dnešních architektur.  DWORD je double word, tedy dvakrát slovo, v řeči Microsoftu tedy 32 bitů. Stejně jako existuje jediný kilogram, žádný lehký kilogram a těžký kilogram, nelze DWORD (double word) přiřadit malý double word a velký double word. Jak to udělat správně - opět viz POSIX, glib, Qt (*int64* - je to celočíselné a má to 64 bitů - jednoduché, čitelné, přehledné, nematoucí).
To je historická zátěž. Nicméně kdo je schopný si zapamatovat quint32, měl by zvládnout i DWORD32. Pokud jde o glib a Qt, tak jsem vám říkal, že .NET Framework i WinRT mají datové typy dost podobné.

A k té druhé části, to asi nebylo myšleno vážně, že? Naopak flexibilní definice typu podle jeho úlohy tu portabilitu usnaďnuje. Zároveň taky výrazně zvedá čitelnost kódu, což opět vyřeší potenciální chyby při portaci - když vidím off_t, size_t, vidím i ten význam a je-li to špatně, jsem schopen rychle říct proč. Když vidím DWORD, nevidím smysl té proměnné, nevidím nic. A přehlednost kódu je jeden z klíčů pro efektivitu vývoje a v důsledku jeho kvalitu a cenu. Takže původně banda školáků dokázala postavit něco, co konkurovalo balíku MS, za který půlka světa platí řádově tisíce korun.
Původně školáci jsou snad dneska skoro všichni :). OpenOffice byl koupen společností Sun Microsystems, a následně dlouhé roky platila jeho vývoj. Náklady šly v přepočtu do miliard korun. Komunita se starala primárně o údržbu dokumentace. Když nevyšla strategie kde se Sun, Oracle a IBM snažili vnutit OpenOffice zákonem (získat ISO standard na formát OOXML, lobbovat za přijetí zákonů vyžadujících používání standardizovaných formátů a zabránění konkurenci v získání standardu), tak Sun i ostatní náklady prostě odepsali.
Ohledně toho jak použití off_t údajně zvyšuje portabilitu: na prvním místě máte i off64_t. Na druhém místě nevidím moc důvodů zrovna pro file offset mít vlastní datový typ. Vždyť je to integer. Naopak pokud otevřu soubor, tak chápu že výsledek by měl být typu handle (ve Win32 HANDLE), protože tam to opravdu má význam. Samozřejmě v libc funkce open() vratí int, asi byste ho mohl s něčím sečíst :/

Opět je to o tom, aby se ty typy používaly správně, je samozřejmě nesmysl serializovat size_t. Tohle zjevně na některých místech u OpenOffice podcenili, proto ty problémy. Ale nejspíš nebyly tak velké, když je malý tým dokázal vyřešit poměrně rychle. Což, když například porovnám jediný port MS Office na Mac, kde aplikace vypadá výrazně jinak a velká část funkcionality chybí, tak zjevně ani velká banda pracujících na MS Office ty pozůstatky nedokázala vyřešit ani za 10 let.
Souhlas, správné používání typů je základ. Jenže v době kdy se psal originální kód řada autorů stavěla na nesprávných předpokladech o šířce jednotlivých typů, v dané situaci na tom prostě nezáleželo. Jak vidíte, tak se jim to vymstí ať už používají Win32, nebo libc. Mimochodem pro lepší portabilitu se *vždy* doporučuje používat typy s danou šíří, například uint32 nebo DWORD, namísto těch generických jako int.
Port MS Office na Mac není problém z hlediska datových typů. Je to problém z hlediska API, protože se aplikaci napsanou pro Win32 portujete na MacOS Cocoa.
To že MS Office for Mac vypadá jinak než na Windows je záměr. Uživatelé na Macu mají ohledně UI výrazně odlišná očekávání, ať už jde o nativní widgety, nebo třeba o umístění menu. Je potom otázkou pro portující tým, kde look-and-feel přizpůsobí cílové platformě, a kde nechá ten původní.
Chybějící funkcionalita je důsledkem toho, že MS nechtěl moc investovat do portu. Zákazníků na Macu bylo málo, ta platforma prakticky umírala. Navíc Apple přešel z API Classic na Carbon + Cocoa, takže bylo potřeba portovat znovu. Plus byla v MS řada lidí, kteří se ptali, proč by měl MS podporovat konkurenta, a navrhovali úplně MS Office for Mac stopnout.

Když to shrnu, viděl jsem spoustu projektů, které byly postavené na logických (POSIX) typech a portace byla jen o překompilování. Neviděl jsem ___jediný___ projekt postavený na WINAPI, u kterého by byl port bez problémový - naopak jsem jich viděl dost, které skončily jako "give it up". To asi o něčem vypovídá, což?
Jistě, hello world opravdu přeložíte pro 64-bitovou platformu, a bude to bez problému. Cokoliv složitějšího dopadne tak jako OpenOffice: bude s tím spousta práce. Mimochodem představte si, jak portujete na 64-bit platformu třeba DB engine. Jde o obrovskou hromadu datových struktur, změní se vám veškeré formáty i protokoly. Port OpenOffice je proti tomu nuda. [/code]

.

Re:Výkon ARM vs. x86
« Odpověď #33 kdy: 25. 10. 2016, 14:18:31 »
Původně školáci jsou snad dneska skoro všichni :). OpenOffice byl koupen společností Sun Microsystems, a následně dlouhé roky platila jeho vývoj. Náklady šly v přepočtu do miliard korun. Komunita se starala primárně o údržbu dokumentace. Když nevyšla strategie kde se Sun, Oracle a IBM snažili vnutit OpenOffice zákonem (získat ISO standard na formát OOXML, lobbovat za přijetí zákonů vyžadujících používání standardizovaných formátů a zabránění konkurenci v získání standardu), tak Sun i ostatní náklady prostě odepsali.
Ta diskuse tady je zajímavá, ale bohužel jste se pustil do politiky a to co jste vypustil je opravdu strašné.

Samozřejmě, že zákon by měl ve veřejné správě vyžadovat používání veřejných standardizovaných formátů a to, že tomu tak dlouho nebylo (a někde ještě stále není) je výsledkem silného lobingu Microsoftu a případných dalších firem. Masové přijímání nestandardizovaných a proprietárních dokumentů je totéž, jako by stát nařídil, že na státní cesty mohou jen auta výrobce xyz a ostatní tam nesmí. To by vám připadlo normální?

trumbera

Re:Výkon ARM vs. x86
« Odpověď #34 kdy: 25. 10. 2016, 15:02:59 »
Původně školáci jsou snad dneska skoro všichni :). OpenOffice byl koupen společností Sun Microsystems, a následně dlouhé roky platila jeho vývoj. Náklady šly v přepočtu do miliard korun. Komunita se starala primárně o údržbu dokumentace. Když nevyšla strategie kde se Sun, Oracle a IBM snažili vnutit OpenOffice zákonem (získat ISO standard na formát OOXML, lobbovat za přijetí zákonů vyžadujících používání standardizovaných formátů a zabránění konkurenci v získání standardu), tak Sun i ostatní náklady prostě odepsali.

No, máte, jako vždy, naprostou pravdu. Jen OpenOffice.org nebyly koupeny fy. Sun Microsystems,  ale uvolněny koncem roku 2001 jako základ balíku StarOffice pod licencemi LGPL a SISSL. Je pravda, že balík StarOffice fy. Sun Microsystems koupila. Jako balík Starwriter od fy. StarDivision.

Dále nechápu souvislost s OOXML, a fy. Sun, Oracle a IBM, když OOXML je formát Microsoftu. Je pravda, že při schvalování OOXML Microsoft fakticky ochromil organizaci ISO tím, že si zaplatil nové členy ISO organizace. Tito nový členové po schválení nebyli aktivní a ISO byla nějakou dobu neusnášeníschopná. A diskreditovaná.

Vypadá to, že z úspory času při psaní Vám vypadávají celé části textu a Váš text tím ztratil faktické souvislosti.


Lael.Ophir

Re:Výkon ARM vs. x86
« Odpověď #35 kdy: 25. 10. 2016, 19:20:59 »
No, máte, jako vždy, naprostou pravdu. Jen OpenOffice.org nebyly koupeny fy. Sun Microsystems,  ale uvolněny koncem roku 2001 jako základ balíku StarOffice pod licencemi LGPL a SISSL. Je pravda, že balík StarOffice fy. Sun Microsystems koupila. Jako balík Starwriter od fy. StarDivision.
Nepsal jsem o OpenOffice.org. Psal jsem, že OpenOffice koupila společnost Sun. Ano, Sun koupil produkt ze kterého vychází OpenOffice, nikoliv produkt jménem OpenOffice, ale neviděl jsem důvod jít do detailu. Když chcete detaily, tak OpenOffice vychází ze StarOffice, a teprve ten vychází ze StarWriteru. Autorem StarOffice byla společnost StarDivision, kterou Sun koupil v roce 1999, a jejíž zaměstnanci se dál starali o rozvoj balíku. K uvolnění zdrojáku došlo v roce 2000.

Dále nechápu souvislost s OOXML, a fy. Sun, Oracle a IBM, když OOXML je formát Microsoftu. Je pravda, že při schvalování OOXML Microsoft fakticky ochromil organizaci ISO tím, že si zaplatil nové členy ISO organizace. Tito nový členové po schválení nebyli aktivní a ISO byla nějakou dobu neusnášeníschopná. A diskreditovaná.
Pardon, mělo tam být ODF.
Je pravda, že se Sunu nepodařilo proniknout na trh office produktů, takže vytvořil strategii kdy alespoň poškodí konkurenta (Microsoft) tím, že OpenOffice uvolní zdarma. Sun pak nabízel placenou verzi pod značkou StarOffice s podporou. Protože o produkt nikdo nestál, protlačil Sun interní formát svého produktu standardizací u ISO (a o necelých 9(!) let později dokonce standardizoval takové "drobnosti", jako jsou vzorce ve spreadsheetech), a lobboval za přijetí zákonů, které měly donutit státní správu používat (nepoužitelný) ISO standard. Tím pádem bylo zásadní, aby konkurenční formát OOXML od MS nezískal ISO standard. Sun nad tím strávil obrovské množství úsilí. Šlo o bezprecedentní přenesení konkurenčního boje na půdu ISO. MS reagoval způsobem, který byl nejspíš také bezprecedentní. Výsledkem je poškození ISO a celého standardizačního procesu. Naštěstí špinavá taktika Sunu (a jeho přítel v IBM a Oracle) nevyšla. Po ISO standardizaci OOXML se vývoj OpenOffice prakticky zastavil, a Sun dojel mimo jiné na své utrácení za projekty bez finanční návratnosti (OpenOffice, MySQL). V IBM odepsali Lotus Symphony, a v Oraclu po nákupu Sunu odepsali OpenOffice.