Evg*_*nov 1 multithreading jit multicore .net-4.5
我想知道ProfileOptimization(也称为多核JIT)如何在多线程应用程序中工作.
文档说ProfileOptimization跟踪和记录在应用程序执行期间调用的方法.但是如果有多个线程同时执行呢?在这种情况下,方法调用顺序可能因运行而异.因此,新数据将始终覆盖配置文件.
这是否意味着在这种情况下使用多核JIT效率不高?或者可能是ProfileOptimization只跟踪调用了ProfileOptimazation.StartProfile(...)的线程的方法调用?或者是其他东西?
有人可以解释一下ProfileOptimization在这种情况下的表现吗?
目前还不是很清楚为什么你认为线程是一个问题,我只想了解一下这个功能.抖动的传统方式是通过在方法开始运行之前及时编译方法,只需几分之一秒.这与多核JIT选项不同,它必须更早地编译方法,以便它可以利用运行抖动的额外内核.问题是,应该尽早编译什么方法?显然,如果它编译错误的一个很少获得,这个方法只能在程序开始时调用几分钟.或者更糟糕的是,从未被称为.
要弄清楚它应该采用什么方法,它需要提前知道将运行什么方法.时间机器当然不是一个选择.通过了解之前发生的事情,它只能在一定程度上准确地猜测到这一点.假设当程序第二次运行时,它将以大致相同的顺序调用方法.
因此,您对StartProfile()的调用开始记录jitted方法的名称,只是按照它们第一次运行的顺序并进行编译.方法名称列表存储在文件中.下次运行程序并再次调用StartProfile()时,它现在开始使用该文件中的数据来为其他核心工作,按照它们在列表中出现的顺序预编译方法.
这个方法在第一次运行之前已经编译好了,并且没有任何延迟.从而改善程序的热启动时间.它不一定是,当它还没有被编译时,什么都不会出错,传统上发生的正常的即时编译会照顾它.它只是效率不高,因为它可能是.
如果你的程序在启动时非常不确定,那么从一次运行到下一次运行的代码的执行路径就会大不相同,那么,多核jit对你的启动时间有利的可能性就会很低.抖动将预先编译错误的方法.这是非常不寻常的,真正的程序在启动时很少表现出来.这与线程没有任何关系,它们不太可能比主线程更具确定性.实际上相反,主线程预计会与用户交互,这可能表现得像人类一样非理性,而你的工人则不然.而且一般来说线程存在问题,它们倾向于采用隐藏线程竞争错误的执行模式.
请记住,所有这一切只对您的计划生命中的第一个,给予或采取,30秒有关.只有热启动时间才有意义.当抖动率下降得太低时,抖动会完全停止记录.
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |