【发布时间】:2014-06-02 13:28:04
【问题描述】:
你们知道如何优化这个循环吗?数组大小为 10,000。
int *inlink_num = calloc(npages, sizeof(int))
int **inlink_index = calloc(npages, sizeof(int *));
int *outlink_num = calloc(npages, sizeof(int));
//there is an function to initialize above three variable
for (int i = 0; i < npages; i++)
{
for (int j = 0; j < inlink_num[i]; j++)
{
sum += (store_val[inlink_index[i][j]] / (double) outlink_num[inlink_index[i][j]]);
}
rank_val[i] = constant_part + dampener * sum;
convergence = rank_val[i] - store_val[i];
threshold += (convergence * convergence);
sum = 0.0;
}
请帮忙!
【问题讨论】:
-
将
store_val更改为双精度数组可能会有所帮助。 -
store_val、inlink_index和outlink_num是如何声明的? -
store_val是如何定义的? -
将您的指针声明为
restrict可能会有很大帮助。 -
使用指针(这是 C 中的一种迭代器);-)。然后: 优化取决于这里的大小: 如果 store_val 小于 inlink_index: 创建一个与 store_val 长度相同的数组 ratios 并首先计算 ratios = store_val / outlink_num。然后按上述方法对比率进行求和。
标签: c loops optimization