皮皮网
皮皮网

【快手卖鞋的小程序源码】【成绩系统源码】【幸福城市源码】Cycles源码分析

时间:2024-12-27 17:45:55 来源:springcloud部分源码

1.ESP32入门「09」:Arduino-ESP32 TOUCH API 详解
2.离线渲染07-LuxRender无偏渲染引擎介绍编译
3.Linux性能分析工具perf和火焰图使用方法
4.如何使用oprofile对软件做profiling

Cycles源码分析

ESP32入门「09」:Arduino-ESP32 TOUCH API 详解

       本文深入解读ESP芯片的源码触摸传感器及其API,通过实例程序展示应用功能,分析并附带源代码。源码

       触摸传感器是分析一种电容式器件,通过测量固定时间内GPIO引脚上的源码充电/放电频率来感应触摸。触摸时,分析快手卖鞋的小程序源码手指电荷改变电路状态,源码导致计数器值变化,分析进而验证触摸动作。源码这些引脚便于集成电容垫,分析替代机械按钮。源码

       触摸传感器的分析API包含核心功能,如读取触摸数据、源码设置测量周期、分析附加中断、源码成绩系统源码参数化中断处理以及唤醒模式控制。API支持通用和ESP芯片专用版本,满足不同需求。

       具体功能如下:

       touchRead():获取触摸传感器数据,计数器记录充电/放电周期数,变化指示触摸。

       touchSetCycles():配置测量周期,影响读数、阈值和精度。

       touchAttachInterrupt():将中断与触摸板关联,根据阈值触发。

       touchAttachInterruptArg():中断处理函数中加入参数。

       touchDetachInterrupt():解除中断与触摸板的关联。

       touchSleepWakeUpEnable():设置深度睡眠唤醒源。幸福城市源码

       ESP芯片专用API包含:

       touchInterruptSetThresholdDirection():定义中断激活条件。

       touchInterruptGetLastStatus():获取中断状态,确认触摸状态。

       应用示例包括读取触摸传感器和使用中断检测触摸。源代码基于ESP Arduino Core文档。

       总结,本文旨在提供ESP触摸传感器及API的详尽介绍,通过实例和代码实现应用。敬请期待后续ESP开发教程更新。

       欢迎知友们参与讨论,提出意见和优化建议。

离线渲染-LuxRender无偏渲染引擎介绍编译

       题外话:烂(普及)大街的东西,要留心,那不是源码自己执行一想就明白的东西,想拥有就更难了。

       “光线追踪已经烂大街了!Github上一大堆呢!”然而,在众多产品化的CG引擎中,真正可以被付费使用且在商业场景广泛应用的引擎,其源代码绝大多数从业人都无法接触到。尽管Cycles和LuxCore这两款引擎公开了源代码,但Cycles似乎并不想让外界清晰地使用。因此,本文将介绍LuxCore,这是一个效果出色、开源且适合学习的引擎。

       关于学习开源的烈焰战歌源码一些看法:虽然你可以通过学习开源项目在求职时积累经验,但你所学的知识并非你自己创造的。

       阅读编译安装说明文档。

       下载以下三项内容。

       安装CMake和VIsual Studio,官方建议使用版本,但笔者尝试使用版本也取得了成功。在执行cmake-build-x.bat脚本之前,修改一下设置以支持VS,如果是版本则无需修改。

       cmake-build-x.bat脚本运行完成后,会生成以下工程文件。

       启动VS工程编译后,在运行luxcoeconsole之前,设置测试场景目录为C:\YOURPATH\luxcorerender\LuxCoreTestScenes\scenes\LuxBall\LuxCoreScene\render.cfg,并设置参数-w -e 。

       渲染完成后,会提示输出名称RGB_IMAGEPIPELINE_0.PNG。真是完美啊。

       私信我阅读全文哦~

       主页可以查看我的全部笔记哦~

       全都是图形学实战经验,帮助你快速学习成长,不走弯路哦~

       研学有思路/面试有干货/工作不加班~

       PerfectPixel计算机图形学首页资料目录汇总 - 知乎 (zhihu.com)

       Unreal Engine/ Real Time Rendering/ Path Tracing/ Graphics Research等丰富内容哦~

