Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
我基本上有两个向量,一个用于大量元素,第二个用于少量用于采样元素数据的探针。我偶然发现了要执行两个循环的顺序的问题。自然地,我认为在较大的向量上具有外部循环将是有益的
实施1:
但是,第二种实现似乎只花费一半的时间
实施2:
可能是什么原因呢?
编辑:
时间是由以下代码生成的
在插入元素数据时,我基本上要做两件事:测试到探针的距离是否在限制范围内,然后计算平均值
为了了解内存使用情况,我大约有。 10k元素是具有30个双数据成员的对象。对于测试,我使用了10个包含15个双打的探针。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
我基本上有两个向量,一个用于大量元素,第二个用于少量用于采样元素数据的探针。我偶然发现了要执行两个循环的顺序的问题。自然地,我认为在较大的向量上具有外部循环将是有益的
实施1:
for(auto& elem: elements) {
for(auto& probe: probes) {
probe.insertParticleData(elem);
}
}
但是,第二种实现似乎只花费一半的时间
实施2:
for(auto& probe: probes) {
for(auto& elem: elements) {
probe.insertParticleData(elem);
}
}
可能是什么原因呢?
编辑:
时间是由以下代码生成的
clock_t t_begin_ps = std::clock();
... // timed code
clock_t t_end_ps = std::clock();
double elapsed_secs_ps = double(t_end_ps - t_begin_ps) / CLOCKS_PER_SEC;
在插入元素数据时,我基本上要做两件事:测试到探针的距离是否在限制范围内,然后计算平均值
probe::insertParticleData (const elem& pP) {
if (!isInside(pP.position())) {return false;}
... // compute alpha and beta
avg_vel = alpha*avg_vel + beta*pP.getVel();
return true;
}
为了了解内存使用情况,我大约有。 10k元素是具有30个双数据成员的对象。对于测试,我使用了10个包含15个双打的探针。
最佳答案
当今的CPU经过严格优化,可以线性访问内存。因此,一些长循环将击败许多短循环。您希望内部循环在长向量上进行迭代。
关于c++ - C++嵌套循环性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27143919/
10-17 02:47