我没有仔细阅读caffe2的源码,只是大概读了半个小时,刚下班,把这半个小时的内容记录下,免得自己忘了!
先從最基本的CreateOperator
開始看起!
CreateOperator
創建一個op,然後調用FeedBlob
往網絡裏喂入參,再調用RunOperatorOnce
來執行opTrain
和Run
。我大概掃了幾眼,還沒有細看,明天繼續講Net的相關代碼。今天衹講Operator第一個入參OperatorDef:包含這些内容: 類型例如relu、設備類型例如cuda, 第二個入參Workspace:包含這些内容 第三個入參net_position:
内部衹做了一件事調用OperatorRegistry
的Create
創建Operator,其中Create
的第一個參數就是OperatorDef裏的類型例如Relu
全局gDeviceTypeRegistry就是個map,key就是cpu,cuda之類的,我衹看cuda這裏
而value就是OperatorRegistry
!
什麽時候注冊的這些到map裏呢?調用了CAFFE_REGISTER_DEVICE_TYPE
這個宏的時候!
我找到的這些宏調用的地方
剛才提到CreateOperator
最後會調用Create
,就是CUDAOperatorRegistry
這個了;
看到代碼
template <class SrcType, class ObjectType, class... Args>
class Registry {
也就是模板類
今天的思考:
我的思路:
文件系统
,每个文件系统实现目录下都有iNode.c这个文件