我有一个.NET应用程序并行运行一系列模拟。它在做一个参数扫描,所以每个参数都有自己的
Parallel.Foreach
循环。我通常将最大并行度设置为除一个循环外的所有循环中的一个,以降低内存需求,因为每个参数的值都可能比我可用的内核多(4)。
应用程序完全受CPU限制,并且只在最后执行I/O,以写出结果。我在数据结构周围只有一个锁来捕获结果,但是很少访问(每隔几秒钟访问一次)。无论我将并行性推进多远(通过控制循环上的最大并行性),我总是得到大约50%的平均CPU使用率(大约2个内核)。
你知道怎么进行调查吗?
谢谢。