Multithreading ILNumerics.Misc.ILThread池中是否存在间歇性异常?

Multithreading ILNumerics.Misc.ILThread池中是否存在间歇性异常?,multithreading,ilnumerics,Multithreading,Ilnumerics,我最近升级到了ILNumerics版本4.3。在使用ILNumerics数组时,我看到上面的异常经常出现在我的应用程序中。不幸的是,我无法在调试模式下复制它,因此不确定是哪部分代码触发了它 有没有人有类似的问题?另外,我还没有修改任何ILNumerics默认设置 有什么建议可以试试吗?用最新版本试试!如果这没有帮助,请配置要明确使用的线程数,比如说“2”。这样即使在调试模式下也可以启用多线程。这样,您就可以重现异常并找到导致异常的区域 在调试模式下使用多线程可能会导致IDE中出现奇怪的行为。尤其

我最近升级到了ILNumerics版本4.3。在使用ILNumerics数组时,我看到上面的异常经常出现在我的应用程序中。不幸的是,我无法在调试模式下复制它,因此不确定是哪部分代码触发了它

有没有人有类似的问题?另外,我还没有修改任何ILNumerics默认设置


有什么建议可以试试吗?

用最新版本试试!如果这没有帮助,请配置要明确使用的线程数,比如说“2”。这样即使在调试模式下也可以启用多线程。这样,您就可以重现异常并找到导致异常的区域


在调试模式下使用多线程可能会导致IDE中出现奇怪的行为。尤其是在使用即时窗口时。所以除非真的有必要,否则最好不要使用这种方法。

我也有同样的问题,而且这种情况只发生在生产机器上。我认为问题在于多线程。我猜您的代码中可能有类似Parallel.ForEach的内容

看看他们的官方文件:

为了最大限度地提高数值算法的执行速度,MaxNumberThreads的值应等于系统上实际处理器内核的数量。对于使用超线程的处理器,虚拟内核上的数量可能更高。然而,由于这些虚拟核共享一定的执行资源,因此无法有效地对其进行并行利用。在这种情况下,例如在windows任务管理器中出现的“核心”数量具有误导性,应将独立核心的真实数量用于MaxNumberThreads。请咨询您的处理器供应商,以了解您的系统使用了多少独立内核

由于.NET无法可靠地确定独立核的数量,因此ILNumerics在所有多核计算机上默认为2个核。因此,应手动设置此设置,以便在多核计算机上更好地利用处理器

如果您的算法使用自定义并行执行模型,则可能需要将此值设置为“1”。ILNumerics将运行单线程而不是-让您可以自行配置并行线程上的执行

此值的设置还影响任何非托管优化支持库(例如ILNumerics内部使用的MKL)的相应值

[数字核心模块]


您可以尝试将上述选项设置为1。

虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。@Odedra,谢谢您的建议!刚刚更新了帖子。