gold, czyli lepsze ld

Jaki jest najmniej dostrzegany element w systemach FLOSS? Środowiska graficzne, pakiety biurowe, przeglądarki, a nawet jądra, kompilatory i biblioteki mają tutaj swoich fanów i przeciwników. Ale nikt nie zwraca uwagi na konsolidatora (nazywanego powszechnie linkerem).

Tymczasem Ian Lance Taylor wziął się za pisanie własnego linkera. Do pracy wziął się porządnie. Najpierw opublikował na swoim blogu serię 20 wpisów na temat budowy i działania konsolidatorów, a następnie opublikował kod “gold”.

Nowy linker ma swoje ograniczenia — działa tylko na architekturach x86 oraz x86_64 i produkuje binarki wyłączne w formacie ELF, jednak są to bardzo typowe platformy, a gold notuje 5-krotny wzrost prędkości w stosunku do ld! Kod trafił już do binutils jako alternatywa dla ld. Taylor myśli o portowaniu swojego linkera na dalsze architektury (ale będzie obsługiwać tylko format ELF) oraz o przyspieszeniu go przez odejście od pojedynczego, liniowego przebiegu konsolidacji. Warto wspomnieć, że istnieje też podobna inicjatywa dotycząca przyrostowej kompilacji pod GCC.

Na orbicie wokół GCC krążą też dwa inne interesujące narzędzia. Pierwszy to quagmire, którego celem jest eliminacja aplikacji pomocniczych w rodzaju autotools czy m4 i wykorzystywanie w ich miejsce wyłącznie GNU make.

Drugi (którego opiekunem jest Anthony Green) nosi nazwę ggx. W tym eksperymencie chodzi o kompilację na wirtualną architekturę sprzętową, inspirowaną możliwościami kompilatora, czyli odwrotnie niż robi się to zazwyczaj. Ggx nie jest zbyt zaawansowane w implementacji, ale przechodzi już spore fragmenty testów GCC i potrafi wydusić z siebie standardowe “hello world”.

żadnych reklam, sama wiedza.

Zarejestruj się na BEZPŁATNY NEWSLETTER i raz w tygodniu otrzymuj najważniejsze wiadmości
ze świata IT, nowych technologii i kryptowalut.

