并行计算

时间:2013-11-14 16:00:32

标签: multithreading visual-studio-2012 parallel-processing thread-safety ilnumerics

所有

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

我希望这个符号足够清楚。

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

提前感谢,像往常一样,

GL

1 个答案:

答案 0 :(得分:1)

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

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

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

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

Settings.MaxNumberThreads = 1;

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