看板 Soft_Job 關於我們 聯絡資訊
※ 引述《mgtsai ()》之銘言: : ※ 引述《mahoihei (Alvar)》之銘言: : : 早上看到一篇對個人來說很衝擊性的文章 : : http://goo.gl/z4Fa3 : : 為什麼說是很衝擊性,因為我自己的編程基礎由oop開始的 : : 而在oop design更是我在這個領域最喜愛的地方 : : 想問大家對這篇文章有什麼見解?? : 點進去看這個 URL,幾乎只是引述別人所講的隻字片語 : 這樣子作文風格,不太對我的胃口,看起來很像是直銷傳單中所慣用的技倆 : 不過文章末尾有 3 個 link,最後一個是 Sony PS3 RD 所寫的投影片 : 我覺得這份投影片倒是滿值得參考的 : 指出在 game design 時某些地方使用純 OOP 實作,會帶來不良後果 : (Tony Albrecht,現在是一家公司的 founder) : ---------- : 投影片中的範例,其中之一提到,以目前眾家 compiler 的實作中 : 會將同一個物件的所有 member variable 所需的記憶體配置在同一塊區域內 : (以物件本身作為 memory locality) : 但這個模式,在重複性大量資料處理中,卻會發生一個嚴重的副作用: 不管是不是object, 記憶體配置, 大致上都會和宣告順序以及compile unit, 會有正相關, 也就是說, 會盡可能的配置在一起. 我的理解, 投影片中, 提到的問題, 在一般用data structure (ex: 使用C language)寫法, 也有機會發生 (只是 OOP 可能比較容易讓人寫出這樣的方式). 簡單來說: 投影片中, 當 "m_Dirty == false", 就讓之前的cache 白費掉了 所以提出的改善方式如下: 1. 使用 homogenous, sequential sets of data 的配置方式: 一般來說, 在C language 中, 可能也會這樣寫 struct Object { Matrix4 m_Transform; Matrix4 m_worldTransform; .... }; "pre-load in cache" 是"可能" 隨時發生的 因為當要作Matrix 運算時, 一定會要先存取某個 node, (不管是c++ 中, 封裝成 object, 或是C 中, 使用structure) 所以, 作者在"structure"內部中, 改用指標的方式, 這樣當某個條件不成立的時候, 才不會"損失"嚴重. 2. 重新改寫code, 並使用 custom allocators, 來配置連續的記憶體, 因此 "pre-load in cache" 的東西,就變成那些 必要的東西, 不需要的也不會先load 進來 3. 接著, 因為資料存取變成"可預測", 所以可以直接用"prefetch" 的指令, 來做"人肉預測", 而不是讓CPU 去猜. 因而可以再提昇一些效率. 4. 投影片中, 也提到, multi-threading 下, 可能會有不同的影響. (先在都是multi-core cpu, 以矩陣運算這個case, 不善用cpu, 也說不過去.) 而對於某些人來說, 封裝成object, 反而會讓他更容易(方便)寫出 平行運算的程式. 雖然這個投影片中, 一開始有提到 OOP, 但我認為真正的重點, 就是最後提到的 "Its all about the memory", "Optimise for data first"... 這樣不管用什麼樣的編程方法, 才能寫出"有效率"的程式出來 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.86.30.230 ※ 編輯: wiz 來自: 219.86.30.230 (02/28 10:12)
Lordaeron:OOP GEEKS 還真不, 都用pitfalls了. 還要轉 02/28 10:29
Lordaeron:這些文章,頂多是將OOP請下神壇變回人而已. 還在拗, 就 02/28 10:42
Lordaeron:不好囉. 02/28 10:42
neutronstars:能參考下面文章DOD的想法,再回頭看看這個討論串 02/28 14:20
neutronstars:Data Oriented Design http://ppt.cc/CtJV 02/28 14:21
wiz:我只是在說明投影片中講的重點, 至於oop, 只是個方法,人是活的 02/28 21:57
Lordaeron:咦是呢, 哪OOP 就沒什麼好講的了, 就跟人家說 03/01 00:36
Lordaeron:你自己看著辨就好了? 03/01 00:37
Lordaeron:所以,一直講OOP 的OOXX 後, 最後要補一句"要看事辨事?" 03/01 00:37
snaketsai:所以imperative是王道這樣? 03/01 01:58