Caffe 遇到過的問題

2017.01.09

make -j

命令導致系統奔潰,大概已經編譯完了,不過就是卡在那個終端不退出,鼠標鍵盤任何輸入都沒有反應,很奇怪,前兩天還沒有這種情況的。。目前原因不明,不過在多次嘗試後,使用

make -j4   或   make -j8

命令就可以正常編譯了.

  • 開啓debug後輸出太多Prefetch batch和Read time信息:
I0109 18:01:51.030918 28519 data_layer.cpp:102] Prefetch batch: 0 ms.
I0109 18:01:51.030925 28519 data_layer.cpp:103]      Read time: 0.002 ms.
I0109 18:01:51.030927 28519 data_layer.cpp:104] Transform time: 0.02 ms.
I0109 18:01:51.031420 28513 caffe.cpp:306] Batch 296388, accuracy = 1
I0109 18:01:51.031522 28519 data_layer.cpp:102] Prefetch batch: 0 ms.
I0109 18:01:51.031527 28519 data_layer.cpp:103]      Read time: 0.002 ms.
I0109 18:01:51.031530 28519 data_layer.cpp:104] Transform time: 0.021 ms.

一開始還很困惑,後來才發現在makefile.comfig裏忘了把debug關了,關掉果然就好了~

2017.01.10

今天在gdb和eclipse裏調試caffe的test命令,真的是氣死我了。從昨天晚上到現在終於想明白了!!!
caffe的cpu_datab和gpu_data確實可以實現自動同步,不過調試時使用p *(bottom[0].data_.px)輸出

$65 = {cpu_ptr_ = 0x1020a402a00, gpu_ptr_ = 0x10213000000, size_ = 1600, head_ = caffe::SyncedMemory::SYNCED, own_cpu_data_ = true, cpu_malloc_use_cuda_ = true, own_gpu_data_ = true, gpu_device_ = 0}

p *((float*)0x10213000000)@200(batch是200)輸出:
輸出的一直全都是0,(其中0x10213000000爲gpu_data的地址)

一開始以爲我水平不夠,print格式不太對,嵌套好幾層指針和引用,於是不用gdb調試,試着用ide可以更直觀的查看內存中的情況,然後花了三四個小時配置好了eclipse attach to process調試C++程序,結果還是一樣的!!

突然就想到gdb print cpu-data指針和gpu_data指針作用能一樣嗎?應該都把地址作爲默認的內存(內存條)上的地址輸出了啊,而gpu_data明顯是存在顯卡的顯存上的啊,那你print的就肯定不是gpu_data了嘛!!真是SB

最後先獲得cpu_data指針,再從cpu_data指針讀取輸出預測的概率值

  const Dtype* prob_data_cpu_data = prob_.cpu_data(); //獲取cpu_data
  fpzfq << *(prob_data_cpu_data + 1) << "\n";//fpzfq是ofstream對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章