内存如何帮助c#的大循环

本文关键字:大循环 帮助 何帮助 内存 | 更新日期: 2023-09-27 18:02:35

我有一个库来计算组列表的最佳序列,其中每个组都有要比较的SKU列表。比较逻辑很简单,只需比较其计算字段的每个循环上的sku。我使用的数学是每组总SKU的排列阶乘。顺序是这个比较循环中最重要的部分。循环是这个库中最关键的部分,这就是为什么我们使用并行循环优化循环,这样速度会更快。

所以想象一下,如果我有一个组,有4个sku = 4 x 3 x 2 x 1 = 24个序列,我需要循环找到最佳序列。比较是这样的:

  1. a> b> c> d
  2. a> b> d> c
  3. a> c> b> d
  4. a> c> d> b
  5. a> d> b> c
  6. a> d> c> b
  7. b> a> c> d
  8. b> a> d> c
  9. b> c> a> d
  10. b> c> d> a
  11. b> d> a> c
  12. b> d> c> a
  13. c> a> b> d
  14. c> a> d> b
  15. c> b> a> d
  16. c> b> d> a
  17. c> d> a> b
  18. c> d> b> a
  19. d> a> b> c
  20. d> a> c> b
  21. d> b> a> c
  22. d> b> c> a
  23. d> c> a> b
  24. d> c> b> a

上面是一个组中的4个sku,假设我有几个组,每个组中有4个以上的sku。我的库必须做的排列阶乘如下:

  • 5个sku = 120个序列
  • 6 sku = 720序列
  • 7 sku = 5040序列
  • 8 sku = 40,320序列
  • 9个sku = 362,880个序列
  • 10 sku = 3,628,800个序列
  • 11 sku = 39,916,800个序列
  • 12 sku = 479,001,600个序列

我有一个在AWS上运行的作业,有36个CPU内核和64 GB内存。作业包含2组,A组3个sku, B组13个sku,耗时2天多,还在计算中。我从服务器收集到的结果是:

  • CPU使用率:18个CPU内核使用
  • 内存使用率:40%已使用

问题:

  • 是否有可能内存正在帮助CPU完成循环上的工作?
  • 我如何最大化所有CPU核心来帮助我的工作?由于目前我只能在1个CPU上为每个序列做并行循环,无论如何我可以使用多个CPU来做1个循环吗?
  • 还有其他建议吗?

内存如何帮助c#的大循环

是否有可能内存正在帮助CPU完成循环上的工作?

。内存使用对性能的影响是双重的:

  1. 如果你访问了太多的内存,它会对性能产生负面影响,因为CPU不能很好地利用它的缓存

  2. 如果你知道你有很多内存,你有时可以存储一些计算的结果,这样你就不必在以后重新计算了。但是计算机一般不会自动完成,你必须修改你的程序来完成。

    我不知道你是如何计算最佳序列的,但也许在计算"A> B> C> D"时,你可以记住"C> D"的结果,并在计算"B> A> C> D"时重用它,或者类似的东西。

我如何最大化所有CPU核心来帮助我的工作?

我不认为这个问题可以回答,除非看到你的代码并理解为什么它不使用所有的cpu。

由于目前我只能在1个CPU上为每个序列做并行循环,无论如何我可以使用多个CPU来做1个循环吗?

也许,这取决于循环到底做什么。

还有其他建议吗?

是的,问一个更具体的问题,最好包括你的代码。