gpt4 book ai didi

C++ 超快速线程安全 rand 函数

转载 作者:IT老高 更新时间:2023-10-28 23:18:30 25 4
gpt4 key购买 nike

void NetClass::Modulate(vector <synapse> & synapses )
{
int size = synapses.size();
int split = 200 * 0.5;

for(int w=0; w < size; w++)
if(synapses[w].active)
synapses[w].rmod = ((rand_r(seedp) % 200 - split ) / 1000.0);
}

函数 rand_r(seedp) 严重阻碍了我的程序。具体来说,串行运行时它会减慢我 3 倍的速度,而在 16 核上运行时会减慢 4.4 倍。 rand() 不是一个选项,因为它更糟。我能做些什么来简化这个吗?如果它会有所作为,我认为我可以在统计随机性方面蒙受损失。预生成(在执行之前)随机数列表然后加载到线程堆栈是一种选择吗?

最佳答案

问题是 seedp 变量(及其内存位置)在多个线程之间共享。处理器内核在每次访问这个不断变化的值时都必须同步它们的缓存,这会影响性能。解决方案是所有线程都使用自己的 seedp,因此避免缓存同步。

关于C++ 超快速线程安全 rand 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com