SORU
28 EYLÜL 2008, Pazar


Fortran C daha hızlı daha iyidir?

Zaman zaman bu Fortran veya daha hızlı C ağır hesaplamalar için okudum. Bu gerçekten doğru mu? Ben pek Fortran olduğunu itiraf etmeliyim, ama şimdiye kadar gördüğüm Fortran kod C dili olmayan özelliklere sahip olduğunu göstermemiştir.

Eğer doğruysa, lütfen bana neden olduğunu söyle. Lütfen dil veya libs sayı çatır çutur yemek için iyi olup olmadığını bile bilmiyorum, sadece merak ediyorum bunun için bir uygulama ya da lib yazma niyetinde değilim.

CEVAP
28 EYLÜL 2008, Pazar


Diller özellik seti benzer. Performans farkı fortran aliasing İzin Verilmiyor diyor aslında. Aliasing herhangi bir fortran kodu geçerli değil amaprogramcıve değilderleyicibu hataları tespit etmek için. Böylece fortran derleyicisigörmezdenolası bellek işaretçileri ve daha verimli kod üretmek için izin verir yumuşatma. C: bu küçük örneğe bir göz atın

void transform (float *output, float const * input, float const * matrix, int *n)
{
    int i;
    for (i=0; i<*n; i  )
    {
        float x = input[i*2 0];
        float y = input[i*2 1];
        output[i*2 0] = matrix[0] * x   matrix[1] * y;
        output[i*2 1] = matrix[2] * x   matrix[3] * y;
    }
}

Bu fonksiyon optimizasyonu sonra fortran meslektaşı daha yavaş çalışır. Neden? Eğer çıkış diziye değerleri yazarsanız matris değerlerini değiştirebilirsiniz. Sonuçta işaretçiler ve bellek (int işaretçi dahil!) aynı chunk nokta üst üste. C-derleyici tüm hesaplamaları için bellekten dört matris değerleri yeniden yüklemek zorunda kalır.

Fortran derleyici matris değerleri bir kez yük ve kayıtları saklayın. Fortran derleyici/diziler değil işaretçisi bellekte çakışma kabul eder, çünkü bunu yapmak.

Neyse ki kısıtlamak kelime ve sıkı-aliasing, bu sorunu çözmek için C99 standardına getirilmiştir. En iyi C derleyici bu gün de desteklenmektedir. Anahtar derleyici programcı bir ipucu sağlarvaat ediyorbir işaretçi başka bir işaretçi ile takma ad değil. Sıkı-aliasing programcı anlamına gelirvaat ediyorfarklı türü olacak işaretçiler hiçbir zaman, örneğin bir çift* çakışır değil, int* (char* ve* geçersiz olabilir bir şey ile örtüşen özel hariç) üst üste.

Eğer onları kullanırsanız C ve Fortran aynı hızı alırsınız. Ancak, kısıtlamak anahtar kelime performansı ile sadece kritik işlevlerini kullanma yeteneği, (C ) C programları çok daha güvenli ve yazmak için daha kolay olduğu anlamına gelir. Örneğin, göz önünde bulundurun geçersiz fortran "ARAMA DÖNÜŞÜMÜ ((1,30) (2,31) (3,32),30)" en fortran derleyicisi edecek mutlu bir derleme olmadan herhangi bir uyarı tanıtır ama bir hata bu sadece gösterir bazı kullanılan bazı donanım ve bazı optimizasyon seçenekleri.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bunnyboxx

    bunnyboxx

    17 NİSAN 2008
  • colacas

    colacas

    29 EKİM 2006
  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006