Как оптимизировать программу в соответствии с этим отчетом? - PullRequest
0 голосов
/ 18 марта 2012

Есть ли способы оптимизировать эту программу?

CPU: Intel Sandy Bridge microarchitecture, speed 3.3e+06 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
samples  %        image name               app name                 symbol name
84683    12.3219  tyn_indexer              tyn_indexer              tyn_cmp_term32
61380     8.9311  tyn_indexer              tyn_indexer              tyn_binary_heap_heapify
60187     8.7576  tyn_indexer              tyn_indexer              tyn_p4d_encode32
29849     4.3432  tyn_indexer              tyn_indexer              tyn_exsorter_sort
29526     4.2962  tyn_indexer              tyn_indexer              tyn_cmp_node_term32
25441     3.7018  libc-2.14.90.so          libc-2.14.90.so          __memcpy_ssse3_back
25283     3.6788  tyn_indexer              tyn_indexer              tyn_binary_heap_insert
20537     2.9883  tyn_indexer              tyn_indexer              nodes_term32_flush
11966     1.7411  vmlinux                  vmlinux                  jbd2_journal_commit_transaction
11733     1.7072  vmlinux                  vmlinux                  __strnlen_user
10741     1.5629  vmlinux                  vmlinux                  nobh_truncate_page
9728      1.4155  vmlinux                  vmlinux                  generic_file_buffered_write
9443      1.3740  vmlinux                  vmlinux                  mpage_da_map_and_submit
9023      1.3129  vmlinux                  vmlinux                  do_get_write_access
7283      1.0597  vmlinux                  vmlinux                  invalidate_interrupt31
5894      0.8576  vmlinux                  vmlinux                  write_cache_pages_da
5332      0.7758  vmlinux                  vmlinux                  journal_submit_commit_record
5316      0.7735  vmlinux                  vmlinux                  hugetlbfs_symlink
5166      0.7517  vmlinux                  vmlinux                  mount_ns
4750      0.6912  vmlinux                  vmlinux                  threshold_interrupt
4680      0.6810  tyn_indexer              tyn_indexer              tyn_cmp_node_attr32
4526      0.6586  vmlinux                  vmlinux                  list_locations
4473      0.6508  vmlinux                  vmlinux                  generic_write_checks
4415      0.6424  vmlinux                  vmlinux                  hotplug_hrtick
4398      0.6399  vmlinux                  vmlinux                  rb_erase
4373      0.6363  libglib-2.0.so.0.3000.1  libglib-2.0.so.0.3000.1  /lib64/libglib-2.0.so.0.3000.1
4365      0.6351  vmlinux                  vmlinux                  fput
4356      0.6338  vmlinux                  vmlinux                  jbd2_journal_dirty_metadata
4197      0.6107  vmlinux                  vmlinux                  kmem_cache_open
4178      0.6079  vmlinux                  vmlinux                  generic_file_aio_read
3871      0.5633  libc-2.14.90.so          libc-2.14.90.so          __libc_disable_asynccancel
3869      0.5630  libc-2.14.90.so          libc-2.14.90.so          __libc_enable_asynccancel
3762      0.5474  vmlinux                  vmlinux                  __bread
3697      0.5379  vmlinux                  vmlinux                  bdi_writeback_thread
3608      0.5250  vmlinux                  vmlinux                  ext4_alloc_da_blocks
3537      0.5147  vmlinux                  vmlinux                  add_page_to_unevictable_list
3296      0.4796  vmlinux                  vmlinux                  hugetlbfs_read
3047      0.4434  vmlinux                  vmlinux                  audit_free
3041      0.4425  vmlinux                  vmlinux                  fget_raw_light
2872      0.4179  vmlinux                  vmlinux                  copy_from_user_nmi

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Попробуйте использовать AVL вместо кучи. По моему опыту, AVL обычно быстрее на практике, если вы не интенсивно используете функции кучи.

0 голосов
/ 18 марта 2012

При просмотре большого количества вызовов в подпрограммах ядра создается впечатление, что ваш код записывает / отображает файлы в журнализированной файловой системе. Если вам действительно не нужны функции, которые это обеспечивает, это, вероятно, не очень хорошая идея, если ваш код критичен к производительности.

  • Если вам просто нужно, чтобы ваши данные где-то хранились, используйте простой файл система, которая не требует большого количества перевода.
  • Если вам не нужно хранить его, используйте анонимные сопоставления.
  • Если вам нужно хранить его, но вы можете себе позволить, чтобы записать на реальный диск в самом конце, использовать файловую систему в памяти (tmpfs или аналогичный) и просто скопируйте его на реальный диск, как только ваш вычисление закончено.
...