SORU
11 ŞUBAT 2012, CUMARTESİ


Nasıl bir C programı %100 CPU kullanımı için

Bu ben seçeyim çok ilginç bir soru. Bilgi İşlem Ulusal Müzesi'nde çalışıyorum, ve sadece Y-MP EL süper bilgisayar, 1992-bir Cray çalışan almak için başardık, ve biz gerçekten nereye kadar gidebileceğini görmek istiyorum!

Karar verdik en iyi yolu, bunu yapmak için olduğunu yazmak için basit bir C programı olacağını hesaplamak asal sayılar ve göstermek ne kadar sürdü bunu yapmak için, daha sonra çalışma programı üzerinde bir hızla modern masaüstü BİLGİSAYAR ve karşılaştırma sonuçları.

Biz hızlı bir şekilde asal sayıları saymak için bu kodu ile geldi:

#include <stdio.h>
#include <time.h>

void main() {
    clock_t start, end;
    double runTime;
    start = clock();
    int i, num = 1, primes = 0;

    while (num <= 1000) { 
        i = 2; 
        while (i <= num) { 
            if(num % i == 0)
                break;
            i  ; 
        }
        if (i == num)
            primes  ;

        system("clear");
        printf("%d prime numbers calculated\n",primes);
        num  ;
    }

    end = clock();
    runTime = (end - start) / (double) CLOCKS_PER_SEC;
    printf("This machine calculated all %d prime numbers under 1000 in %g seconds\n", primes, runTime);
}

Çift çekirdekli dizüstü bilgisayar için Ubuntu çalışan (Cray UNİCOS çalışır), tamamen, 0 CPU kullanımı oluyor ve yaklaşık 10 dakika kadar almaya çalıştı. Eve geldiğimde hex-core modern oyun benim PC bunu denemeye karar verdik ve bu bizim ilk sorunumuz.

Ben ilk kod bu oyun PC kullanıyordum ne olduğundan Windows üzerinde çalıştırmak için adapte, ama süreç CPU gücünün 'i kadar da zor olduğunu bulmak için üzüldüm. Bu Windows olmak gerekir diye düşündüm, benim laptop önce yaptığı gibi Ubuntu Live CD Ubuntu işlemi tam potansiyeli ile çalıştırmak için izin vereceğini düşünerek başlattım.

Ancak sadece %5'lik kullanım var! Yani benim soru, nasıl bir program ya da Windows oyun benim makinede çalıştırmak için uyum 0 veya live Linux 7 CPU kullanımı olabilir miyim? Harika ama gerekli değil bir başka şey ise son ürün olabilir .exe kolayca dağıtılmış olabilir ve Windows makinelerde koştu.

Çok teşekkürler!

P. S. elbette bu program yoktu gerçekten işe ile Crays 8 uzman işlemciler, ve o bambaşka bir konu... Eğer hakkında bir şey biliyor musun optimize kod çalışmıyor 90 Cray süper bilgisayarları vermek bize bir not da!

CEVAP
11 ŞUBAT 2012, CUMARTESİ


Eğer 0 CPU isterseniz, 1'den fazla çekirdek kullanmak gerekir. Bunu yapmak için, birden çok iş parçacığı gerekir.

İşte paralel bir sürüm OpenMP kullanarak:

1000000 sınırı artırmak için benim makinede 1 saniye daha fazla almak zorunda kaldım.

#include <stdio.h>
#include <time.h>
#include <omp.h>

int main() {
    double start, end;
    double runTime;
    start = omp_get_wtime();
    int num = 1,primes = 0;

    int limit = 1000000;

#pragma omp parallel for schedule(dynamic) reduction(  : primes)
    for (num = 1; num <= limit; num  ) { 
        int i = 2; 
        while(i <= num) { 
            if(num % i == 0)
                break;
            i  ; 
        }
        if(i == num)
            primes  ;
//      printf("%d prime numbers calculated\n",primes);
    }

    end = omp_get_wtime();
    runTime = end - start;
    printf("This machine calculated all %d prime numbers under %d in %g seconds\n",primes,limit,runTime);

    return 0;
}

Çıkış:

Bu makine 29.753 içinde 1000000 altında tüm 78498 asal sayılar saniyede hesapladı

İşte 100% CPU:

enter image description here

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • fireflame65

    fireflame65

    27 Mart 2007
  • sghaff1

    sghaff1

    23 Mart 2009