我有在Windows Server 2008 SE和64处理器上运行的多进程.NET(F#)科学模拟。 模拟的每一步都从1.5秒振荡到2秒。 由于每个进程必须等待其他进程,所以总体速度是最慢进程的速度(2秒*迭代次数)。 因此,我需要尽可能减less过程的振荡。
有没有办法如何强制一组进程具有完全相同的“计算时间”可用于他们的计算?
用于远程Web服务的Windows虚拟磁盘
转换.net EXE本地WIN32 EXE?
启动f#与Process.Start交互
Windows任务栏中search与我自己的结果
确定系统架构
我不知道我100%明白你想做什么。 但是对于进程间同步,您可以使用一个名为EventWaitHandle或Semaphore 。
更新每个评论
您可以使用ProcessorAffinity将进程限制到特定的处理器。
是否有可能平行2秒系列,以便你有多个模拟并行发生的“分支”?
例如:假设这是一个具有4个进程的模拟。 进程1需要2秒钟,所以直到进程1完成后才能完成。
process1---------------------------------------------- (2 sec) process2-------- (0.5 sec) process3---- (0.25 sec) process4---------------------------- (1 sec)
process1---------------------------------------------- (2 sec) process2-------- (0.5 sec) process3---- (0.25 sec) process4---------------------------- (1 sec)
在那里大部分进程正在等待进程1,这里有很多空闲时间。
对于您正在尝试的工作,是否可以同时运行多个这样的设备? 如果是这样的话,那么你可以通过其他模拟工具来利用你的空闲核心,同时等待你的长时间运行过程完成。
我不知道如何让操作系统尝试更公平地调度你的过程,但是我知道有很多关于避免你正在使用的体系结构的技术的研究,因为这个最低公因分母效应是一个主要的实践中的瓶颈。
我最喜欢的论文是Frigo和Strumpen 的多线程缓存遗忘算法的缓存复杂性 。 他们描述了诸如时空细分之类的引人入胜的技术,将大量并行计算(例如您所描述的计算)转换为任意精细的异步计算,从而使负载均衡变得毫不费力。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。