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

  • Eric Anthony

    Eric Anthony

    13 AĞUSTOS 2011
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007
  • talkandroid

    talkandroid

    27 Mayıs 2010