allocPool/main.cpp
Timothée Leclaire-Fournier 3c5c9b4a97 allocPool: Try to avoid false sharing.
A benchmark on a 50 objects size with false sharing mitigations gives these values (for the initArray() function):
- With mitigations: 5508 microseconds
- Without mitigations: 9075 microseconds
2024-03-11 19:44:38 -04:00

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;
}