Caffe2源码学习

我没有仔细阅读caffe2的源码,只是大概读了半个小时,刚下班,把这半个小时的内容记录下,免得自己忘了!

先從最基本的CreateOperator開始看起!

  1. 什麽是Operator? 其實就是函數。不要太深究了
  2. 怎麽使用Operator?首先調用CreateOperator創建一個op,然後調用FeedBlob往網絡裏喂入參,再調用RunOperatorOnce來執行op
  3. 如果你衹想要學習怎麽調用Caffe2的API,那麽你已經學到一半了
  4. 剩下來的一半,是創建網絡,執行網絡,分爲TrainRun。我大概掃了幾眼,還沒有細看,明天繼續講Net的相關代碼。今天衹講Operator

CreateOperator

第一個入參OperatorDef:包含這些内容: 類型例如relu、設備類型例如cuda, 第二個入參Workspace:包含這些内容 第三個入參net_position:

内部衹做了一件事調用OperatorRegistryCreate創建Operator,其中Create的第一個參數就是OperatorDef裏的類型例如Relu

OperatorRegistry

全局gDeviceTypeRegistry就是個map,key就是cpu,cuda之類的,我衹看cuda這裏 而value就是OperatorRegistry! 什麽時候注冊的這些到map裏呢?調用了CAFFE_REGISTER_DEVICE_TYPE這個宏的時候! 我找到的這些宏調用的地方

  • CAFFE_REGISTER_DEVICE_TYPE(DeviceType::MKLDNN, MKLOperatorRegistry); //intel的MKL庫加速
  • CAFFE_REGISTER_DEVICE_TYPE(DeviceType::CPU, CPUOperatorRegistry); //普通CPU
  • CAFFE_REGISTER_DEVICE_TYPE(DeviceType::CUDA, CUDAOperatorRegistry); //CUDA加速,我讀的就是這個

剛才提到CreateOperator最後會調用Create,就是CUDAOperatorRegistry這個了; 看到代碼

template <class SrcType, class ObjectType, class... Args>
class Registry {

也就是模板類


今天的思考:

  • windows下有一个搜索软件Everything,非常好用
  • Linux下却没有类似的软件
  • 打算自己写一个linux版本的Everything
  • 查看了相关资料,Everything只能工作在NTFS文件系统,基于USN日志相关内容

我的思路:

  • Linux下有一个SELinux,可以控制文件访问,是不是可以用SELinux的回调函数什么的知道文件的创建,修改,删除等操作。只要获得需要的信息,记录到数据库,后面的事情就容易了
  • 网上了解了下SELinux的机制,是通过iNode实现的。阅读Linux内核源码的fs目录文件系统,每个文件系统实现目录下都有iNode.c这个文件
  • 思路有了,开始阅读linux内核源码,了解iNode相关操作,开始评估是不是可以通过iNode的相关内容实时获得Linux上所有文件,并记录数据库
  • Xapian是一个搜索引擎,可以用这个建立索引和搜索
  • 我已经用Qt实现了界面。。。