||
最近在购置一台高性能的计算机,2颗96核CPU(AMD EPYC 9654),192G内存。只买了机器,没有额外的软件服务,价格相对比较便宜。主要是做矩阵的计算,在计算矩阵元素的时候循环也很多,所以一方面在考虑用哪个linux操作系统,另一方面是测试在AMD平台下两大编译器的性能。
作为计算服务器使用,主要是稳定,可能要用很多年,软件能用就不会更新它。可能更新一个软件就会导致出问题。查了一些资料和评论,主要用的免费系统有centos, debian, ubuntu server。不过centos已经宣布到2024年停止维护。debian系统在虚拟机中测试了一下,ifort的安装比较困难。新版的ifort只支持debian11,而debian系统一般也只支持较老版本的软件。也了解到,中科大计算中心的三组集群,其中最新的一组用的是ubuntu再加上ubuntu之前用过,决定还是用ubuntu。ubuntu安装新版本的软件比较容易。
现在新计算机还没到,在macOS上测试下fortran编译器(intel core i9处理器)。以前对gfortran和ifort进行过测试,当时的程序ifort的效率比gfortran高出很多。因为矩阵运算用得较多,今天又专门测试了fortran的内置的矩阵相乘函数matmul,发现gfortran的效率比ifort要高。都是在-O3参数下编译,
双精度实数矩阵大小n*n | ifort运算时间(s) | gfortran运算时间(s) |
3000*3000 | 5.78 | 3.25 |
4000*4000 | 13.52 | 7.71 |
5000*5000 | 26.04 | 14.94 |
可以看到,gfortran的效率接近ifort的两倍。
另外,又测试了用三重循环写的矩阵相乘,进一步对比编译器的效率
C(1:n,1:n)=0.0D0 do i=1,n do j=1,n do k=1,n C(i,j)=C(i,j) + A(i,k)*B(k,j) enddo enddo enddo
双精度实数矩阵大小n*n | ifort运算时间(s) | gfortran运算时间(s) |
2000*2000 | 1.698 | 46.33 |
3000*3000 | 5.75 | 208.7 |
4000*4000 | 13.57 | 540.6 |
从这张表上可以看到,gfortran的运行效率比ifort慢得太多了。而再对比两张表格,可以看到,ifort用两种算法的效率几乎相同,而gfortran差别巨大。
三重循环计算矩阵相乘,如果写得不好,ifort也可能会很慢。比如
do i=1,n do j=1,n tc=0.0D0 do k=1,n tc=tc + A(i,k)*B(k,j) enddo C(i,j)=tc enddo enddo
这段代码,只是将C(i,j)用一个变量代替,最后再把结果赋给C(i,j)。用ifort的效率就会大幅下降。
单纯矩阵的运算matmul函数使用gfortran进行编译运行更好,而多重循环用ifort编译会更好。对于一个综合性的大程序,ifort的综合效率会更高。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-25 19:53
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社