内存如何帮助c#的大循环
本文关键字:大循环 帮助 何帮助 内存 | 更新日期: 2023-09-27 18:02:35
我有一个库来计算组列表的最佳序列,其中每个组都有要比较的SKU列表。比较逻辑很简单,只需比较其计算字段的每个循环上的sku。我使用的数学是每组总SKU的排列阶乘。顺序是这个比较循环中最重要的部分。循环是这个库中最关键的部分,这就是为什么我们使用并行循环优化循环,这样速度会更快。
所以想象一下,如果我有一个组,有4个sku = 4 x 3 x 2 x 1 = 24个序列,我需要循环找到最佳序列。比较是这样的:
- a> b> c> d
- a> b> d> c
- a> c> b> d
- a> c> d> b
- a> d> b> c
- a> d> c> b
- b> a> c> d
- b> a> d> c
- b> c> a> d
- b> c> d> a
- b> d> a> c
- b> d> c> a c> a> b> d
- c> a> d> b c> b> a> d
- c> b> d> a
- c> d> a> b
- c> d> b> a
- d> a> b> c
- d> a> c> b
- d> b> a> c
- d> b> c> a
- d> c> a> b
- 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个循环吗?
- 还有其他建议吗?
是否有可能内存正在帮助CPU完成循环上的工作?
。内存使用对性能的影响是双重的:
-
如果你访问了太多的内存,它会对性能产生负面影响,因为CPU不能很好地利用它的缓存
-
如果你知道你有很多内存,你有时可以存储一些计算的结果,这样你就不必在以后重新计算了。但是计算机一般不会自动完成,你必须修改你的程序来完成。
我不知道你是如何计算最佳序列的,但也许在计算"A> B> C> D"时,你可以记住"C> D"的结果,并在计算"B> A> C> D"时重用它,或者类似的东西。
我如何最大化所有CPU核心来帮助我的工作?
我不认为这个问题可以回答,除非看到你的代码并理解为什么它不使用所有的cpu。
由于目前我只能在1个CPU上为每个序列做并行循环,无论如何我可以使用多个CPU来做1个循环吗?
也许,这取决于循环到底做什么。
还有其他建议吗?
是的,问一个更具体的问题,最好包括你的代码。