Linux性能分析工具perf和火焰图使用方法

       Linux性能分析工具perf,作为一项强大的性能监测工具,它在事件统计和采样方面具有广泛的应用。perf能够追踪CPU、进程ID和运行栈等数据,帮助我们深入剖析程序性能。要有效地使用perf,首先需要了解不同性能事件,如cpu-cycles、cache-misses等,它们能揭示CPU占用高的原因,为优化提供方向。

       perf支持多种工作模式,它的事件分类丰富,可以覆盖CPU、内存、IO和网络等方面。安装和配置perf时,可能会遇到与平台兼容性相关的问题,如编译错误,可通过调整编译选项解决。性能分析通常分为全局概况、细节查看和特定功能剖析三个步骤,如使用perf list了解支持的事件,perf bench进行基准测试,perf top实时监控进程性能。

       perf的常用命令包括perf stat进行性能统计,perf report生成分析报告,以及perf record和perf trace用于记录系统行为。perf timechart则用于可视化性能数据。通过对ls命令的性能分析,我们可以看到它执行了多少次系统调用,以及哪些系统调用频率较高。

       perf list是入门必经的环节,用于查看支持的性能指标,比如cpu-clock。对于特定变量,perf report允许用户指定监控事件,如记录ls命令时的CPU时钟占用。事件的精度和属性可以通过perf event进行详细设置。

       perf stat和perf report是性能分析的核心,前者提供整体性能概览,后者则深入到函数级别,帮助我们定位性能瓶颈。perf annotate结合调试信息,能将性能数据与源代码关联起来,便于代码优化。

       perf top实时展示进程性能,如显示占用高速缓存最多的函数,或内核中消耗CPU周期最多的函数。perf bench作为基准测试工具,可以评估系统调度、内存访问等性能。通过实例,我们可以看到如何结合perf进行完整的性能分析,从全局监控到精确定位,再到火焰图的可视化呈现。

       总的来说,perf和火焰图的组合提供了强大的性能分析能力,帮助开发者识别和优化代码中的性能问题,是深入理解程序运行过程的重要工具。

