list 类似于C/C++中的动态数组,但是list里面的元素可以是不同类型 有序,可重复,可修改,非同构 创建 list1 = [] # 创建空列表 list2 = [1, 'hello', 3.14, 'world'] # 创建非同构列表 list3 = list((1, '2', 3.14)) # tuple转list 读/写 list1 = [1, 'hello', ...
Python性能分析工具cProfile
Introduction to cProfile cProfile is a built-in python module that can perform profiling. It is the most commonly used profiler currently. But, why cProfile is preferred? It gives you the tot...
openMP
Intro OpenMP是共享内存体系结构上的一个基于多线程的并行编程模型,适用于SMP共享内存多处理系统和多核处理器体系结构。支持C/C++/Fortran. OpenMP由三部分组成 编译器指令(compiler directives) 运行时库程序(runtime routines) 环境变量(environment variables) OpenMP’s mac...
OpenMP库持续增加的内存占用
背景 在长稳执行某网络时,出现了内存占用持续上升的问题。经过初步分析隔离,发现是某些算子引入的,因为把那几个算子打桩掉后,内存占用就稳定了。那几个算子有个共性,底层是调用的oneDNN库实现的。oneDNN库的算子有内存泄漏问题? 目标 分析oneDNN库的那几个算子为什么会内存泄漏。 定位过程 选择其中一个算子,梳理出调用流程,发现几处显式申请释放内存的操作,但都是严格匹配的,不...
OpenMP in oneDNN
本文介绍下OpenMP在oneDNN库中的使用。 parallel() oneDNN中CPU上多线程并行的基础是parallel()函数,将与OpenMP无关的内容删除以后,精简如下所示: // src/common/dnnl_thread_parallel_nd.hpp inline int adjust_num_threads(int nthr, size_t work_amou...
Introduction to openMP
这是一门非常优秀的OpenMP入门教程,讲解人Tim Mattson也曾参与过OpenMP的开发。 1. 概述 课程是简洁的lectures + 简短的execises的方式,讲究边学边练边掌握。 课程由五大模块组成,每个模块由一系列单元和讨论组成: Getting Started with OpenMP The Core Features of OpenMP Workin...
面向对象的特性
如果一个程序员了解底层实现模型,他就能够写出效率较高的代码,自信心也比较高。 ——《深度探索C++对象模型》 封装,继承,多态 封装 ADT(Abstract Data Type, 抽象数据类型)。 “一个ADT或class hierarchy的数据封装”比“在C程序中程序性地使用全局数据”好...
C++11开始的新特性
C++11新特性 语言 Initializer list variadic templates move auto range-based for loop lambda 标准库 type traits unordered container forward list array tuple con-currency...
C++里好的编码技巧
SFINAE https://modern-cpp.readthedocs.io/zh_CN/latest/sfinae.html static auto Anyone = [](auto&& k, auto&&... args) { return ((args == k) || ...); }; string s="autumn"; //等价于 if...
四种类型转换
static_cast 主要用于基本类型之间和具有继承关系的类型之间的转换。这种转换一般会更改变量的内部表示方式,因此,static_cast应用于指针类型转换没有太大意义. 例: //基本类型转换 int i=0; double d = static_cast<double>(i); //相当于 double d = (double)i; //转换继承类的对象为基类对象 ...