精华内容
下载资源
问答
  • CUDA,C++,Java,Python,Fortran运行速度比较

    千次阅读 2018-04-24 16:05:44
    通过计算100万以内素数的运行时间比较这5种语言的运行速度。 每种语言运行30次,取平均值。由于python和fortran的运行速度和Java和C++运行差距过大,python只计算了3次,Fortran运行了10次. 《C++,Java,Python,...

    通过计算100万以内素数的运行时间比较这5种语言的运行速度。

    每种语言运行30次,取平均值。由于python和fortran的运行速度和Java和C++运行差距过大,python只计算了3次,Fortran运行了10次.

    C++,Java,Python,Fortran到底哪个更快?

    C++的速度比Java2.1%:来自计算100万以内质数的实验数据对比

    各种语言的语法要求不同,算法只能尽可能写的一致。

    这两篇文里对前期的实验有更详细的解释。


    CUDA统计了核函数的运行时间,和数据从GPU传回CPU的时间

    比如第一组数据


    CUDA核函数运行时间ms CUDA数据从GPU到CPU的时间ms
    287 4190

    用时287毫秒GPU就把100万以内的素数程序运行完了,又用了4190毫秒这些结果从GPU传回CPU。

     

    具体数据


    CUDA核函数运行时间ms CUDA数据从GPU到CPU的时间ms c++(不显示中间过程ms) 显示过程ms java(不显示中间过程ms) 显示过程ms python(不显示中间过程ms) fortran(不显示中间过程ms) 显示过程ms
    287 4190 967 58228 844 1624 4625593 100717 109126
    172 4099 738 57315 549 1716 4492283 102039 109546
    141 4173 736 56691 929 1833 5211503 101634 108775
    161 4153 784 57116 862 1884 * 100651 122592
    145 4097 768 56679 866 1801 * 101487 121870
    154 4145 888 81498 922 1801 * 101261 121646
    125 4152 713 79003 860 1792 * 101379 120226
    138 4105 881 79574 833 1891 * 100606 110631
    125 4167 962 79737 851 1806 * 106303 108145
    172 4093 875 78760 916 1894 * 94476 108237
    156 4101 729 78189 786 1807  
    172 4109 846 82891 735 1777  
    148 4040 860 79148 785 1745
    141 4075 870 76569 878 1737
    141 4088 788 79128 754 1770
    174 4117 779 72847 828 1895
    159 4122 731 74039 852 1766
    125 4194 656 72004 919 1863
    125 4122 835 76723 858 1979  
    156 4074 839 77570 857 1882
    141 4177 840 70929 924 1747  
    149 4128 833 73277 952 1861
    156 4100 900 73976 659 1765
    141 4175 747 73794 783 1830
    125 4092 795 73472 813 1764
    125 4157 849 70584 769 1784
    121 4067 832 72319 834 1740
    125 4112 809 71475 892 1810
    173 4082 834 72823 818 1808
    158 4037 766 71847 834 1684
    平均  
    151.033333 4118.1 815 72606.8333 832.066667 1801.86667 4776459.67 101055.3 114079.4
     
    1 * 5.39615979 * 5.50915913 * 31625.2019 * 755.325977


    计算结果

    CUDA   >   C++   >   Java    >   Fortran   >   Python

    151       <   815    <   832     <   114079  <   4776459

    1           <    5.40   <   5.5      <   755        <    31625

    也就是对这道题来说CUDA的速度是C++的5.4倍,是Java的5.5倍 ,是Fortran的755倍,是Python 的31625倍。相比较Java和C++相当于节省了80%的时间,或者一台机器当5台用。

    具体程序


    #include "book.h"
    #include "cuda_runtime.h"
    #include "cpu_bitmap.h"
    
    #include<iostream>
    #include <time.h>
    
    using namespace std;
    
    
    #define DIM 1000
    
    /****************************************/
    
    
    __device__ int julia(int x ,int y){
    
    
         int  j=2; 
         int i=x*DIM+y;
        
        int a=0;
       
           
            for(j=2; j <= (i/j); j++) {
                if(!(i%j)) {
                    break; 
                }
            }
            
            
            if(j > (i/j)) {
           
             return 1;
            }
            
           
            if(j <= (i/j)) {
           
             return 0;
            }
            
           
     }
     
     
     
     
     __global__ void kernel(unsigned char *ptr){
     
     int x=blockIdx.x;
     int y=blockIdx.y;
     int offset=x+y*gridDim.x;
     
     int juliaValue=julia(x,y);
     
     //printf("%d , %d\n " ,offset , juliaValue);
     
     ptr[offset*4+0]=255*juliaValue;
     ptr[offset*4+1]=0; 
     ptr[offset*4+2]=0;  
     ptr[offset*4+3]=255;
     
     }
     
     
     
     
     
     
     int main(void){
     
    clock_t start,end1,end2; 
    start=clock();
    
    
     
     CPUBitmap bitmap(DIM,DIM);
     
     unsigned char *dev_bitmap;
     
     HANDLE_ERROR (cudaMalloc( (void**)&dev_bitmap,bitmap.image_size()));
     
     dim3 grid(DIM,DIM);
     
    
     
     
     kernel<<< grid,1>>>(dev_bitmap);
     
     end1=clock();
     cout<<(end1-start)*1000/CLOCKS_PER_SEC <<endl; 
     
     HANDLE_ERROR (cudaMemcpy (bitmap.get_ptr(),dev_bitmap,bitmap.image_size(),cudaMemcpyDeviceToHost ));
                               
      end2=clock();
     cout<<(end2-end1)*1000/CLOCKS_PER_SEC <<endl;        
                           
                               
     bitmap.display_and_exit();
     
     
     
     HANDLE_ERROR (cudaFree(dev_bitmap));
     
    
    
     
     
     }



    展开全文
  • 【java】JAVA与C/C++运行速度对比分析

    万次阅读 热门讨论 2017-10-21 17:16:51
    这篇博文是我早再17年刚接触java时候写的,当时是和实验室一位小伙伴无聊中瞎逼讨论,想着java和c的运行速度做个对比,所以写了一些东西;没想到获得好几位网友对我的留言指导,很是感谢; java确...

    都说Java是一门解释性 语言,而c/c++是编译性语言。刚开始说的我一愣一愣的,后来经过一番与同学的探讨明白了一些,如果有不足之处,还请诸位提出。

    改正:

    得到好几位同学的批评指导,我很是感谢。这篇博文是我早再17年刚接触java时候写的,当时是和实验室一位小伙伴无聊中瞎逼讨论,想着java和c的运行速度做个对比,所以写了一些东西;没想到获得好几位网友对我的留言指导,很是感谢;

    java确实是编译型语言,但也有解释部分,通过JVM保证数据的一致性,也确保Java的平台无关性;java中有JIT编译器,将我们编写好的源码编译成字节码,然后再装载到JRE,JRE再对字节码进行解析。

    具体可以参考java程序编译和运行

     

     

    #include<stdio.h>
    int main() {
         printf("Hello World!");
    }

    一下是oj平台测试结果,可以看到c语言编译执行的速度,平均用时大概在2s吧,而且内存消耗也比较小

     

     

     

     

    public class Main {
         public static void main(String[] args) {
                  System.out.prinln("Hello World!");
    }
    }

    一下是java程序运行结果,可以清除的看到耗时明显是c运行耗时的倍数关系,内存消耗也很多。

     

     

    综合分析:java是解释性语言,它需要将源代码转换成.class字节码,然后再有JVM(Java虚拟机)在执行,此时启动JVM耗时大概需要80s+运行HelloWorld.java代码40s.这个代码运行大搞耗时120s左右。c语言在运行过程中需要编译、链接、运行,生成.exe文件可以直接在cpu运行不需要经过任何系统翻译。【未完待续】

    展开全文
  • 如何提升应用程序的运行速度

    千次阅读 2018-06-28 18:45:20
    对于对吞吐量和延迟有极致追求的程序来说,提升应用程序的运行速度无疑能够显著增强其核心竞争力。下面就本人目前的认识简要介绍如下,有不足之处,还望指正。 阻止CPU的切换 CPU的切换会给成勋的运行带来非常大的...

    对于对吞吐量和延迟有极致追求的程序来说,提升应用程序的运行速度无疑能够显著增强其核心竞争力。下面就本人目前的认识简要介绍如下,有不足之处,还望指正。

    阻止CPU的切换


    CPU的切换会给成勋的运行带来非常大的损耗,主要是因为CPU切换带来的是CPU对应的内存数据的洗礼,当程序运行的CPU发生切换时,由于目前的CPU架构大部分都是NUMA架构,内存控制器天然的会把内存进行切割,固定分配到各个CPU,这就使得如果运行程序的CPU发生切换时,就需要重建页表,以建立虚拟内存和实际物理内存之间的映射关系,而这会极大的影响程序的运行速度。

    解决方案:
    为应用程序绑定CPU。

    依据应用程序的特点开启大页内存


    目前操作系统的内存都比较大,动辄几十G非常常见,如果应用程序属于高内存占用型,那么使用默认的内存分页大小(4KB)会使得虚拟内存和物理内存之间的页表变大,增加了内存地址的检索时间,同时也增大了快表失效的概率,如此将会增加CPU和内存交互的耗时,从而影响应用程序的响应时间。

    当然对于内存占用比较小,且内存访问不随机的应用程序,则不需要开启大页内存,因为该类应用程序不会出现块表失效的可能或者说极少出现。

    解决方案:
    开启操作系统的大页内存。

    依据应用场景合理控制内存分配策略


    NUMA架构决定了CPU对于local access的时间远低于remote access,所以如果能够根据应用场景合理的控制内存分配策略,同时配合CPU的绑定机制,可以使得应用程序在指定的CPU上运行且改CPU不会remote access去访问其他节点的内存,那么就能够最大限度的提升应用程序的运行速度。

    NUMA架构


    在NUMA架构出现前,CPU欢快的朝着频率越来越高的方向发展。受到物理极限的挑战,又转为核数越来越多的方向发展。如果每个core的工作性质都是share-nothing(类似于map-reduce的node节点的作业属性),那么也许就不会有NUMA。由于所有CPU Core都是通过共享一个北桥来读取内存,随着核数如何的发展,北桥在响应时间上的性能瓶颈越来越明显。于是,聪明的硬件设计师们,先到了把内存控制器(原本北桥中读取内存的部分)也做个拆分,平分到了每个die上。于是NUMA就出现了!

    NUMA中,虽然内存直接attach在CPU上,但是由于内存被平均分配在了各个die上。只有当CPU访问自身直接attach内存对应的物理地址时,才会有较短的响应时间(后称Local Access)。而如果需要访问其他CPU attach的内存的数据时,就需要通过inter-connect通道访问,响应时间就相比之前变慢了(后称Remote Access)。所以NUMA(Non-Uniform Memory Access)就此得名。

    这里写图片描述

    展开全文
  • 比较Java和C++的运行速度

    千次阅读 2015-05-11 21:57:00
    因为Java是解释执行的,所以,几乎所有的教科书都说,Java比C++运行速度慢!可是,实际上,是这样的吗?实践是检验真理的唯一标准。 实验环境:硬件:Intel i5 3230M双核处理器,2.6GHz 4GB DDR3内存 软件:Linux ...

    因为Java是解释执行的,所以,几乎所有的教科书都说,Java比C++运行速度慢!可是,实际上,是这样的吗?实践是检验真理的唯一标准。

    实验环境:硬件:Intel i5 3230M双核处理器,2.6GHz 4GB DDR3内存   软件:Linux Ubuntu14.04 / Codeblocks / Eclipse

    C++ code:

    #include <iostream>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    /*
    *   Test C++ running speed
    */


    int main()
    {
        int i,j;
        double d =0;
        int limit =6;
        clock_t start , finish;
        // begins
        start =clock();
        for(i=0;i<limit*10000;i++)
            for(j=0;j<10000;j++)
                d = d + 0.001;
        finish =clock();
        // output
        double time = ( finish - start ) * 1000.0 / CLOCKS_PER_SEC ;
        cout<<"Time used:"<<time<<" ms"<<endl;


        return 0;
    }

    实验结果: 1780ms(平均值)

    Java code:

    /*
     * This program aims to test Java running speed !
     */
    public class Test {


    public static void main(String[] args) {
    int i,j;
       double d =0;
       int limit =6;
       long start , finish ;
       // begin testing
       start =System.currentTimeMillis();
       for(i=0;i<limit*10000;i++)
        for(j=0;j<10000;j++)
        d = d + 0.001;
       finish =System.currentTimeMillis();
        long time = finish - start;
       //output
       System.out.println("Time used:"+time+" ms");
       System.out.println("D value:"+d );
    }
    }

    结果:

    580ms(平均值)

    关于实验结果的详细解释,参考:

    http://blog.csdn.net/yongzhewuwei_2008/article/details/1387476

    总结:综合考虑,Java比C++更快!

    展开全文
  • 测试方法:连续运行10000次,取平均值 规律:尽量使用浮点数据进行处理,因为函数处理前会先转为浮点类型,该操错也耗时   1、寻找大值最小值   minMaxLoc 对于CV_32F类型,0.25ms,输入整型数据会大大增加...
  • Java VS C/C++ 运行速度的对比

    万次阅读 2018-03-18 08:57:42
    http://blog.sina.com.cn/s/blog_99baab530102wj4e.htmlJava与C++相比的优点在于:u Java比C,C++简单,学起来比C\C++...所以访问数组,Java都会进行边界检查,更安全,但牺牲了速度。同时因为Java中所有类都会继承O...
  • 综合性能方面(数据安全以及速度方面), 肯定是RAID5比较好;数据读取方面,RAID1最快;数据安全方面,RAID1最好;数据写入方面,RAID0最快。RAID5兼备这些优点。 认识磁盘阵列 RAID 一、功能 1 对磁盘高速...
  • 目录 快速排序与随机化快速排序. ...数据相对于其多运算的平均值的波动. 11 总结. 13 问题与不足. 13 参考文献. 13 快速排序与随机化快速排序 在计算机科学与数学中,一个排序算法(英语:S
  • [b]测试方法[/b] ...为了得到更合理的数据,采用各执行5次(第一次执行除外),然后取平均值。如下为测试结果: [b]语言[/b] [b]执行时间[/b] [b]平均时间[/b] asp.net 31ms 15ms 31ms 15ms 15ms 21ms ...
  • RTX解决方案-给那些在windows操作系统下需要对时间进行精准控制且需要提高运行速度的应用首先,Windows XP 无法保证一个很准确的Timer Clock的触发信号,特别是在CPU的加载很重的时候,给出的Sleep(1)尤其不准确。...
  • 上机内容:C++程序的编写和运行 上机目的:掌握简单C++程序的编辑、编译、连接和运行的一般过程 我的程序: /* * 程序的版权和版本声明部分: * Copyright (c) 2013, 烟台大学计算机学院 * All rights ...
  • PS原生支持苹果M1Mac,速度提升50%

    千次阅读 多人点赞 2021-03-11 13:52:14
    Adobe 称,在 M1 Mac 上,新版 Photoshop 的一些功能的平均运行速度是类似配置英特尔版本的 1.5 倍。Adobe还表示将与苹果合作,进一步优化性能。 IT之家了解到,新版 Photoshop仍然有一些功能不能在新的M1芯片上...
  •   STM32系列芯片(Cortex-M3)有三级流水线,指令周期不定,ARM给出的Cortex-M3核单片机的平均执行速度是1.25MIPS/Mhz。   MIPS的全称是Million Instructions Per Second,每秒百万指令(西方或者国际上的计量...
  • 我们用matlab编写程序进行数据运算的时候经常会遇到这种情况,就是编写完立马运行,运行速度会非常快,我们感到很满意。但是运行一段时间后,速度就不是那么理想了,恨不得推他一把。这是什么原因呢?通过一段时间的...
  • 地铁相关术语

    千次阅读 2019-11-07 19:15:54
    一、术语 地铁:metro(underground railway、 subway) 在城市中修建的快速、大运量、电力牵引的轨道交通。... 正常运营情况下,列车从起点站发车至终点站停车的平均运行速度。 最高运行速度:maximum r...
  • 使用matlab对光谱数据取平均

    千次阅读 多人点赞 2019-12-10 17:18:49
    (不需要修改代码,运行以后只需要按照弹出的界面输入值就好了,不过对文件格式有要求只能读xls和csv) 输入的格式入下:第一行是标签,第一列是波数 下面附上使用说明: 步骤1:选择需要每隔多少列取平均 ...
  • 神经网络的滑动平均模型

    千次阅读 2018-01-13 14:15:07
    若采用随机梯度下降算法训练神经网络,为了控制网络更新速度,常采用滑动平均模型进行优化,使得网络在测试数据集中表现更好。 TensorFlow提供了tf.train.ExponentialMovingAverage来实现滑动平均模型,输入参数有...
  • 指数加权平均(exponentially weighted averges),也叫指数加权移动平均,是一种常用的序列数据处理方式。 它的计算公式如下: 其中, θtθtθ_t:为第 t 天的实际观察值, VtVtV_t: 是要代替 θtθtθ_t 的估...
  • 原理:在训练神经网络时,不断保持和更新每个参数的滑动平均值,在验证和测试时,参数的值使用其滑动平均值,能有效提高神经网络的准确率。 tf.train.ExponentialMovingAverage tensorflow官网地址:h
  • Polyak平均平均优化算法在参数空间访问中的几个点。如果t次迭代梯度下降访问了点,那么Polyak平均算法的输出是。 当应用Polyak平均于非凸问题时,通常会使用指数衰减计算平均值:   1. 用滑动平均估计局部均值 ...
  • 什么是移动平均法?    移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在...
  • // 初始化设置 var lens = 0; var series_data = []; var x_data = []; var help_data = []; //复制数组,用于显示第二个series...var legendName = '平均运行速度'; series_data = [30, 20, 40, 20, 30, 20, 40, 3...
  • [开发技巧]·Python极简实现滑动平均滤波(基于Numpy.convolve) 1.滑动平均概念 滑动平均滤波法(又称递推平均滤波法),时把连续取N个采样值看成一个队列 ,队列的长度固定为N ,每次采样到一个新数据放入队尾...
  • 网上关于fluent中质量加强平均(Mass-Weighted Average)和面积加权平均(Area-weighted average)的讨论很多,自己总结了一二,希望能够说明一些问题。 一、理论分析。 各自的公式如下图所示: 下面通过如图所示的...
  • python 代码运行时间获取方式

    千次阅读 多人点赞 2020-09-15 02:01:08
    我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间。这里将介绍三种常用的测试代码运行速度的方法。 第一种:使用time模块对代码的...
  • 最近研究linux时接触到了一个新的概念,叫做CPU的平均负载(load average)。之前都只听说过CPU的使用情况,很少听说过负载情况。于是对这个概念进行了一下研究学习,总结如下,以便日后查阅。
  • 本文出自Google的Federated Learning of Deep Networks using Model Averaging,主要介绍使用模型平均方法的联邦式学习。 文章目录引言一、 简介二、 联邦式学习三、 联邦式优化四、 联邦平均算法五、 实验结果六、...
  • 移动平均法又称滑动平均法、滑动平均模型法 移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,152
精华内容 68,060
关键字:

平均运行速度