2010-10-24 24 views
8

Programımda gömülü olabilecek bir JIT derleyicisi veya küçük bir derleyici kitaplığı arıyorum. Karmaşık sayı aritmetiğini gerçekleştiren dinamik olarak oluşturulmuş kodu derlemek için kullanıyorum. Oluşturulan kod, yapı olarak çok basittir: döngü yok, koşulsuz, ancak oldukça uzun olabilir (GCC tarafından derlendiğinde birkaç MB). Sonuçta ortaya çıkan makine kodunun performansı önemlidir, oysa derleme hızının kendisinin umrunda değil. Amacım için en iyi JIT derleyicisi hangisidir? Teşekkürler!Matematik için JIT derleyiciler

Ayrıntılı gereksinimleri

  • Destek çift hassasiyetli karmaşık sayı işlemlerinde
  • Destek temel optimizasyon
  • Destek birçok CPU'lar (en azından x86 ve x86-64) desteklenen CPU
  • tarihinde SSE
  • yararlanın
  • Yerel değişkenler için yığın veya büyük bir kayıt kümesini destekler
  • ANSI-C veya C++ arabirimi
  • Çapraz platformu (özellikle Linux, Unix)

cevap

7

LLVM'a göz atmak isteyebilirsiniz.

+0

İlginç. Şu an içine bakıyorum. – ssquidd

0

size anında derlemek mümkün istiyorum ve daha sonra dinamik olarak derlenmiş kitaplığı yüklenemedi (.dll veya .bu) gibi. Bu size ANSI-C veya C++ arayüzü ile en iyi performansı verir. Yani, JITing'i unutun ve derlemeyi yapmak için bir C/C++ derleyicisini oluşturmayı düşünün.

Bu, bir derleyicinin, dinamik olarak oluşturulmuş kodun gerçekte oluşturulduğu noktada yüklenebileceğini varsayar.

+0

Bu gerçekten şu anda yapıyorum. Kodu derlemek için GCC veya Intel C derleyicisi kullanılır ve sonuçta .so dosyası dinamik olarak yüklenir. Ancak sorun, tam teşekküllü bir derleyiciyi programıma paketlemekte zorlanıyorum. Lisans sorunları bir yana, sadece teknik kısım çok fazla iş olabilir. – ssquidd

3

Cint, derlenmiş kodu ve yorumlanmış kodu karıştırmayı sağlayan bir ++ (ish) ortamıdır. optimization tools for the interpreter bir dizi var. ROOT, derleme ve çalışma zamanında çalışma zamanında bağlantıyı destekleyerek bunu daha da genişletir (http://root.cern.ch/drupal/content/cint-prompt'un son bölümüne bakın), ancak sistem derleyicisini kullandığı ve bu nedenle yardımcı olamayacağı anlaşılmaktadır. Tüm kod açık kaynak.

Tüm bu özelliklerden çalışmamın bir parçası olarak düzenli olarak yararlanıyorum.

SIMD yönergelerini etkin bir şekilde kullanıp kullanmadığını bilmiyorum, ancak diğer tüm gereksinimlerinizi karşılıyor gibi görünüyor.


Ben şu anda sinek methond bağlantıyı dinamik kütüphaneye derleme kullanarak görüyoruz olarak, ben çok optimizasyon yapar inanmıyorum olsa TCC düşünün ve bunu desteklemez şüpheli olabilir SIMD.

+0

Cint'in aslında kodu bayt koduna anında derlemediğini bilmiyordum. Bilmek güzel. Ama birkaç örnek denedim ve performans hayal kırıklığı yaratıyor. Ürettiği kod genellikle GCC'den birkaç kat daha yavaş, bazı zamanların büyüklükleri yavaşlar. – ssquidd

+0

Sistem derlenmiş kodlara her zaman makul bir şekilde geçtim ve REPL ortamını hiçbir zaman kıyaslamamıştım.Ancak, [bytecode derleyicisinde bulunan optimizasyon seviyelerini tartışan bir sayfa] buldum (http://root.cern.ch/viewvc/trunk/cint/doc/bytecode.txt). Bunu görüp görmediğini bilmiyorum. Ve benim araştırmam, aslında düşündüğüm özelliklerden birinin ROOT'a ait olduğunu gösterecek. – dmckee