-
对mindspore\ccsrc\pipeline\jit\parse\resolve.h的部分注释和对using namespace std的学习理对mindspore\ccsrc\pipeline\jit\parse\resolve.h的部分注释和using namespace std的学习理解知识浅薄,还有许多未理解之处,欢迎各位纠正、讨论。相对路径:mindspore\ccsrc\pipeline\jit\parse\resolve.hC++命名空间(using namespace std) 、 namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。namespace是为了解决C++中的名字冲突而引入的。 C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:直接指定标识符:例如std::iostream而不是iostream。完整语句如下:std::cout << std::hex << 3.4 << std::endl;使用using关键字using std::cout; using std::endl; using std::cin; 以上程序可以写成如下代码:using std::cout <<using std::hex << 3.4 <<using std:: endl; 使用using namespace std例如#include<iostream>#include<sstream>#include<string>using namespace std; 这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:cout << hex<< 3.4<< endl; 因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了<iostream.h>和等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加”.h”实际上就是告诉编译器,你类型是什么,在哪能找到。常用的是using namespace std,就是说用C++的标准名字空间。 你也可以引用你自己的名字空间。using在C plusplus中的使用。 1、引入命名空间 引入命名空间std的意思,这样在这个引入命名空间的范围内,使用函数时就不用再标明其出处,可以理解为告诉编译器,我从哪里来,你就到这个地方找我吧。这样就不会在调用多个同名函数的时候搞错了,A和B空间下的函数是不一样的,using A就去A下找吧,别犯错误迷路了去B下找这就错了。 2、类型别名 在C++11新标准中,采用using来给类型取一个别名,这样就好记了,避免有的名字过于繁琐在用的时候还要写原名。 3、在子类中引入基类的成员 继承构造 假如子类中有和基类同名的函数,这时还想用基类的函数,就可以使用using,不然就会隐藏基类的函数。//在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误#ifndef MINDSPORE_CCSRC_PIPELINE_JIT_PARSE_RESOLVE_H_#define MINDSPORE_CCSRC_PIPELINE_JIT_PARSE_RESOLVE_H_//预编译命令//用的多的函数放在.h头文件中定义声明。//尽量不要在.h头文件中设置全局变量,或者静态全局变量。//导入系统文件或者是自定义文件:#include <memory>#include <string>#include "ir/anf.h"#include "ir/manager.h"#include "pipeline/jit/parse/python_adapter.h"#include "pipeline/jit/parse/parse_base.h"#include "abstract/abstract_value.h"#include "utils/log_adapter.h"// forward declaration of ResourceBase//资源库的正向声明namespace mindspore {//命名创建一个名为mindspore的空间,并在其中嵌套一个名为pipeline(管道)的空间namespace pipeline {//namespace,是指标识符的各种可见范围。class ResourceBase;//资源库Ptrusing ResourceBasePtr = std::shared_ptr<ResourceBase>;//引入使用这个空间} // namespace pipeline} // namespace mindsporenamespace mindspore {namespace parse {// NameSpace class for resolving python code.//用于解析python代码的命名空间类。class NameSpace : public Named { public: NameSpace(const std::string &module, const py::object &obj) : Named(module), module_(module), obj_(obj) {} ~NameSpace() override = default;//将override赋为default 表示默认存在构造函数 MS_DECLARE_PARENT(NameSpace, Named);//对NameSpace, Named声明父项 py::object obj() { return obj_; }//获取目标对象 std::string module() { return module_; }//获取字符模块 abstract::AbstractBasePtr ToAbstract() override { return std::make_shared<abstract::AbstractScalar>(shared_from_base<NameSpace>(), std::make_shared<External>()); } private://修饰成员变量和成员 被private修饰的成员只能在本类中访问。 // namespace of the module //模块的命名空间 std::string module_; // namespace object //名称空间对象 py::object obj_;};using NameSpacePtr = std::shared_ptr<NameSpace>;//引入使用NameSpace空间// Symbol in NameSpace or Class which shall be resolved.//名称空间或类中应解析的符号。class Symbol : public Named { public: explicit Symbol(const std::string &symbol) : Named(symbol), symbol_(symbol) {} explicit Symbol(const std::string &symbol, const std::string &name) : Named(name), symbol_(symbol) {} ~Symbol() override = default;//表示默认存在构造函数 MS_DECLARE_PARENT(Symbol, Named);//MS声明Symbol,和Named的父项关系 std::string symbol() { return symbol_; } abstract::AbstractBasePtr ToAbstract() override { return std::make_shared<abstract::AbstractScalar>(shared_from_base<Symbol>(), std::make_shared<External>()); } private://修饰成员变量和成员 被private修饰的成员只能在本类中访问。 std::string symbol_;//字符串符号};using SymbolPtr = std::shared_ptr<Symbol>;//引入使用这个Symbol空间// PyObjectWrapper class wrappers resolved python object for further processing.\//Py对象包装器类包装器解析python对象以供进一步处理。class PyObjectWrapper : public Named {//Py对象包装器 public: explicit PyObjectWrapper(const py::object &obj, const std::string &name = "Python object") : Named(name), obj_(obj) {} ~PyObjectWrapper() override = default;//将override赋值为default 表示默认存在构造函数 MS_DECLARE_PARENT(PyObjectWrapper, Named);//MS声明PyObjectWrapper,和Named的父项关系 py::object obj() { return obj_; }//返回目标对象 private://修饰成员变量和成员 被private修饰的成员只能在本类中访问。 // the object that needs to be resolved //需要解决的对象 py::object obj_;};// ClassObject class wrappers dataclass//类对象类包装器数据类class ClassObject : public PyObjectWrapper {//对象类包装器 public: explicit ClassObject(const py::object &obj, const std::string &name = "Python dataclass") : PyObjectWrapper(obj, name) {} ~ClassObject() override = default;//将override赋为default 表示默认存在构造函数 MS_DECLARE_PARENT(ClassObject, PyObjectWrapper);//MS声明父项关系ClassObject,和PyObjectWrapper abstract::AbstractBasePtr ToAbstract() override;//修饰类和方法 /*1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。 2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。 */};// ClassType class wrappers class name in python//类类型类包装器python中的类名class ClassType : public PyObjectWrapper {//类型类包装器 public: explicit ClassType(const py::object &obj, const std::string &name = "Python class type") : PyObjectWrapper(obj, name) {} ~ClassType() override = default;//将override赋为default 表示默认存在构造函数 MS_DECLARE_PARENT(ClassType, PyObjectWrapper);//MS声明父项Classtype,PyObjectWrapper abstract::AbstractBasePtr ToAbstract() override;};using ClassTypePtr = std::shared_ptr<ClassType>;//引入ClassType命名空间// SymbolResolver class for resolving symbol extracted from AnfNode.//用于解析从节点提取的符号的符号解析器类。class SymbolResolver {//解析符号 public: SymbolResolver(const NameSpacePtr &name_space, const SymbolPtr &symbol, const AnfNodePtr &node) : namespace_(name_space), symbol_(symbol), resolved_node_(node) {} ~SymbolResolver() = default;//将SymbolResolver赋为default 表示默认存在构造函数 // resolve symbol in namespace and save it in result_; //解析命名空间中的符号并将其保存在结果中 bool Resolve();//判断是否(bool)完成解析 NameSpacePtr get_namespace() { return namespace_; } //获取命名空间 SymbolPtr symbol() { return symbol_; } //获取符号标记 py::object &result() { return result_; } //目标结果 AnfNodePtr resolved_node() { return resolved_node_; } //解析节点 // Resolve result //解析结果 py::object result_; private: // namespace where the symbol locates //符号所在的命名空间 NameSpacePtr namespace_; // the symbol that needs to be resovled //需要解决的符号 SymbolPtr symbol_; // the node that has been resolved //已解析的节点 AnfNodePtr resolved_node_;};using SymbolResolverPtr = std::shared_ptr<SymbolResolver>;// Resolve symbol in namespace.//解析命名空间中的符号AnfNodePtr ResolveSymbol(const FuncGraphManagerPtr &manager, const NameSpacePtr &name_space, const SymbolPtr &symbol, const AnfNodePtr &node);// Resolve Cell with attr name.//解析具有attr名称的单元格。AnfNodePtr ResolveCellwithAttr(const FuncGraphManagerPtr &manager, const NameSpacePtr &name_space, const SymbolPtr &symbol, const AnfNodePtr &node, const std::string &attr);// Resolve one graph which normally is the root graph. FuncGraph shall be managed by res->manager().//解析一个通常为根图的图。FuncGraph应由res管理器管理bool ResolveFuncGraph(const FuncGraphPtr &func_graph, const pipeline::ResourceBasePtr &res, bool use_profile = true);// Resolve all graphs in manager which is defined outside of pipeline::Resource.// Mainly used for test cases or resolve graphs which will not be managed by manager.//解析在pipeline::Resource之外定义的管理器中的所有图形。//主要用于不由manager管理的测试用例或解析图。bool ResolveAll(const FuncGraphManagerPtr &manager);//判断是否(bool类型)解析所有函数图管理器} // namespace parse} // namespace mindspore#endif // MINDSPORE_CCSRC_PIPELINE_JIT_PARSE_RESOLVE_H_————————————————原文链接:https://blog.csdn.net/qq_53904578/article/details/119448921
-
【功能模块】【操作步骤&问题现象】1、已经在转om模型时加上 --dynamic_batch_size2、请问mxvision推理程序怎么编写,又可以参考的demo吗【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】使用ACL库进行RTSP视频流解码、推理以及后处理【操作步骤&问题现象】1、样例参考 https://www.hiascend.com/zh/developer/mindx-sdk/applicationDetails/601722152、使用yolov3模型进行推理和后处理,得到的结果和实际目标很吻合;3、使用yolov5模型(自己训练的,在Mxvision项目验证过)进行推理和后处理,得到的结果和实际目标完全不匹配(坐标置信度等);4、参考yolov3的后处理过程,yolov5替换对应的模型,以及classNum、anchor值等参数;5、yolov3模型基于tensorflow框架,yolov5模型基于pytorch框架(*.pt=>*.onnx=>*.om);6、yolov3数据排布格式是NHWC,yolo5数据排布格式是NCHW;7、如果改用yolov5模型,需要修改样例中模型推理部分吗?后处理如何修改?有参考的yolov5后处理的样例吗?【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】https://www.mindspore.cn/lite/api/zh-CN/r1.3/api_cpp/tensor.html#mstensor【操作步骤&问题现象】 官网文档未更新,MSTensor实际属性名应为ElementNum【截图信息】【其他】 mindspore官网中,对于c++的api描述过于简洁,使用起来很不方便,希望能适当补充,并给出更多例程
-
在samples/cplusplus/common/atlasutil 下 make报错 548507548508548509
-
【操作步骤&问题现象】1.请问交付件中的自验测试用例是包括C++自验测试用例和Python自验测试用例吗,然后C++的自验测试用例是和pr的C++接口单元测试文件格式是一样的嘛,是需要编译才能测试执行?然后python自验测试用例是安装whl文件才能测试?2.然后请问是将所有的测试都写在UT测试中,还是部分写在UT测试中,然后在交付件测试用例中写更加完善的测试用例呢?
-
我目前的Trunc算子开发,需要编写Trunc的反向传播。设计文档给出的是 pytorch的c++实现。【操作步骤&问题现象】我目前希望能得到如下解答:1、 pytorch的 TruncBackward的c++实现,在 pytorch项目中的路径2、对应mindspore到相关的TruncBackward的c++实现的函数、接口有什么可以参考的文档吗?【截图信息】这个文件具体去哪找,没有注释,不好理解。mindspore相应的函数接口怎么去找?【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【操作步骤&问题现象】1、对使用elugrad算子功能不太清楚,自己找到了他的c++实现,但是在tensorflow中实现一直会报错,怀疑是自己输入的参数有问题,第一个参数gradients,我自己理解是elu输出的梯度,我也成功求出,但是放入elugrad算子中会报错2.下图一张是我找的c++的实现,一张是我使用tensorflow的报错信息【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】在运行 mxManufacture 的demo时候发现c++和 python的demo都无法在200dk环境下编译root@davinci-mini:/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python# ./run.sh Begin to initialize Log.The output directory(/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../logs) of logs file exist.Save logs information to specified directory(/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../logs).I0812 01:59:16.600510 2206 MxStreamManager.cpp:266] MX_SDK_HOME = /home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../..I0812 01:59:16.600932 2206 MxStreamManager.cpp:251] GST_PLUGIN_SCANNER = /home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../opensource/libexec/gstreamer-1.0/gst-plugin-scannerI0812 01:59:16.600991 2206 MxStreamManager.cpp:251] GST_PLUGIN_PATH = /home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../opensource/lib/gstreamer-1.0:/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../lib/plugins:/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../opensource/lib/gstreamer-1.0:/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python/../../../lib/pluginsI0812 01:59:16.601341 2206 MxStreamManager.cpp:318] log rotate day(7).I0812 01:59:16.601574 2206 MxStreamManager.cpp:322] log rotate file number(50).E0812 01:59:16.641073 2206 Log.cpp:668] The coredump signal is: 11E0812 01:59:16.641564 2206 Log.cpp:671] --------------core begin---------------------E0812 01:59:16.651242 2206 Log.cpp:692] MxBase::SigHandle(int)E0812 01:59:16.659337 2206 Log.cpp:692] __kernel_rt_sigreturnE0812 01:59:16.667385 2206 Log.cpp:692] PyUnicode_EncodeFSDefaultE0812 01:59:16.675455 2206 Log.cpp:692] PyUnicode_FSConverterE0812 01:59:16.683419 2206 Log.cpp:692] PyObject_CallE0812 01:59:16.691694 2206 Log.cpp:692] _PyObject_CallFunction_SizeTE0812 01:59:16.699954 2206 Log.cpp:692] _PyCFunction_FastCallDictE0812 01:59:16.708545 2206 Log.cpp:692] _PyEval_EvalFrameDefaultE0812 01:59:16.717259 2206 Log.cpp:692] PyRun_FileExFlagsE0812 01:59:16.725315 2206 Log.cpp:692] PyRun_SimpleFileExFlagsE0812 01:59:16.733248 2206 Log.cpp:692] Py_MainE0812 01:59:16.741212 2206 Log.cpp:692] mainE0812 01:59:16.749238 2206 Log.cpp:692] __libc_start_mainE0812 01:59:16.749795 2206 Log.cpp:697] --------------core done---------------------./run.sh: line 33: 2206 Segmentation fault python3 main.pyroot@davinci-mini:/home/HwHiAiUser/mxManufacture-2.0.1/samples/mxManufacture/python# 【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】问题求助:在atlas200dk arrch64,Ubuntu18.04,使用https://mindx.obs.cn-south-1.myhuaweicloud.com/MindX%202.0.1/Ascend-mindxsdk-mxmanufacture_2.0.1_linux-aarch64.runrun包,自己的图片,执行了sample样例,显示如下信息,没有得出推理结果,只显示了一些错误信息,这是什么原因导致的E0811 06:15:14.625720 3153 MpModelVisionInfer.cpp:141] [mxpi_modelinfer0][1004][Invalid parameter] 'Input image size'[259584] should be equal to 'Model image size'[2076672]. 'Model height'[416] should be equal to either 'Input image aligned height'[416], or 'Input image height'[416]. 'Model width'[416] should be equal to either 'Input image aligned width'[416], or 'Input image width'[416].【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】执行C++侧算子原语定义的inferShape时,获取属性值【操作步骤&问题现象】在inferShape时,由于推导输出shape与属性值有关,所以需要获取属性值,但是执行GetValue()方法时却报空指针异常,但我前端是已经传入了有值属性的,并且确定中的data_format和python侧定义的属性名是一致的,不知可能会是什么原因造成这种情况而无法获取属性,求解答。报错信息如下:
-
在WIDERFace加载算子遇到两个问题:1. 对标算子label的返回值是字典类型,C++将其分成多个属性(列)输出是否可行;其中人脸识别框bbox的返回形式为二维数组的Tensor,在mindspore::DataType中不支持vector,暂将其insert到一维vector中,然后生成shape为n*4的Tensor,不知道在这个问题上有没有更好的解决方案2. 在该算子中,train和valid的数据都给出了标签信息,但是test部分只有原始图片,在进行usage=all加载时,test不包含标签信息,pytorch中直接返回None;在C++中,而vector不支持空返回,特别是ir层中Build()不知该如何处理包含关系,或者去掉usage=all?
上滑加载中
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中
热门标签