(Gasp!) C # içindeki bazı çok hesaplama yoğun kodlar üzerinde çalışıyorum.
Optik modelleme için bir GPGPU FDTD uygulaması yapıyorum . Küçük (128 işlemci) bir kümede, simülasyonlarımızın çoğunun çalıştırılması haftalar alır. Ancak GPU uygulamaları yaklaşık 50 kat daha hızlı çalışma eğilimindedir - ve bu tüketici sınıfı bir NVidia kartıdır. Şimdi iki GTX295 çift işlemcili kartımız (birkaç yüz çekirdeği) olan bir sunucumuz var ve yakında Teslas alıyoruz.
Bu sizin dilinizle nasıl ilgilidir? Aynı şekilde daha önce kullandığımız C ++ FDTD kodu CPU'ya bağlıydı, bunlar GPU'ya bağlıydı, yani yönetilen vs yerel kodun ( çok küçük) beygir gücü farkı hiç devreye girmedi. C # uygulaması bir iletken - OpenCL çekirdekleri yüklüyor, GPU'lara veri aktarıyor, kullanıcı arayüzü sağlıyor, rapor veriyor, vb. - C ++ 'da götüne acı veren tüm görevler.
Geçtiğimiz yıllarda, yönetilen ve yönetilmeyen kod arasındaki performans farkı, hızın ekstra yüzde birkaçını elde etmek için bazen C ++ 'ın korkunç nesne modeline katlanmaya değecek kadar önemliydi. Bu günlerde, C ++ vs C # geliştirme maliyetleri çoğu uygulama için yararlarından daha ağır basar.
Ayrıca, performans farkınızın çoğu, seçtiğiniz dil seçiminden değil, geliştiricinizin yeteneğinden gelecektir. Birkaç hafta önce, belirli bir hesaplama alanı için yürütme süresini% 15 azaltan, üçlü iç içe (3D dizi geçişi) bir döngünün içinden tek bir bölme işlemi geçirdim. Bu, işlemci mimarisinin bir sonucudur: bölme yavaştır, ki bu sadece bir yerden almanız gereken yüzlerden biridir.