MozTW 討論區
https://forum.moztw.org/

想自行編譯的朋友,建議編譯無 CPU 優化的版本
https://forum.moztw.org/viewtopic.php?f=18&t=34877
1 頁 (共 1 頁)

發表人:  s793016 [ 2012-03-25, 06:52 ]
文章主題 :  想自行編譯的朋友,建議編譯無 CPU 優化的版本

這幾天我在測試 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.

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/