SORU
2 Mayıs 2010, Pazar


F# bilimsel hesaplama performans

Nasıl F merak ediyorum# C performans için performans karşılaştırır? Java ile ilgili benzer bir soru sordum ve aldığım izlenim Java ağır numbercrunching için uygun değildir.

F okudum# daha ölçülebilir ve daha fazla ölçülebilir olmak, ama nasıl gerçek dünya bu performansı C karşılaştırır ? bekleniyor geçerli uygulama hakkında belirli sorular vardır:

  • Ne kadar iyi kayan nokta var mı?
  • Vektör talimatları izin vermiyor
  • nasıl dost optimize etmek doğru mu Derleyiciler?
  • Bir bellek ayak ne kadar büyük baskı var mı? İnce taneli izin bellek üzerinde kontrol konum mu?
  • kapasite için dağıtılmış var mı bellek işlemci, örneğin Cray?
  • hangi özellikleri ağır sayıda işlem söz konusu olduğu bilgisayar bilimleri, ilginizi çekebilecek var mı?
  • Orada gerçek bilimsel bir bilgi vardır bu uygulamaları kullanmak?

Teşekkürler

CEVAP
10 Mayıs 2010, PAZARTESİ


Nasıl F merak ediyorum# C performans için performans karşılaştırır?

Değişir çılgınca uygulamaya bağlı olarak. Eğer çok kanallı bir program karmaşık veri yapıları geniş kullanımı yapıyorsanız o zaman F# büyük bir kazanın olması muhtemeldir. Eğer çoğu zaman sıkı nümerik diziler döngüler sonra mutasyona geçirdi ise, 2-3 kat daha hızlıdır olabilir.

Örnek çalışma: Ray tracer0* *Benim kriter itlaf ve sayısal ışın-küre kesişim kod hiyerarşik bir ağaç çıktı bir resim oluşturmak için kullanır. Bu kriter kaç yaşında ve C kodu yıl içinde onlarca kez üzerine geliştirilmiş ve yüz binlerce kişi tarafından okundu. Microsoft Syme F yazmak için yönetilen Don# biraz uygulamadaha hızlıMSVC ile derlenmiş bir C kodu daha hızlı ve OpenMP kullanarak parallelized.

F okudum# daha ölçülebilir ve daha fazla ölçülebilir olmak, ama nasıl gerçek dünya bu performansı C karşılaştırır ? bekleniyor

C , ve bu iyileştirme hem de bakım için de geçerlidir. daha gelişmekte olan kodu çok daha kolay ve F ile daha hızlı# Çaba aynı miktarda F kullanırsanız çok daha büyük performans artışı getirebilecek bir program optimize başlattığınızda sonuç olarak,# C yerine . Ancak, F# yüksek seviyeli bir dil olduğunu ve dolayısıyla performansı daha düşük bir tavan yerler. Eğer öyleyse zaman optimize geçirmek için sonsuz varsa, teorik olarak, her zaman C daha hızlı kod üretmek gerekir .

Bu elbette Fortran, C ve Fortran üzerinde elle yazılmış bir çevirici vardı, vardı tam olarak aynı yararı olur.

Örnek çalışma: QR ayrışmaBu doğrusal Cebir temel sayısal bir yöntem LAPACK gibi kütüphaneler tarafından sağlanır. Başvuru LAPACK uygulanması Fortran 2,077 hatları. Aynı seviyede performansı elde kodunun altında 80 hatlarında an F# implementation yazdım. Ama referans Uygulaması Hızlı değildir: Intel Math Kernel Library (MKL) genellikle 10x gibi satıcı ayarlı daha hızlı uygulama. Dikkat çekici, benim F optimize etmeyi başardım# koduötesindeIntel'in uygulama Intel donanım üzerinde çalışan iken kod 150 satır altında Şifremi ve tamamen jenerik tutma performansı (tek ve çift hassas ve karmaşık ve hatta sembolik matris işleyebilir!): uzun boylu ince matrislerinin benim F# kod 3× için daha hızlı Intel MKL daha.

Not kıssadan hisse bu örnek olay olmadığını etmelisiniz bekliyoruz sizin F# olmak daha hızlı satıcı ayarlı kütüphaneler ancak bunun yerine, o hatta uzmanlar gibi Intel'in olacak Bayan üretken üst düzey iyileştirmeler varsa kullanıyorlar sadece alt düzey diller. Uzmanlar, kendi araçları F ise son derece hantal çünkü paralellik tam olarak yararlanmak için başarısız Intel'in sayısal optimizasyon şüpheleniyorum# kolay hale getirir.

Ne kadar iyi kayan nokta var mı?

ANSI C ile benzer performans ama bazı işlevler (örneğin yuvarlama modu) kullanılamaz .NET.

Vektör talimatları izin vermiyor

Hayır.

nasıl dost optimize Derleyiciler doğru mu?

Bu soru mantıklı değil: F# Bir mülktür .NET tek bir derleyici ile Microsoft dil.

Bir bellek ayak ne kadar büyük baskı var mı?

Boş bir uygulama burada 1.3 Mb kullanır.

İnce taneli izin bellek üzerinde kontrol konum mu?

Örneğin çoğu bellek-güvenli dilinden daha iyi ama C kadar iyi değil, F rastgele veri yapıları ciltsiz yapabilirsiniz olarak onları temsil ederek"". yapılar

örneğin dağıtılmış bellek işlemci kapasitesi: Cray var mı?

İle ne kastettiğinize bağlı "kapasite". Çalıştırabilirsiniz .Mesaj F geçen kullanabilirsin o zaman Cray NET# (sadece bir sonraki dil gibi) ama F# öncelikle masaüstü çok çekirdekli x 86 makineleri için tasarlanmıştır.

hangi özellikleri ağır sayıda işlem söz konusu olduğu bilgisayar bilimleri, ilginizi çekebilecek var mı?

Bellek güvenliği bölümleme hataları ve erişim ihlalleri alamadım anlamına gelir. Paralellik için destek .NET 4 iyidir. F)-the-fly kod çalıştırmak için yeteneği# Visual Studio 2010'da interaktif oturum interaktif teknik hesaplama için son derece yararlıdır.

Bunu kullanan gerçek bilimsel bilgi işlem uygulamaları var mı?

F commercial products bilimsel için bizim bilgisayar# zaten yüzlerce kullanıcı var.

Ancak, sorularınızın yüksek performanslı bilgi işlem (ör: Cray) ve interaktif bilgisayar teknik olarak, bilimsel bilgi işlem (örneğin teklik*) düşündüğünü gösterir. F# ikincisi için tasarlanmıştır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • Megan Parken

    Megan Parken

    19 Temmuz 2009
  • POGProductionz

    POGProductio

    27 NİSAN 2012