Это может быть противоположно большинству вопросов, но для целей тестирования я хочу создать предикат, который использует очень медленные операции, которые не создают расы данных. Мне нужно протестировать параллельную реализацию по сравнению с последовательной реализацией и хотелось бы сделать это без создания векторов массового размера. В настоящее время я использую этот предикат:
[](std::size_t& v){
v = 42; //some random number...
}
но для того, чтобы увидеть какие-либо реальные результаты, мои векторы должны быть массивными с точки зрения размера, я бы предпочел иметь меньший размер и большее время выполнения предиката... какую функцию lamba я должен написать, что очень трудоемко, поэтому я могу проверить мои реализации?
Просто идея, заставьте несколько повторных read-modify-write:
std::size_t volatile& vv = v;
vv = 0;
for (int i = 0; i != 100; ++i) { vv +=1; }
Поскольку компилятор может не оптимизировать это, он будет включать в себя довольно много реальных чтений v
. Тем не менее, вы, вероятно, все равно попадете в кеш.
Если этого нужно избегать, вам нужен std::atomic_store