gpt4 book ai didi

c++ - 使用 for 循环是否比在 C++ 中将内容保存在 vector 中更快?

转载 作者:太空狗 更新时间:2023-10-29 21:11:04 25 4
gpt4 key购买 nike

抱歉标题不好,但实际上我想不出更好的标题(欢迎提出建议)。

我有一个大网格 (1000*1000*1000)。

for (int k = 0; k<dims.nz; k++);
{
for (int i = 0; i < dims.nx; i++)
{
for (int j = 0; j < dims.ny; j++)
{
if (inputLabel->evalReg(i, j, 0) == 0)
{
sum = sum + anotherField->evalReg(i, j, 0);
}
}
}
}

我遍历所有网格点以查找我的标签字段中哪些网格点的值为 0,并求和另一个字段的相应值。

在此之后,我想将上面检测到的所有点设置为某个值。

基本上再次执行相同的 for 循环会更快吗(这次是设置值而不是读取它们),还是我应该将我进入的所有位置写到一个单独的 vector 中(这将不得不改变大小我们检测到某些东西的循环的每一步)并简单地构建一个 for 循环,如

for(int p=0; p<size_vec_1,p++)
{
anotherField->set(vec_1[p],vec_2[p],vec_3[p], random value);
}

关键是,由于数据不同,我不知道有多少网格会受到我的routien的影响。可能是数据的一半或完全不同的东西。我可以对方法的速度进行一般估计,还是仅取决于我的值的分布?

最佳答案

The point is that I do not know how much of the grid will be affected by my routien due to different data.

这里有一个技巧,它可能会起作用:随机采样 inputLabel,以估计有多少条目为 0。如果有几个,则采用“将索引放入 vector ”的方式。如果很多,则采用“再次扫描阵列”的方式。

它需要针对特定​​的计算机进行微调,这两种情况之间的阈值应该是多少,需要多少样本(它不应该太大,因为近似会花费太多时间,但不应该太小有一个很好的近似值)等。

奖励技巧:采用缓存行对齐和缓存行大小的样本。这样,近似值将花费相似的时间(因为它受内存限制),但近似值会更好。

关于c++ - 使用 for 循环是否比在 C++ 中将内容保存在 vector 中更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783079/

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