Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming.threads > #998

Re: Why is java consumer/producer so much faster than C++

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.

Show all headers | View raw


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 | NextPrevious in thread | Find similar


Thread

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