我有一个嵌套的for循环,可以执行一些计算,并且数学已经在很大程度上得到了简化,但是我仍然存在性能问题,我不确定我能解决。我不相信它可以解决,因为这些for循环执行的次数很多。现在我不熟悉使用任何分析工具来帮助确定减速发生在哪些内部,但我相当确定它只是这些循环执行的次数。
我非常感谢帮助减少此代码并提高此代码的性能。我试图远离HPC或高度并行化的解决方案,但如果这是使其真正有效的唯一方法,那么我将考虑走这条路。
这里的代码是X = 20,000和N_zero = 45,420(从实际测试中提取的值):
Dictionary<decimal, int> n_alpha = new Dictionary<decimal, int>();
Random rand = new Random();
decimal r = 0m;
decimal check=0m;
for (int i = 0; i < X; i++)
{
B = N_0 = N_1 = N0_ = N1_ = 0;
for (int j = 0; j < N_zero; j++)
{
// need a random decimal value between 0 and 1
r = (decimal)rand.Next() / int.MaxValue;
if (r <= r1)
{
N0_ += 1;
N_0 += 1;
}
else if (r1 < r && r <= r2)
{
B += 1;
N0_ += 1;
N_1 += 1;
}
else if (r2 < r && r <= r3)
{
B += 1;
N_0 += 1;
N1_ += 1;
}
else if (r > r3)
{
N1_ += 1;
N_1 += 1;
}
}
check = N_0 * N_1 * N0_ * N1_;
if (check != 0)
{
decimal a = 1 - (B * N_zero) / ((N_0 *N1_) + (N0_ * N_1 ));
// technically only tracking 4 decimal points, so key should reflect this
decimal key = Math.Round(a, 4);
if (n_alpha.ContainsKey(key))
{
n_alpha[key] += 1;
}
else
{
n_alpha.Add(key, 1);
}
}
}