这可能与大多数问题相反,但出于测试目的,我想创建一个使用不创建数据竞争的非常慢的操作的谓词。与顺序实现相比,我需要测试并行实现,并且希望在不创建大规模向量的情况下执行此操作。我目前使用这个谓词:
[](std::size_t& v){
v = 42; //some random number...
}
但是为了看到任何真实的结果我的矢量需要在大小方面是巨大的,我宁愿有一个更小的尺寸和更大的谓词执行时间...我应该写什么样的lamba函数是非常耗时的所以我可以测试我的实现吗?
答案 0 :(得分:0)
只是一个想法,强制执行一些重复的读取 - 修改 - 写入:
std::size_t volatile& vv = v;
vv = 0;
for (int i = 0; i != 100; ++i) { vv +=1; }
由于编译器可能不会对此进行优化,因此它将涉及v
的相当多的实际读取。也就是说,你可能仍会点击缓存。
如果要避免这种情况,则需要std::atomic_store