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.drzasiek90 pisze: ↑15 gru 2022, 07:05No 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.
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.
Ale ja nie pisałem ogólnie, tylko napisałem że ciągle się w pewnych zastosowaniach pisze w assemblerze.drzasiek90 pisze: ↑15 gru 2022, 07:05Nie 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.
To o tych zastosowaniach mowa, a nie o wszystkich jakie są.
Oczywiście że zyskujesz: wydajność.drzasiek90 pisze: ↑15 gru 2022, 07:05Używanie assemblera sprawia, że twój kod staje się "mało przenośny" a tak naprawdę nic nie zyskujesz.
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

A czy ja jestem w innej?