Measuring Execution Time

Yaptığımız işlemin daha optimize olup olmadığını anlayabilmek için ne kadar sürede çalıştığını ölçmemiz gerekli. Bu ölçümü ilk başta std::chrono kullanarak cpu üzerinden yapacağız. Daha sonra cudaEvent(?) ile gpu üzerinde ölçüm yapmayı da göreceğiz fakat o başka bir posttun konusu.

githubda gördüğüm bir kodu sınıfa döktüm:

class StopWatch{
    std::chrono::steady_clock::time_point begin;
    std::chrono::steady_clock::time_point end;
public:
    void start(){        
        begin = std::chrono::steady_clock::now();
    }

    void stop(){
        end = std::chrono::steady_clock::now();
        auto ms = std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count();
        auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
        std::cout << "Time difference = " << ms << "[µs]" << std::endl;
        std::cout << "Time difference = " << ns << "[ns]" << std::endl;
    }
};
C++

Daha sonra kernel’ı çalıştırırken

    StopWatch sw;
    sw.start();
    hello<<<1, dataSize>>>(d_data, mySize);
    cudaError_t err = cudaDeviceSynchronize();
    sw.stop();
C++

Dikkat ederseniz asekron olduğu için cudaDeviceSynchronize() fonksiyonundan sonra ölçümü bitiriyorum. Çıktı olarak da şöyle bir şey verdi

Time difference = 368[µs]
Time difference = 368745[ns]

Aynı şekilde CPU<->GPU arasındaki veri transfer sürelerini ve başka şeyleri de ölçebiliriz.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *