- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
抱歉标题不好,但实际上我想不出更好的标题(欢迎提出建议)。
我有一个大网格 (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/
我是一名优秀的程序员,十分优秀!