【断掌顺娘 源码】【下载的arduino源码】【java练手的源码】copy 源码剖析

2024-11-29 22:41:40 来源:什么源码建站好 分类:探索

1.如何学好C++呢?源码
2.xfs文件系统:layout与架构、源码分析
3.视频和视频帧:Intel GPU(核显)的剖析编解码故事

copy 源码剖析

如何学好C++呢?

       æˆ‘这里有些经验,希望对你有帮助:

       1.把C++当成一门新的语言学习(和C没啥关系!真的。);

       2.看《Thinking In C++》,不要看《C++变成死相》;

       3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;

       4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;

       5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;

       6.会用Visual C++,并不说明你会C++;

       7.å­¦class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;

       8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;

       9.看Visual C++的书,是学不了C++语言的;

       .浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?

       .浮躁的人容易问:我到底该学什么;——别问,学就对了;

       .浮躁的人容易问:XX有钱途吗;——建议你去抢银行;

       .浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!

       .浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;

       .浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;

       .把时髦的技术挂在嘴边,还不如把过时的技术记在心里;

       .C++不仅仅是支持面向对象的程序设计语言;

       .学习编程最好的方法之一就是阅读源代码;

       .在任何时刻都不要认为自己手中的书已经足够了;

       .请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;

       .看得懂的书,请仔细看;看不懂的书,请硬着头皮看;

       .别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;

       .请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;

       .不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;

       .和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;

       .请看《程序设计实践》,并严格的按照其要求去做;

       .不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;

       .C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;

       .请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;

       .读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;

       .学习编程的秘诀是:编程,编程,再编程;

       .请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;

       .记住:面向对象技术不只是C++专有的;

       .请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;

       .把在书中看到的有意义的例子扩充;

       .请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;

       .经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;

       .不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;

       .C++语言和C++的集成开发环境要同时学习和掌握;

       .既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;

       .就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;

       .当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见);

       .别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;

       .决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;

       .每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;

       .记录下在和别人交流时发现的自己忽视或不理解的知识点;

       .请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version .XX;

       .保存好你写过的所有的程序——那是你最好的积累之一;

       .请不要做浮躁的人;

       .请热爱C++!

xfs文件系统:layout与架构、源码分析

       本文由腾讯工程师aurelian撰写,源码深入解析Linux内核中xfs文件系统的剖析layout与架构,结合源码剖析其工作原理。源码首先,剖析断掌顺娘 源码xfs的源码layout包括超级块、AGF管理(空闲空间追踪)、剖析AGI管理(inode管理)、源码AGFL(空闲链表)以及B+树结构等组成部分,剖析每个部分都有其特定功能,源码如超级块用于存储关键信息,剖析B+树用于快速查找空间。源码

       在文件操作方面,剖析xfs支持iops、源码fops和aops三个操作集,分别负责inode元数据、内存级读写和磁盘级读写。创建文件时,会检查quota并预留空间,通过一系列函数如xfs_trans_reserve_quota和xfs_dir_ialloc进行操作。分配inode时,会依据agi信息和ag的下载的arduino源码空闲情况动态分配,并通过xfs_iget确保inode在核心内存中可用。

       磁盘级inode分配涉及agi信息的获取和B+树的查找,xfs_ialloc_ag_alloc会根据空闲inode情况完成连续或非连续的分配。写操作涉及内存和磁盘级别,buffer io通过page cache管理,直接io和DAX write则有特定的处理方式。xfs的映射关系和data区域树管理对于高效读写至关重要。

       工具方面,mkfs.xfs用于格式化,xfs_fsr、xfs_bmap、xfs_info等用于维护和监控文件系统,xfs_admin和xfs_copy用于系统参数调整和数据复制,xfs_db则是用于调试的工具。希望本文能帮助读者理解xfs的复杂性,如需了解更多详情,可关注鹅厂架构师公众号。

