Compiler’ımdaki instruction scheduling oturtamıyorum, dependency analizi mi eksik? Pipeline stall’ları geçmiyor

Ana sayfa › Forumlar › Teknik Destek & Arıza Teşhisi › Mavi Ekran (BSOD) & Minidump Analizi › Compiler’ımdaki instruction scheduling oturtamıyorum, dependency analizi mi eksik? Pipeline stall’ları geçmiyor

1 yazı görüntüleniyor (toplam 1)
  • Yazar
    Yazılar
  • #76675
    User AvatarTitan_x
    Katılımcı

    Arkadaşlar selamlar, birkaç haftadır kişisel bir mini compiler projesi üzerinde çalışıyorum, x86-64 için temel bir backend yazıyorum. Kod gen’ini çıkarana kadar her şey yolunda ama scheduling kısmında tılandım sanki.

    Amacım pipeline’daki stall’ları azaltmak, yani arithmetic instruction’ları mümkün olduğunca birbirinden uzaklaştırmak ki aradaki load/store latency’si gizlensin. Ancak elimdeki basit bir “greedy” scheduler maalesef bunu yapamıyor, bazen birbirine bağımlı iki op’u yan yana diziyor, pipeline bozuluyor.

    Kafama takılan: dependency analizi derinliğinde yapmıyorum sanırım. RAW/WAR/WAW ayrımını kuralları ezbere biliyorum ama bunları pratikte scheduling graph’ine nasıl döküyorum, critical path’ı nasıl buluyorum, bir de speculative execution / branch prediction durumlarında dependency nasıl değişiyor tam oturtamadım. Tecrübesi olan var mıdır? Nasıl bir veri yapısı/tarayış sırası izliyorsunuz?

    "Kasa: Fractal North Mesh"
    "Soğutucu: Thermalright Peerless Assassin 120 SE"
    "Fanlar: Noctua A12x25"
1 yazı görüntüleniyor (toplam 1)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.

Neyi merak ediyorsun?

En az 3 karakter yazın.

Keşfet