通过计算100万以内素数的运行时间比较这5种语言的运行速度。
每种语言运行30次,取平均值。由于python和fortran的运行速度和Java和C++运行差距过大,python只计算了3次,Fortran运行了10次.
《
C++,Java,Python,Fortran
到底哪个更快
?
》
《
C++
的速度比
Java
快
2.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;
unsigned char *dev_bitmap;
HANDLE_ERROR (cudaMalloc( (void**)&dev_bitmap,bitmap.image_size()));
dim3 grid(DIM,DIM);
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));
本文详细介绍C语言和Fortran语言的差异1. C++语言和Fortran语言的发展背景在程序设计语言的发展过程中,FORTRAN 语言被认为是科学计算的专用语言。后来推出的FORTRAN90 和FORTRAN 95 版本也不例外,它们虽然可以完全实现C++语言同样的功能,然而其软件开发环境和软件的集成性等方面都远不如C++ 语言。近年来,随着计算机软硬件技术的发展,数据结...
通过使用原子添加操作来更新并行计算环境中的共享内存位置,开发人员可以确保他们的计算结果是准确和一致的,即使是在多个线程访问和更新相同的数据时。例如,设定变量 real(kind=RK), intent(inout) :: acc_wk(3,num_node,*) 星号(*)表示该维度的大小没有在声明中明确指定,实际大小将取决于传递给使用acc_wk的存储过程的实际参数的值,这里统计线程数。并行执行计算的目的是为了利用现代GPU上的数千个处理核心,与传统CPU上的串行执行相比,可以大大加快计算速度。
欢迎关注Julia语言微信公众账号 julia_language今日我们来看一篇文献[1],是关于不同编程语言的运行速度对比。该文章的目标受众是年轻的经济学家(研究生,初级教员)或研究人员,尤其是正在找一门编程语言协助完成相关计算工作的人。编程语言包括:C++11,Fortran 2008,Java,Julia,Python,Matlab,Mathematica,R,并分别在Mac和windows...
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
加速计算正在取代 CPU 计算,成为最佳计算做法。加速计算带来的层出不穷的突破性进展、对加速应用程序日益增长的需求、轻松编写加速计算的编程规范以及支持加速计算的硬件的不断改进,所有这一切都在推动计算方式必然会过渡到加速计算。无论是从出色的性能还是易用性来看,CUDA 计算平台均是加速计算的制胜法宝。CUDA 提供一种可扩展 C、C++、Python 和 Fortran 等语言的编码范式,能够在世界上性能超强劲的并行处理器 NV
是的,由于c_f_pointer的限制,这是一个问题.正如您所发现的那样,内部c_f_pointer仅支持从索引1开始的边界.人们经常声明Fortran是一种单索引语言,但事实并非如此.一个索引只是默认值,Fortran长期支持声明程序员想要的任何起始绑定.因此,c_f_pointer强制您使用一个索引是向后退一步.但是使用Fortran 2003有一个修复:指针边界重新映射:arr (0:n-1...
其实在C++ AMP之前已经有了两个异构编程框架:CUDA与OpenCL。CUDA(Compute Unified Device Architecture)是显卡厂商Nvidia于2007年退出的业界第一款异构并行编程框架。在Nvidia的大力支持下,CUDA拥有良好的开发环境,丰富的函数库,优秀的性能。但是CUDA只能被用于在Nvidia的显卡上进行异构编程,有先天的局限性。
OpenCL(O...
一、前言 这是我的第一篇博客,目的是记录在研究生阶段进行的多线程并行计算,主要用到的是VS2013与CUDA8.0,前者安装比较方便,后者配置起来有些麻烦,会遇到一些小问题导致无法进行Debug。希望我所分享的经验能够让我牢记其用法以及给对这方面有兴趣的人一些启发。二、CUDA8.0的安装及配置(1)首先请去点击打开链接下载CUDA8.0,选择合适版本。特别注意的network与loc...
关注+星标公众号,不错过精彩内容来源| CSDN原文链接:https://nibblestew.blogspot.com/2021/02/why-most-programming-lan...