C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比试
首先为免误会再次重申本测试有其局限只能测试某一应用、某一实现的结果并不能反映编程语言及其运行时的综合性能亦无意尝试这样做。而实验环境也只限于某机器、某操作系统上并不全面。而且本测试只提供运行时间的结果不考虑、不比较语言/平台间的技术性和非技术性优缺点也没有测试运行期内存。世界上的软件应用林林总总性能需求也完全不同本测试只供参考。由于本人第一次使用Python和Ruby若代码有不当之处敬请告之。当然也非常乐见其他意见。测试内容本文测试程序为一个全局光照渲染器是一个CPU运算密集的控制台应用程序(console application)功能详见前文。在前文刊出后本人进行了一点profiling、优化并把代码重新格式化。本渲染器除了有大量数学运算亦会产生大量临时对象并进行极多的方法调用(非虚函数)。本测试有别于人工合成的测试(synthetic tests例如个别测试运算、字串操作、输入输出等)是一个有实际用途的程序。移植时尽量维持原代码的逻辑主要采用面向对象范式。优化方面不进行人手内联函数(inline function)但优化了一些不必要的重复运算。测试配置硬件: Intel Core i7 9202.67Ghz(4 core, HyperThread), 12GB RAM操作系统: Microsoft Windows 7 64-bit测试名称编译器/解译器编译/运行选项VCVisual C 2008 (32-bit)/Ox /Ob2 /Oi /Ot /GL /FD /MD /GS- /Gy /arch:SSE /fp:fastVC_OpenMPVisual C 2008 (32-bit)/Ox /Ob2 /Oi /Ot /GL /FD /MD /GS- /Gy /arch:SSE /fp:fast /openmpICIntel C Compiler (32-bit)/Ox /Og /Ob2 /Oi /Ot /Qipo /GA /MD /GS- /Gy /arch:SSE2 /fp:fast /Zi /QxHostIC_OpenMPIntel C Compiler (32-bit)/Ox /Og /Ob2 /Oi /Ot /Qipo /GA /MD /GS- /Gy /arch:SSE2 /fp:fast /Zi /QxHost /QopenmpGCCGCC 4.3.4 in Cygwin (32-bit)-O3 -marchnative -ffast-mathGCC_OpenMPGCC 4.3.4 in Cygwin (32-bit)-O3 -marchnative -ffast-math -fopenmpC/CLIVisual C 2008 (32-bit), .Net Framework 3.5/Ox /Ob2 /Oi /Ot /GL /FD /MD /GS- /fp:fast /Zi /clr /TPC/CLI_OpenMPVisual C 2008 (32-bit), .Net Framework 3.5/Ox /Ob2 /Oi /Ot /GL /FD /MD /GS- /fp:fast /Zi /clr /TP /openmpC#Visual C# 2008 (32-bit), .Net Framework 3.5*C#_outrefVisual C# 2008 (32-bit), .Net Framework 3.5F#F# 2.0 (32-bit), .Net Framework 3.5JavaJava SE 1.6.0_17-serverJsChromeChrome 5.0.375.86JsFirefoxFirefox 3.6LuaJITLuaJIT 2.0.0-beta4 (32-bit)LuaLuaJIT (32-bit)-joffPythonPython 3.1.2 (32-bit)*IronPythonIronPython 2.6 for .Net 4*JythonJython 2.5.1RubyRuby 1.9.1p378* 见本文最后的7.更新一节渲染的解像度为256x256每象素作100次采样。结果及分析下表中预设的相对时间以最快的单线程测试(IC)作基准用鼠标按列可改变基准。由于Ruby运行时间太长只每象素作4次采样把时间乘上25。另外因为各测试的渲染时间相差很远所以用了两个棒形图去显示数据分别显示时间少于4000秒和少于60秒的测试(Ruby是4000秒以外不予显示)。C/.Net/Java组别静态语言和动态语言在此测试下的性能不在同一数量级。先比较静态语言。C和.Net的测试结果和上一篇博文相若而C#和F#无显著区别。但是C/CLI虽然同样产生IL于括管的.Net平台上执行其渲染时间却只是C#/F#的55%左右。为什么呢使用ildasm去反汇编C/CLI和C#的可执行文件后可以发现程序的热点函数Sphere.Intersect()在两个版本中C/CLI版本的代码大小(code size)为201字节 C#则为125字节 C/CLI版本在编译时已把函数内所有Vec类的方法调用全部内联而C#版本则使用callvirt调用Vec的方法。估计JIT没有把这函数进行内联做成这个性能差异。另外C/CLI版本使用了值类型并使用指针(代码中为引用)作参数传送。若把C#的版本的Vec方法改写为:123456789//class Vec//{//public static Vec operator (Vec a, Vec b)//}structVec{voidAdd(refVec a,refVec b,outVec c);}那么struct不用GC同时ref/out不用复制其性能会比较高。但是代码会变得很难看:1234567// 原来用运算符重载(operator overloading):a b * c d;// 改用ref/outVec e;Vec.Mul(refb,ref, c,oute);Vec.Add(refe,refd,outa);为了维持让语言正常的使用方法本实验不采用这种API风格(更新:加入了C#_outref测试詳見文末)。然而托管代码(C/CLI)的渲染时间仅为原生非括管代码(IC)的1.91倍个人觉得.Net的JIT已经非常不错。另一方面Java的性能表现非常突出只比C/CLI稍慢一点Java版本的渲染时间为C#/F#的65%左右。以前一直认为C#不少设计会使其性能高于Java例如C#的方法预设为非虚Java则预设为虚又例如C#支持struct作值类型(value type)Java则只有class引用类型(reference type)后者必须使用GC。但是这个测试显示Java VM应该在JIT中做了大量优化估计也应用了内联才能使其性能逼近C/CLI。纯C方面Intel C编译器最快Visual C慢一点点(1.19x)GCC再慢一点点(1.32x)。这结果符合本人预期。 Intel C的OpenMP版本和单线程比较达5.16加速比(speedup)对于4核Hyper Threading来说算是不错的结果。读者若有兴趣也可以自行测试C# 4.0的并行新特性。动态语言组别首先要说一句Google太强了难以想像JsChome的渲染时间仅是IC的16.12倍C#的4.94倍。我有信心用JavaScript继续写图形、物理方面的博文了。以下比较各动态语言的相对时间以JsChrome为基准。 Chrome的V8 JavaScript引擎(1.00x)大幅抛离Firefox的SpiderMonkey引擎(15.09x)。而LuaJIT(3.49x)和Lua(5.16x)则排第二和第三名。 Lua的JIT版本是没有JIT的68%并没有想像中的快但是也比Python(16.48x)快得多。曾听说过Ruby有效能问题没想到问题竟然如此严重(327.31x)其渲染时间差不多是Python的20倍。我认为本实验中不同语言的性能差异并非在于数值运算而是对象生成及函数调用。我使用Python内建的profiling功能:

相关新闻

Cadence SPB17.4 自定义标题栏:从官方文档到实战的3个关键差异点

Cadence SPB17.4 自定义标题栏:从官方文档到实战的3个关键差异点

Cadence SPB17.4 自定义标题栏实战:官方文档未提及的3个关键细节在PCB设计领域,标题栏不仅是图纸的"身份证",更是设计规范与团队协作的重要载体。Cadence SPB17.4作为行业主流工具,其官方文档虽然提供了基础操作指南&am…

2026/7/6 0:23:40阅读更多 →
【船舶航线】基于遗传算法求解船舶航线问题,目标函数:最低成本附Matlab代码

【船舶航线】基于遗传算法求解船舶航线问题,目标函数:最低成本附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、期刊写作与指导,代码获取、论文复现及科研仿真合作可私信或扫描文章底部二维码。 🍎个人主页:Matlab科研工作室 🍊个人信条&…

2026/7/6 0:23:40阅读更多 →
iOS系统更新真伪鉴别方法论:从版本号到固件签名的全链路验证

iOS系统更新真伪鉴别方法论:从版本号到固件签名的全链路验证

1. 项目概述:这不是一次常规系统更新,而是一次“静默式底盘加固”看到“iOS 26.4.2正式版”这个标题,第一反应不是兴奋,而是皱眉——iOS 版本号根本不存在 26.x 这个序列。苹果官方当前最新稳定版是 iOS 17.6(截至2024…

2026/7/6 0:23:40阅读更多 →
Seedance 2.5官网在哪?全球首发入口及核心能力一次讲清

Seedance 2.5官网在哪?全球首发入口及核心能力一次讲清

大家好,我是棉花,平时主要做 AI 视频工具测评和内容生产工作流搭建。最近这几天,很多做短视频、电商、广告和自媒体的朋友都在问我同一个问题:Seedance 2.5官网在哪?是不是已经有下载入口?到底应该去哪里等…

2026/7/6 1:18:43阅读更多 →
MCP 从零到实战 —— Claude Code 连接外部世界

MCP 从零到实战 —— Claude Code 连接外部世界

MCP 从零到实战 —— Claude Code 连接外部世界 读完这篇你会知道:MCP 到底是什么、怎么配、怎么用。没有任何抽象概念,全程实操。 一、一句话说清楚 MCP Claude Code 只能操作你本机的文件。MCP 让它能操作 GitHub、数据库、Jira、Slack……任何你能想…

2026/7/6 1:18:43阅读更多 →
DockerHub 在国内有没有替代

DockerHub 在国内有没有替代

DockerHub 在国内有没有替代 在国内,由于网络环境等原因,直接访问 Docker Hub 经常会遇到下载缓慢或连接超时的问题。不过,目前仍有多种可靠的替代方案和加速服务可供选择。 以下是为您整理的国内 Docker Hub 替代与加速方案: 1. …

2026/7/6 1:18:43阅读更多 →
微信支付V3投诉处理API封装:5个核心接口与Spring Boot集成实战

微信支付V3投诉处理API封装:5个核心接口与Spring Boot集成实战

微信支付V3投诉处理API的Spring Boot深度封装实践在当今电商和移动支付蓬勃发展的时代,微信支付作为国内主流的支付方式之一,其商户服务中的投诉处理模块对于维护良好的用户关系和品牌形象至关重要。本文将深入探讨如何基于Spring Boot框架对微信支付V3版…

2026/7/6 1:18:43阅读更多 →
Claude Science背后的产品赌注:科研工具的Agent化究竟能解决什么

Claude Science背后的产品赌注:科研工具的Agent化究竟能解决什么

去年年底,一个生物信息团队在我的观察范围内遭遇了典型的困境。他们要做单细胞RNA测序分析,工作流跨越六个工具:PubMed查文献、Jupyter写分析代码、R调用生信包、命令行提交集群任务、浏览器看结果、Slack汇报进度。 每个工具之间没有记忆&am…

2026/7/6 1:18:43阅读更多 →
大数据在校实训项目一般做什么?

大数据在校实训项目一般做什么?

“学了两年大数据,全是课本理论,简历上‘项目经验’那一栏还是空的……”“听说大三有实训,到底做什么?会不会又是‘纸上谈兵’?”今天彻底扒透:为什么大家做完实训依然没竞争力,以及如何靠CDA数…

2026/7/6 1:13:43阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →