Sunday, 15 April 2012

memset mi std::fill mi?


Eğer önemli olan hız ise, son söyleneceğimi ilk söyleyeyim, cevap kesinlikle memset.

C++11 olanaklarını kullanarak küçük bir test yaptım.


#include <iostream>
#include <chrono>

int main(int argc, const char * argv[])
{
    const int array_size = 200000;
    double d1[array_size], d2[array_size], d3[array_size], d4[array_size];
    std::chrono::high_resolution_clock::time_point t0 = 
                                         std::chrono::high_resolution_clock::now();

#if 0
    std::fill(d1, d1 + array_size, 0.);
    std::fill(d2, d2 + array_size, 0.);
    std::fill(d3, d3 + array_size, 0.);
    std::fill(d4, d4 + array_size, 0.);
#else
    memset(d1, 0, array_size * sizeof(double));
    memset(d2, 0, array_size * sizeof(double));
    memset(d3, 0, array_size * sizeof(double));
    memset(d4, 0, array_size * sizeof(double));
#endif 

    
    std::chrono::high_resolution_clock::time_point t1 = 
                                         std::chrono::high_resolution_clock::now();
    std::chrono::milliseconds ms = 
             std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0);

    std::cout << "The program has worked in " << ms.count() << 
                      " milliseconds\n";
    
    return 0;
}

Benim makinemdeki sonuçlar şöyle: 

std::fill = 5 veya 6 milisaniye
memset = 2 veya 3 milisaniye

Neredeyse iki katı fark var. Hatta daha da çok olabilir. 

Benim için hız önemli olduğundan ben memset kullanmaya devam edeceğim. 

Volkan Özyılmaz