当前位置:网站首页>有趣简单的M2处理器性能实验:Swift与C代码执行速度的比较
有趣简单的M2处理器性能实验:Swift与C代码执行速度的比较
2022-08-03 00:48:00 【大熊猫侯佩】
概述
Apple老是吹嘘自己的Swift语言有多么快,到底真相如何呢?大家可能都没有一个感性的认识。
在Mac上运行Swift与C语言编写的代码到底哪个更快呢?肯定很多小伙伴都会认为是C更快,如果真的如此,差距又有多少呢?
在Intel和M系列结构上,Swift与C语言比较又有什么质的差别呢?
在本篇,我们将用一个可能不太精确,但十分简单的例子来验证一下上面的Swift与C语言“快慢”之争。
让我们拭目以待吧!
测试代码
注意,本篇博文并不是一个在大多数环境或通用意义上代码用例的精确测试,如果大家希望这种测试,可以用专业的cpu性能测试工具来完成。
这里,我们仅用寥寥几行代码,给大家一个初步的感性体验,让小伙伴们感受到Mac的性感之处。
首先,是C语言的测试代码:
#include <stdio.h>
#include <sys/time.h>
int main() {
printf("Mac性能测试演示\n");
struct timeval tv;
for (int i = 0; i < 1000; i++) {
gettimeofday(&tv, NULL);
printf("[%d]: %ld.%d \n", i, tv.tv_sec, tv.tv_usec);
}
return 0;
}
注意,我们不能使用诸如ftime()、clock()之类的函数,因为它们精度不够。
这里,使用gettimeofday()函数,可以达到微秒级别的精度,可以基本满足我们目前的需求。
接着,是Swift语言的测试代码,就更简单了:
for i in 0..<1000 {
print("[\(i)]: \(Date.timeIntervalSinceReferenceDate)")
}
无论是C或Swift的测试代码,我们意图都是计算单次整数递增所花费的粗略时间。
再次申明:此计算比较不具有通用意义,不过很好玩很简单,略可管中窥豹而已。
喜欢较真的童鞋就别和我较真啦
Intel架构
我们首先来看Intel架构C语言的表现:

若我们只取最快的间隔周期,则可以看到最快只需2微秒左右。
再来看Swift的表现:

可以看到Swift代码最快可达到25微秒左右。
M2
现在,来测试一下M2处理器的表现,同样首先是C代码的执行结果:

可以看到,M2中C代码执行结果中,最短间隔达到了1微秒,和Intel CPU差距并不多。
最后,来看一下M2中Swift的表现:

Swift在M2的执行速度相当给力,最短间隔仅为3微秒左右,几乎达到Intel中C语言的速度。
所以,如果想充分榨干系统性能,还得靠底层的C语言;不过大多数情况下Swift还是能够满足性能要求的,更何况M2处理器上Swift有了更多加分的理由。
总结
本篇博文,我们一起在M2和Intel架构中,实验了C和Swift语言执行效率上非常简单的有趣比较。
下次有机会,可以加入汇编语言再试一下,不过那样的话微秒级别估计会不够用哦。
感谢小伙伴们一起参与这个实验小游戏,谢谢观赏,再会!
边栏推荐
猜你喜欢

30岁测试开发年薪不足80万,还要被面试官diss混得太差?

XSS攻击

嵌入式开发:嵌入式基础——’ ’和” ”的区别

提高测试覆盖率的四大步骤

Nuxt 所有页面都设置上SEO相关标签

npm运行项目dependencies were not found: core-js/modules/es6.array.fill

一个接口并发问题的模拟与复现

SAP ABAP Gateway Client 里 OData 测试的 PUT, PATCH, MERGE 请求有什么区别

麒麟信安邀您抢先看 | openEuler 志高远,开源汇智创未来-开放原子全球开源峰会欧拉分论坛最详细议程出炉

通力传动递交注册:年营收4.7亿 实控人项献忠家族色彩浓厚
随机推荐
php一维数组合并
UPC2022暑期个人训练赛第23场(Credit Card Payment)
自己做的选择
风电场运营实践 | 麒麟信安助力国华投资山东公司集控中心实现安全智慧化运营
吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第二节:神经网络基础(上)
10大领域5大过程47子过程快速记忆
[NCTF2019]SQLi-1||SQL Injection
letcode 第20题-有效的括号
从一文中了解SSRF的各种绕过姿势及攻击思路
北路智控上市首日破发:公司市值59亿 募资15.6亿
12-security退出.md
怎么做postgrsql主备?
OpenWRT设置ipv6网络
10-security登录
WRF-Chem模式调试、运行、结果后处理等遇到的各种问题
MySQL删库不跑路
做快乐的事情
使用VSCode中遇到的问题及解决办法
ASP.NET网络版进销存管理系统源码【源码免费分享】
esp32和ros2基础篇草稿-micro-ros-