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.

Leave a Reply