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

  • Creavite

    Creavite

    8 Mart 2009
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006
  • Wii Minute Radio

    Wii Minute R

    31 Mayıs 2008