Timothée Leclaire-Fournier
7f58269866
A benchmark with 50 objects with and without false sharing mitigations gives these values (for the initArray() function) on Windows: - With mitigations: ~5500 microseconds - Without mitigations: ~9000 microseconds On Linux: - With mitigations: ~600 microseconds - Without mitigations: ~700 microseconds
41 lines
1.3 KiB
C++
41 lines
1.3 KiB
C++
#include <chrono>
|
|
#include <iostream>
|
|
|
|
#include "tests.hpp"
|
|
|
|
int main() {
|
|
#ifdef _DEBUG
|
|
tests t;
|
|
t.runTests();
|
|
#endif
|
|
|
|
auto startSlow{std::chrono::high_resolution_clock::now()};
|
|
stub *ptr{};
|
|
for (size_t i{}; i < 10000; i++) {
|
|
ptr = new stub();
|
|
delete ptr;
|
|
}
|
|
auto endSlow{std::chrono::high_resolution_clock::now()};
|
|
|
|
std::cout << "Time (milliseconds) required for allocations without pool: " <<
|
|
std::chrono::duration_cast<std::chrono::milliseconds>(endSlow - startSlow).count() << "\n";
|
|
|
|
auto startAlloc{std::chrono::high_resolution_clock::now()};
|
|
allocPool<stub> a(10000);
|
|
auto endAlloc{std::chrono::high_resolution_clock::now()};
|
|
|
|
auto startFast{std::chrono::high_resolution_clock::now()};
|
|
for (size_t i{}; i < 10000; i++) {
|
|
ptr = a.getPtr();
|
|
a.returnPtr(ptr);
|
|
}
|
|
auto endFast{std::chrono::high_resolution_clock::now()};
|
|
|
|
std::cout << "Time (milliseconds) required for allocations with pool: " <<
|
|
std::chrono::duration_cast<std::chrono::milliseconds>(endFast - startFast).count() << "\n";
|
|
|
|
std::cout << "Time (milliseconds) required for real allocations when constructing pool: " <<
|
|
std::chrono::duration_cast<std::chrono::milliseconds>(endAlloc - startAlloc).count() << "\n";
|
|
return 0;
|
|
}
|