Kompilacja na 32-bitową maszynę.

0

Witajcie,

Czy kompilacja na 32-bitową maszynę ma w dzisiejszych czasach jeszcze jakiś sens, szczególnie dużych programów czy też gier? Obecnie większość komputerów ma procesory 64-bitowe i systemy też. Pomijam wynalazki na ARM czy telefony. Z tego co wiem gry powoli zaczynają wychodzić tylko na 64bit, osobiście znam tylko przypadek Far Cry 4.

5

ten uczuć, gdy dopiero niecałe pół roku temu przesiadłem się z 32bitowej maszyny
Biorąc pod uwagę, że Windows 10 też wyszedł w wersji 32bit i zdecydowana większość Linuxów nadal ma wersję 32bit, nie skreślałbym x86 tak szybko. Weź pod uwagę, że dość spora część "zwykłych Kowalskich" nie ma w zasadzie żadnej motywacji do zmiany komputera na nowszy - dopóki wszystkie programy działają i system nie muli za bardzo, nie ma problemu. Nadal znajduje się przecież całkiem sporo małych firemek pracujących na WinXP. Osoby regularnie wymieniające sprzęt to w większości gracze, developerzy czy inszej maści twórcy.

Owszem, w segmencie konsumenckim nawet najmocniejszy sprzęt 32bit będzie już pewnie znacząco odstawał od 64bitowego, dlatego też pytanie - co kompilujesz? Jeżeli jest to jakiś program wykonujący potężne obliczenia, to być może faktycznie wyrzucanie wersji 32bit, gdzie wiek procesora będzie dużym problemem, jest bezcelowe. Ale jeśli robisz jakiś program biurowy, czy prostą gierkę - myślę, że jednak warto wypuścić build 32bit. Zbiór potencjalnych odbiorców większy, a włożony wysiłek niemal żaden, bo tylko zmienić flagi w Makefile'u i zebrać 32bitowe dll/so.

2

Jeszcze wiele laptopów netbooków jest wyposażane w słabe procesory 1,7Ghz typu AMD E2 i 2GB RAM. Więc instalowanie 64 bitowej wersji systemu tylko zwiększa zapotrzebowanie na zasoby. Nawet jak by dodać 8GB RAM do takiego laptopa i dysk SSD to i tak procesor będzie ten 64 bitowy system hamował. Dlatego 32 bitowe aplikacje i system jak najbardziej nadal potrzebne.

2

Czy kompilacja na 32-bitową maszynę ma w dzisiejszych czasach jeszcze jakiś sens, szczególnie dużych programów czy też gier?

Czy kompilacja na 64-bitową maszynę ma w ogóle jakikolwiek sens, z wyjątkiem ogromnych programów czy gier?

Zwłaszcza jeśli mowa o Windows. Jeśli nie masz konkretnego powodu, by program był 64-bitowy (czyli jeśli 32 bity w zupełności wystarczą) to kompiluj na 32 bity.

Przecież nie piszesz Far Cry 4.

I piszę to z 4-letniego laptopa który był kupiony z 32-bitowym systemem. To nie jest stary komputer (nawet jeśli jest to słaby komputer). I jest na nim dzisiaj 32-bitowy Windows 10.

1
Azarien napisał(a):

Czy kompilacja na 64-bitową maszynę ma w ogóle jakikolwiek sens, z wyjątkiem ogromnych programów czy gier?

Zwłaszcza jeśli mowa o Windows. Jeśli nie masz konkretnego powodu, by program był 64-bitowy (czyli jeśli 32 bity w zupełności wystarczą) to kompiluj na 32 bity.
Jak dla mnie to w 95% przypadków kompilacja jako 64 bit nie ma sensu. Ja zawsze mówię, że jak się nie ma sensownego powodu do kompilacji jako 64 bit (np. duża ilość wymaganej pamięci na obliczenia) to należy kompilować jako 32 bit. Na razie dużo jest starszych maszyn 32 bitowych i w ten sposób ograniczamy sobie liczbę możliwych użytkowników.

3

Każdy 64 bitowy procesor x86 ma instrukcje SSE i SSE2. Kompilator więc może ich bezwarunkowo użyć. Kiedy kompilujesz na 32 bity trzeba to samemu poustawiać i oznacza to, że i tak ograniczysz wspierane procesory do Pentium 4 (ogólnie NetBurst), Athlona 64 i wyżej.

Przypominam, że jest 2016 rok.

Im szybciej wyeliminujemy x86_32, tym szybciej z x86_64 będzie można usunąć przestarzałe i nikomu niepotrzebne mechanizmy z poprzedniej epoki. Brak kompatybilności wstecznej do lat 80 = profit. Dzięki temu zamiast utrzymywać historyczne rozwiązania, można będzie się skupić na usprawnieniu obecnych i uproszczeniu konstrukcji.

