streamk example and performance tuning (#760)
* streamk example and performance tuning * one missing file Co-authored-by: Haicheng Wu <haichengw@nvidia.com>
This commit is contained in:
@@ -2,6 +2,9 @@
|
||||
|
||||
#include "cuda_runtime.h"
|
||||
|
||||
/**
|
||||
* Panic wrapper for unwinding CUTLASS errors
|
||||
*/
|
||||
#define CUTLASS_CHECK(status) \
|
||||
{ \
|
||||
cutlass::Status error = status; \
|
||||
@@ -12,6 +15,10 @@
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Panic wrapper for unwinding CUDA runtime errors
|
||||
*/
|
||||
#define CUDA_CHECK(status) \
|
||||
{ \
|
||||
cudaError_t error = status; \
|
||||
@@ -21,3 +28,50 @@
|
||||
exit(EXIT_FAILURE); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* GPU timer for recording the elapsed time across kernel(s) launched in GPU stream
|
||||
*/
|
||||
struct GpuTimer
|
||||
{
|
||||
cudaStream_t _stream_id;
|
||||
cudaEvent_t _start;
|
||||
cudaEvent_t _stop;
|
||||
|
||||
/// Constructor
|
||||
GpuTimer() : _stream_id(0)
|
||||
{
|
||||
CUDA_CHECK(cudaEventCreate(&_start));
|
||||
CUDA_CHECK(cudaEventCreate(&_stop));
|
||||
}
|
||||
|
||||
/// Destructor
|
||||
~GpuTimer()
|
||||
{
|
||||
CUDA_CHECK(cudaEventDestroy(_start));
|
||||
CUDA_CHECK(cudaEventDestroy(_stop));
|
||||
}
|
||||
|
||||
/// Start the timer for a given stream (defaults to the default stream)
|
||||
void start(cudaStream_t stream_id = 0)
|
||||
{
|
||||
_stream_id = stream_id;
|
||||
CUDA_CHECK(cudaEventRecord(_start, _stream_id));
|
||||
}
|
||||
|
||||
/// Stop the timer
|
||||
void stop()
|
||||
{
|
||||
CUDA_CHECK(cudaEventRecord(_stop, _stream_id));
|
||||
}
|
||||
|
||||
/// Return the elapsed time (in milliseconds)
|
||||
float elapsed_millis()
|
||||
{
|
||||
float elapsed = 0.0;
|
||||
CUDA_CHECK(cudaEventSynchronize(_stop));
|
||||
CUDA_CHECK(cudaEventElapsedTime(&elapsed, _start, _stop));
|
||||
return elapsed;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user