前言
最近外勤越来越多,于是手里这台15寸的MBP就显得略笨重了,所以就整了一台新的Air外出使用,16+256,因为是附机所以没有存储需求,但是没有选低配是因为看了看之前的MBP基本上物理内存使用都在10GB以上,而且SoC完全没有扩展能力,所以不得不接受了性价比极低的¥1500/+8GB选项。
到手之后自然就开始折腾,为什么对ARM架构的PC没有太犹豫也是因为作为一个喜欢折腾的人之前一直挺难受,一直以来为了保证生产力所有系统和软件都不得不使用稳定版而且轻易不敢更新版本。而现在这小家伙只要保证可以打开pdf可以播放幻灯片就可以了。
兼容性基本上还是挺遗憾的。
python3 - with numpy pandas sklearn pytorch ... | Rossetta |
JetBrain Kits | Rossetta |
gcc/g++ | fine,系统自带 |
gdb | X |
MATLAB 2020b | Rossetta |
Docker | X |
lib fftw3 | fine 源码编译安装 |
lib Eigen | fine |
cmake | fine 源码编译安装arm版本 |
Homebrew | 待验证 |
不过既然python和c/cpp都能顺利的运行起来,自然就想比较一下M1和i9的常规运算性能了。
硬件参数
- M1
8 core CPU, 7 core GPU, 16GB内存
- i9
2.3G 8 core CPU, Radeon Pro 560X 4GB, 16GB 2400MHz DDR4
1. 浮点计算
import numpy as np
import time
t1 = time.time()
a = np.random.rand(30000,30000)
t2 = time.time()
b = a*a
t3 = time.time()
c = np.sum(b)
t4 = time.time()
print(c)
print('alloc a: ',t2-t1,'s')
print('mat * mat : ',t3-t2,'s')
print('mat sum: ',t4-t3,'s')
结果
- M1
alloc a: 7.2 s
mat * mat : 10.7 s
mat sum: 12.9 s
- i9
alloc a: 7.5 s
mat * mat : 12.9 s
mat sum: 21.1 s
上边的运算参数都保证了没有产生内存交换文件(运算期间最高内存占用约13.5GB),出乎意料M1快挺多,而且目前python还是Rossetta版本。
2. 多线程计算
用Numpy的SVD来评估,因为这个SVD会根据core数量采用多线程计算。
import numpy as np
import time
t1 = time.time()
a = np.random.rand(5000,5000)
t2 = time.time()
u,s,v = np.linalg.svd(a)
t3 = time.time()
print('alloc a: ',t2-t1,'s')
print('svd : ',t3-t2,'s')
结果
- M1
alloc a: 0.21 s
svd : 46.5 s
- i9
alloc a: 0.22 s
svd : 56.87 s
跟上一个测试的乘法时间是等比的,因为SVD的线程数量和线程逻辑都简单,所以实际上这个测试验证的还是CPU的浮点效率。
3. 内存分配
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int t1 = time(0);
int i;
for(i=0;i<1024*1024;i++){
char* m1 = (char*)malloc(2*1000*1000*1000);
char* m2 = (char*)malloc(2*1000*1000*1000);
char* m3 = (char*)malloc(2*1000*1000*1000);
//m[i]=i;
free(m3);
free(m2);
free(m1);
}
int t2 = time(0);
printf("use time:%d s \n", t2-t1);
return 0;
}
结果
- M1
7s
- i9
12s
- M1 Rossetta ( i9编译的binary到M1运行)
8s
4. 内存读写
5. 线程效率
6. GPU 图形
7. 视频
8. Regression
9. CNN