C++ gömülü LLVM gelen ikili kod (paylaşımlı kütüphane) oluşturur. Süreç, bu uygulama için geliştirilmiş basit bir dilde yazılmış çalışma zamanında bazı karmaşık mantığı (kuralları) anlayabilmelidir.C++ ile yazılmış yüksek performanslı sistem üzerinde çalışıyorum
içine mantığı derleme bir gömülü tercüman çalıştırmak ve veriler üzerinde dinamik bir fonksiyon yorumlanır mantığına göre verileri alır aramayı işleri üretmek -
mantığı yorumlayın: İki seçeneğimiz var bir plugin.so dinamik paylaşılan dosya, çok daha hızlı gömülü daha aday olacağını,
Seçenek 2 makinenin kodu optimize edilecek şekilde gerçekten çekici olarak görünüyor eklentiyi yüklemek ve zamanında mantık işlevi çağırmak için, dlsym dlopen kullanmak t tercüman o işlemek. Ben keşfetmek am
seçenekleri şunlardır:
- bir derleme yöntemi dize derlemek (string mantık, liste & hataları, liste & uyarılar) burada
- girdi mantık bir dize içeren mantık yazma bizim özel dilinde kodlanmış o LLVM ir, derleme yönteminin dönüş değeri ir dize döndürür oluşturur
- bağlantı yöntemi bool link (dize ir, dize dosya adı, liste & hataları, liste & uyarılar)
- bağlantı yöntemi için ben llvm belgelerini aradım ama böyle bir yazma olasılığının olup olmadığını öğrenemedim yöntem
Doğruysa LLVM IR LLVM Bayt Kodu'na veya Assembly koduna dönüştürülür. Daha sonra LLVM JIT, JIT modunda çalışmak için kullanılır veya GNU Assembler, yerel kodu oluşturmak için kullanılır.
o bunu yapmaz LLVM bir fonksiyonu bulmak mümkün mü? Hepsi benim gereksinimi için plugin.so dosyası oluşturmak için "olarak" yerine çağırmak için C++ bir sistem komutu kullanılarak daha kodu içinde yapılırsa çok daha güzel olurdu.
Lütfen çalışma zamanımdaki işlemimden paylaşılan bir kütüphane yerel ikili kodu oluşturabileceğim herhangi bir yol biliyorsanız bildirin. İkili kod çeviri LLVM-IR yapan bir LLVM aracı
belki http://llvm.org/docs/tutorial/LangImpl4 bu konuda hiç uzman değilim, ama.html # add-a-jit-derleyici yardımcı olur. – godfatherofpolka
Bağlantı için teşekkürler. Evet, gömülü bir jit başka bir seçenek olduğunu düşünüyorum. JIT kodunda bir C++ arabirimini uygulayıp JIT'den çağıran C++ uygulamasına türetilmiş sınıf uygulamasına bir işaretçi döndürüp döndüremeyeceğimizi merak ediyordum? – Sanjit
AngelScript veya Lua gibi betik dilleri (özellikle de LuaJit) amaçlarınız için yeterince hızlı değilse, OpenCL'yi aramanızı öneririz. Çalışma zamanında C/C++ ile yazılmış hesaplama kodunu derlemenizi sağlar. Hesaplama çekirdeğinizi kolayca C önişlemcisi kullanarak yapılandırabilirsiniz. OpenCL derleyicilerin çoğu LLVM'yi dahili olarak kullanır, bu sayede tüm teknik detaylarla uğraşmak zorunda kalmadan tam gücünü elde edersiniz. Son bir bonus olarak, kodunuzu GPU üzerinde kolayca çalıştırabilirsiniz, ancak isterseniz kendinizi CPU'ya kısıtlayabilirsiniz. – stgatilov