Optimise guarded memcpy (#449)
* Improve testing of memcpy including adding perf test. * Change remaining_bytes to be branch free. Use reciprocal division followed by multiply to remove a branch.
This commit is contained in:
committed by
GitHub
parent
4ea978b946
commit
419347ba4a
@@ -5,17 +5,40 @@
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
class MeasureTime : public std::stringstream
|
||||
class MeasureTime
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::chrono::time_point<std::chrono::high_resolution_clock> start =
|
||||
std::chrono::high_resolution_clock::now();
|
||||
|
||||
bool quiet = false;
|
||||
|
||||
public:
|
||||
~MeasureTime()
|
||||
{
|
||||
auto finish = std::chrono::high_resolution_clock::now();
|
||||
auto diff = finish - start;
|
||||
std::cout << str() << ": " << std::setw(12) << diff.count() << " ns"
|
||||
<< std::endl;
|
||||
if (!quiet)
|
||||
{
|
||||
std::cout << ss.str() << ": " << std::setw(12) << diff.count() << " ns"
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
MeasureTime(bool quiet = false) : quiet(quiet) {}
|
||||
|
||||
template<typename T>
|
||||
MeasureTime& operator<<(const T& s)
|
||||
{
|
||||
ss << s;
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::chrono::nanoseconds get_time()
|
||||
{
|
||||
auto finish = std::chrono::high_resolution_clock::now();
|
||||
auto diff = finish - start;
|
||||
return diff;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user