添加使用malloc()并具有状态的TensorFlow OP
Adding a TensorFlow Op that uses malloc() and has state
我编写了一个TensorFlow OP,该tensorflow op包裹了用C编写的库,该库在内部将malloc()
调用以分配缓冲区并保持状态。我在构造函数中初始化库,这是malloc()
调用的地方,然后在Compute()
中,我将其与Mutex Guard一起使用。破坏者对free()
进行适当的调用。
在我的模型中,每个线程都在同一图中创建OP的副本,并在共享会话中运行。该代码通常会出现与指针相关的问题崩溃的,例如"释放对象的错误检查和释放后可能会修改对象"。我为OP编写的单元测试,带有一个线程,工作正常。
我怀疑图形优化器可以重复使用OP的单个实例,或者类似的东西。有没有办法告诉它,OP是有状态的,应该将其剩下?是否还有其他可能发生崩溃的原因?
我正在运行TensorFlow 1.0.0,并在OSX 10.10下用Clang 7.0编译OP。我首先将C文件编译到共享对象中,然后将C 文件与共享对象一起编译。
根据"添加新OP"的文档:
很重要:可以同时访问Opkernel的实例。您的计算方法必须是线程安全。使用互惠符对班级成员进行任何访问。或者更好的是,不要通过班级成员共享状态!考虑使用Resourcemgr跟踪OP状态。
不幸的是,从编写此答案的时候,Resourcemgr的使用非常粗略。
相关文章:
- 基于树莓pi的tensorflow lite量化ssd目标检测
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- 如何阻止TensorFlow的多线程
- boost 是否有按特殊类型值编码状态"compact optional"?
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 在 c++ 中使用 Tensorflow Lite 在边缘 TPU 上运行"mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite"时出现问题
- Tensorflow Hub in C++
- cmsis_compiler.h:在为 Arduino Due 编译 Arduino Tensorflow lite 库
- 如何在 Tensorflow C++ 中定义变量的自定义有状态 Op 保存值
- 添加使用malloc()并具有状态的TensorFlow OP
- 如何在C++中保存和恢复 TensorFlow 图及其状态