Bez reklam.

  1. Awatar Deathplanter
    Deathplanter

    Hm, w porządku, przyspieszyli konsolidację. A co z optymalizacją plików wyjściowych? TCC właśnie tutaj się wykładał…

    1. Awatar pdemb
      pdemb

      TCC można by przerobić tak, żeby kompilował kod do postaci kodu LLVM. Wówczas optymalizacja byłaby out-of-the-box.

  2. Awatar uzytkownik
    uzytkownik

    A gold nie miał być zastępnikiem libtool?
    Przynajmniej tak czytałem (wydaje mi się, że m. innymi na ich stronie)…

    1. Awatar uzytkownik
      uzytkownik

      Przepraszam – to jednak linker

    2. Awatar Tomasz Torcz
      Tomasz Torcz

      Zastępnikiem libtoola jest dolt.

      1. Awatar kocio
        kocio

        Tak dla ciekawskich:

        http://dolt.freedesktop.org/ http://lists.debian.org/debian-devel/2008/04/msg0…

  3. Awatar pdemb
    pdemb

    Ten linker wykorzystuje współbieżność, część uzyskanego przyspieszenia wynika z pełnego wykorzystania możliwości mikroprocesorów wielordzeniowych.

  4. Awatar matiit
    matiit

    To na jednordzeniowcu przyrostu prędkości nie będzie?

    1. Awatar uzytkownik
      uzytkownik

      Chyba będzie – część danych będzie czytana z cacha etc. a część z dysku (można obrabiać tą cześć z cacha, gdy jeszcze dysk 'mieli').

  5. Awatar vip
    vip

    Bardzo dobra idea, tzn. poprawić (przepisać, rozważyć), a nie liczyć wciąż na to, że "przecież można kupić szybszego procka".
    Oby weszło do powszechnego użytku.

    1. Awatar niedzwiedz_2
      niedzwiedz_2

      Dokladnie! Coraz częściej deweloperz o tym zapominają 🙁

      1. Awatar http://stilgar.openi
        http://stilgar.openi

        programisci wcale o tym nie zapominaja, tylko kieruja sie bardzo dobra zasada – "Najpierw niech zadziala, a potem sie zoptymalizuje"

        Mysle, ze wiekszosc uzytkownikow tez woli, jak szybko dostanie wersje, ktora dziala, aczkolwiek powoli, za potem dostanie poprawke, ktora wszystko przyspieszy, niz jak beda musieli czekac wieki na dzialajaca, w pelni optymalna wersje…

        1. Awatar kocio
          kocio

          Sęk w tym, że optymalizacje nie zawsze nadchodzą. Chlubnym wyjątkiem jest Firefox, który jeszcze od czasu gdy był pakiet Mozilli działa coraz sprawniej, choć był czas, że ja też na Mozilli położyłem krzyżyk właśnie dlatego, że wydajność była żadna.

        2. Awatar http://stilgar.openi
          http://stilgar.openi

          skoro programiscie nie chce sie zoptymalizowac juz dzialajacego programu, to trudno zeby mu sie chcialo zoptymalizowac niedzialajacy…

        3. Awatar vip
          vip

          Podążając, czemu miałoby mu się chcieć od razu pisać optymalnie?

        4. Awatar vip
          vip

          czemu _nie_ miałoby mu się

        5. Awatar arturz
          arturz

          Bo to jest tzw. przedwczesna optymalizacja. Oczywiście trzeba zwracać na optymalizację też uwagę ale nie skupiać się na niej. W większości wypadków jest tak że większa część kodu nie będzie wymagała w ogóle optymalizacja, a zoptymalizowanie części które tego wymagają zajmie krócej aniżeli głowienie się nad tym podczas pisania.

          Tak na marginesie i trochę OT:
          Nie rozumiem tylko jednego – mody na ganienie programistów za to że coś zużywa dużo pamięci, że wolno chodzi, że w Javie, że w Pythonie, że nie w assemblerze a już w najgorszym wypadku nie w C. Programiści nie mają nieskończonego czasu na pisanie kodu a to w czym piszą to jest tylko i wyłącznie ich wybór.

        6. Awatar jarek
          jarek

          > Mysle, ze wiekszosc uzytkownikow tez woli, jak szybko
          > dostanie wersje, ktora dziala, aczkolwiek powoli, za potem
          > dostanie poprawke, ktora wszystko przyspieszy, niz jak beda
          > musieli czekac wieki na dzialajaca, w pelni optymalna wersje…

          Patrz powstanie linuxa vs hurda.

        7. Awatar http://stilgar.openi
          http://stilgar.openi

          @vip:
          bo optymalizacja wszystkiego jest bez sensu – optymalny kod pisze sie duzo wolniej niz kod ktory po prostu dziala. Programista moze spedzic caly dzien wymyslajac, jak zrobic optymalnie fragment, ktory przyspieszy dzialanie programu o milisekunde, a uzytkownik tego nawet nie zauwazy…

          Znacznie lepiej jest napisac program, ktory dziala, a potem korzystajac z odpowiednich narzedzi, znalezc waskie gardlo, czyli miejsce w ktorym program spedza najwiecej czasu i je optymalizowac

          Czasem wrecz lepiej jest napisac kod nieoptymalny, jesli dziala on nieznacznie wolniej, ale za to dzieki temu kod jest znacznie bardziej przejrzysty i czytelny dla programisty – miedzy innymi dlatego wiekszosc programistow wybiera jezyki obiektowe, a nie asemblera 😉

  6. Awatar anarchokapitalista
    anarchokapitalista

    Dobre dla developerów. Ja żadko coś kompiluję.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *