Caffe 源碼閱讀(六) InternalThread

类InternalThread是一个虚类,是Caffe中的多线程接口,其本质是为封装了boost::thread

看源码可以得到以下结论:

1、每个派生类都需要实现一个InternalThreadEntry()

2、thread_的初值为NULL,所以单单继承InternalThread不会产生新的线程

3、但是调用InternalThread::StartInternalThread()函数,则会执行以下代码,重置thread_,该线程绑定的函数是InternalThread::entry()

4、在InternalThread::entry()中,调用了InternalThread::InternalThreadEntry(),该函数在不同的派生类中的实现是不同的(即不同的子线程完成的任务不一样)

时间: 2024-12-21 02:06:55

Caffe 源碼閱讀(六) InternalThread的相关文章

Caffe 源碼閱讀(三) caffe.cpp

從main函數說起: 1.gflags庫中爲main函數設置usage信息 是google的一個開源的處理命令行的參數的庫.在使用命令行參數的文件夾文件中(源文件或頭文件),首先使用以下定義語句進行變量的定義. DEFINE_int32, DEFINE_int64, DEFINE_bool等, 語法爲:DEFINE_int32(name,default_value,"description").接着你就可以使用FLAGS_name變量了,這些變量的值則是由命令行參數傳遞,無則爲默認值,

Caffe 源碼閱讀(二) SyncedMemory.hpp

1. to_cpu 數據由現存同步到內存 2. to_gpu 數據由內存同步到顯存 3. cpu_str_ 內存指針 4. gpu_str_ 顯存指針 5. size_ 數據大小 6. own_cpu_data_ 是否分配了內存空間 7.head_ 當前數據狀態 cpu_data() 完成數據同步並返回數據指針 cpu_ptr

Caffe 源碼閱讀(一) Blob.hpp

Blob 四維度(N K H W) N : SGD 一次 mini-batch 個數 K : 如果是圖片表示圖片通道數 如果是中間結果 則理解爲 feature map 個數 H.W : 如果是圖片理解爲圖片的高度寬度 如果是feature map理解爲核的寬度及高度 重點包括 個部分: 1.數據成員 2.構造函數 3.Blob數據訪問方法

(转载)閱讀他人的程式碼(6)閱讀的樂趣:透過程式碼認識作者

即便每個人的寫作模式多半受到他人的影響,程式人通常還是會融合多種風格,而成為自己獨有的特色,如果你知道作者程式設計的偏好,閱讀他的程式碼就更得心應手. 閱讀程式碼時,多半會採取由上而下.抽絲剝繭的方式.透過記錄層層展開的樹狀結構,程式人可以逐步地建立起對系統的架構觀,而且可以依照需要的粒度(Granularity),決定展開的層次及精緻程度. 建立架構觀點的認識是最重要的事情.雖然這一系列的文章前提為「閱讀他人的程式碼」,但我們真正想做的工作,並不在於徹底地詳讀每一行程式碼的細節,而是想要透過重

邁向IT專家成功之路的三十則鐵律 鐵律二十六:IT人閱讀之道-慎選

IT人經常一整天工作回來早已用腦過度,此時收看什麼樣的電視節目,以及閱讀甚麼樣的書籍.聽什麼樣的音樂與有聲書最適合我們,讓我們可以在放鬆之餘,還能夠讓自己內在的心靈與外在的能力繼續成長呢? 身為IT工作者的我們,每一天回到家最重要的事情就是放鬆,而所謂的「放鬆」是指由內而外的完全放鬆.根據了解,人的心在最放鬆的狀態下其學習效果是最好的,也就是說即使因工作了一整天身體有一些疲累,在讓身體稍作歇息之後,一旦我們的心靈也在全然的放鬆狀態下,這時候如果去看(聽)一些有益我們身心與技能的刊物.視訊或是有聲

【原】AFNetworking源码阅读(六)

[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AFNetworking的网络安全策略,尤其指HTTPS(大家可以先简单了解下HTTPS).再一个就是分析下AFNetworkReachabilityManager文件,看看AFNetworking如何解决网络状态的检测. 2. AFSecurityPolicy - 网络安全策略 之前我们在AFURLS

caffe源码学习之Proto数据格式【1】

前言: 由于业务需要,接触caffe已经有接近半年,一直忙着阅读各种论文,重现大大小小的模型. 期间也总结过一些caffe源码学习笔记,断断续续,这次打算系统的记录一下caffe源码学习笔记,巩固一下C++,同时也梳理一下自己之前的理解. 正文: 我们先不看caffe的框架结构,先介绍一下caffe.proto,是google开源的一种数据交互格式--Google Protobuf,这种数据的格式,我们可以看到caffe.proto中内容: syntax = "proto2"; pac

caffe源码分析--poolinger_layer.cpp

对于采样层,cafffe里实现了最大采样和平均采样的算法. 最大采样,给定一个扫描窗口,找最大值, 平均采样,扫描窗口内所有值的平均值. 其实对于caffe的实现一直有个疑问, 就是每一层貌似没有绑定一个激活函数? 看ufldl教程,感觉激活函数是必要存在的. 这怎么解释呢? 看到源码中,看到一些激活函数,比如sigmoid_layer.cpp和sigmoid_layer.cu. 也就是说,激活函数作为layer层面来实现了.当然,还有tanh_layer和relu_layer. 那,这个意思是

libevent源码深度剖析六

libevent源码深度剖析六 --初见事件处理框架张亮 前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析 libevent的事件处理框架event_base和libevent注册.删除事件的具体流程,可结合前一节libevent对event的管理. 1 事件处理框架-event_base 回想Reactor模式的几个基本组件,本节讲解的部分对应于Reactor框架组件.在libevent中,这就表现为event