allocPool/main.cpp
Timothée Leclaire-Fournier 7f58269866 allocPool: Try to avoid false sharing.
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
2024-03-12 11:28:10 -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;
}