MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2024-03-28, 16:05

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 1 篇文章 ] 
發表人 內容
文章發表於 : 2012-03-25, 06:52 
離線
[MozTW 版主群]
頭像

註冊時間: 2002-12-03, 21:00
文章: 744
來自: 地球
這幾天我在測試 cpu 優化到底有多少效果,我的理解是所謂 CPU 優化一般影響範圍應只有「迴圈」,而這只有 javascript 上會用到。

我用相同的步驟編了 三版 seamonkey 2.7.2 (無 cpu 優化、sse 優化、sse2 優化)
1.打 patch
2.編 pgi
3.跑 google v8 + sun spider 各一次
4.編 pgo
5.以 peacekeeper 測試

結果如下,很好玩的結果:
1.pgo only
v2 1453
v1 5010: 4678/5122/18216/6860/4421/4344
v1: Rendering/Social networking/Complex graphics/Data/Dom operations/Text parsing

2.pgo+sse
v2 1436
v1 4968: 4733/5077/18408/6733/4361/4293

3.pgo+sse2
v2 1431
v1 5022:4684/5079/18125/7018/4409/4343

我的結論如下:
總的來說,針對 cpu 優化理論上來說應會較無 cpu 優化來得快上許多 -- 或至少快上幾 %。

但實際結果看來是,花那麼大功夫調解 sse2 pgo crash,但結果效能並沒有顯著增加。

所以如果要求極緻的優化,應該捨去針對 cpu 之優化,如此一來引發 pgi bug 的機會變小很多,那麼在對無 cpu 優化版本,pgo 本身將可作出更強效之優化,效果將一舉超越加入 cpu 優化之版本。

以此結論編出之版本,即 seamonkey 2.7.2-pgo-nosse-nosse2。

有興趣的朋友,可與我先前編譯之 seamonkey 2.7.2 sse2 pgo 作交互測試,即可驗證。

檔案連結
代碼:
diff -urN comm-release/mozilla/security/coreconf/WIN32.mk comm-release-sm/mozilla/security/coreconf/WIN32.mk
--- comm-release/mozilla/security/coreconf/WIN32.mk   2010-05-05 03:18:33 +0800
+++ comm-release-sm/mozilla/security/coreconf/WIN32.mk   2010-06-23 23:54:06 +0800
@@ -101,11 +101,15 @@
     _GEN_IMPORT_LIB=-Wl,--out-implib,$(IMPORT_LIBRARY)
     DLLFLAGS  += -mno-cygwin -o $@ -shared -Wl,--export-all-symbols $(if $(IMPORT_LIBRARY),$(_GEN_IMPORT_LIB))
     ifdef BUILD_OPT
+   ifeq ($(MOZ_OPTIMIZE),2)
+      OPTIMIZER += $(MOZ_OPTIMIZE_FLAGS)
+   else
    ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
       OPTIMIZER += -Os
    else
       OPTIMIZER += -O2
    endif
+   endif
    DEFINES    += -UDEBUG -U_DEBUG -DNDEBUG
     else
    OPTIMIZER  += -g
@@ -125,11 +129,15 @@
     endif
     ifdef BUILD_OPT
    OS_CFLAGS  += -MD
+   ifeq ($(MOZ_OPTIMIZE),2)
+      OPTIMIZER += $(MOZ_OPTIMIZE_FLAGS)
+   else
    ifeq (11,$(ALLOW_OPT_CODE_SIZE)$(OPT_CODE_SIZE))
       OPTIMIZER += -O1
    else
       OPTIMIZER += -O2
    endif
+   endif
    DEFINES    += -UDEBUG -U_DEBUG -DNDEBUG
    DLLFLAGS   += -OUT:"$@"
    ifdef MOZ_DEBUG_SYMBOLS
diff -urN comm-release/mozilla/security/coreconf/WINCE.mk comm-release-sm/mozilla/security/coreconf/WINCE.mk
--- comm-release/mozilla/security/coreconf/WINCE.mk   2010-05-05 03:18:33 +0800
+++ comm-release-sm/mozilla/security/coreconf/WINCE.mk   2010-06-23 23:54:06 +0800
@@ -87,7 +87,11 @@
 
 ifdef BUILD_OPT
 #   OS_CFLAGS  += -MD
+    ifeq ($(MOZ_OPTIMIZE),2)
+    OPTIMIZER  += $(MOZ_OPTIMIZE_FLAGS)
+    else
     OPTIMIZER  += -O2
+    endif
     DEFINES    += -UDEBUG -U_DEBUG -DNDEBUG
     DLLFLAGS   += -OUT:"$@"
 else
diff -urN comm-release/mozilla/security/manager/Makefile.in comm-release-sm/mozilla/security/manager/Makefile.in
--- comm-release/mozilla/security/manager/Makefile.in   2010-05-05 03:18:33 +0800
+++ comm-release-sm/mozilla/security/manager/Makefile.in   2010-06-23 23:54:07 +0800
@@ -43,6 +43,8 @@
 
 include $(DEPTH)/config/autoconf.mk
 
+export MOZ_OPTIMIZE MOZ_OPTIMIZE_FLAGS MOZ_OPTIMIZE_LDFLAGS MOZ_OPTIMIZE_SIZE_TWEAK
+
 MODULE = psm
 
 ifndef MOZ_NATIVE_NSS
diff -urN comm-release/config/rules.mk comm-release-sm/config/rules.mk
--- comm-release/config/rules.mk   2010-05-05 03:14:54 +0800
+++ comm-release-sm/config/rules.mk   2010-06-23 23:54:01 +0800
@@ -963,7 +963,7 @@
      $(PROGRAM:$(BIN_SUFFIX)=) $(DIST)/$(MOZ_APP_NAME)
 endif
 ifdef SHARED_LIBRARY
-   $(PYTHON) $(topsrcdir)/build/win32/pgomerge.py \
+   $(PYTHON) $(MOZILLA_SRCDIR)/build/win32/pgomerge.py \
      $(SHARED_LIBRARY_NAME) $(DIST)/$(MOZ_APP_NAME)
 endif
 endif # SHARED_LIBRARY || PROGRAM
diff -urN comm-release/mozilla/js/src/Makefile.in comm-release-sm/mozilla/js/src/Makefile.in
--- comm-release/mozilla/js/src/Makefile.in
+++ comm-release-sm/mozilla/js/src/Makefile.in
@@ -102,19 +102,16 @@ endif
 
 MODULE          = js
 LIBRARY_NAME       = mozjs
 STATIC_LIBRARY_NAME = js_static
 GRE_MODULE       = 1
 
 LIBS      = $(NSPR_LIBS)
 
-ifeq ($(OS_ARCH),WINNT)
-NO_PROFILE_GUIDED_OPTIMIZE = 1
-endif
 
 # JavaScript must be built shared, even for static builds, as it is used by
 # other modules which are always built shared. Failure to do so results in
 # the js code getting copied into xpinstall and jsd as well as mozilla-bin,
 # and then the static data cells used for locking no longer work.
 #
 # In fact, we now build both a static and a shared library, as the
 # JS shell would like to link to the static library.

_________________
想讓 Internet Explorer 當掉嗎?

「方法一」 - 被 google 檔掉的樣子,開不起來

「方法二」


回頂端
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20120322 Firefox/10.0.2 SeaMonkey/2.7.2
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 1 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 5 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群