SORU
5 Ocak 2009, PAZARTESİ


Matematik optimizasyon C#

Bir uygulama, gün boyu profilleme oldum ve kod birkaç bit optimize edilmiş olması, yapılacaklar listemde bu da var. 100 milyon bir cevapsız çağrı alır bir sinir ağı, aktivasyon fonksiyonu. DotTrace göre, genel işlevi zaman yüzde 60 civarında.

Bu nasıl optimize eder misin?

public static float Sigmoid(double value) {
    return (float) (1.0 / (1.0   Math.Pow(Math.E, -value)));
}

CEVAP
5 Ocak 2009, PAZARTESİ


Deneyin:

public static float Sigmoid(double value) {
    return 1.0f / (1.0f   (float) Math.Exp(-value));
}

DÜZENLEME:Hızlı bir karşılaştırma yaptım. Benim makine üzerinde, yukarıdaki kod yöntemi C daha hızlı ve matematiksel olarak eşdeğer bu kod sizce de bu reklam biraz daha hızlı (46% daha hızlı orijinal daha)

public static float Sigmoid(double value) {
    float k = Math.Exp(value);
    return k / (1.0f   k);
}

EDİT 2:C yükü nasıl emin değilim# fonksiyonlar var, ama 7 ** kaynak kodu, yüzer-exp fonksiyonu kullanan bu kullanmak gerekir. Biraz daha hızlı olabilir.

public static float Sigmoid(double value) {
    float k = expf((float) value);
    return k / (1.0f   k);
}

Ayrıca gelen milyonlarca yapıyorsan, fonksiyonu çağıran havai bir sorun olabilir. Bir satır içi işlevi yapmayı deneyin ve eğer herhangi bir yardım olup olmadığını görmek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • captainpuppys2000

    captainpuppy

    20 HAZİRAN 2013
  • ELPRESADOR

    ELPRESADOR

    21 HAZİRAN 2008
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008