1

全部,

我想使用 Ilnumerics 进行并行计算。它们是完全解耦的。我需要它来 1) 优化器的随机重启(尤其是随机优化器,例如模拟退火):从不同点并行解决相同的优化问题:例如:argmin_x f(x) 从 x0_h h = 1,2 开始, ..,K 2) 在一组非耦合数据上运行相同的优化;例如,考虑以下无约束优化问题:给定一个函数 f (R^dx R^p) --> R of x \in R^d 和 p 个参数 p\in R^d 求解 argmin_x f(x,p_h ), h = 1, 2, ..., K。

我希望符号足够清楚。

是否可以并行运行这个循环,每次执行一些涉及 ILnumerics 对象的 lambda 表达式并利用多核架构?

像往常一样提前致谢

总帐

4

1 回答 1

1

这取决于:ILNumerics 自动并行化数学表达式,例如

C = A + B[":;2"] / 0.4 * pinv(C) ... 

通过尝试使用线程池中的多个线程并行运行此类表达式的多个实例,您最终会因太多线程竞争 CPU 时隙而产生大量争用。结果,您的算法可能比没有并行化的情况下运行得更慢。

因此,在这种情况下,您可以禁用 ILNumerics 为您透明地执行的内部自动并行化:

Settings.MaxNumberThreads = 1;

之后,像上面这样的表达式将在单个线程中进行评估。但是,现在您负责在多个线程上分配计算任务。此外,您必须相应地锁定您的数组 - 因为 ILNumerics 通常不是线程安全的!这允许您同时写入输出数组,但也带来了必须实施正确锁定方案的负担......

于 2013-11-14T17:54:16.457 回答