Re: [分享] 面向對象編程從骨子裡就有問題

看板Soft_Job作者 (好天)時間12年前 (2013/02/28 10:07), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串11/12 (看更多)
※ 引述《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)

02/28 10:29, , 1F
OOP GEEKS 還真不, 都用pitfalls了. 還要轉
02/28 10:29, 1F

02/28 10:42, , 2F
這些文章,頂多是將OOP請下神壇變回人而已. 還在拗, 就
02/28 10:42, 2F

02/28 10:42, , 3F
不好囉.
02/28 10:42, 3F

02/28 14:20, , 4F
能參考下面文章DOD的想法,再回頭看看這個討論串
02/28 14:20, 4F

02/28 14:21, , 5F
Data Oriented Design http://ppt.cc/CtJV
02/28 14:21, 5F

02/28 21:57, , 6F
我只是在說明投影片中講的重點, 至於oop, 只是個方法,人是活的
02/28 21:57, 6F

03/01 00:36, , 7F
咦是呢, 哪OOP 就沒什麼好講的了, 就跟人家說
03/01 00:36, 7F

03/01 00:37, , 8F
你自己看著辨就好了?
03/01 00:37, 8F

03/01 00:37, , 9F
所以,一直講OOP 的OOXX 後, 最後要補一句"要看事辨事?"
03/01 00:37, 9F

03/01 01:58, , 10F
所以imperative是王道這樣?
03/01 01:58, 10F
文章代碼(AID): #1HBhlI1h (Soft_Job)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 11 之 12 篇):
文章代碼(AID): #1HBhlI1h (Soft_Job)