用c++编写一个非常繁重的操作来进行测试

Writing a very heavy operation in c++ for testing

本文关键字:操作 测试 非常 一个 c++      更新时间:2023-10-16

这可能与大多数问题相反,但出于测试目的,我想创建一个谓词,该谓词使用一些非常慢的操作,不创建数据竞争。与顺序实现相比,我需要测试并行实现,并希望在不创建大规模向量的情况下这样做。我目前使用这个谓词:

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

但是为了看到任何真实的结果,我的向量需要在大小方面是巨大的,我宁愿有一个更小的大小和更大的谓词执行时间…我应该写什么样的lambda函数,这样我才能测试我的实现?

只是一个想法,强制多次重复read-modify-writes:

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

由于编译器可能没有优化这一点,因此它将涉及相当多的v的实际读取。也就是说,你可能还是会碰到缓存。

如果也要避免,则需要std::atomic_store