kategorie: ANSI C, C++
[#1] [C] Kompilacja w C, kilka pytań..
Cześć,
Pracuje nad pewną rzeczą, w tym momencie na Windowsie,
ale z myślą o przeportowaniu na Amigę, ale od razu mówię,
że celuję w nowsze karty z RTG typu Warp1260 czy V1200..

Mam kilka pytań, bo z C na Amidze tylko pobieżnie coś tam sobie patrzyłem,
a bardzo ważna będzie dla mnie optymalizacja i szybkie działanie,
wiem, ze najlepiej by było w ASM, ale nie znam,
przy czym dopuszczałbym potem ewentualnie wstawki asm w kodzie.

I mam kilka pytań, bo nie wszsytko ogarniam:

Pytanie 1.
Troche szukałem informacji i jesli chodzi o wybór kompilatora, to raczej
cross-compilery GCC 6.0.5.b od Bebbo (jak mi sie uda skonfigurować) albo GCC 10.1 od Bartmana/Abyss.
Czy orientujecie się jak jest u nich z optymalizacją kodu -O2, -O3, gdzieś czytałem
że od Bebbo jest dobra optymalizacja, a w tym drugim to nie bardzo..

Pytanie 2.
Jak wspomniałem docelowo będzie to na 060 i 080 (czyli defacto 060).
Czy na tych kompilatorach mogę skompilować pod 060 tak żeby faktycznie wykorzystane były
jego właściwości. Pod 020 to normalnie chyba z buta tam się kompiluje ale właśnie chodzi o to
żeby wykorzystać potencjał 060. A jeśli tak to jak to mniej więcej zrobić?

Pytanie 3.
Kompilator od Bartmana/Abyss nie ma standardowych bibliotek więc trzeba używać tych systemowych, spoko.
Ale jeśli używałbym od Bebbo (nie wiem czy on je ma) to czy mam używać tych standardowych C,
czy jednak systemowych. Bezie jakaś różnica w wydajności? No bo powiedzmy, że Bebbo mógł je zrobić optymalniejsze,
chyba że i jedno i drugie korzysta i tak z bibliotek systemowych więc to bez różnicy?

Pytanie 4.
Co zrobić jeśli chciałbym się wspomóc FPU? I jakby to wyglądało w jednym i w drugim kompilatorze,
jakie biblioteki zaimportować, żeby wykorzystać jakieś szybsze funkcje np. sqrt itp.

Z góry dzięki, chyba ze jeszcze coś przypomni..

Ostatnia aktualizacja: 16.01.2021 15:52:54 przez mateusz_s
[wyróżniony] [#2] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #1

GCC wykorzysta mozliwoscie 060, nawet chyba SASC z updatem wykorzystywal 060, FPU także, oblookaj -mtune -mcpu. Co do roznych dziwnych rzeczy to zawsze moznesz sprawdzac czy są jakies wersje builtin gcc, poza tym optymalizatory gcc powinny podmieniac standardowe wywolania z libc na jakiestam swoje szybsze wersje.

Poczytaj:
https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

Ostatnia aktualizacja: 16.01.2021 16:35:30 przez michal_zukowski
[wyróżniony] [#3] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #1

Nie wiem, czy ci coś to da, ale kilka dni temu znalazłem coś takiego: link W tym napisano Tiny Bobble.

Był jakiś czas temu wątek na PPA, w którym poruszono temat FPU, możesz liczyć używając funkcji bibliotecznych (powolne, ale działa na wszystkim) lub ich nie używać, ale sprawić, by kompilator wplótł instrukcje FPU w kod, najszybsze, ale trzeba sprawdzać na poczatku, czy jest w systemie FPU na który skompilowałeś kod, inaczej będzie guru i przeważnie reset.
[wyróżniony] [#4] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #1

Ale jeśli używałbym od Bebbo (nie wiem czy on je ma) to czy mam używać tych standardowych C, czy jednak systemowych. Bezie jakaś różnica w wydajności? No bo powiedzmy, że Bebbo mógł je zrobić optymalniejsze, chyba że i jedno i drugie korzysta i tak z bibliotek systemowych więc to bez różnicy?
Wszystko zależy od tego jakie to są funkcje, jak często używane i czy zależy Ci na przenośności kodu na inne systemy operacyjne.

Funkcje wejścia/wyjścia oraz przydziału pamięci z biblioteki standardowej C i tak pod spodem korzystają z API AmigaOS. Więc jeżeli argument przenośności kodu nie jest ważny, to lepiej korzystać bezpośrednio z API.

Natomiast funkcje do operacji na stringach (typu strlen(), strcpy() i tak dalej) nie mają swoich odpowiedników w API systemu, więc w razie braku biblioteki systemowej trzeba je sobie napisać.
[wyróżniony] [#5] Re: [C] Kompilacja w C, kilka pytań..

@WyciorX, post #3

no to jest ten kompilator gcc 10 od Bartmana/Abyss - sam dodawałem wątek o tym na PPA :)
tu nie ma (póki co) standardowych bibliotek, wiec o to tez pytałem
[wyróżniony] [#6] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #5

Tam chyba trzeba podać ścieżkę do swojego "targetu" jak w przypadku reszty kompilatorów,a to powinno znajdować się na "Amiga Developers CD 2.1", możesz sprawdzić, czy będą działać targety z Aminetu dla VBCC, wpisz tam w wyszukiwarce "vbcc target".
[#7] Re: [C] Kompilacja w C, kilka pytań..

@WyciorX, post #6

Spróbowałem pobrać i zainstalować wersję Bebbo z gcc 6.5.0b -
jest zrobiona fajna instalka pod Windows i działa od razu z buta - w lini poleceń z przykładem:
https://franke.ms/download/setup-amiga-gcc.exe

A w tym opisie, Bebo podaje krok po kroku jak skonfigurować Eclipse na Windows:
https://franke.ms/amiga/gdb-eclipse.wiki

A tu oficjalny i duży wątek na EAB:
https://eab.abime.net/showthread.php?t=85474

Ale to pewnie wszyscy już znają te linki, ale tak wklejam na wszelki wypadek jakby ktoś szukał.
Też to wcześniej widziałem, ale dopiero teraz wypróbowałem.

Pewnie pod VS albo VisualCode też jakoś by się zrobiło, ale na razie tak tylko na szybko patrzę.
Chyba jednak zostanę przy tej wersji na razie niż Abyss/Bartmana..

Ale od razu mam pytanko :)

1. w przykładzie jest dane:
m68k-amigaos-gcc hello.c -o hello -Os -noixemul
czym ten kompilator się różni od m68k-amigaos-gcc-6.5.0b
nie wspominając że jest ich tam od groma, czy jest to gdzies opisane co one robią?


Ostatnia aktualizacja: 17.01.2021 05:03:25 przez mateusz_s

Ostatnia aktualizacja: 17.01.2021 05:03:36 przez mateusz_s
[wyróżniony] [#8] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #7

uruchom z --verbose
[wyróżniony] [#9] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #7


m68k-amigaos-gcc hello.c -o hello -Os -noixemul
czym ten kompilator się różni od m68k-amigaos-gcc-6.5.0b


To jest jedno i to samo. GCC ma tego typu aliasy na wypadek gdybyś miał parę kompilatorów w różnej wersji na ten sam target - m68k-amigaos-gcc jest wtedy wersją domyślną (najszybciej znajdowaną w PATH) a zawsze możesz wymusić wersję jaką chcesz dopisując ją do nazwy kompilatora.

Co do optymalizacji - Bartman działa na bazie GCC10 bo rzekomo jakość kodu z innych kompilatorów go nie zachwyciła. Z kolei na online'owej porównywarce możesz zobaczyć że kompilator od Bebbo często robi lepszy kod niż goły GCC10, bo w 6.5.0b są dodane jego autorskie optymalizatory. Sprawa nie jest oczywista i najlepszym rozwiązaniem jest pisanie kodu tak by działało na obu rozwiązaniach - dopisz funkcjonalność w rodzaju timedemo, zbuduj na obu, zobacz gdzie masz lepszy wynik.

na obu kompilatorach możesz podać -m68060 żeby wymusić generację kodu pod rozkazy specyficzne dla 060. U Bebbo też na pewno możesz podać -msoft-float i -mhard-float, u Bartmana być może też ale musisz to sprawdzić.

Ostatnia aktualizacja: 17.01.2021 12:35:08 przez teh_KaiN
[#10] Re: [C] Kompilacja w C, kilka pytań..

@teh_KaiN, post #9

super, dzięki :)

właśnie sprawdziłem z -verbose i faktycznie nie było różnicy,
była tam też informacja o cpu: domyślnie jest 68000,

fajnie, robi się jaśniej.. sporo tych opcji jest, przydała by się jakaś lista
[#11] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #7

Udało Ci się skonfigurować Eclipse do pracy wg tutorialu? Ja wszystko mam na czerwono
[#12] Re: [C] Kompilacja w C, kilka pytań..

@arturB, post #11

nie robiłem nic jeszcze, tak tylko patrzyłem żeby zobaczyć co i jak,
skompilowałem tylko coś z linii poleceń i było ok wszytko..
dopiero za jakiś czas będę sobie próbował przeportować projekt
i dopiero wtedy zaczne robić jakiś toolchain

a jakiego Eclipse scignałeś? tego z linka czy najnowszego? Najnowszego zainstaluj.

Tu jest cały oficjalny wątek, moze znajdziesz tam rozwiazanie, albo zapytaj:
https://eab.abime.net/showthread.php?t=85474

zanim zacznę zabawę sam go bede musiał przejrzeć na wszelki wypadek..
[wyróżniony] [#13] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #12

Najnowszego. Ale już działa. Trochę inaczej to w nim wygląda i Stefan użył kilku skrótów myślowych co takiego nooba jak ja skutecznie rozwalilo - no ale już zaczęło fajnie działać. OK
[#14] Re: [C] Kompilacja w C, kilka pytań..

@arturB, post #13

i jak wrażenia? Dawno temu używałem Eclipsa jak sobie jakaś gierkę pisałem jeszcze w javie na starsze komórki..
ale nawet miło wspominam.. a używsz tego jakiegoś ami-bds tego servera jego? Co to daje?
Ja ogólnie mam taki sposób na razie, że jak kompiluje to exec trafia mi od razu
do katalogu w DH1: i winuae mam caly czas odpalony i po kompilacji po prostu odpalam ponownie
ten sam program bo nazwa sie nie zmienia.. wiec jest to dość szybkie i zastanawiam się co daje ten jego server

Ostatnia aktualizacja: 18.01.2021 00:29:52 przez mateusz_s
[#15] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #14

Robie to dokladnie tak samo jak Ty. Narazie moje programy moge recytowac z pamięci, wiec debug niezbyt mi sie póki co przydaje. Za pare dni pewnie skonfiguruję i to.
[#16] Re: [C] Kompilacja w C, kilka pytań..

@teh_KaiN, post #9

Sprawdziłem sobie to GCC 6.5 i generuje binarkę ponad 110kB, gdzie w VBCC ta sama binarka ma 36kB, czy to tak musi być, czy zależy od parametrów kompilatora, w VBCC musze np. dodawać -Lamiga i -Lauto przy linkowaniu, w tym GCC nie muszę.
[#17] Re: [C] Kompilacja w C, kilka pytań..

@WyciorX, post #16

tzn. wielkość kodu akurat by mnie nie interesowała, ważna by była dla mnie szybkość działa aplikacji i optymalizacja.. może kompilator porobił "inline-y" przez co zwiększył wielkość.. ja tam daje inline do każdej funkcji :)
[#18] Re: [C] Kompilacja w C, kilka pytań..

@mateusz_s, post #17

inline działa w obrębie jednego pliku, chyba że wrzucisz funkcję do .h, a i tak jest w większości ignorowane przez kompilator. Jak chcesz wymusić inlinowanie to zainteresuj się atrybutem always-inline. Lepiej jednak mu podawać atrybuty hot- i coldspotów, włączyć LTO , -O3 i dać mu zrobić swoje.

Redukcję rozmiaru można uzyskać stripując symbole debugowania i włączając small code i/lub small data model, o ile rozmiar aplikacji na to pozwala.
[#19] Re: [C] Kompilacja w C, kilka pytań..

@teh_KaiN, post #18

Redukcję rozmiaru można uzyskać stripując symbole debugowania i włączając small code i/lub small data model, o ile rozmiar aplikacji na to pozwala.


Jakich flag do tego używać przy gcc 6.5?
[#20] Re: [C] Kompilacja w C, kilka pytań..

@WyciorX, post #19

Stripowanie wg gugla to -s. Parę kilo to zżera.

Small data to -fbaserel - sprawdziłem przed chwilą na 6.5 i działa. -msmall-code również działa.
[#21] Re: [C] Kompilacja w C, kilka pytań..

@teh_KaiN, post #20

Dzięki, faktycznie rozmiar uległ zmianie z 110kb do 98kB, jednak to dalej 3 razy więcej niż VBCC. wydaje mi się, że GCC z AmiDevCPP generowało mi mniejszą binarkę niż VBCC, ale z parametrem -noixemul nie mógł znaleść jakiejś referencji do funkcji, z której korzysta printf() i nie mogłem sobie z tym poradzić.

Używałeś GCC 6.5 i 10 w jakichś swoich projektach? VBCC wydaje się lepsze do małych narzędzi, ale zapewne te GCC będą szybsze w przypadku gier pomimo większego rozmiaru.
[#22] Re: [C] Kompilacja w C, kilka pytań..

@teh_KaiN, post #20

widzę, że czekać mnie będzie zabawa z testowaniem tysiąca flag i porównywania wydajności :)
póki co, dłube jeszcze pod Win, aż dojdę to konkretnego momentu, a potem się przesiądę..
[#23] Re: [C] Kompilacja w C, kilka pytań..

@WyciorX, post #21

Wszystkie moje gry buduję na GCC6.5, a teraz i na GCC10 żeby mieć dostęp do debugera. VBCC używałem ale zrezygnowałem - w pewnym momencie zaczął mi generować niedziałający i crashujący kod, więc go odpuściłem. U Bebbo też tak raz miałem na początku jego istnienia - wszystko przez to że wprowadził on swoje optymalizatory, które na początku nie były stabilne. W takich wypadkach można je wyłączyć selektrywnie lub wszystkie naraz podając -fbbb=-. Najnowsze wersje nie sprawiają mi żadnych przygód - GCC10 co prawda czasami malinuje i np. funkcje do rejestracji CIA nie działają bo brakuje im poprawnych implementacji wywołań, ale jak się jest upartym to można takie rzeczy obejść.

Exe jest znacznie mniejsze jak korzysta się tylko z fukcji OSa a nie z biblioteki standardowej - bo mimo że to ostatnie to jest głównie zbiór wrapperów na OS, to swoje to waży. Mimo to wolę std, bo jest mi tak wygodniej do pisania niekrytycznego wydajnościowo/rozmiarowo kodu. Jest jeszcze w GCC6.5 opcja budowania z ixemul - wtedy większość std leży w ixemul.library, ale musisz od użytkowników wymagać żeby mieli tę bibliotekę.
1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem