Re: [問題] 多點到直線的距離

看板Prob_Solve (計算數學 Problem Solving)作者 (喔喔)時間9年前 (2015/05/18 07:33), 編輯推噓0(0014)
留言14則, 3人參與, 最新討論串2/2 (看更多)
: let ax+b-y = 0 : for (i=1,i<10000,i++) : { : dis = abs(a*xpoint[i]+b-ypoint[i]) : if (dis>dismax) : { : dismax = dis : point = i <-------這是我的目的 想要找哪一個點 : } 我假設你已經測試過了,這部份是 bottleneck,而且這些計算是必須的。 已經有人建議用平行化了,我這邊提供用單 CPU 的稍微加快的技巧。 dis 計算其實就只是 dot product + abs,這兩個指令應該可以直接由 硬體支援,你可以編譯成 assembly 檢查一下。 讀取 point 的時候是循序讀的,所以可以使用 prefetch,或許可以減少存取時間。 計算完 dis 之後立刻作 comparison 會造成 data hazard,pipeline就堵死了。 你可以改成類似這樣 dis = abs(a*xpoint[i]+b-ypoint[i]); if (pre_dis > dismax) .... pre_dis = dis; 這些技巧有沒有用,取決於你的機器和資料,而且就算變快效果應該也很有限。 又因為你沒有提供 profiling 的資訊,我也很難猜測到底是慢在哪個指令上, 只能憑我的經驗去猜而已。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 50.133.134.181 ※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1431905639.A.9A6.html

05/18 10:41, , 1F
想請教一下 程式改成這樣的話不就抓不到最長距離了?
05/18 10:41, 1F

05/19 00:06, , 2F
可以吧 要稍微修改一點
05/19 00:06, 2F

05/23 13:28, , 3F
不懂? 還是有比較阿?
05/23 13:28, 3F

05/23 19:24, , 4F
你要先了解計算機結構,才會知道這樣有什麼差
05/23 19:24, 4F

05/23 22:58, , 5F
我是知道(在這邊不敢說了解 有老大哥在監視)..常見例子是
05/23 22:58, 5F

05/23 23:01, , 6F
WB stage之前另外一條pipeline要取同變數的值 方法之一就
05/23 23:01, 6F

05/23 23:02, , 7F
有加入control logic讓資料可以just-in-time
05/23 23:02, 7F

05/23 23:03, , 8F
所以你這邊說的是不要跟dist馬上作比較?
05/23 23:03, 8F

05/23 23:07, , 9F
control-logic(==>forwarding technique) 不過這在存取變
05/23 23:07, 9F

05/23 23:08, , 10F
數時有dependency時都可能發生...還是用profiling先?
05/23 23:08, 10F

05/23 23:40, , 11F
補充一下 不是專研計結 請老大哥別再出來幹醮惹 教學一下
05/23 23:40, 11F

05/23 23:40, , 12F
讓別人有所長好嗎....
05/23 23:40, 12F

05/24 20:44, , 13F
你說的方法是靠硬體來減少 dependency 的 delay
05/24 20:44, 13F

05/24 20:44, , 14F
我的方法是手動排除 dependency..
05/24 20:44, 14F
文章代碼(AID): #1LMILdcc (Prob_Solve)
討論串 (同標題文章)
文章代碼(AID): #1LMILdcc (Prob_Solve)