[問題] 記憶體不足

看板C_and_CPP (C/C++)作者 (阿鳥喂)時間13年前 (2012/10/31 20:56), 編輯推噓18(18025)
留言43則, 10人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) CodeBlocks10.05 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 擷取卡片的函式庫 問題(Question): 當第19行fileNum改成1000,執行會發生錯誤 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/1QuHtH 補充說明(Supplement): 這程式是寫來控制camera讀取資料,目前的寫法是一次讀400張二維的影像,然後 在一次存成400個binary檔案,每一個二維影像是由4096*400個點購成,一個點 是一個int。現在希望可以要存幾張就存幾張,只要硬碟容量夠多,目前想到的 辦法是邊讀邊存,然後邊釋放上一個二維影像的資料,又擔心存檔的速度沒有掃 瞄速度快,掃瞄速度大概是1秒20張二維影像,小弟我完全沒有頭緒怎麼寫,謝謝 各位讀完這冗長的文章和code,懇請各位大大幫忙。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.84.41

10/31 21:46, , 1F
是單一通道就要用到32bit嗎? 甚麼Camera這麼厲害@@?
10/31 21:46, 1F

10/31 21:47, , 2F
還是3個通道+alignment?
10/31 21:47, 2F

10/31 21:51, , 3F
像這種東西多工很重要 multithread
10/31 21:51, 3F
我不太懂單一通道用到32BIT是什麼意思耶@@" 我們的相機是 Basler sprint spL4096-140km 另外我去查查multithread的應用,還是可以請大大 解釋在這裡該怎麼用? ※ 編輯: j9353242 來自: 1.162.84.41 (10/31 22:52)

10/31 22:22, , 4F
一張圖4k*2k*4 = 32M 每秒 20 張是 640M/sec
10/31 22:22, 4F

10/31 22:23, , 5F
我好奇camera是用什麼介面,這已經超越usb 3.0了
10/31 22:23, 5F
是他們相機和擷取卡另外附的一條傳輸線,不是用usb傳輸 那camera用什麼介面我不太懂意思 ※ 編輯: j9353242 來自: 1.162.84.41 (10/31 22:54)

10/31 23:01, , 6F
我想littleshan你可能算錯了,他是每秒20張
10/31 23:01, 6F

10/31 23:02, , 7F
4k*2k*20 = 20MByte/sec
10/31 23:02, 7F

10/31 23:03, , 8F
網站上的規格說是單色12bit。
10/31 23:03, 8F

10/31 23:04, , 9F
一個 pixel = ?? bytes, 差在這吧?
10/31 23:04, 9F

10/31 23:04, , 10F
sorry,沒看到int,還要*int,沒錯~~
10/31 23:04, 10F

10/31 23:05, , 11F
如果要省的話就3個byte存兩個像素或是2個byte存1個像素。
10/31 23:05, 11F

10/31 23:05, , 12F
multithread,多執行緒,一個thread接收影像,一個
10/31 23:05, 12F

10/31 23:06, , 13F
thread去做存硬碟的工作,這樣分開來多工比較有效率
10/31 23:06, 13F

10/31 23:13, , 14F
如果3個byte存兩個像素的話也需要 234.375MB/sec 的硬碟
10/31 23:13, 14F

10/31 23:14, , 15F
才跟得上。如果不壓縮可能要裝一台 SSD 才有辦法了。
10/31 23:14, 15F

10/31 23:17, , 16F
或是你可以用 RAM Disk 把延伸記憶體當硬碟用。
10/31 23:17, 16F

10/31 23:19, , 17F
2秒1G的用量,33分鐘就要1T空間了~~很龐大的用量耶
10/31 23:19, 17F

10/31 23:21, , 18F
高解析度的 camera 應該有支援 MJPEG 吧,不要說4k*2k
10/31 23:21, 18F

10/31 23:22, , 19F
720p 傳 yuv420p 30fps 走 USB2.0 都會頓了
10/31 23:22, 19F

