我没有仔细阅读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这个文件