[問題] 請教如何增加這段 code 之 cache hit ?
for( i = 0 ; i < h ; ++i){
for(j = 0 ; j < w ; ++j) {
dst[j][h - i] = src[i * w+ j];
}
}
上面這段 code 是用在影像處理的某點截取,
瓶頸效能出在這裡,但想半天想不到有什麼妙招可避開,
不知各位版友先進是否能指點一二?
另這種 code 開 thread 下去划算嗎?
小弟先行感激,謝謝各位。
--- 補充 ---
補充一下,我在「猜」瓶頸可能是使用了 bcb 裡速度慢的 Componment,
原始碼整理過後大致是這樣
TImage * img;
for( i = 0 ; i < h ; ++i){
for(j = 0 ; j < w ; ++j) {
img->Canvas->Pixel[j][h-i] = \
(TColor) src[ i * w + j];
}
}
w * h = 640 * 480 , 裡面 array 不需考慮 o.v 問題 (實際上有考慮過了),
這段跑完超過 1 sec , 非常慢,我做了以下的嚐試
(a) loop 對換 (b) src 改用 pointer 表示 , 做 increment
然後想說換成 img->Canvas->Picture->Bitmap->ScanLine ,但換算卡卡的 Orz
還是這部份最後自己手動搞,再呼叫底層 API 去做是最直接有效的方式?
附上回覆,先謝謝各位耐心看完問題。
-- 已解 --
問題如 andyjy12 所言, img->Canvas->Pixel[j][h-i] ,主要死在這 member func.
太耗時,最後解法如下
(1) 做一個標準 bmp header + raw_data (可以存成一張 bmp 的記憶體體)
(2) 塞到 bcb-vcl-class :: TMemoryStream * stream
(3) 再用 img->Picture->Bitmap->LoadFromStream( stream );
效能差了 50 倍以上。
最後感謝各位的參與討論與意見,謝謝。
--
~ 這輩子與神手無緣
我只好當神獸了 ~
卡卡獸
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.213.184
推
04/29 20:35, , 1F
04/29 20:35, 1F
這點我忘了說我試過了,抱歉。
→
04/29 20:36, , 2F
04/29 20:36, 2F
→
04/29 20:59, , 3F
04/29 20:59, 3F
→
04/29 21:17, , 4F
04/29 21:17, 4F
→
04/29 21:18, , 5F
04/29 21:18, 5F
→
04/29 21:18, , 6F
04/29 21:18, 6F
目前的 dst array 是開 1024 * 768 * 4 大小, 但大概只會考慮 640*480 而已
→
04/29 21:20, , 7F
04/29 21:20, 7F
推
04/29 22:04, , 8F
04/29 22:04, 8F
嗯, 若真如此, 可能只能先做前測動作, 單純資料搬移是不是會花那麼多時間...
→
04/29 23:42, , 9F
04/29 23:42, 9F
這個小弟本身之前研究了, 但助益似乎不大,
google "[C語言數值分析] 矩陣乘法 < cache block >" , 是我所知道的東西,
卡在 loop 怎麼換, 一定會有一方 cache hit 高,
事先先做 transpose 這方法還沒先試就是了。
推
04/30 00:17, , 10F
04/30 00:17, 10F
→
04/30 00:20, , 11F
04/30 00:20, 11F
→
04/30 00:21, , 12F
04/30 00:21, 12F
推
04/30 00:27, , 13F
04/30 00:27, 13F
→
04/30 13:26, , 14F
04/30 13:26, 14F
→
04/30 18:05, , 15F
04/30 18:05, 15F
推
04/30 20:24, , 16F
04/30 20:24, 16F
→
04/30 20:26, , 17F
04/30 20:26, 17F
→
04/30 20:26, , 18F
04/30 20:26, 18F
→
05/01 07:15, , 19F
05/01 07:15, 19F
→
05/01 07:16, , 20F
05/01 07:16, 20F
→
05/01 07:16, , 21F
05/01 07:16, 21F
※ 編輯: EdisonX 來自: 114.37.184.86 (05/01 14:39)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):