• サぺルOPM
    link
    fedilink
    Polski
    arrow-up
    1
    ·
    1 month ago

    To jest ciekawe wielowymiarowo. Jest tu tyle tajemnic do rozwiązania.

    • callq jest jakaś formą obsługi generycznego kodu?
    • jeszcze się okaże, że wasm z instrukcjami wektorowymi jest wydajniejszy
    • Wydaje mi się, że małe pętle z pobieraniem dużej ilości danych z pamięci są słabe. Trzeba czymś zagospodarować 200 taktów w oczekiwaniu na dane które nie zdążyły przyjść do cache
    • Odnoszę wrażenie, że twórcy krzemu nie lubili SSE. Pewnie chcieliby założyć na to jakąś abstrakcję. Coś jak w Cray.
    • naur
      link
      fedilink
      Polski
      arrow-up
      1
      ·
      1 month ago

      Rozkaz callq to zwykłe wywołanie funkcji. W GNUjowej składni asemblera sufiks ‘q’ oznacza 64-bitowy argument.

      Odnośnie czekania na dane z pamięci - taki był w sumie mój cel. Chciałem sprawdzić, czy osiągnę tą instrukcją teoretyczną przepustowość kontrolera pamięci. Nie udało się.

      • サぺルOPM
        link
        fedilink
        Polski
        arrow-up
        1
        ·
        1 month ago

        Wiem, tylko myślałem, że podmieniają adres funkcji w zależności od obsługiwanych instrukcji. Skoro to znika po wymuszeniu obsługi tych instrukcji.

        • naur
          link
          fedilink
          arrow-up
          1
          ·
          1 month ago

          W tym przypadku podmiana dzieje się podczas kompilacji. Po przekazaniu flagi do kompilatora rozkaz SSE jest inline’owany w miejscu wywołania i call znika całkowicie.

          Nawiasem mówiąc, istnieje taka sztuczka optymalizacyjna do podmiany w runtime funkcji na wersję specjalizowaną pod konkretny procesor.
          Wywołania funkcji są robione poprzez wskaźnik, który początkowo wskazuje na kawałek kodu który wykrywa procesor i patchuje ten wskaźnik (żeby kolejne wywołania były szybsze).
          Tak samo działa też lazy binding funkcji importowanych z ELFowych bibliotek dynamicznych.

          • サぺルOPM
            link
            fedilink
            Polski
            arrow-up
            1
            ·
            1 month ago

            Tylko automatyczne generowanie takich fragmentów jak widać się nie sprawdza. Lepsze wydaje się oznaczanie jaki fragment algorytmu wygenerować w różnych wersjach.