使用OpenMP语言优化N皇后问题求解过程(2)

2019-01-19 14:42

int main() {

omp_set_num_threads(16); for(int n=21;n<33;n++) {

int* x=new int[n];/*x[i]表示第i行的皇后所在列的位置,0<=x[i]

for(int i=0;i

if(x[i]<0 || x[i]>=n) {

cout<<\ break; }

for(int i=0;i

if(x[i]==x[j] || x[i]+i==x[j]+j || x[i]-i==x[j]-j) {

cout<<\ break; } delete[] x;

cout<

return 1; }

3. 实验结果

对以上串行和并行算法在16核主机上进行测试,得到如下表1中的数据。 N 并行执行21 22 0 4.063 23 0.016 0.062 24 0.031 1.094 25 0.031 0.14 26 0.125 1.219 27 0.297 1.453 28 1.422 10.25 29 30 31 9.218 52.938 32 38.641 373.344 0.0时间(秒) 15 串行执行0.0时间(秒) 15 0.531 2.657 5.484 218.047 表1 N皇后问题的串、并行程序的执行时间(处理器数为16)

从上述结果可以看出,在不同N情况下并行执行时间普遍要比串行执行时间少。当N为29、30、32,两者的时间差距更大。这一实验结果验证了使用OpenMP多线程编程进行优化后的效果,尤其是当处理任务比较复杂时,并行程序的优势更为明显。

4. 总结

多核时代已经到来,多线程软件也将成为主流,从上文N皇后问题的优化结果可以看出,

6

OpenMP程序设计模型提供了一种简单、可移植的方法,实现串行代码带并行代码的转换,以多线程的方式实现应用程序,从而提高资源的利用效率。使用OpenMP指令编写多线程应用程序,开发人员不需要进行复杂的线程创建、同步、负载均衡和销毁工作,甚至不需要对原程序进行过多的改动,只需要考虑哪些代码能够以多线程方式执行,以及如何重构算法以便在多核处理器上获得更好的性能等问题。并行算法的设计和负载的合理分配仍然是以后需要继续研究的重点问题。

参考文献:

1. 奎因. MPI与OpenMP并行程序设计[M]. 清华大学出版社 2004

2. 秦江波,李卫忠. 多核处理器平台上使用OpenMP编译指令优化n皇后算法. 航空计算技术 2009年03期

7


使用OpenMP语言优化N皇后问题求解过程(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:装修以后很快后悔的80件事

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: