文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#、Java和Python性能比较分析

2023-06-27 10:28

关注

本篇内容介绍了“C#、Java和Python性能比较分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

实验

这里使用三种语言进行矩阵乘法。 矩阵的大小为2048 x 2048(即每个矩阵的乘法和加法运算为8,589,934,592),我为它们填充了0.0到1.0之间的随机值(使用随机值而不是对所有三种语言使用完全相同的矩阵的影响可以忽略不计)。每个实验运行了五次,并计算了平均运行时间。

C代码

#include <stdlib.h>#include <stdio.h>#include <time.h>#define n 2048double A[n][n];double B[n][n];double C[n][n];int main() {    //populate the matrices with random values between 0.0 and 1.0    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            A[i][j] = (double) rand() / (double) RAND_MAX;            B[i][j] = (double) rand() / (double) RAND_MAX;            C[i][j] = 0;        }    }    struct timespec start, end;    double time_spent;    //matrix multiplication    clock_gettime(CLOCK_REALTIME, &start);    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            for (int k = 0; k < n; k++) {                C[i][j] += A[i][k] * B[k][j];            }        }    }    clock_gettime(CLOCK_REALTIME, &end);    time_spent = (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1000000000.0;    printf("Elapsed time in seconds: %f \n", time_spent);    return 0;}

Java代码

import java.util.Random;public class MatrixMultiplication {    static int n = 2048;    static double[][] A = new double[n][n];    static double[][] B = new double[n][n];    static double[][] C = new double[n][n];    public static void main(String[] args) {        //populate the matrices with random values between 0.0 and 1.0        Random r = new Random();        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                A[i][j] = r.nextDouble();                B[i][j] = r.nextDouble();                C[i][j] = 0;            }        }        long start = System.nanoTime();        //matrix multiplication        for (int i = 0; i < n; i++) {            for (int j = 0; j < n; j++) {                for (int k = 0; k < n; k++) {                    C[i][j] += A[i][k] * B[k][j];                }            }        }        long stop = System.nanoTime();        double timeDiff = (stop - start) * 1e-9;        System.out.println("Elapsed time in seconds: " + timeDiff);    }}

python代码

import randomimport timen = 2048#populate the matrices with random values between 0.0 and 1.0A = [[random.random() for row in range(n)] for col in range(n)]B = [[random.random() for row in range(n)] for col in range(n)]C = [[0 for row in range(n)] for col in range(n)]start = time.time()#matrix multiplicationfor i in range(n):    for j in range(n):        for k in range(n):            C[i][j] += A[i][k] * B[k][j]end = time.time()print("Elapsed time in seconds %0.6f" % (end-start))

如何编译与运行

#Cgcc MatrixMultiplication.c -o matrix./matrix#Javajavac MatrixMultiplication.javajava MatrixMultiplication#Pythonpython MatrixMultiplication.py

运行时间

根据这些结果,CJava慢2.34倍,PythonJava慢33.34倍。

等待!!! C不是应该最快的吗???

实际上,这是不公平的比较。 当我们编译Java程序时,即使没有任何优化标志,Java JIT(即时)编译器也会自动执行优化。 但是,对于GCC(编译C程序),情况并非如此,我们必须显式设置优化标志。

因此,在编译C程序时使用了-O2-O3优化标志,并再次进行了实验。

新的运行时间

现在,Java代码比C[-O3]慢1.69倍,而Python代码慢56倍。 我做出了正确的决定(或者很幸运:-)),选择了C而不是其他编程语言。

讨论结果

“C#、Java和Python性能比较分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