如何使用oprofile对软件做profiling

       ã€€ã€€å…³äºŽXilinx Zynq-带来的新的系统设计思路,以及Profiling的对象libjpeg,前文已经描述过了,再此不再赘述。

       ã€€ã€€ä¸€. Oprofile简介

       ã€€ã€€Profiling是对不同性能特征的数据的形式化总结或分析,它通常以图形和表的形式出现。它提供为特定的处理器事件收集的采样百分数或数 量,比如cache miss rate、TLB miss rate等等。一般来说,主要目的是为了找出软件中的性能瓶颈,然后有针对性的优化以提升软件的整体性能。

       ã€€ã€€Oprofile 是用于 Linux 的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括ARM, PowerPC, MIPS, IA, IA 和 AMD Athlon等等。它的开销很小,从Linux 2.6 版起,它被包含进了Linux内核中。

       ã€€ã€€Oprofile可以收集有关处理器事件的信息,帮助用户识别诸如循环的展开、cache的使用率低、低效的类型转换和冗余操作、错误预测转移 等问题。Oprofile是一种细粒度的工具,可以为指令集或者为函数、系统调用或中断处理例程收集采样。Oprofile 通过取样来工作。使用收集到的评测数据,用户可以很容易地找出性能问题。

       ã€€ã€€é€šè¿‡ç›‘察CPU的hardware events,oprofile可以在运行状态下对整个Linux系统进行profiling。Profiling的对象可以是Linux kernel (包括modules和interrupt handlers), shared libraries或者应用程序。

       ã€€ã€€ä»Ž0.9.8版本开始,oprofile支持Perf_events profiling mode模式。应用程序operf被用来控制profiling过程;而在legacy mode下,是通过opcontrol脚本和oprofiled daemon来完成的。Operf不再象legacy mode那样需要OProfile kernel driver,它直接和Linux Kernel Performance Events Subsystem打交道。使用operf,就可以用普通用户的身份来profiling用户的应用程序了,当然如果需要对整个系统来profiling 的时候还是需要root权限的。

       ã€€ã€€å¦‚果硬件不支持OProfile使用performance counters,OProfile就只能工作在Timer Mode下了。Timer Mode只能在legacy profiling mode下使用,即只能通过opcontrol脚本来控制。

       ã€€ã€€Oprofile的website为:piled (JIT) code

       ã€€ã€€? 可以对整个系统做profiling

       ã€€ã€€? 可以观察CPU内部的细节,例如cache miss rate

       ã€€ã€€? 可以多源代码做annotation

       ã€€ã€€? 可以支持instruction-level的profiling

       ã€€ã€€? 可以生成call-graph profiles

       ã€€ã€€ä¸è¿‡OProfile也不是万能的,它也有自己的局限性:

       ã€€ã€€? 只能在x, ARM, 和PowerPC架构上生成call graph profiles

       ã€€ã€€? 不支持%精确的instruction-level profiling

       ã€€ã€€? 对dynamically compiled (JIT) code profiling的支持还不完善。

       ã€€ã€€æ— è®ºå¦‚何,Oprofile的功能都比gprof要强很多,代价是配置起来会比较麻烦。

       ã€€ã€€äºŒ. 编译Oprofile

       ã€€ã€€é¦–先最好在Linux kernel里面选中Oprofile driver,以获得全面的支持。

       ã€€ã€€ä¸‹è½½Linux kernel Source:从/Xilinx/linux-xlnx 可以下载到Xilinx提供的验证好的内核。如果不方便使用Linux下的git工具,可以单击页面上的releases找到相应的版本下载tar ball。下载的时候最好选tar.gz格式的,而不是zip格式的,因为后者在处理symbol link的时候有可能会出问题。

       ã€€ã€€å› ä¸ºç¬”者使用的是Xilinx Linux pre-built .7,所以这里下载的是linux-xlnx-xilinx-v.7.tar.gz

       ã€€ã€€è§£åŽ‹ç¼©åŽï¼Œç”¨ä»¥ä¸‹å‘½ä»¤è°ƒå‡ºLinux kernel的配置界面:

       ã€€ã€€export ARCH=arm

       ã€€ã€€export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

       ã€€ã€€make xilinx_zynq_defconfig

       ã€€ã€€make xconfig 或者make menuconfig

       ã€€ã€€åœ¨é…ç½®ç•Œé¢ä¸Šå°†ä»¥ä¸‹ä¸¤é¡¹å‹¾ä¸Šï¼š

       ã€€ã€€General setup --->

       ã€€ã€€[*] Profiling support

       ã€€ã€€<*> OProfile system profiling

       ã€€ã€€ç„¶åŽmake uImage即可生成新的uImage,用来替换Xilinx Linux pre-built .7中的Linux kernel image。同时我们也需要vmlinux来检查profiling的结果。

       ã€€ã€€Oprofile需要popt, bfd, liberty库,要在嵌入式单板上使用这些库,需要手工完成交叉编译。

       ã€€ã€€é’ˆå¯¹popt 1.7,用以下命令完成编译:

       ã€€ã€€./configure --prefix=/home/wave/xilinx/oprofileprj/rootfs --host=arm-xilinx-linux-gnueabi --with-kernel-support --disable-nls && make && make install

       ã€€ã€€é’ˆå¯¹binutils 2.,用以下命令完成编译:

       ã€€ã€€./configure --host=arm-xilinx-linux-gnueabi --prefix=/home/wave/xilinx/oprofileprj/rootfs --enable-install-libbfd --enable-install-libiberty --enable-shared && make && make install

       ã€€ã€€ä¸è¿‡--enable-install-libiberty没有效果,所以需要手工把libiberty.a和libiberty.h拷贝到相应的位置。

       ã€€ã€€é’ˆå¯¹oprofile 0.9.9,用以下命令完成编译:

       ã€€ã€€./configure --host=arm-xilinx-linux-gnueabi --prefix=/home/wave/xilinx/oprofileprj/rootfs --with-kernel-support --with-binutils=/home/wave/xilinx/oprofileprj/rootfs && make && make install

       ã€€ã€€é…ç½®è¿‡ç¨‹ç»“束后可能会有以下提示,因为没有打算用GUI和profile JITed code,所以直接忽视之。

       ã€€ã€€config.status: executing libtool commands

       ã€€ã€€Warning: QT version 3 was requested but not found. No GUI will be built.

       ã€€ã€€Warning: The user account 'oprofile:oprofile' does not exist on the system.

       ã€€ã€€To profile JITed code, this special user account must exist.

       ã€€ã€€Please ask your system administrator to add the following user and group:

       ã€€ã€€user name : 'oprofile'

       ã€€ã€€group name: 'oprofile'

       ã€€ã€€The 'oprofile' group must be the default group for the 'oprofile' user.

       ã€€ã€€å°†ç¼–译完成的uImage,vmlinux,oprofile binary,重新编译的没有-pg的libjpeg binary以及tool chain的libc打包放到SD卡中,准备在ZC开发板上尝试profile djpeg。

       ã€€ã€€ä¸‰. 运行Oprofile

       ã€€ã€€æ­£å¸¸å¯åŠ¨åµŒå…¥å¼Linux后,在开发板的console上一次输入以下命令:

       ã€€ã€€mount /dev/mmcblk0p1 /mnt

       ã€€ã€€mkdir -p /home/root/work

       ã€€ã€€cd /home/root/work

       ã€€ã€€tar zxvf /mnt/jpeg-bin-nopg.tar.gz

       ã€€ã€€cd jpeg-bin/bin

       ã€€ã€€cp /mnt/park-x.jpg .

       ã€€ã€€export LD_LIBRARY_PATH=/home/root/work/jpeg-bin/lib

       ã€€ã€€cd /home/root/work

       ã€€ã€€tar zxvf /mnt/rootfs.tar.gz

       ã€€ã€€cd rootfs

       ã€€ã€€chown root:root -R

