文档详情

使用MATLAB并行计算功能提高多核系统性能.doc

发布:2017-08-27约3.57千字共4页下载文档
文本预览下载声明
使用MATLAB并行计算功能提高多核系统性能?? 2009-12-13 22:12:11|??分类: matlab相关 |??标签: |字号大中小?订阅 maxNumCompThreads 命令? 由于处理器时钟频率的限制,增加核并不意味着是计算性能的提高。为了充分利用新的多核硬件在性能上的优势,软件的基层结构需要向并行计算转换。MATLAB并行计算工具箱就是这种需求的产物,它能很好地实现在多核系统上进行并行运算。文章以典型的数值计算问题为例描述如何使用基本的两种并行运算方式:线程和并行for循环。 典型数值计算问题 ????? 为了举例说明这两种方法,我们使用MATLAB 测试一个有关Girko圆定律的假设。Girko圆定律的内容是:一个N×N的随机矩阵(它的元素服从正态分布)的特征值位于半径为的圆内。假设Girko圆定律能被修改应用到奇异值上。这个假设是合理的因为奇异值是一个变换了的矩阵的特征值。首先我们用MATLAB代码实现Girko圆定律的一个实例: N = 1000; plot(eig(randn(N)) / sqrt(N), ‘.’); 这段代码运行后得到图1,图上每个点代表复平面上一个特征值。注意所有的特征值都位于半径为1 ,圆心在轴的原点的圆内,特别指出的是结果与Girko圆定律是一致的,特征值的幅值没有超过矩阵维数的平方根。 ? 图1 大小为1000的随机矩阵的特征值在半径为sqrt(1000)的圆内 ????? 为了将Girko定律应用到奇异值分解上,我们用MATLAB生成随机矩阵,然后估算它们的奇异值,看是否能基于数值计算阐明这个假设。我们用任意变量N计算max(svd(randn(N)))的值,然后在结果中寻找规律,而这个规律是可以用奇异值分解的理论解释的。 ????? 通过下面的循环产生正规随机矩阵,并计算它们的奇异值: y = zeros(1000,1); for n = 1:1000 ?y(n) = max(svd(randn(n))); end plot(y); ????? 在单核计算机上运行这段循环代码时需要15分钟多的时间。为了减少计算时间,我们用线程和并行? for循环在多核计算机上运行这段循环代码,然后再来比较性能结果。 使用线程 ????? 线程是在多核计算机上进行并行计算的软件解决方案,但是需要记住的一点是多线程和多核处理器不是同一个概念。通常线程的数量和多核的数量一致时性能是最好的,但是也有线程比核少的情况。我们将通过实验去确定对于我们的计算所需的最佳的线程的个数。 ????? 运行上面的代码,并通过MATLAB界面属性窗口或者使用maxNumCompThreads()函数去调节线程的个数。图2 显示了不同线程数量对应的结果。除了时间,还有加速情况和并行效率。前者是多核执行时间与单核执行时间的比率,理想地,我们期望在N个核上能达到N倍。后者是加速倍数与核的个数的比率,理想地,我们期望能达到100%。 ? 线程个数 运行循环所需时间? 加速倍数? 效率? 1 902.6 1.00?? 100% 2 867.2 1.04? 52% 3 842.3? 1.07? 35% 4 862.3 1.05? ?26% ? 图2 不同线程数量对应的代码性能 ????? 结果呈现混合型的特点。使用线程确实能提高计算的速度,但是在我们的例子,只有对svd()的调用是被并行计算的。这是因为MATLAB所支持的线程是有限制的:用户不能决定代码的哪部分进行并行运算。 ????? 一方面,我们使用多核在不改变代码的情况下加快了计算的速度。另一方面,当增加内核而并没有减少执行时间时就意味着是对成本的浪费。这个时候,我们需要另一种并行运算方法。 使用并行for循环 ????? Parfor循环,即并行for循环,在简单计算中有大量循环语句时是非常有用的。使用Parfor需要并行计算工具箱的支持。图3 是用Parfor语句和前面代码的对比。 ? y?= zeros(1000,1); for n = 1:1000 ?y(n) = max(svd(randn(n))); end plot(y);?? y = zeros(1000,1); parfor n = 1:1000 ?y(n) = max(svd(randn(n))); end plot(y);? ? 图3 左边:原来的代码? 右边:用parfor实现的循环语句 ????? 就像maxNumCompThreads()命令可以控制多核方法的并行运算,matlabpool命令能够控制parfor指令的并行行为。Matlabpool指令创建并行任务执行的环境,在此环境下并行for循环能够从MATLAB 的命令提示符交互执行。 ????? Parfo
显示全部
相似文档