10/31 23:22, , 20F
剛剛也在想,這種流量就算CPU來得及,硬碟吃得下嗎...
10/31 23:22, 20F

10/31 23:24, , 21F
SSD 跑不掉吧 XD
10/31 23:24, 21F

10/31 23:24, , 22F
這種camera通常是直接接網路線吧,沒看過usb介面
10/31 23:24, 22F

10/31 23:24, , 23F
這麼高流量,SSD空間不夠呀@@ 再來是SSD這樣操應該會
10/31 23:24, 23F

10/31 23:24, , 24F
SSD吃得快但食量小啊,馬上就飽了...XD
10/31 23:24, 24F

10/31 23:24, , 25F
很快就拜拜了
10/31 23:24, 25F

10/31 23:32, , 26F
那只好組 RAID 了...
10/31 23:32, 26F

10/31 23:34, , 27F
考慮調低camera解析度嗎?? 還是一定要使用最高解析度
10/31 23:34, 27F
各位大大抱歉,我不小心搞錯了,這台相機每張二維影像是4096*400(深度*寬度)個點組 成,另外這個相機一個點是由2個byte組成的。那請問當400張調成1000張會造成程式錯 誤的原因是記憶體ram不足嗎? ※ 編輯: j9353242 來自: 1.162.84.41 (10/31 23:50)

11/01 00:02, , 28F
你的記憶體多大?? 你算一下1000張大小就知道了
11/01 00:02, 28F

11/01 00:04, , 29F
一般 OS 大概會給你 2G 的記憶體,再多就要不到了。
11/01 00:04, 29F
我是使用XP32位元,外插4G,只能讀到3.25G 4096*400*1000*4/1024/1024 = 6250M 那應該沒有問題啊0.0 ※ 編輯: j9353242 來自: 1.162.84.41 (11/01 00:33)

11/01 00:39, , 30F
是4096*400 還是4096*2000?
11/01 00:39, 30F

11/01 00:40, , 31F
小算盤表示上面那行算出來的結果是6250G
11/01 00:40, 31F

11/01 00:40, , 32F
6250M吧?
11/01 00:40, 32F

11/01 00:41, , 33F
然後一個點不是2byte嗎? *4還是*2 ?
11/01 00:41, 33F

11/01 00:43, , 34F
你可以試試看500張600張700張,到哪個張數就不能跑了
11/01 00:43, 34F

11/01 00:44, , 35F
喔對單位搞錯了哈哈哈
11/01 00:44, 35F
※ 編輯: j9353242 來自: 1.162.84.41 (11/01 08:56)

11/01 08:59, , 36F
6GB 怎會沒問題 XD
11/01 08:59, 36F

11/01 08:59, , 37F
6250M怎麼會沒問題?? 6G耶
11/01 08:59, 37F
昨天晚上算錯了XD 6GB看起來的確有問題 所以在想有沒有辦法邊讀邊存,而不是讀完400 張在存,然後在讀下一張的時候,可以清掉上一張的記憶體 ※ 編輯: j9353242 來自: 1.162.84.41 (11/01 09:39)

11/01 10:03, , 38F
要壓縮,硬碟的寫入速度沒那麼快
11/01 10:03, 38F
請問壓縮是什麼意思0.0? 是把它壓成rar檔嗎? ※ 編輯: j9353242 來自: 140.112.19.18 (11/01 10:24)

11/01 10:45, , 39F
你可以準備 n 張的 ring buffer
11/01 10:45, 39F

11/01 10:46, , 40F
在 callback 裡把圖複製到 ring buffer 裡
11/01 10:46, 40F

11/01 10:47, , 41F
複製好以後 signal main thread 把檔案寫到硬碟裡
11/01 10:47, 41F

11/01 11:06, , 42F
multithread + ring buffer, 組raid0/自己寫多顆HD分散寫入
11/01 11:06, 42F

11/01 18:10, , 43F
LineScan by Camera Link
11/01 18:10, 43F
文章代碼(AID): #1GaI0C_F (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GaI0C_F (C_and_CPP)