*

       ã€€ã€€cp -R bin/* /usr/bin

       ã€€ã€€cp -R lib/* /lib

       ã€€ã€€cp /bin/which /usr/bin

       ã€€ã€€cp /bin/dirname /usr/bin

       ã€€ã€€mkdir -p /home/wave/xilinx/oprofileprj/rootfs/share

       ã€€ã€€cp -R ./rootfs/* /home/wave/xilinx/oprofileprj/rootfs

       ã€€ã€€cd /home/root/work

       ã€€ã€€tar zxvf /mnt/libc.tar.gz

       ã€€ã€€cp ./lib/libstdc*.* /lib

       ã€€ã€€mkdir -p /home/wave/xilinx/libjpeg

       ã€€ã€€cd /home/wave/xilinx/libjpeg

       ã€€ã€€tar zxvf /mnt/jpeg-9.tar.gz

       ã€€ã€€cp /mnt/vmlinux /home/root/work

       ã€€ã€€cd /home/root/work/jpeg-bin/bin

       ã€€ã€€opcontrol --init

       ã€€ã€€opcontrol --vmlinux=/home/root/work/vmlinux

       ã€€ã€€opcontrol --setup --event=CPU_CYCLES:::0:1 --session-dir=/home/root/

       ã€€ã€€operf --vmlinux /home/root/work/vmlinux ./djpeg -bmp park-x.jpg > result.bmp

       ã€€ã€€opreport -l ./djpeg

       ã€€ã€€å®Œæˆè¿™ä¸€æ­¥åŽï¼Œæˆ‘们就可以看到profiling的结果了,在笔者的平台上看到的内容的主要部分如下:

       ã€€ã€€root@zynq:~/work/jpeg-bin/bin# opreport -l ./djpeg

       ã€€ã€€Using /home/root/work/jpeg-bin/bin/oprofile_data/samples/ for samples directory.

       ã€€ã€€CPU: ARM Cortex-A9, speed MHz (estimated)

       ã€€ã€€Counted CPU_CYCLES events (CPU cycle) with a unit mask of 0x (No unit mask) count

       ã€€ã€€samples % image name symbol name

       ã€€ã€€ . libc-2..so /lib/libc-2..so

       ã€€ã€€ 7. libjpeg.so.9.0.0 ycc_rgb_convert

       ã€€ã€€ 7. libjpeg.so.9.0.0 jpeg_idct_x

       ã€€ã€€ 7. libjpeg.so.9.0.0 decode_mcu

       ã€€ã€€ 6. libjpeg.so.9.0.0 jpeg_idct_islow

       ã€€ã€€ 6. djpeg finish_output_bmp

       ã€€ã€€ 2. libjpeg.so.9.0.0 jpeg_fill_bit_buffer

       ã€€ã€€ 1. djpeg put_pixel_rows

       ã€€ã€€ 0. vmlinux __copy_from_user

       ã€€ã€€ 0. libjpeg.so.9.0.0 decompress_onepass

       ã€€ã€€ 0. libjpeg.so.9.0.0 jpeg_huff_decode

       ã€€ã€€ 0. vmlinux get_page_from_freelist

       ã€€ã€€ 0. vmlinux __memzero

       ã€€ã€€ 0. vmlinux __copy_to_user_std

       ã€€ã€€ 0. vmlinux _raw_spin_unlock_irqrestore

       ã€€ã€€ 0. vmlinux do_page_fault

       ã€€ã€€ 0. vmlinux __generic_file_aio_write

       ã€€ã€€ 0. vmlinux _raw_spin_unlock_irq

       ã€€ã€€ 0. vmlinux free_hot_cold_page

       ã€€ã€€ 0. vmlinux vector_swi

       ã€€ã€€ 0. vmlinux handle_pte_fault

       ã€€ã€€ä»Žç»“果中我们可以看到libjpeg.so.9.0.0, djpeg和vmlinux中的symbol name已经可以被正确的解析出来了,和gprof的结果基本一致。相比gprof,oprofile可以在更大的范围内完成profiling。

       ã€€ã€€æˆ‘们还可以用以下命令观察源代码中特定行的执行时间,进一步缩小优化的范围,达到事半功倍的效果。

       ã€€ã€€opannotate --source ./djpeg > opannotate.txt

       ã€€ã€€å››. 小结

       ã€€ã€€é€šè¿‡å®žéªŒï¼Œæˆ‘们可以看到Oprofile可以提供更丰富的profiling结果,可以更好的帮助开发者找到瓶颈,通过有针对性的优化提升软件 性能;profiling的结果也可以帮助开发者将性能瓶颈代码通过Xilinx HLS工具用硬件加速器来实现,从而为进一步提升整个嵌入式系统的性能打开了大门。

更多内容请点击【热点】专栏