Şimdi Ara

C# assembly kodlari çağirma.

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
3
Cevap
0
Favori
518
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • C# içinde kodlarin daha hizli calişmasi için assembly kodlari çağrilabiliyor diye biliyorum. Bu alanda kaynak bir site veya örnekleriniz varsa paylaşirmisiniz

    < Bu ileti mobil sürüm kullanılarak atıldı >



  • Hızlandırmak istediğiniz şey bir resim dosyasındaki baytların kopyalanması gibi birşeyse unsafe kod bloğu açarak içinde pointer hesabı yaparak hiç assembly ile uğraşmadan halledebilirsiniz. Eğer işin içine hesaplama girecekse yazının devamını okuyunuz.

    Birkaç farklı yöntem var ama taşınabilirlik açısından zordan kolaya sıralama yapılırsa:

    C++ içinde inline assembly kullanarak parametreler ile uğraşmadan doğrudan işlemci komutlarını çalıştırabilirsiniz. Bundan daha kolay bir yöntem intrinsic denilen fonksiyonları kullanmak. Böylece tek çekirdekte bile aynı anda sekiz adet çarpma veya toplama gibi işlemleri sadece c++ fonksiyonlarını kullanarak yaptırabiliyorsunuz. Bundan daha kolayı opencl api yardımıyla c99 veya yeni haliyle c++ şeklindeki program parçalarını çok sayıda thread halinde çalıştırmak. C++ ile işiniz bitince dll halinde derleyip c# içinden çağırabilirsiniz. Hepsini denedim ve kodları tüm bilgisayarlarda uyumlu çalıştırmanın en kolay yolu opencl. İntrinsic ile başlamak daha çabuk olabilir ama her işlemci için en uygun komutları oluşturamayabiliyor. İnline assembly ise sadece sizin işlemciye özgü komutlar kullandığınızda diğer işlemcilerde çalışmayabiliyor.

    Performansa göre sıralanırsa inline assembly en hızlısı olabilir. Sonra intrinsic sonra opencl. Eğer ekran kartınız varsa opencl onu da kullanabilir ve hesabın yoğunluğuna göre işlemciye 50 kat fark atabilir.

    Her durumda c++ ile c# arasında bağlantı yapmanız gerekecek veya hazır yapılmışının dll dosyalarını kullanmanız gerekecek.

    Mesela lineer cebir konularından matris-matris çarpımı çok kastıran bir işlemdir ve 8192 genişliğindeki iki tane kare matrisin çarpımı sadece c# ve tek çekirdek kullanarak dakikalarca sürüyorken opencl ile ekran kartında hesabı bir saniyeyi geçmiyor.

    Başka bir örnek, fourier dönüşümü de kastıran bir hesaptır ve opencl kullanınca sadece işlemcide bile 15 kat hız kazandırıyor.

    Bellekteki resimleri siyahbeyaz yapmak için intrinsic de yeterince hızlıdır.

    Amacınız assembly öğrenmekse o zaman nasm gibi birşey kullanarak deneme yapabilirsiniz.



    < Bu mesaj bu kişi tarafından değiştirildi Tugrul_512bit -- 15 Ekim 2016; 0:20:23 >
    < Bu ileti mobil sürüm kullanılarak atıldı >




  • bu hafta ASM dili haftası olsun !

  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.