2012-03-18 106 views
-1

有什麼方法可以優化這個程序?如何根據此oprofile報告優化程序?

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 
+0

我們將如何知道如何優化您的程序?我們需要知道你的程序的作用以及對它的所有約束/要求。 – 2012-03-18 14:14:40

+1

是的,使'tyn_cmp_term32'(或'tyn_binary_heap_heapify'等)更快。 – huon 2012-03-18 14:15:33

+1

「速度3.3e + 06 MHz」哇。 3.3 THz CPU。 – 2012-03-18 14:40:06

回答

0

看過大量的調用到內核例程,它看起來你的代碼是寫/日誌文件系統上的映射文件。除非你真的需要這個提供的功能,否則如果你的代碼對性能至關重要,這可能不是一個好主意。

  • 如果你只是需要你的數據存儲在某個地方,使用一個普通的文件 系統,不需要太多的翻譯。
  • 如果您不需要它被存儲,請使用匿名映射。
  • 如果您需要將其存儲起來,但您可以承受,最終只能將 寫入實際磁盤,請使用內存中的文件系統 (tmpfs或類似),並將其複製到實際磁盤一旦你的 計算完成。
0

嘗試使用AVL而不是堆。根據我的經驗,AVL在實踐中通常會更快,除非您正在大量使用堆特性。