视频和视频帧:Intel GPU(核显)的编解码故事

       一般提及基于“显卡或多媒体处理芯片对视频进行解码”为硬解码,本文将探讨如何利用Intel的核显,即集成GPU实现硬解码。提及QSV,全称为Quick Sync Video,java练手的源码Intel在年发布Sandy Bridge CPU时,一同推出了这项基于核显进行多媒体处理,包括视频编解码的技术。集成核显,官方称HD Graphics,最早在Sandy Bridge前一代制程已推出,但性能提升及充分发挥在Sandy Bridge时期。Haswell及后续制程发布更高级的Iris架构。最近Intel宣布将开发独立显卡,核显发展具体走向未知。

       接手QSV项目时,预期会有很多相关资料,实则相反。因此,将记录自己学习过程。

       本文将介绍:

       I. Intel的核显(集成GPU):

       了解核显很有必要,几个月前,作者对CPU的认识还停留在“南北桥”架构。以下内容若有不准确之处,欢迎指正。

       查看Gen CPU结构图,首先看CPU核心部分。图怪兽源码下载在整块CPU芯片中,核显占比不小,算力不容小觑。在没有独立显卡的笔记本上,可以运行大量大型游戏,虽偶有卡顿、掉帧情况,整体表现已相对不错。

       接下来,看官方给出的GPU内部结构图。GPU内部远比图上所示复杂,图中介绍的仅为部分Subslice芯片结构。GPU分为Slice部分和Un-Slice部分,Slice部分已介绍,接下来介绍Un-Slice部分。

       作者找到了一张图,展示了在MFF上进行视频处理的流程:1) 首先在MFX/VDBOX模块上进行编解码;2) 接着送到VQE/VEBOX上做图像增强和矫正处理;3) 然后送到SFC上做scale和transcode;4) 最后送出到显示屏上展示。是否完全正确,作者这里做个记录。

       推荐知乎文章《转》Intel Gen8/Gen9核芯显卡微架构详细剖析,深入浅出,关于thread dispatch的如何购买扫描源码说明即出自该文。

       最后,总结Intel集成GPU/核显结构图。

       注意,这是skylake架构下的GT2/GT3/GT4 GPU结构图,X数字越大,集成的Slice和Unslice芯片更多,能力越强,价格也更高。

       II. Quick Sync Video(QSV)技术:

       QSV是Intel推出的将视频处理任务直接送到GPU上进行专门负责视频处理的硬件模块处理的软件技术。与CPU或通用GPU上的视频编码不同,QSV是处理器芯片上的专用硬件核心,这使得视频处理更为高效。

       要了解QSV如何驱动GPU的MFF,首先看官方Intel® Video and Audio for Linux上的图。在介绍QSV之前,提及Intel在FFmpeg上提供的插件,包括ffmpeg-qsv、ffmpeg-vaapi和ffmpeg-ocl。详细描述如下:

       · FFmpeg-vaapi提供基于低级VAAPI接口的硬件加速,在VA API标准下在Intel GPU上执行高性能视频编解码器、视频处理和转码功能。

       · FFmpeg-qsv提供基于Intel GPU的硬件加速,基于Intel Media SDK提供高性能视频编解码器、视频处理和转码功能。

       · FFmpeg-ocl提供基于工业标准OpenCL在CPU/GPU上的硬件加速,主要用于加速视频处理过滤器。

       接下来,介绍QSV在ffmpeg2.8及以上版本的支持,经过MSDK、LibVA、UMD和LibDRM。分层进行分析:

       · MSDK:Intel的媒体开发库,支持多种图形平台,实现通用功能,可用于数字视频的预处理、编解码和不同编码格式的转换。源码地址为Intel® Media SDK,在Linux平台上编译使用。

       · VA-API:Video Acceleration API,提供类unix平台的视频硬件加速开源库和标准。Intel源码地址在Intel-vaapi-driver Project,在Linux平台上使用。

       · UMD:User Mode Driver的缩写,指VA-API Driver。Intel提供了两个工具:intel-vaapi-driver 和 intel-media-driver,推荐使用后者。

       · LibDRM:Direct Rendering Manager,解决多个程序协同使用Video Card资源问题,提供一组API访问GPU。与VA-API,LibDRM是一套通用的Linux/Unix解决方案。

       · Linux Kernel:Intel的Kernel是i driver,描述了libDRM和Kernel Driver之间的关系。

       至此,整个关系图较为清晰。

       III. FFMPEG+QSV解码:

       QSV硬解的任务主要包括:

       关于3-4步操作的详细实现,底层库会帮助完成。但作为一个优秀的工程师,研究FFMPEG源码依然十分重要。接下来,介绍如何使用FFmpeg API中的h_qsv解码器插件。

       提及FFmpeg命令行使用方法,推荐阅读官方资料《QuickSync》或《Intel_FFmpeg_plugins》。

       关于示例代码,作者曾遇到许多坑,总结为:多数中文博客不可靠,官方demo最可信。官方代码提供了两份可用:qsvdec.c和hw_decode.c。作者最早使用的是第一段代码,核心部分如下:

       然而,这段代码存在问题。测试发现,对于赛扬系列一款CPU,在p视频上MSDK达到fps,理论上h_qsv平台上限也应为fps,但实际测试不到fps。排查后发现是av_hwframe_transfer_data()性能较弱。

       最终,与Intel一起解决了性能问题。那么,性能提升方案为何是GPU-COPY技术做Memory-Mapping?

       解释GPU和CPU渲染图像的过程,包括坐标系转化、纹理叠加等,仅需了解两点:

       后者的数据组织方式能充分利用GPU的并行特性,加速图像处理、渲染。尽管存在一些纹理叠加的技术难题,但性能提升足以补偿。

       接下来,解释Memory-Mapping:从Intel CPU架构图中可见,GPU和CPU位于同一芯片上,各自寄存器/缓存区有限,视频数据主要存储在内存上。GPU和CPU的数据组织方式不同,同一帧数据存于内存同一位置,数据格式不同,因此需要做Memory-Mapping。Memory-Mapping相较于Memory-Copy,减少了数据从内存区域A移动到区域B的操作,已经是优化。进一步优化:GPU完成Memory-Mapping以及数据从GPU到内存和CPU的操作。

       在av_hwframe_transfer_data()内部,Memory-Mapping由CPU完成,性能受限于CPU,只能并行。修改后,整体性能从不到fps提升至fps,虽然与理想fps仍有差距,但满足性能需求。

       据悉,Intel将在FFmpeg 4.3开源出这个解决方案。

       写在后面:

       了解GPU底层对应用开发人员帮助不大,毕竟了解芯片布线的重新设计、制程工艺提升、GPU-COPY技术的数据I/O提升等,也不能做什么。最终,芯片架构是芯片工程师的事,底层逻辑实现是嵌入式工程师的事。应用开发人员无法做出实质贡献,但作为知识库扩充或休闲阅读,了解也无妨。

       希望有机会接触CUDA的编解码,深入学习N卡设计。

       感谢因《视频和帧》系列文章结识的朋友,热心指出文章描述不准确的地方。文中如有不严谨之处,欢迎指正。

更多资讯请点击:探索

推荐资讯

“大黄蜂”机器人现身食交会 振兴五金多功能展架受热捧

今天上午,第二届海峡两岸食品交易会暨第五届闽台泉州)食品交易会以下简称食交会)在晋江SM国际展览中心及佰翔世纪酒店开幕。除了来自世界各地的美食之外,科技创新也是本次展会的一大亮点。展会规模日益提升据悉

广西龙胜:分级监管打造医疗器械行业诚信体系

中国消费者报南宁讯兰晓孟记者顾艳伟)今年以来,广西壮族自治区龙胜县市场监管局着力强化医疗器械经营者的诚信守法经营意识,提高器械安全管理水平,以分级监管制+“诚信经营”、信用建档