O usłudze
PrzetłumaczoneJestem programistą niskopoziomowym, który pracuje blisko sprzętu. Od ponad dziesięciu lat piszę i ręcznie optymalizuję assembler dla x86 i ARM, wyciskając wydajność tam, gdzie każdy cykl zegara i każda linia pamięci podręcznej ma znaczenie. Kiedy gorąca pętla spowalnia cały produkt, rozkładam ją na poziomie instrukcji, dokładnie rozumiem, jak procesor ją wykonuje, i przepisuję ją tak, aby potok nie utknął, gałęzie były dobrze przewidywane, a dostęp do pamięci był przyjazny dla pamięci podręcznej. To nie jest typowy rozwój aplikacji: czytam zdemontowany kod tak swobodnie, jak inni czytają źródła, i rozważam rejestry, linie SIMD, wyrównanie i mikroarchitekturę, a nie frameworki.
Moja codzienna praca polega na ręcznej optymalizacji sekcji krytycznych dla wydajności, starannym profilowaniu i uczciwych pomiarach przed i po, aby zysk był widoczny w liczbach, a nie tylko w słowach. Debuguję na poziomie instrukcji, gdy awaria lub subtelny błąd objawia się tylko w zoptymalizowanej wersji, i przeprowadzam legalną inżynierię wsteczną: przywracam utraconą dokumentację, rozumiem niedokumentowane zachowanie własnego komponentu lub utrzymuję oprogramowanie, którego binarna wersja odbiega od źródeł. Piszę czysty, skomentowany assembler, który może przeczytać również zwykły inżynier, i zawsze trzymam pod ręką przenośną wersję referencyjną, aby kod pozostał łatwy do utrzymania.
Pokaż mi, gdzie boli: kodek, rdzeń matematyczny, parser, wewnętrzna pętla fizyki, procedura oprogramowania układowego. Zmierzę, znajdę prawdziwe wąskie gardło zamiast zgadywać i dostarczę zoptymalizowaną, przetestowaną wersję z liczbami, aby to udowodnić.
— Assembler x86 i ARM, ręcznie napisany i zoptymalizowany
— Wektoryzacja SIMD: SSE, AVX i NEON
— Profilowanie, benchmarki i analiza gorących miejsc
— Debugowanie zoptymalizowanych wersji na poziomie instrukcji
— Inżynieria wsteczna i demontaż dla utrzymania
— Tuning pamięci podręcznej, wyrównania i przewidywania gałęzi
Moja codzienna praca polega na ręcznej optymalizacji sekcji krytycznych dla wydajności, starannym profilowaniu i uczciwych pomiarach przed i po, aby zysk był widoczny w liczbach, a nie tylko w słowach. Debuguję na poziomie instrukcji, gdy awaria lub subtelny błąd objawia się tylko w zoptymalizowanej wersji, i przeprowadzam legalną inżynierię wsteczną: przywracam utraconą dokumentację, rozumiem niedokumentowane zachowanie własnego komponentu lub utrzymuję oprogramowanie, którego binarna wersja odbiega od źródeł. Piszę czysty, skomentowany assembler, który może przeczytać również zwykły inżynier, i zawsze trzymam pod ręką przenośną wersję referencyjną, aby kod pozostał łatwy do utrzymania.
Pokaż mi, gdzie boli: kodek, rdzeń matematyczny, parser, wewnętrzna pętla fizyki, procedura oprogramowania układowego. Zmierzę, znajdę prawdziwe wąskie gardło zamiast zgadywać i dostarczę zoptymalizowaną, przetestowaną wersję z liczbami, aby to udowodnić.
— Assembler x86 i ARM, ręcznie napisany i zoptymalizowany
— Wektoryzacja SIMD: SSE, AVX i NEON
— Profilowanie, benchmarki i analiza gorących miejsc
— Debugowanie zoptymalizowanych wersji na poziomie instrukcji
— Inżynieria wsteczna i demontaż dla utrzymania
— Tuning pamięci podręcznej, wyrównania i przewidywania gałęzi