Znaleziono 3 wyniki

autor: atom1477
15 gru 2022, 08:52
Forum: Na luzie
Temat: Programowanie w C
Odpowiedzi: 54
Odsłony: 2335

Re: Programowanie w C

drzasiek90 pisze:
15 gru 2022, 07:05
atom1477 pisze:
14 gru 2022, 21:24
A poza tym to nie ma nic dziwnego w tym że kod napisany przez człowieka jest lepszy od tego z kompilatora.
No właśnie jest.
W większości przypadków kompilator z języka C zrobi lepszy assembler niż większość całkiem niezłych programistów.
Nie jest. Pod pojęciem "człowieka: miałem na myśli odpowiedniego człowieka. Nie ma co porównywać do całości ludzkości, ani nawet do tych lepszych programistów.
Porównujmy to samo z tym samym. Czyli kompilator używający assemblera, do programisty piszącego w assemblerze. Nawet najlepsi programiści, ale nie piszący w assemblerze, nie są odpowiedni do tego porównania.

Przecież kompilator został napisany przez człowieka.
Skąd inaczej by wiedział że w AVR nie ma instrukcji ADDI, i że zamiennie należy używać SUBI?
Albo że JMP jest szybsze od LJMP (choć ma inne ograniczenia)? To człowiek musiał to wcześniej wiedzieć. Czyli to człowiek jako pierwszy wiedział jak napisać optymalny kod.
drzasiek90 pisze:
15 gru 2022, 07:05
Nie wiem czy jest sens paprać się w pisanie całych procedur w asm, bo pisząc je w C wyjdzie na to samo lub nawet lepiej.
Ale ja nie pisałem ogólnie, tylko napisałem że ciągle się w pewnych zastosowaniach pisze w assemblerze.
To o tych zastosowaniach mowa, a nie o wszystkich jakie są.
drzasiek90 pisze:
15 gru 2022, 07:05
Używanie assemblera sprawia, że twój kod staje się "mało przenośny" a tak naprawdę nic nie zyskujesz.
Oczywiście że zyskujesz: wydajność.
Kod ma być nieprzenośny.
Jak niby kod ma być przenośny z AARch64 z NEONEM na rdzenie CUDA, i jednocześnie maksymalnie wydajny na obu?
Ja o chlebie Ty o niebie.
Nie pisałem o całości kodu w assemblerze. Ani o jakimś zwyczajnym kodzie.
Mówiłem konkretnie o bibliotekach DSP (które potem się wywołuje już z wysokopoziomowego kodu).
Nawet istnieją dodatki do C pozwalające wymuszać konkretne instrukcje assemblera żeby użyć tego NEONa.
Czyli de facto piszesz w assemblerze, obudowując to mnóstwem naddatków.
Kompilator bez tych naddatków, nie skompiluje optymalnie kodu C pod NEONa. Przenośność będzie, ale optymalności nie.
A gdyby nawet istniał kompilator który to skompiluje wydajnie, to niespodzianka: używałby nieprzenośnych bibliotek do różnych procesorów. Innej dla jednego innej dla drugiego. Ty z zewnątrz byś tego nie wdział. Bo ten sam kod w C by Ci kompilował do dwóch procesorów, i w obu przypadkach optymalnie.
No ale ktoś wcześniej musiał by ten kompilator i biblioteki napisać. I nie był by to jakiś inny wcześniejszy optymalny kompilator :D
grg12 pisze:
15 gru 2022, 08:41
Tak więc jestem w obozie "wstawki asm tam gdzie to absolutnie konieczne"
A czy ja jestem w innej?
autor: atom1477
14 gru 2022, 21:24
Forum: Na luzie
Temat: Programowanie w C
Odpowiedzi: 54
Odsłony: 2335

Re: Programowanie w C

drzasiek90 pisze:
14 gru 2022, 18:27
Aż taki dobry jesteś, że napiszesz lepszy assembler niż zrobi to kompilator z języka C? :)
Tak :D
W przypadku jaki podałem.

A poza tym to nie ma nic dziwnego w tym że kod napisany przez człowieka jest lepszy od tego z kompilatora.
Niekoniecznie mój, bo nie ja pisałem powszechnie używane kompilatory, ale na pewno kod pewnych ludzi jest lepszy od kodów z kompilatora. Bo to oni pisali te kompilatory :D Musieli więc najpierw samemu rozkminić jak efektywnie poukładać instrukcje (i jakich użyć). Kompilator później tylko korzysta z tej wiedzy. Sam jej nie wymyślił. Sam nie jest więc mądrzejszy i bardziej efektywny od człowieka jaki ten kompilator napisał.
Obecnie AI może trochę zmienia, ale jeszcze nie zmieniło na tyle żeby mieć przewagę nad człowiekiem (ma co najwyżej w czasie wykonywania zadań).
autor: atom1477
14 gru 2022, 17:28
Forum: Na luzie
Temat: Programowanie w C
Odpowiedzi: 54
Odsłony: 2335

Re: Programowanie w C

Dorzucę do pieca.
Pisze się nawet w assemblerze. I to nie z kaprysu. Ale po prostu się pisze.
Sam miałem okazję pisać kody biblioteki DSP do procesora z architekturą AArch64.
Jakieś były dostępne, ale bez tych funkcji jakie potrzebowaliśmy. Albo jak już były, to nie używały wszystkich możliwości procesora (NEONa).
Można było oczywiście nie pisać tylko użyć gotowej ... którą ktoś też napisał w assemblerze (ale z wadami jak wyżej: mała wydajność).
Można było napisać w C albo i w C#, ale znów: mała wydajność.
Można też napisać lepszy kompilator który nawet dla kodu w C# da wydajny kod.
No ale jak napisać kompilator? : Trzeba znać assembler (samego kompilatora się nie pisze w assemblerze, ale trzeba znać assembler żeby wiedzieć jakie rozkazy ma ten kompilator ma wstawiać do kodu wynikowego).
Wszystko to można negować, albo mówić że to są zaawansowane rzeczy dla wąskiej grupy specjalistów.
No ale mam pytanie: Skąd za 20 lat weźmiemy tą wąską grupę specjalistów, jak dzisiaj ci specjaliści (będący jeszcze początkującymi) nie będą pisać w assemblerze albo w innych językach niskiego poziomu?

Wróć do „Programowanie w C”