0
Endrju napisał(a):

Każdy 64 bitowy procesor x86 ma instrukcje SSE i SSE2. Kompilator więc może ich bezwarunkowo użyć. Kiedy kompilujesz na 32 bity trzeba to samemu poustawiać

Nie trzeba nic ustawiać, Visual już od kilku wersji domyślnie generuje kod SSE2 także w 32 bitach.
Trzeba „ustawiać” żeby to wyłączyć.

Przypominam, że jest 2016 rok.

To nie powód żeby wyrzucać komputer z 2011.

2
Azarien napisał(a):

To nie powód żeby wyrzucać komputer z 2011.

Chyba raczej z 2004. W 2005 chyba już wszystkie nowe procki były 64 bitowe - w każdym razie mój komputer z 2005 był

1

Chyba raczej z 2004. W 2005 chyba już wszystkie nowe procki były 64 bitowe

Nie wszystkie.
Poza tym 64-bitowy procek nie oznacza że taki system jest zainstalowany, albo że to miałoby sens.
Jeszcze kilka lat temu sprzedawano nowe komputery z zainstalowaną 32-bitową wersją systemu - różnego rodzaju „netbooki”, małe laptopiki.
Niektóre z nich nawet nie miały 64-bitowego procka.¹

To są słabe komputery, ale nie zawsze stare. Rozumiem takie Far Cry 4, które i tak by nie poszło (mało pamięci, denna grafika z serii "graphics media decelerator"). Ale większość programów spokojnie na tym działa, zwłaszcza jeśli użytkownik jest w stanie znieść ślamazarność komputera. (nie każdemu zależy na super prędkości, niektórzy wolą kupić komputer za 500 zł zamiast 5000)

1
Azarien napisał(a):

Poza tym 64-bitowy procek nie oznacza że taki system jest zainstalowany, albo że to miałoby sens.
Jeszcze kilka lat temu sprzedawano nowe komputery z zainstalowaną 32-bitową wersją systemu - różnego rodzaju „netbooki”, małe laptopiki.
Niektóre z nich nawet nie miały 64-bitowego procka.¹
Sam mam takiego laptopa, 12 calowy Asus. Niestety pomimo, że ma procesor 64 bit, to i tak musiałem zainstalować system 32 bit, ponieważ brakowało sterowników i działał niestabilnie na systemie 64bit. Co prawda nie należy do demonów prędkości, bo nawet ma 2GB RAM'u. Ale w podróży bardzo fajnie się spisuje. A był kupiony jakieś 4 lata temu. Nie zamierzam go wymieniać tylko dlatego, żeby móc sobie zainstalować na nowym Windowsa 64 bitowego.

2

Co do systemu - zasada jest prosta: 4 giga lub więcej -> 64-bitowy, mniej niż 4 giga -> 32-bitowy.

Co prawda istnieją hacki na 32-bitowy Windows udostępniające powyżej 4 GB RAM, a z drugiej strony 64-bitowy zadowoli się i jednym gigabajtem, ale powyższe należy traktować jako „złotą zasadę”.
Dotyczy to też maszyn wirtualnych: jeśli stawiamy wirtualkę przydzielając jej 1 czy 2 giga, marnotrawstwem pamięci jest instalowanie w niej 64-bitowego systemu.

Co do programów: w 64-bitowym programie łatwiej zaalokować powyżej 2 gigabajtów pamięci. i właściwie tylko tyle. A teraz szczerze, jaki odsetek programów naprawdę tyle potrzebuje?
Nawet przeglądarki przy wielu otwartych kartach jakoś dają sobie radę zmieścić się do tych 1-2 gigabajtów w obrębie procesu.

Różnica prędkości (że 64 bity mają być rzekomo szybsze) to raczej mit. Fakt, 64-bitowa architektura teoretycznie powinna być szybsza w obliczeniach na 64-bitowych liczbach całkowitych. Czyli rzadko. Fakt, ma dwa razy więcej rejestrów procesora - ale ze względu na wielopoziomowy cache zapis do pamięci i zaraz odczyt jest praktycznie tak samo szybki jak dostęp do rejestru, więc różnica blednie. Fakt, ma 2× więcej rejestrów SSE (a w AVX512 ta różnica ma się powiększyć do 4×) - jaki to ma realny wpływ na wydajność nie wiem, ale znaczenie to ma tylko w grach i aplikacjach obliczeniowych...
Za to kod 64-bitowy jest znacznie większy. Raz że wszystkie wskaźniki są 8 bajtowe a nie 4, dwa że większość nowych instrukcji i odwołań do nowych rejestrów wymaga prefiksów - dodatkowych bajtów, bo x86-64 to tak naprawdę hack zbudowany na bazie zestawu instrukcji x86. To daje ze 20-30% większy kod dla równoważnego programu, większe ryzyko że kod nie zmieści się w cache procesora (a więc będzie działał wolniej), większe zużycie RAM-u, więcej zajętego miejsca na dysku.
Są więc plusy i minusy, które się w praktyce równoważą.

Zatem nie ma się co podniecać 64 bitami.

2

Oprócz netbooków i starszych komputerów są też nowe tablety, w których też nie ma sensu instalować 64-bitowego systemu, ale mimo wszystko nie jest to sprzęt do sapera, bo da się na tym odpalić także nowe gry i „duże” programy. Porzucanie 32 bitów tylko dlatego, że jest 2016 rok nie ma sensu.

1
Azarien napisał(a):

Co do programów: w 64-bitowym programie łatwiej zaalokować powyżej 2 gigabajtów pamięci. i właściwie tylko tyle. A teraz szczerze, jaki odsetek programów naprawdę tyle potrzebuje?
Szczerze to jeszcze chyba nie miałem użycia w swoim programie który piszę w pracy takiego użycia abym potrzebował 64 bitowej kompilacji. Największy wydruk jaki udało mi się uzyskać na podglądzie to było 2500 stron i program zajmował około 250MB pamięci, a takich wydruków raczej nikt przy zdrowych zmysłach nie zrobi.

Zatem nie ma się co podniecać 64 bitami.
Też jestem tego zdania. Mój znajomy próbował to porównywać do przejścia 16bit -> 32bit. Ale to po prostu chybione porównanie. Co prawda 64 bitowy Windows nie potrafi uruchamiać 16 bitowych programów. Zatem można podejrzewać, że dopiero jak wejdą 128 bitowe procesory, to na podobnej zasadzie nie będzie się dało uruchamiać 32 bitowych programów. Ale pÓÓÓÓki co ja się nie martwię i wszystko piszę jako 32bit.

1

Mój znajomy próbował to porównywać do przejścia 16bit -> 32bit. Ale to po prostu chybione porównanie

Zatem można podejrzewać, że dopiero jak wejdą 128 bitowe procesory, to na podobnej zasadzie nie będzie się dało uruchamiać 32 bitowych programów.

Jest to przejście tego samego rodzaju, ale skala jest zupełnie inna.

32 bity dają (prawie) 70 tysięcy razy większą przestrzeń adresową niż 16 bitów. Ale ponieważ w kodzie 16-bitowym używa się segmentacji, faktycznie to tylko 4 tysiące razy więcej pamięci możliwej do zaadresowania.

W przypadku procesora 286 o nietypowej 24-bitowej szynie adresowej oznacza to "tylko" 256 razy więcej (16 MB vs 4 GB)

Natomiast 64 bity dają 4 miliardy razy większą przestrzeń adresową niż 32. Dlatego nie spodziewaj się 128-bitowego peceta ani w najbliższej, ani w najdalszej przyszłości. W przybliżeniu - nigdy.

0
Azarien napisał(a):

Natomiast 64 bity dają 4 miliardy razy większą przestrzeń adresową niż 32. Dlatego nie spodziewaj się 128-bitowego peceta ani w najbliższej, ani w najdalszej przyszłości. W przybliżeniu - nigdy.
No i właśnie dlatego moim zdaniem porównanie jest chybione. Poza tym można powiedzieć, że 16 a 32 bit to całkiem dwa różne systemy (DOS vs Windows). Natomiast 32 a 64 to kwestia tak naprawdę kompilacji Windowsa. Na temat Linuxa nie wypowiem się, bo nie mam takiego doświadczenia.

1

@Azarien no no, z tym "nigdy" to bym uważał. Pierwsze komputery osobiste miały pojedyncze kB RAM a dziś można sobie kupić laptopa z 16GB, nie mówiąc o serwerach które potrafią mieć po kilka TB pamięci ;) 32 bitowych adresów IP też miało nigdy nie zabraknąć ;)

0
Mr.YaHooo napisał(a):

No i właśnie dlatego moim zdaniem porównanie jest chybione. Poza tym można powiedzieć, że 16 a 32 bit to całkiem dwa różne systemy (DOS vs Windows). Natomiast 32 a 64 to kwestia tak naprawdę kompilacji Windowsa.

Pierwsze Windowsy były 16-bitowe, a późniejsze hydrydowe - 16 i 32 bitowe.
A pod DOS-a też powstało sporo 32-bitowych programów (gier).

0
Azarien napisał(a):

Pierwsze Windowsy były 16-bitowe, a późniejsze hydrydowe - 16 i 32 bitowe.
A pod DOS-a też powstało sporo 32-bitowych programów (gier).
Faktycznie z tymi pierwszymi Windowsami. Jednak o do DOS'a to nie kojarzę czegoś takiego. Ponieważ wszystkie programy z jakimi mam do czynienia w pracy pisane pod DOS są 16 bitowe i głównie na tym opieram swoje wypowiedzi, więc mogę się mylić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1