Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming.threads > #998
| From | Ricardo Nabinger Sanchez <rnsanchez@wait4.org> |
|---|---|
| Newsgroups | comp.lang.c++, comp.programming.threads |
| Subject | Re: Why is java consumer/producer so much faster than C++ |
| Date | 2012-08-14 22:48 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <k0ekjp$suv$1@dont-email.me> (permalink) |
| References | <juht3o$a3a$1@news.albasani.net> |
Cross-posted to 2 groups.
On Sun, 22 Jul 2012 23:59:20 +0200, Melzzzzz wrote:
> I have played little bit with new C++11 features and compared,
> java performance to c++.
> Actually this was meant to be GC vs RAII memory management,
> but boiled down to speed of BlockingQueue class in java,
> and mine in c++.
> It seems that java implementation is so much more efficient
> but I don't know why. I even tried c++ without dynamic
> memory management (except queue itself) and that is *even slower*.
> Must be some quirks with a queue
As others mentioned, most of your CPU time is being wasted on memory
management and synchronization. I've compiled your source with GCC-4.7.1,
-O2, and ran through perf (from Linux kernel). The output follows.
Cheers!
# captured on: Tue Aug 14 19:22:47 2012
# os release : 3.2.23
# perf version : 3.2.13
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz
# cpuid : GenuineIntel,6,37,5
# total memory : 3897640 kB
# Overhead Command Shared Object Symbol
10.90% lala [kernel.kallsyms] [k] _raw_spin_lock
10.34% lala libc-2.15.so [.] _int_free
8.84% lala libpthread-2.15.so [.] pthread_cond_signal@@GLIBC_2.3.2
7.53% lala libc-2.15.so [.] free
7.28% lala libc-2.15.so [.] _int_malloc
6.89% lala libc-2.15.so [.] malloc
6.49% lala libpthread-2.15.so [.] pthread_mutex_lock
4.85% lala libpthread-2.15.so [.] __pthread_mutex_unlock_usercnt
3.20% lala libpthread-2.15.so [.] __lll_lock_wait
3.18% lala [kernel.kallsyms] [k] hash_futex
2.49% lala [kernel.kallsyms] [k] system_call
2.40% lala [kernel.kallsyms] [k] futex_wait_setup
2.02% lala [kernel.kallsyms] [k] copy_user_generic_string
1.99% lala libc-2.15.so [.] __random
1.81% lala libpthread-2.15.so [.] __lll_unlock_wake
1.76% lala lala [.] main::{lambda()#2}::operator()() const
1.60% lala lala [.] std::_Function_handler<void (), main::{lambda()#1}>::_M_invoke(std::_Any_data const&)
1.43% lala [kernel.kallsyms] [k] futex_wake
1.39% lala [kernel.kallsyms] [k] do_futex
1.32% lala [kernel.kallsyms] [k] system_call_after_swapgs
1.21% lala [kernel.kallsyms] [k] sys_futex
1.21% lala [kernel.kallsyms] [k] get_futex_key
1.15% lala [kernel.kallsyms] [k] try_to_wake_up
1.03% lala [kernel.kallsyms] [k] futex_wait
0.58% lala [kernel.kallsyms] [k] sysret_check
0.46% lala libpthread-2.15.so [.] pthread_cond_wait@@GLIBC_2.3.2
0.40% lala [kernel.kallsyms] [k] get_futex_value_locked
0.40% lala libstdc++.so.6.0.17 [.] operator new(unsigned long)
0.33% lala [kernel.kallsyms] [k] select_task_rq_fair
0.31% lala libc-2.15.so [.] __random_r
0.29% lala libpthread-2.15.so [.] _L_lock_965
0.29% lala [kernel.kallsyms] [k] __schedule
0.24% lala [kernel.kallsyms] [k] drop_futex_key_refs.isra.12
0.23% lala libstdc++.so.6.0.17 [.] std::condition_variable::notify_one()
0.20% lala lala [.] pthread_mutex_unlock@plt
0.20% lala [kernel.kallsyms] [k] get_futex_key_refs.isra.10
0.16% lala [kernel.kallsyms] [k] system_call_fastpath
0.16% lala libpthread-2.15.so [.] _L_unlock_567
0.15% lala [kernel.kallsyms] [k] task_waking_fair
0.14% lala lala [.] _ZNSt18condition_variable10notify_oneEv@plt
0.13% lala libstdc++.so.6.0.17 [.] malloc@plt
0.13% lala [kernel.kallsyms] [k] wake_futex
0.12% lala lala [.] pthread_mutex_lock@plt
0.11% lala [kernel.kallsyms] [k] intel_pmu_disable_all
0.11% lala libstdc++.so.6.0.17 [.] pthread_cond_signal@plt
0.11% lala libpthread-2.15.so [.] __pthread_mutex_cond_lock
0.10% lala libc-2.15.so [.] rand
0.10% lala libpthread-2.15.so [.] pthread_mutex_unlock
0.10% lala lala [.] rand@plt
0.09% lala [kernel.kallsyms] [k] default_send_IPI_mask_sequence_phys
0.08% lala lala [.] _Znwm@plt
0.07% lala [kernel.kallsyms] [k] _raw_spin_lock_irqsave
0.07% lala [kernel.kallsyms] [k] finish_task_switch
0.07% lala [kernel.kallsyms] [k] native_sched_clock
0.07% lala [kernel.kallsyms] [k] futex_wait_queue_me
0.06% lala [kernel.kallsyms] [k] intel_pmu_enable_all
0.06% lala [kernel.kallsyms] [k] cpuacct_charge
0.05% lala libc-2.15.so [.] __lll_lock_wait_private
0.05% lala [kernel.kallsyms] [k] plist_add
0.05% lala lala [.] _ZdlPv@plt
0.05% lala [kernel.kallsyms] [k] sched_clock_cpu
0.05% lala [kernel.kallsyms] [k] hrtick_update
0.05% lala [kernel.kallsyms] [k] update_curr
0.04% lala [kernel.kallsyms] [k] pick_next_task_stop
0.04% lala [kernel.kallsyms] [k] hrtick_start_fair
0.04% lala libpthread-2.15.so [.] __pthread_disable_asynccancel
0.04% lala libstdc++.so.6.0.17 [.] operator delete(void*)
0.04% lala [kernel.kallsyms] [k] dequeue_task_fair
0.04% lala libstdc++.so.6.0.17 [.] free@plt
0.04% lala [kernel.kallsyms] [k] irq_exit
0.03% lala [kernel.kallsyms] [k] pick_next_task_fair
0.03% lala [kernel.kallsyms] [k] local_clock
0.03% lala lala [.] void std::deque<std::unique_ptr<int, std::default_delete<int> >, std::allocator<std::unique_ptr<int, std::default_delete<int> > > >::_M_push_back_aux<std::unique_ptr<int, std::default_delete<int> > >(std::unique_ptr<int, std::default_delete<int> >&&)
0.03% lala [kernel.kallsyms] [k] rcu_note_context_switch
0.03% lala [kernel.kallsyms] [k] _raw_spin_lock_irq
0.03% lala [kernel.kallsyms] [k] find_next_bit
0.03% lala [kernel.kallsyms] [k] dequeue_entity
0.03% lala [kernel.kallsyms] [k] update_cfs_shares
0.03% lala [kernel.kallsyms] [k] pick_next_task_rt
0.02% lala [kernel.kallsyms] [k] account_entity_dequeue
0.02% lala [kernel.kallsyms] [k] put_prev_task_fair
0.02% lala [kernel.kallsyms] [k] __perf_event_task_sched_out
0.02% lala [kernel.kallsyms] [k] dequeue_task
0.02% lala libpthread-2.15.so [.] __pthread_enable_asynccancel
0.02% lala libc-2.15.so [.] __lll_unlock_wake_private
0.02% lala [kernel.kallsyms] [k] update_min_vruntime
0.02% lala [kernel.kallsyms] [k] update_rq_clock
0.02% lala [kernel.kallsyms] [k] update_context_time.isra.48
0.02% lala [kernel.kallsyms] [k] perf_pmu_disable
0.02% lala [kernel.kallsyms] [k] apic_timer_interrupt
0.02% lala [kernel.kallsyms] [k] schedule
0.02% lala libstdc++.so.6.0.17 [.] std::condition_variable::wait(std::unique_lock<std::mutex>&)
0.02% lala [kernel.kallsyms] [k] free_hot_cold_page
0.02% lala [kernel.kallsyms] [k] pick_next_task_idle
0.02% lala [kernel.kallsyms] [k] do_softirq
0.01% lala [kernel.kallsyms] [k] ktime_get
0.01% lala [kernel.kallsyms] [k] update_cfs_load
0.01% lala [kernel.kallsyms] [k] perf_event_context_sched_in
0.01% lala [kernel.kallsyms] [k] __perf_event_task_sched_in
0.01% lala [kernel.kallsyms] [k] perf_pmu_rotate_start.isra.44
0.01% lala [kernel.kallsyms] [k] _raw_spin_unlock_irqrestore
0.01% lala [kernel.kallsyms] [k] hrtimer_interrupt
0.01% lala libc-2.15.so [.] __memmove_ssse3_back
0.01% lala [kernel.kallsyms] [k] ctx_sched_out
0.01% lala [kernel.kallsyms] [k] physflat_send_IPI_mask
0.01% lala [kernel.kallsyms] [k] intel_pmu_nhm_enable_all
0.01% lala [kernel.kallsyms] [k] do_timer
0.01% lala [kernel.kallsyms] [k] smp_apic_timer_interrupt
0.01% lala [kernel.kallsyms] [k] x86_pmu_disable
0.01% lala [kernel.kallsyms] [k] plist_del
0.01% lala [kernel.kallsyms] [k] deactivate_task
0.01% lala [kernel.kallsyms] [k] run_timer_softirq
0.01% lala libc-2.15.so [.] _L_lock_4111
0.01% lala [kernel.kallsyms] [k] rcu_enter_nohz
0.01% lala [kernel.kallsyms] [k] __rcu_pending
0.01% lala [kernel.kallsyms] [k] perf_event_task_sched_out
0.01% lala [kernel.kallsyms] [k] native_smp_send_reschedule
0.01% lala [kernel.kallsyms] [k] __do_softirq
0.01% lala [kernel.kallsyms] [k] profile_tick
0.01% lala [kernel.kallsyms] [k] __run_hrtimer
0.01% lala [kernel.kallsyms] [k] scheduler_tick
0.01% lala [kernel.kallsyms] [k] task_tick_fair
0.01% lala [kernel.kallsyms] [k] tick_sched_timer
0.01% lala [kernel.kallsyms] [k] perf_event_task_tick
0.01% lala [kernel.kallsyms] [k] x86_pmu_enable
0.01% lala [kernel.kallsyms] [k] acct_update_integrals
0.00% lala libc-2.15.so [.] _L_unlock_12586
0.00% lala libpthread-2.15.so [.] _L_cond_lock_973
0.00% lala [kernel.kallsyms] [k] hrtimer_forward
0.00% lala [kernel.kallsyms] [k] effective_load.isra.70
0.00% lala [kernel.kallsyms] [k] update_process_times
0.00% lala [kernel.kallsyms] [k] __unqueue_futex
0.00% lala [kernel.kallsyms] [k] perf_pmu_enable
0.00% lala [kernel.kallsyms] [k] clear_buddies
0.00% lala [kernel.kallsyms] [k] rcu_check_callbacks
0.00% lala lala [.] _ZNSt18condition_variable4waitERSt11unique_lockISt5mutexE@plt
0.00% lala [kernel.kallsyms] [k] update_cpu_load
0.00% lala [kernel.kallsyms] [k] rcu_process_callbacks
0.00% lala [kernel.kallsyms] [k] raise_softirq
0.00% lala [kernel.kallsyms] [k] jiffies_to_timeval
0.00% lala [kernel.kallsyms] [k] timerqueue_add
0.00% lala [kernel.kallsyms] [k] ret_from_sys_call
0.00% lala [kernel.kallsyms] [k] flush_tlb_others_ipi
0.00% lala [kernel.kallsyms] [k] rb_insert_color
0.00% lala [kernel.kallsyms] [k] rcu_process_gp_end.isra.27
0.00% lala [kernel.kallsyms] [k] rcu_exit_nohz
0.00% lala [kernel.kallsyms] [k] hrtimer_run_queues
0.00% lala libc-2.15.so [.] _L_lock_12561
0.00% lala [kernel.kallsyms] [k] idle_cpu
0.00% lala [kernel.kallsyms] [k] do_lookup
0.00% lala [kernel.kallsyms] [k] calc_global_load
0.00% lala [kernel.kallsyms] [k] lookup_page_cgroup
0.00% lala [kernel.kallsyms] [k] irq_enter
0.00% lala [kernel.kallsyms] [k] force_quiescent_state
0.00% lala [kernel.kallsyms] [k] dyntick_save_progress_counter
0.00% lala [kernel.kallsyms] [k] run_posix_cpu_timers
0.00% lala [kernel.kallsyms] [k] __math_state_restore
0.00% lala [kernel.kallsyms] [k] clockevents_program_event
0.00% lala [kernel.kallsyms] [k] account_process_tick
0.00% lala [kernel.kallsyms] [k] find_busiest_group
0.00% lala [kernel.kallsyms] [k] call_softirq
0.00% lala [kernel.kallsyms] [k] rb_next
0.00% lala [kernel.kallsyms] [k] wake_up_state
0.00% lala [kernel.kallsyms] [k] printk_tick
0.00% lala [kernel.kallsyms] [k] find_vma_prev
0.00% lala [kernel.kallsyms] [k] __alloc_pages_nodemask
0.00% lala [kernel.kallsyms] [k] tick_program_event
0.00% lala [kernel.kallsyms] [k] update_shares
0.00% lala [kernel.kallsyms] [k] cpuacct_update_stats
0.00% lala [e1000e] [k] e1000_irq_enable
0.00% lala [kernel.kallsyms] [k] sched_clock_tick
0.00% lala [kernel.kallsyms] [k] irq_work_run
0.00% lala [kernel.kallsyms] [k] clear_page_c
0.00% lala [kernel.kallsyms] [k] account_user_time
0.00% lala [kernel.kallsyms] [k] fib_get_table
0.00% lala [kernel.kallsyms] [k] ehci_work
0.00% lala [kernel.kallsyms] [k] __current_kernel_time
0.00% lala [kernel.kallsyms] [k] __rcu_process_callbacks
0.00% lala [kernel.kallsyms] [k] rb_erase
0.00% lala [kernel.kallsyms] [k] __percpu_counter_add
0.00% lala [kernel.kallsyms] [k] update_vsyscall
0.00% lala [kernel.kallsyms] [k] mem_cgroup_pgfault
0.00% lala libstdc++.so.6.0.17 [.] std::thread::join()
0.00% lala libpthread-2.15.so [.] __read_nocancel
0.00% lala libpthread-2.15.so [.] start_thread
0.00% lala [kernel.kallsyms] [k] __mmdrop
--
Ricardo Nabinger Sanchez http://rnsanchez.wait4.org/
"Left to themselves, things tend to go from bad to worse."
Back to comp.programming.threads | Previous | Next — Previous in thread | Find similar
Why is java consumer/producer so much faster than C++ Melzzzzz <mel@zzzzz.com> - 2012-07-22 23:59 +0200
Re: Why is java consumer/producer so much faster than C++ Joshua Maurice <joshuamaurice@gmail.com> - 2012-07-22 15:42 -0700
Re: Why is java consumer/producer so much faster than C++ Melzzzzz <mel@zzzzz.com> - 2012-07-23 01:28 +0200
Re: Why is java consumer/producer so much faster than C++ Luca Risolia <luca.risolia@studio.unibo.it> - 2012-07-23 02:03 +0200
Re: Why is java consumer/producer so much faster than C++ Melzzzzz <mel@zzzzz.com> - 2012-07-23 12:17 +0200
Re: Why is java consumer/producer so much faster than C++ Luca Risolia <luca.risolia@studio.unibo.it> - 2012-07-24 00:33 +0200
Re: Why is java consumer/producer so much faster than C++ Juha Nieminen <nospam@thanks.invalid> - 2012-07-23 06:37 +0000
Re: Why is java consumer/producer so much faster than C++ Melzzzzz <mel@zzzzz.com> - 2012-07-23 12:33 +0200
Re: Why is java consumer/producer so much faster than C++ Juha Nieminen <nospam@thanks.invalid> - 2012-07-23 11:46 +0000
Re: Why is java consumer/producer so much faster than C++ Melzzzzz <mel@zzzzz.com> - 2012-07-23 15:33 +0200
Re: Why is java consumer/producer so much faster than C++ Dombo <dombo@disposable.invalid> - 2012-07-23 22:57 +0200
Re: Why is java consumer/producer so much faster than C++ Joshua Maurice <joshuamaurice@gmail.com> - 2012-07-23 21:54 -0700
Re: Why is java consumer/producer so much faster than C++ Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-07-24 12:50 +0000
Re: Why is java consumer/producer so much faster than C++ Ricardo Nabinger Sanchez <rnsanchez@wait4.org> - 2012-08-14 22:48 +0000
csiph-web