TJIT, (tracing just-in-time compilation veya "izlenen JİT derlemesi") bir programın çalışma zamanında yürütülmesinin program optimizasyonunu yapmak için sanal makineler tarafından kullanılan bir tekniktir. Bu, sık yürütülen işlemlerin doğrusal bir sırasını kaydetmek, bunları yerel makine dili koduna derlemek ve yürütmek suretiyle yapılır. Bu yöntem bazında çalışan geleneksel just-in-time (JIT) derleyicilere karşıdır.
Genel bakış
Just-in-time derleme, bir programın parçalarını çalışma zamanında makine koduna derleyerek programların yürütme hızını artırmak için kullanılan bir tekniktir. Farklı JIT derleyicileri kategorize etmenin bir yolu derleme kapsamı gereğidir. Yöntem tabanlı JIT derleyicileri bir seferde tek bir yöntemi çevirmeyle makine koduna çevirirken, JIT'leri izleme sıklıkla yürütülen döngüleri derleme birimi olarak kullanır. İzleme JIT'leri, programların zamanlarının çoğunu programın bazı döngülerinde ("sıcak döngüler") geçirdiği () ve sonraki döngü yinelemelerinin benzer yolları genellikle kullandığı varsayımlarına dayanır. JIT izleme özelliğine sahip sanal makineler çoğunlukla karma mod yürütme ortamlarıdır, yani izleme JIT'ine ek olarak bir yorumlayıcıya veya yöntem derleyicisine sahip oldukları anlamına gelir.
Teknik detaylar
Bir izleme JIT derleyicisi, çalışma zamanında çeşitli aşamalardan geçmektedir. İlk olarak, döngüler için profil bilgileri toplanır. Sıcak bir döngü tanımlandıktan sonra, o döngünün yürütülen tüm işlemleri kaydeden özel bir izleme modu girilir. Bu işlem dizisine bir iz denir. İz daha sonra optimize edilmekte ve makine koduna derlenmektedir. Bu döngü tekrar çalıştırıldığında, derlenmiş iz, program karşılığı yerine çağrılır.
Bu adımlar aşağıda ayrıntılı olarak açıklanmıştır:
1) Profillemenin amacı, "sıcak döngü"leri tanımlamaktır. Bu genellikle her döngü için yineleme sayısını sayarak yapılır. Bir döngü sayımı belirli bir eşiği aştıktan sonra döngü "sıcak" kabul edilir ve izleme modu girilir.
2) İzleme aşamasında, döngü normalde yürütülü, ancak ek olarak her yürütülen işlem iz içine kaydedilir. Kaydedilen işlemler çoğu zaman bir formunda saklanır. İzleme, işlev çağrılarını izler ve izlemeye yönlendirilirler. İzleme, döngü sona erene kadar devam eder ve başlangıca geri döner.
İz aşağıdaki döngüden bir somut yürütme yolu ile kaydedildiğinden, o iz daha sonra o yoldan ayrılabilir. Bunun olabileceği yerleri belirlemek için ize özel koruma talimatları eklenir. Muhafız, orijinal durumun hala geçerli olup olmadığını belirlemek için hızlı bir kontroldur. Bir muhafız başarısız olursa, iz yürütülmesi durdurulur.
3) Optimizasyon ve kod üretme aşaması - İzleme yürütme sırasında yapıldığından, çalışma zamanı bilgilerini (örneğin, ) içerecek şekilde yapılabilir. Bu bilgi daha sonra kod verimliliğini artırmak için optimizasyon aşamasında kullanılabilir.
İzlerin optimize edilmesi kolaydır, çünkü bunlar yalnızca bir yürütme yolunu temsil eder, bu da hiçbir kontrol akışı mevcut olmadığı ve hiçbir işleme ihtiyacı olmadığı anlamına gelir. Tipik optimizasyonlar, sabit alt ifade kaldırma, ölü kod eleme, kayıt tahsisi, değişmez kod hareketi, sabit katlama ve kaçış analizi içerir.
Optimizasyon sonrasında, iz makine koduna dönüştürülür. Optimizasyona benzer şekilde, izlerin doğrusal doğası nedeniyle bu kolaydır.
İz, makine koduna derlendikten sonra, döngünün sonraki iterasyonlarında yürütülebilir. Izleme işlemi, başarısız oluncaya kadar devam eder.
Tarihi
JIT fikirleri 1960'lı yıllaradek uzanırken, JIT'lerin izlenmesi daha yeni kullanılmaya başlamıştır. Günümüzün JIT'leri izleme fikrine benzer bir fikir 1970 yıllarda çıktı. Derlenmiş kodun, yorumlama sırasında gerçekleştirilen eylemleri basitçe depolayarak çalışma zamanında bir yorumlayıcıdan türetilebileceği gözlemlendi.
İzlemenin ilk uygulaması Dynamo, "işlemci üzerinde yürütülen yerel talimat akışının performansını şeffaf bir şekilde geliştiren bir yazılım dinamik optimizasyon sistemi" dir. Bunu yapmak için, yerel yönerge akışı "sıcak" bir yönerge sırası bulunana kadar yorumlanır. Bu sıralama için optimize edilmiş bir sürüm oluşturulur, önbelleğe alınır ve yürütülür.
Dinamo daha sonra DinamoRIO'ya aktarıldı. Bir DinamoRIO tabanlı proje, izleme ve kısmi değerlendirmeyi birleştiren bir tercüman yapısı için bir çerçeve idi. "Dil uygulamalardan tercüman yükünü dinamik olarak kaldırmak" için kullanıldı.
2006'da, üst düzey bir dil için ilk izleme JIT derleyicisi olan HotpathVM geliştirildi. HotpathVM'nin motivasyonu, kaynak kısıtlı mobil cihazlar için verimli bir JVM'ye sahip olmaktı.
Bir izleme JIT örneği Mozilla Firefox için JavaScript uygulamalardan biri olan TraceMonkey'dir (). TraceMonkey sıklıkla yürütülen döngü izlerini çalışma zamanında dinamik dil JavaScript'inde derler ve oluşturulan kodu her bir yolda gerçekleşen gerçek dinamik türler için uzmanlaştıracaktır.
JIT'leri takip eden bir diğer proje PyPy'dir. PyPy'nin çeviri araç zinciri ile yazılmış olan dil uygulamaları JIT'lerin izlenmesini kullanmayı mümkün kılar ve böylece o tercüman kullanılarak yürütülen herhangi bir programın performansını arttırır. Bu, tercüman tarafından yürütülen program yerine, tercümanın kendisini izleyerek mümkündür.
JIT'leri izleme, Ortak Ara Dil (CIL) için SPUR projesinde Microsoft tarafından keşfedildi. SPUR, bir JavaScript uygulaması izlemek için de kullanılabilen CIL için genel bir izleyici idi.
Kaynakça
- ^ (PDF). 19 Mayıs 2017 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ (PDF). 8 Ağustos 2017 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ . 18 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ (PDF). 18 Şubat 2018 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ . 18 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ . 19 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ (PDF). 19 Şubat 2018 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ "Arşivlenmiş kopya" (PDF). 18 Şubat 2018 tarihinde kaynağından (PDF). Erişim tarihi: 18 Şubat 2018.
- ^ . 18 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ (PDF). 9 Ağustos 2020 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ "Arşivlenmiş kopya". 18 Şubat 2018 tarihinde kaynağından . Erişim tarihi: 8 Ekim 2020.
- ^ . 19 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ (PDF). 18 Şubat 2018 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 18 Şubat 2018.
- ^ "Arşivlenmiş kopya" (PDF). 19 Şubat 2018 tarihinde kaynağından (PDF). Erişim tarihi: 18 Şubat 2018.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
TJIT tracing just in time compilation veya izlenen JIT derlemesi bir programin calisma zamaninda yurutulmesinin program optimizasyonunu yapmak icin sanal makineler tarafindan kullanilan bir tekniktir Bu sik yurutulen islemlerin dogrusal bir sirasini kaydetmek bunlari yerel makine dili koduna derlemek ve yurutmek suretiyle yapilir Bu yontem bazinda calisan geleneksel just in time JIT derleyicilere karsidir Genel bakisJust in time derleme bir programin parcalarini calisma zamaninda makine koduna derleyerek programlarin yurutme hizini artirmak icin kullanilan bir tekniktir Farkli JIT derleyicileri kategorize etmenin bir yolu derleme kapsami geregidir Yontem tabanli JIT derleyicileri bir seferde tek bir yontemi cevirmeyle makine koduna cevirirken JIT leri izleme siklikla yurutulen donguleri derleme birimi olarak kullanir Izleme JIT leri programlarin zamanlarinin cogunu programin bazi dongulerinde sicak donguler gecirdigi ve sonraki dongu yinelemelerinin benzer yollari genellikle kullandigi varsayimlarina dayanir JIT izleme ozelligine sahip sanal makineler cogunlukla karma mod yurutme ortamlaridir yani izleme JIT ine ek olarak bir yorumlayiciya veya yontem derleyicisine sahip olduklari anlamina gelir Teknik detaylarBir izleme JIT derleyicisi calisma zamaninda cesitli asamalardan gecmektedir Ilk olarak donguler icin profil bilgileri toplanir Sicak bir dongu tanimlandiktan sonra o dongunun yurutulen tum islemleri kaydeden ozel bir izleme modu girilir Bu islem dizisine bir iz denir Iz daha sonra optimize edilmekte ve makine koduna derlenmektedir Bu dongu tekrar calistirildiginda derlenmis iz program karsiligi yerine cagrilir Bu adimlar asagida ayrintili olarak aciklanmistir 1 Profillemenin amaci sicak dongu leri tanimlamaktir Bu genellikle her dongu icin yineleme sayisini sayarak yapilir Bir dongu sayimi belirli bir esigi astiktan sonra dongu sicak kabul edilir ve izleme modu girilir 2 Izleme asamasinda dongu normalde yurutulu ancak ek olarak her yurutulen islem iz icine kaydedilir Kaydedilen islemler cogu zaman bir formunda saklanir Izleme islev cagrilarini izler ve izlemeye yonlendirilirler Izleme dongu sona erene kadar devam eder ve baslangica geri doner Iz asagidaki donguden bir somut yurutme yolu ile kaydedildiginden o iz daha sonra o yoldan ayrilabilir Bunun olabilecegi yerleri belirlemek icin ize ozel koruma talimatlari eklenir Muhafiz orijinal durumun hala gecerli olup olmadigini belirlemek icin hizli bir kontroldur Bir muhafiz basarisiz olursa iz yurutulmesi durdurulur 3 Optimizasyon ve kod uretme asamasi Izleme yurutme sirasinda yapildigindan calisma zamani bilgilerini ornegin icerecek sekilde yapilabilir Bu bilgi daha sonra kod verimliligini artirmak icin optimizasyon asamasinda kullanilabilir Izlerin optimize edilmesi kolaydir cunku bunlar yalnizca bir yurutme yolunu temsil eder bu da hicbir kontrol akisi mevcut olmadigi ve hicbir isleme ihtiyaci olmadigi anlamina gelir Tipik optimizasyonlar sabit alt ifade kaldirma olu kod eleme kayit tahsisi degismez kod hareketi sabit katlama ve kacis analizi icerir Optimizasyon sonrasinda iz makine koduna donusturulur Optimizasyona benzer sekilde izlerin dogrusal dogasi nedeniyle bu kolaydir Iz makine koduna derlendikten sonra dongunun sonraki iterasyonlarinda yurutulebilir Izleme islemi basarisiz oluncaya kadar devam eder TarihiJIT fikirleri 1960 li yillaradek uzanirken JIT lerin izlenmesi daha yeni kullanilmaya baslamistir Gunumuzun JIT leri izleme fikrine benzer bir fikir 1970 yillarda cikti Derlenmis kodun yorumlama sirasinda gerceklestirilen eylemleri basitce depolayarak calisma zamaninda bir yorumlayicidan turetilebilecegi gozlemlendi Izlemenin ilk uygulamasi Dynamo islemci uzerinde yurutulen yerel talimat akisinin performansini seffaf bir sekilde gelistiren bir yazilim dinamik optimizasyon sistemi dir Bunu yapmak icin yerel yonerge akisi sicak bir yonerge sirasi bulunana kadar yorumlanir Bu siralama icin optimize edilmis bir surum olusturulur onbellege alinir ve yurutulur Dinamo daha sonra DinamoRIO ya aktarildi Bir DinamoRIO tabanli proje izleme ve kismi degerlendirmeyi birlestiren bir tercuman yapisi icin bir cerceve idi Dil uygulamalardan tercuman yukunu dinamik olarak kaldirmak icin kullanildi 2006 da ust duzey bir dil icin ilk izleme JIT derleyicisi olan HotpathVM gelistirildi HotpathVM nin motivasyonu kaynak kisitli mobil cihazlar icin verimli bir JVM ye sahip olmakti Bir izleme JIT ornegi Mozilla Firefox icin JavaScript uygulamalardan biri olan TraceMonkey dir TraceMonkey siklikla yurutulen dongu izlerini calisma zamaninda dinamik dil JavaScript inde derler ve olusturulan kodu her bir yolda gerceklesen gercek dinamik turler icin uzmanlastiracaktir JIT leri takip eden bir diger proje PyPy dir PyPy nin ceviri arac zinciri ile yazilmis olan dil uygulamalari JIT lerin izlenmesini kullanmayi mumkun kilar ve boylece o tercuman kullanilarak yurutulen herhangi bir programin performansini arttirir Bu tercuman tarafindan yurutulen program yerine tercumanin kendisini izleyerek mumkundur JIT leri izleme Ortak Ara Dil CIL icin SPUR projesinde Microsoft tarafindan kesfedildi SPUR bir JavaScript uygulamasi izlemek icin de kullanilabilen CIL icin genel bir izleyici idi Kaynakca PDF 19 Mayis 2017 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 18 Subat 2018 PDF 8 Agustos 2017 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 18 Subat 2018 18 Subat 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Subat 2018 PDF 18 Subat 2018 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 18 Subat 2018 18 Subat 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Subat 2018 19 Subat 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Subat 2018 PDF 19 Subat 2018 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 18 Subat 2018 Arsivlenmis kopya PDF 18 Subat 2018 tarihinde kaynagindan PDF Erisim tarihi 18 Subat 2018 18 Subat 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Subat 2018 PDF 9 Agustos 2020 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 18 Subat 2018 Arsivlenmis kopya 18 Subat 2018 tarihinde kaynagindan Erisim tarihi 8 Ekim 2020 19 Subat 2018 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Subat 2018 PDF 18 Subat 2018 tarihinde kaynagindan PDF arsivlendi Erisim tarihi 18 Subat 2018 Arsivlenmis kopya PDF 19 Subat 2018 tarihinde kaynagindan PDF Erisim tarihi 18 Subat 2018