ecloud 发表于 2012-04-19 20:55
我就小看他怎么着了?
在各个公司最新版本的编译器环境中,无论是VS .net还是Xcode,C#和ObjC的编译效率已经超过C++了。失去了效率这一根最后的救命稻草,C++这种不伦不类的东西可以入土为安了
ecloud 发表于 2012-04-19 21:33
还有要提醒你一点
要是没有微软的支持(当然还要感谢当年SUN打赢了官司),C++不会有今天的地位。真正实实在在推动过C++发展的就两个公司,Borland和微软
你们吃这碗饭的应该知恩图报,有一颗感恩的心。而不是成天拽来拽去的不把微软放在眼里。你能拿现在这个工资,不完全是个人的能力,微软也有一份在里面的
看看那些曾经牛到天上的写Delphi,4GL的人,如今的下场。你难道不应该感谢微软么?
ecloud 发表于 2012-04-19 20:55
在各个公司最新版本的编译器环境中,无论是VS .net还是Xcode,C#和ObjC的编译效率已经超过C++了。失去了效率这一根最后的救命稻草,C++这种不伦不类的东西可以入土为安了
ecloud 发表于 2012-04-19 22:18
运行效率,C#和ObjC编译成的本地代码都比C++快了,至少在官方优化下是这样的,你可以说微软和苹果动手脚了,我也怀疑动了手脚,但是现实结果就是快,你也没辙
ecloud 发表于 2012-04-19 22:31
最后一贴,再不跟了
说道C++,这个版里发牢骚说空话的居多,做实事的几乎没有
Google的C++单元测试框架:gtest,在dev c++(也就是mingGW)环境下无法编译。之前我找遍了网络没有一点信息。我就奇怪了是究竟你们写C++的人不爱做单元测试呢,还是gtest你们看不上眼(还有别的更好用的请推荐)
结果我这个既不懂也不鸟C++的人在万般无奈的情况下自己改了gtest的源代码,令其在MinGW环境下可以编译通过,其实就是很简单的一个修改,毫无难度
http://blog.chinaunix.net/uid-140978-id-3029195.html
这些成天嘴上挺C++得人,也不知道都在干啥
ecloud 发表于 2012-04-19 22:46
如果你能找到,在任何地方,无论中国还是外国的论坛上,有我发过的关于gtest编译的求助贴
那么我收回今天我在此的所有发帖,并且不再在本版出现
否则
请你以后不要回我的帖子,我不想搭理你,你也别搭理我,就这样
ecloud 发表于 2011-11-27 16:04
win平台只给VS和CB的工程文件,我用Dev C++/MinGW楞是没辙,试了好多方法都不成,下了个Code::Block也不成,导入sln后编译不成功,一大堆链接错误,大概是此工程压根儿就没考虑MinGW的库?强调的MS库?
后来用cygwin编译出来的gtest.a和gtest_main.a,只能在cygwin环境中用,一链接到MinGW编译出来的.o,就报一大堆链接错误
官方文档里说用cmake可以支持各种编译器环境,结果我下了个cmake,然后根本不好用
给个手工编译的文档能死乎?
神马J8东西做的一点都不人性化
ecloud 发表于 2011-11-28 10:21
已经手工解决,需要改一小段代码(等会有空我会写个小文档)
已经成功在Dev C++ 4.9.9.2上编译出来了两个库,gtest.a和gtest_main.a
比如图像处理,正常的都用unsigned char
再比如数值计算,好些库直接用double
如果只有一种类型,泛型的性能优势还在吗
性能始终是一个领域内部的问题,最终还是靠这个领域内部的方案来解决。
那你所说的C++的性能优势是指什么呢?C++如何做到的呢?
貌似pypy的numpy实现速度不输C
说实话,基于JIT的运行时优化的吸引力还是很大的
比如可以针对运行时的CPU生成代码,或者针对输入图像的大小,生成一个优化的计算代码。运行时代码生成也有在库这个层面做的,例子是liboil
C++也不是实现高性能Web服务器的唯一选择了
图像处理就看情况了,对一般GUI和娱乐用图像,8位量化足够了
看到过一个基于模版实现的图像处理库(MS的,opencv的库不超过20M,还自带个lapack),lib文件有六百M之多
当时忘记关心它是怎么对齐行到4字节的了
之前看过一个对blas库性能比较,boost库给出的blas实现(ublas)是性能最好的,超过了c和fortran的几个实现。
你说为啥C++实现的blas库比c的更高效呢,难道不是因为泛型吗
你说呢?native不够么?我觉得c/c++以及其他编译型做到这些天经地义,没什么可奇。
pypy以及numpy这些我都大概看过,是有些效率,只是我持强烈的怀疑态度。什么叫不输c?都不输c了,那还不赶快大吹特吹,让c在这一领域速速消失。
这些是想得美好,跟50年代号称,2000年就能实现完全的人工智能一样。现在都2012了。
c++当然不是唯一。甚至现在大多著名的你说的web服务器也不是c++写的。我不知道你是否看明白了我的帖子,我再说什么你看懂了么?我也不觉得你这些是在反驳我,因为我从你回帖看出来你根本就没看懂我的意思。可能是我的表达不太适合。
基于模版的,怎么又来了lib?还600多m。
算了。你可能不知道模版可以编译时计算。所以你觉得都归到了泛型。
还有,你也不知道模版扩张之后的代码可以比C代码有更多的编译器优化机会。所以你也归到了泛型手里。
就像经常可以看到为什么c++的sort比c lib的qsort快这种问题。
boost那个是模版库。你用他编译的时候是不是特别慢?编译出来的执行文件特别大?你用spirit么?你编译起来很爽么?
你还觉得boost很好么?如果很好,为什么那么多sdk不赶快去捧boost臭脚?为什么google会对Boost保持强烈的观望态度?
知道PyUblas么?这个可能可以满足你。
reiase 发表于 2012-04-20 17:20
回复 67# walleeee
native什么都不算,好不好。你在p4上的native代码,拿到core 2上还算不算不算native。有jit生成的native代码native吗?
native什么都不算,好不好。你在p4上的native代码,拿到core 2上还算不算不算native
有jit生成的native代码native吗?
我对jit还是比较看好的,比如一个循环。jit可以在N很小的时候做unroll,native代码只能跑死循环
unroll对效率的提升还是很高的。
比如很多正则表达式的实现
或者某些FFT计算库
让C++骄傲的高性能应用是哪些呢?
非C++不可的高性能计算
你对非python,javascript这些非native代码的性能有疑问
发现代码目录2个多G,里边放了两份这个库的拷贝
最大的就是一堆lib文件,dll文件反而很小
记得一份lib文件要600M,预编译头文件目录还800M
我对MS的开发环境不熟,还想问问你是怎么回事呢。
元编程
C++就这么一个有点,哥咋能不知道
linkage code generation
Window底下用起来省事的库没几个,VC里加lib文件的过程恶心死了
哥不太用C++,所以cppers内部矛盾哥不了解
不知道,PyUblas可以链接到C库上去吗?用这玩意儿还不如用PyCUDA。
现在的cpper已经不承认C++是OO语言了,都认为C++是GP语言。“GP == 高性能”又不是我发明的
reiase 发表于 2012-04-20 18:01
如果想把C++代码编译成p4上的native代码,就不可能带core 2的sse4优化。带了sse4优化,在p4上就跑不起来了,直接报告非法指令。有些手段能够让p4执行p4的native代码,core 2执行core 2的native代码:
1. 动态库动态加载,先检测CPU,根据CPU加载对应CPU的编译结果
2. 使用liboil等库,生成代码。大概就是用liboil的语法写个函数,运行时,让liboil编译这段代码成native代码。因为目标是SIMD指令,所以liboil语法类似汇编。
3. fatelf或者Universal binary,同一个二进制文件,同时包含p4和core 2的编译结果。
不过这些都不是语言层面上解决的。其实JIT也不是语言层面上的技术。
你想说什么?你想走极端?你非要把p4的native拿去给core2,我还能说什么?你为什么不干脆搞个不能运行更靠谱,那个时候你觉得我们再谈效率有意思么?
你这是问句还是反问句?我正我看不懂你的意思。
我一直在强调,jit对一些脚本,比如你的python,的确有很大的性能提升,这个是可以拿出公正测评的。我也同意。
但是jit也就仅此而已了。
你似乎太小看那么多开发人员和那么多研究人员以及几十年的研究时间,这些对编译器技术的贡献,在你眼中居然敌不过jit的一个loop展开。唉。不知道他们听到了是想笑还是想哭。
这要看场合。unroll了的代码扩展也是弊病。所以这是一个权衡。说本质吧,就是时间和空间的权衡。但是目前大多是时候时间显得要比空间重要,因为空间可以人为来补充,但是时间至少目前是不能被人为控制。当然,将来我就保不准了。
fft据我所知很多都是直接针对cpu体系结构编汇编。当然也有直接写c这些高级代码的。但是你说的jit搞fft,我倒是孤陋寡闻了。
你自己说的boost的blas算不算一个?你怎么能自己前后说法不一。
还有太多,我懒得说了,别忘了,c++的历史足够产生太多的优秀项目。
什么叫非c++不可,我从来没觉得什么事情是非c++不可,也更不会觉得非你说的jit这些如此等等不可。什么叫非什么不可?
你难道不觉得几十年前希尔伯特就已经在这个事情上败了么?
我哪里在说我对这些非native代码有性能疑问?我只是在说你说native已经被Jit超越这一定论。说你这个论点太缺乏考虑而已。
用boost就是自取灭亡。懂么?自取灭亡。你看boost多少年了,至今被多少人接受?他的问题太多,尽管有一些的确不错的东西,只是仅仅为了这些就引入boost,得不偿失。
这些都是表象。boost的完整编译版本就有几个g。我编译过几次boost,每次都等大半天。
除了这些表象,boost问题是还大量用模版,整个大多都是模版,你如果感兴趣,用用spirit这个被吹得神乎其技的bnf本地代码生成器,你试试,你就知道我为什么那么讨厌boost,那么反对把boost用到产品中。
问题非常多。所以就是如果能不用就不要用,得不偿失。而且在我看来,boost几乎也没什么大用,或者你说的非用不可的地方。
这里也是一个权衡问题。
我前面在考虑,既然c++的abi是一个问题,为什么不学习java,把连接推迟到加载的时候,也就是把连接推给操作系统,加载时连接。这样不就可以解决abi问题了么?但是又想回来,这个过程可能会影响效率,而对于c/c++这些以效率为命的语言而已,以及视效率为命的计算机技术多年遗留下来的意识,可能不会去牺牲这一点效率换来abi问题的解答。
你的帖子我基本看的出来。不过不要紧,我并非说什么,只是看到你觉得jit是万能药,所有说了一下自己的看法而已。
PyUblas是用来让python用boost的blas的连接体。你刚才不是说boost的blas很好,最高效么?你不是说你很想在python中用boost的这个功能么?我给你提出来,你又突然说这个不如pyCUDA。唉,我不知道你要干什么,你说想向东,然后我给你说了东的方向,然后你跟我说,你想去西。唉。我真累。算了。
总之,我时不时跳出来给c++辩护,并不是我在说c++多么的好,更不是说c++就是我主要用的语言,甚至我对c++比你更恼火。明白这个就好。
现实就是这样,基本上所有软件发布时候都是按照SSE2编译优化。
好像JIT就少有人研究了
template不也是空间换时间
fftw
之高那么一点点,还没法给其他库链接,有用吗?
要C语言那种“永垂不朽”的项目
Qt不算,Qt的C++不是正统C++
有人说性能是C++的最后稻草
有数据能够说明java并不慢,慢的是jvm加载过程
JIT是治Python问题的唯一药
我只是比较期待JIT能够给Python一个大加速
我不直接用blas,我用的几个库要用blas
说OO是C++最微不足道的特性的就是OwnWaterloo
reiase 发表于 2012-04-20 18:33
发布二进制文件时候怎么发布呢?你只能发布给用户p4的二进制代码,这样p4和core 2都能跑。难道让用户自己判断自己的CPU,然后按需要下载?
自己做实验,都用-march-native,反倒不关心p4还是core2。
是么?请把“基本上”,“所有”这些去掉,或者你自己再想想。SSE2优化?你说得太容易了。
有些成分,但是不主要是换时间,换的也不只是运行时间,还有程序员编码的时间。
没听说过。但是我在他的Features里面没看到jit的任何影子。
那你给我找个?记住,要和你自己这里说的“要C语言那种“永垂不朽”的项目”unix么?
kde在你法眼中算大项目么?
qt怎么成了不是正统c++?你凭什么说人家不是正统?就因为moc么?就因为信号和槽?
算了,我不想继续扯这些。
别人放屁你也信了。
既然慢的是jvm,那好。你是不是想说如果没有jvm,那java就会效率和c++一样了?呵呵,又要马儿跑,又要马儿不吃草,你以为天上掉下来的饼子真的存在?
pypy已经表现很出色了。不过一个脚本语言而已,要那么快干什么,我从来不因为性能而去批评一个脚本语言。
因为这个不是他存在的目的。
我对线性计算库不了解,没碰到需要。所以无能为力。
reiase 发表于 2012-04-21 08:07
模板实例化剩下的那点寻址时间、循环展开时间,和JIT把一般计算翻译成SIMD指令计算所剩的时间比,很难说谁更有用一点。看场景吧,之前嘲笑过STL号称高性能,却在真正对性能要求高的高并发环境下无大用处,也就拿来加速一下PC机上的MFC程序而已。一种技术,如果只能加速一般场景(对性能要求不高的场景),不能加速一些特例(比如高并发环境)...好吧,你也可以称它是高性能。
“JIT省的那点时间,你重新编译一下也能够找回来”,这种逻辑就跟”模板能省那点时间,你C代码写仔细一点也能找回来“一样,没有意义。
所以说白了,模板(好吧,我不说泛型了)这玩意儿提升性能跟JIT提升性能有啥不一样?算法的逻辑都固化了,内存访问的高效性要考模板这玩意儿保证?
主要是什么呢?不要扯编码时间,那玩意儿是用调试时间换的。
没有jit,fftw只是在传入数据的时候对数据做优化
Qt官方对template技术的看法:http://qt-project.org/doc/qt-5.0/templates.html
Qt里的C++才比较像Objective-C
Qt的成功恰恰说明C++的不足
我说JVM慢了吗?我说Java效率低了吗?我只说JVM加载慢。
Native不是快吗,怎非要跑去用慢的script呢。
咱都不是学数学出身,没必要去折腾blas
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |