Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.mixmin.net!news.albasani.net!.POSTED!not-for-mail From: Melzzzzz Newsgroups: comp.lang.c++,comp.programming.threads Subject: Re: Why is java consumer/producer so much faster than C++ Date: Mon, 23 Jul 2012 01:28:01 +0200 Organization: albasani.net Lines: 67 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: news.albasani.net ag1OGn3xnRX1La+NJDwmda5jlHrFgWfVvWuH792l4Juhi8u6H0ogv0sI2IC4QdEBC5+V1YJ71n8QQohV7rTsmZVG7hzsPbpFYhjY1UyeKPOu2qzefoW4LgFDckH70CNZ NNTP-Posting-Date: Sun, 22 Jul 2012 23:28:03 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="YcijAujngn4EbKC/x3XktWnT/vloiNhOBKSWxoIWkdqG6qrezMDGz/tlgmgXXPEImmGcmEtN2P+A6JVFP8XsvG9dVTPHQoca3FMAm2KdKeupX24HzjmeF55xUGRlkb32"; mail-complaints-to="abuse@albasani.net" X-Newsreader: Claws Mail 3.8.0 (GTK+ 2.24.10; x86_64-pc-linux-gnu) Cancel-Lock: sha1:fxd7J/ZcDR1t3CHm/WfSteWgau0= Xref: csiph.com comp.lang.c++:17186 comp.programming.threads:962 On Sun, 22 Jul 2012 15:42:55 -0700 (PDT) Joshua Maurice wrote: >=20 >=20 > What g++ optimization options did you use? If you didn't compile with > proper optimization flags (e.g. at least -O2), then the numbers you > have are meaningless. I have used -O2. >=20 > Also, you might be testing the difference between std::rand() and > Java's Random. Possibly. >=20 > Also, why did you use dynamic allocation in the C++ code for an int? Actually with non dynamical allocation seems to be slower ;) > If your original goal was to compare the Java way to the C++ way, you > are not doing it right. This is especially troubling after you > apparently went through the effort to make the queue support move-only > types. (Not sure. I'm still new to move-semantics.) That was necessary in order to put unique_ptr in queue. >=20 > Also, > > std::unique_ptr arr[size]; > ... > > arr[std::rand()%size] =3D produced.take(); > I wonder if it's possible to optimize that into a simple assignment, > or whether there will be a call to delete() - or at least a branch to > test if the internal member pointer is null. I have removed that statement , removed called to rand, left=20 only take, made int's non dynamic and I got following time: bmaxa@maxa:~/examples$ g++ -Wall -O2 -pthread -std=3Dc++0x consprod1.cpp -o= consprod1 consprod1.cpp: In lambda function: consprod1.cpp:58:19: warning: unused variable =E2=80=98size=E2=80=99 [-Wunu= sed-variable] bmaxa@maxa:~/examples$ time ./consprod1 real 0m23.335s user 0m22.177s sys 0m16.417s with java, I have removed rand too... bmaxa@maxa:~/examples$ javac consprod.java bmaxa@maxa:~/examples$ time java consprod real 0m12.491s user 0m21.001s sys 0m0.524s Still twice as fast as c++. What it looks like, is that c++ spends much more time in syscalls (futex) than java and that explains big difference.