avatar
文章
864
标签
158
分类
0

主页
文章归档
文章标签
文章归类
文章列表
  • Music
  • Movie
友情链接
关于我
麦溪·在路上
主页
文章归档
文章标签
文章归类
文章列表
  • Music
  • Movie
友情链接
关于我

麦溪·在路上

OpenMP并行编程指南
发表于2022-01-05
[TOC] 概述文章参考:http://senlinzhan.github.io/2017/06/25/openmp/ 文章参考:https://zhuanlan.zhihu.com/p/51173703 什么是OpenMP?OpenMP(Open Multi-Processing)是一个支持共享存储并行设计的库,是一个编译器指令和库函数的集合。主要是为共享式存储计算机上的并行程序设计使用的。 目前支持OpenMP的语言主要有Fortran,C/C++。 对于 CPU 密集型的程序来说,可以考虑使用 OpenMP 加快程序的计算速度。OpenMP 是跨平台的,大部分现代的 C/C++ 编译器都支持 OpenMP。OpenMP 在一定程度上对并行算法进行了抽象,因此它使用起来很方便,程序员可以简单地通过编译器指令#pragma omp去控制程序的行为。 OpenMP 的语法很简单,它看起来是这样的: 1#pragma omp <directive> [clause[[,] clause] ...] 最常见的指令应该算是parallel指令了,紧接在par ...
Android之性能监控框架
发表于2022-01-05
[TOC] 概述文章参考:https://geek-docs.com/vulkan/vulkan-tutorial/vulkan-tutorial-index.html 概述Vulkan 教程,Vulkan是Khronos Group(OpenGL标准的维护组织)开发的一个新API,它提供了对现代显卡的一个更好的抽象,与OpenGL和Direct3D等现有api相比,Vulkan可以更详细的向显卡描述你的应用程序打算做什么,从而可以获得更好的性能和更小的驱动开销。Vulkan的设计理念与Direct3D 12和Metal基本类似,但Vulkan作为OpenGL的替代者,它设计之初就是为了跨平台实现的,可以同时在Windows、Linux和Android开发。甚至在Mac OS系统上,Khronos也提供了Vulkan的SDK,虽然这个SDK底层其实是使用MoltenVK实现的。 Vulkan 教程介绍了Vulkan的基础知识、理论分析、实战演练,内容通俗易懂,简明扼要,带你轻松入门 Vulkan。
函数加过返回的相关逻辑
发表于2022-01-05
[TOC] 概述文章参考:https://www.cnblogs.com/southcyy/p/10256378.html 文章参考:https://segmentfault.com/q/1010000005338630 函数返回值1.函数返回基础数据类型 1234int test (){ int a=1; return a;} ​ 返回值时最简单的方式,它的操作主要在栈上,变量a在函数结束后会删除,为了返回a的值,系统会在内部建立一个临时变量保存a的值,以返回给调用该函数的表达式,调用结束后变量便不再存在。如果a是简单地数据类型也无所谓,不是很占用内存,如果a是大的自定义类型的数据,那么对a的复制将会占用比较大的内存。函数返回值是右值,不能进行运算符操作。 2.返回指针: 12345int *test2(){ int *b=new int(); *b=2; return b;} ​ 返回指针是在C中除了返回值以外的唯一方式,根据函数栈的特性,也会产生复制,只是复制的是一个指针即一个地址,对于返回大型对象可以减少不少的资源消耗。但返回指针的 ...
std:move基本用法和理解
发表于2022-01-05
[TOC] 概述 C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了. C++11 提供了std::move 函数来把左值转换为xrvalue, 而且新版的push_back也支持&&参数的重载版本,这时候就可以高效率的使用内存了. 对指针类型的标准库对象并不需要这么做. std::move(t) 用来表明对象t 是可以moved from的,它允许高效的从t资源转换到lvalue上. 注意,标准库对象支持moved from的左值在moved 之后它的对象原值是有效的(可以正常析构),但是是unspecified的,可以理解为空数据,但是这个对象的其他方法返回值不一定是0,比如size().所以,moved from 之后的对象最好还是不要使用吧?(如有不正确理解,请告知) 对本身进行move,并赋值给本身是undefined的行为. 12std::vector<int> v = {2, 3, ...
Eigen3矩阵运算框架基础学习
发表于2022-01-05
[TOC] 概述文章参考:https://zhuanlan.zhihu.com/p/462494086 Eigen是一个C++语言中的开源的模板库,支持线性代数的运算,包括向量运算,矩阵运算,数值分析等相关算法。因为eigen只包含头文件,所以使用的话不需要进行编译,只需要在cpp文件开头写#include <Eigen>就好。 Eigen是C++中可以用来调用并进行矩阵计算的一个库,简单了说它就是一个c++版本的matlab包。 开源库安装直接安装apt-get方式(假设默认安装到/usr/local/include里(可在终端中输入locate eigen3查看位置),若实际中默认安装到了/usr/include的话,可以对应替换下面命令的相应部分) 12// Ubuntu系统sudo apt install libeigen3-dev 这种安装方式有一个缺点,因为apt包更新比较慢,安装的版本可能不是最新版,那么之后的一些依赖于eigen的库可能没有办法使用(如Sophus库要求必须选用3.3以上版本的eigen包) ...
深度学习之归一化基础学习
发表于2022-01-05
[TOC] 概述 归纳统一样本的统计分布性。归一化在 $ 0-1$ 之间是统计的概率分布,归一化在$ -1–+1$ 之间是统计的坐标分布。 无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测,且 sigmoid 函数的取值是 0 到 1 之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。 归一化是统一在 $ 0-1 $ 之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。 另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于 0 或与其均方差相比很小。 为什么需要归一化 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。 为了程序运行时收敛加快。 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。 避免神经元 ...
Android性能优化之启动速度优化
发表于2022-01-05
文章参考:https://mp.weixin.qq.com/s/-3uY3aSF67xTzWEJsa7e-A 概述随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关。 那么第一篇文章我就从应用的启动优化开始,根据实际案例,打造闪电般的App启动速度,会直接影响留存和转化等核心数据。 启动是指用户从点击 icon 到看到页面首帧的整个过程,启动优化的目标就是减少这一过程的耗时。 启动过程比较复杂,在进程与线程维度,它涉及到多次跨进程的通信与多个线程之间的切换;在耗时成因维度,它包括 CPU、CPU 调度、IO、锁等待等多类耗时。虽然启动过程比较复杂,但是我们最终可以把它抽象成主线程的一个线性过程。因此对于启动性能的优化,就是去缩短主线程的这个线性过程。 开始,我们先说一下Android性能优化可以从哪些点去出发: 1、启动加速之主题切换。使用Activity的windowBackground主题属性来为启动的Activity提供一个简单的drawable。 2、避免在Application里面进行过度的初始化操作 3、启动加速之Diagnosing T ...
AspectJ在Android 的应用耗时统计
发表于2022-01-05
文章转自:https://mp.weixin.qq.com/s/EaHrD4A8TeADDPUQEoKb-g 概述AspectJ 是 Java 语言 AOP(面向切面编程)的一种实现方案。 AspectJ 有两种实现方式: 使用 Java 语言和注解,然后通过 AspectJ 提供的编织器,编织代码到目标 class 文件; 直接使用 AspectJ 语言编写,然后使用 ajc 编译器用来编译 aj 文件,生成 java 标准的 class 文件。 AspectJ 语言的语法和 Java 一样,只是比 Java 语言多了一些关键字,但由于 Android Studio 并没有提供 AspectJ 语法的支持,所以在 Android 开发中使用 AspectJ 只能使用注解的方式来实现。 下面通过注解的实现方式来解释一些基本的概念。 基本概念Aspect(切面)一个切面是一个独立的功能实现,一个程序可以定义多个切面,定义切面需要新建一个类并加上 @Aspect 注解。 例如:SampleAspect 就是一个切面 ,这个切面实现了打印所有 Activity 中 onCreate() ...
Android性能优化之View绘制优化基础
发表于2022-01-05
文章参考:https://mp.weixin.qq.com/s/yU7ZUbZCUXGdpctic8qexw 概述绘制优化是指View的onDraw方法要避免执行大量的操作,这主要体现在两个方面: 1.onDraw中不要创建新的局部对象。 因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁gc,降低了程序的执行效率。 2.onDraw方法中不要做耗时的任务, 不能执行成千上万次的循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。 按照Google官方给出的性能优化典范中的标准,View的绘制频率保证60fps是最佳的,这就要求每帧绘制时间不超过16ms(16ms = 1000/60),虽然程序很难保证16ms这个时间,但是尽量降低onDraw方法中的复杂度总是切实有效的。
Android性能优化之View布局优化
发表于2022-01-05
文章参考:https://developer.android.com/studio/profile/inspect-gpu-rendering#debug_overdraw 文章参考:https://www.jianshu.com/p/4f44a178c547 Android优化典范:https://www.youtube.com/watch?v=CaMTIgxCSqU https://www.youtube.com/watch?v=T52v50r-JfE Android应用就是将我们的UI布局渲染成界面展示给用户。用户和界面之间进行交互。所以界面的流畅度就非常重要。因此,有个良好的UI布局会对App的性能产生比较大的影响,如果布局写得糟糕,显而易见App的表现不可能流畅。就会使得应用比较卡顿,甚至出现丢帧的情况存在。 UI布局中有很多原因可以导致丢帧,这里列举一些常见的: 1、layout 太过复杂,层次过多,无法在16ms内完成渲染; 2、UI 上有层叠太多的绘制单元,过度绘制,使得某些像素被绘制多次。 3、CPU 或者 GPU 负载过重 4、同一时间内动画执行的次数过多,导致C ...
1…363738…87
avatar
Frewen.Wang
在青麦地上跑着,雪和太阳的光芒
文章
864
标签
158
分类
0
关注我
公告
This is my Blog
最新文章
无题2023-12-22
无题2023-07-28
无题2023-07-27
基于Windows11安装Ubuntu双系统2023-07-20
无题2023-07-17
标签
系统源码 滤波算法 工具使用 云存储 卷积神经 Linux Android框架 STL函数 Activity pytorch NEON 编译脚本 go 渲染机制 OpenGL 编程工具 虚函数 RectNative JVM Linux命令 Kotlin基础 OpenMP AI const IDEA QNN C++ SELinux 目标检测 软件安装 threading 量化方法 四大组件 编译构建 SystemServer 开源项目 unique_ptr Java基础 系统安装 BroadcastReceiver
归档
  • 十二月 20231
  • 七月 20234
  • 六月 20231
  • 四月 20231
  • 三月 20232
  • 二月 202311
  • 一月 20232
  • 十二月 20221
网站资讯
文章数目 :
864
本站总字数 :
778.1k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2023 By Frewen.Wang
框架 Hexo|主题 Butterfly