ImportError: /opt/hpcx/ucc/lib/libucc.so.1: undefined symbol: ucs_mpool_params_reset 【代码】ImportError: /opt/hpcx/ucc/lib/libucc.so.1: undefined symbol: ucs_mpool_params_reset。
C++11多线程笔记四(部署中的生产者消费者模式) 部署中多线程常用组件:thread, join, joinable, detach, mutex, promise, future, condition_variable, 生产者消费者模式。
C++11多线程笔记三(Mutex) 而是由多条汇编指令完成的,因此多个线程对同一个变量进行读写操作就会出现不可预期的操作。比如:假定counter当前值为10,线程1读取到了10,线程2也读取到了10,分别执行自增操作,线程1和线程2分别将自增的结果写回counter,不管写入的顺序如何,counter都会是11,但是线程1和线程2分别执行了一次自增操作,与我们所期望的结果12不符。有时候会发生死锁:假设线程1上锁成功,线程2上锁等待,但是线程1上锁成功后,抛出异常并退出,没有来得及释放锁,导致线程2“永久的等待下去”,此时就发生了死锁。
C++笔记四(右值引用) 可以对表达式取地址(&)的就是左值,否则为右值被声明出来的左值引用和右值引用都是左值,因为被声明出来出来的的左值引用和右值引用都是有地址的。是为了转移对象的所有权,其功能是把左值强制转换为右值单纯的不会有性能提升。移动语义就是为了减少拷贝std::move将左值转为右值引用,这样就可以重载到移动构造函数了,移动构造函数将指针赋值一下就好了,不用深拷贝了,提高性能。万能引用:函数模板,既可以接左值引用,也可以接右值引用,但当一个右值作为参数进行传参时,相应函数接口在接收该值时,会将该值识别成左值。
LeetCode笔记一(二叉树) int val;} };二叉树的构造前序遍历,先构造中间节点,或者通过递归函数的返回值来添加、删除节点从中序与后序遍历序列构造二叉树(106)合并二叉树(617)在二叉搜索树中插入一个节点(701)在二叉搜索树中删除一个节点(450)修剪二叉搜索树(669)构造一棵平衡二叉搜索树(108)求普通二叉树的属性后序遍历,通过递归函数的返回值做计算对称二叉树(101)二叉树的最大深度(104)二叉树的最小深度(111)平衡二叉树(110)求二叉搜索树的属性。
LeetCode笔记二(回溯总结) 子集、组合:子集(78)、子集 II(90)、组合(77)、组合总和(39)、组合总和 II(40)全排列:全排列(46)、全排列 II(47)、字符串的排列(567)、字母大小写全排列(784)搜索:解数独(37)、单词搜索(79)、N皇后(51)、分割回文串(131)、二进制手表(401)子集、组合与排列是不同性质的概念。子集、组合是无关顺序的,而排列是和元素顺序有关的,如 [1,2] 和 [2,1] 是同一个组合(子集),但 [1,2] 和 [2,1] 是两种不一样的排列!!!!
C++11多线程笔记二(创建线程) 使用 joinable() 函数在编程中进行线程状态的检查,以避免对不可被加入的线程进行错误的操作。它返回一个布尔值,指示线程是否可被加入(joinable)。对象在析构时要检查线程的状态,如果线程还在运行且未被。类的成员函数,用于检查线程是否可以被。两个成员函数,用于控制线程的行为。处理,那么就会引发终止。接受可调用对象创建线程。
C++11多线程笔记一(多线程简介) 每个线程可以独立的运行不同的指令序列,但是线程不独立的拥有资源,依赖于创建它的进程而存在。即同一进程中的多个线程共享相同的地址空间,可以访问进程中的大部分数据,指针和引用可以在线程间进行传递。由于缺少操作系统提供的保护机制,在多线程共享数据及通信时,需要保证对共享数据段的操作是以预想的操作顺序进行的,并且要极力的避免。总之,并发是指多个任务之间的逻辑上的同时执行,而并行是指多个任务之间的物理上的同时执行。是依赖于C++语言的,是 C++ 标准库中提供的用于创建和管理线程的类,使用。编写的程序是跨平台的。
TensorRT笔记十二(yolov5旋转框检测及部署) 使用五参数定义旋转框longside: 旋转矩形框的最长边shortside: 与最长边对应的另一边Θ: x轴顺时针旋转遇到最长边所经过的角度,Θ∈[0, 180)
C++笔记三(CMake) 在使用gcc/g++编译的时候定义宏 # 常用场景: # -DDEBUG 定义DEBUG宏,可能文件中有DEBUG宏部分的相关信息,用个DDEBUG来选择开启或关闭 DEBUG// -Dname 定义宏name,默认定义内容为字符串“1” # include <stdio.h> int main() {} // 1. 在编译的时候,使用gcc -DDEBUG main.cpp // 2. 第七行代码可以被执行语法:project(projectname [CXX] [C] []Java)
TensorRT笔记十(yolov5后处理) yolov5的输出为(1)其中85表示为5+80,即cx, cy, width, height, objness(框里是否含有目标), classification * 80类别置信度(2)25200 = (20 * 20 + 40 * 40 + 80 * 80) * 3, 其中20 * 20, 40 * 40, 80 * 80分别是提取深、中、浅层的网格大小,浅层用来预测小目标,深层用来预测大目标;* 3是因为每个点有三种anchor使用核函数对yolov5推理结果进行解码并恢复成框。
tensorRT笔记九(int8量化) 实现int8熵校准器(Int8EntropyCalibrator类),继承自属于nvinfer1的IInt8EntropyCalibrator2类,覆盖其中的一些函数,实现自己的需求。writeCalibrationCache:标定结束后,调用该函数,储存标定后的结果,多次标定可以使用该缓存实现加速。getBatch:告诉引擎,这次标定的输入数据是什么,把指针赋值给bindings,返回false说明已没有数据了。getBatchSize:告诉引擎,这次标定的batch大小。配置int8标定数据读取工具。
TensorRT笔记八(动态推理) 注:若onnx文件,则onnx文件打开后应该看到动态或-1模型中若存在reshape类操作,reshape参数必须随动态进行计算(大部分时候这有问题)除非全卷积网络,大部分时候只需要为batch_size维度设置为动态,其他维度避免设置动态2.配置profilecreate: set: 设置, , 的一系列输入尺寸范围add:添加profile到网络配置中二、推理阶段明确当前推理时,使用的数据输入大小