Написание очень тяжелой операции на c ++ для тестирования

0

Это может быть противоположно большинству вопросов, но для целей тестирования я хочу создать предикат, который использует очень медленные операции, которые не создают расы данных. Мне нужно протестировать параллельную реализацию по сравнению с последовательной реализацией и хотелось бы сделать это без создания векторов массового размера. В настоящее время я использую этот предикат:

[](std::size_t& v){
    v = 42; //some random number...
}

но для того, чтобы увидеть какие-либо реальные результаты, мои векторы должны быть массивными с точки зрения размера, я бы предпочел иметь меньший размер и большее время выполнения предиката... какую функцию lamba я должен написать, что очень трудоемко, поэтому я могу проверить мои реализации?

  • 3
    Пусть нить спит?
  • 3
    Что-то вроде бесконечного цикла должно увеличить время выполнения.
Показать ещё 10 комментариев
Теги:
c++11

1 ответ

0

Просто идея, заставьте несколько повторных read-modify-write:

std::size_t volatile& vv = v;
vv = 0;
for (int i = 0; i != 100; ++i) { vv +=1; }

Поскольку компилятор может не оптимизировать это, он будет включать в себя довольно много реальных чтений v. Тем не менее, вы, вероятно, все равно попадете в кеш.

Если этого нужно избегать, вам нужен std::atomic_store

Ещё вопросы

Сообщество Overcoder
Наверх
Меню