首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【高阶数据结构】秘法(一)——查集:探索如何高效管理集合

前言: 前面我们已经学习了简单的数据结构,包括栈与队列、二叉树、红黑树等等,今天我们继续数据结构的学习,但是难度上会逐渐增大,在高阶数据结构中我们要学习的重点是图等 一、查集的原理 在某些情况下,...-切割数据结构,是一种用于管理集合的高效数据结构。...特别适用于处理“动态连接”的问题,即动态合并集合或查询两个元素是否属于同一个集合。...二、查集的基本操作 查集主要支持以下三种基本操作: 查找(Find):确定一个元素属于哪个集合。 合并(Union):两个集合合并为一个集合。..."YES" : "NO") << std::endl; } return 0; } 六、总结 查集的高效性在于其优化策略,使得查找和合并操作的时间复杂度保持在较低的水平,从而在处理大规模数据集时依然表现出色

6910

【图形学】Vulkan Tutorial 学习笔记

debug操作, 同时在发布版关闭 Vulkan的Pipeline阶段和Dx11的标准管线是一样的 Vulkan的着色器都采用了编译后的二进制形式, 这是为了避开不同驱动厂商对高级着色器语言的编译适配问题...为了方便Vulkan同样有运行时自动编译的操作可以使用 Vulkan的着色器坐标采用了和Dx一样的左上角为原点的设计 Vulkan的种种对象 如何正确的入门Vulkan?...我们都只能假定指令在GPU中以即时执行的状态发送给流水线, 一旦流水线后面的部分依赖于前面的部分就会引起一次卡顿, 后面的部分需要等待前面的部分完成后再执行 Vulkan通过这种数据依赖问题拆解出来来达到优化..., 当GPU某个单元执行完此Subpass后, 其数据写入对应的Attachment, 然后无需跟以前一样在那里等待其他内容的计算, 而是可以由编译优化自动切换到其他指令的计算上, 直到此依赖的数据都准备好后再回到节点上继续执行...之间信息交互的中介, 作为CPU端的缓冲 Map-memcpy-Unmap, 从而将顶点数组中的数据复制到stagingBuffer 再创建一个用于GPU的顶点缓冲区, CopyBuffer进行数据复制

1.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【知识】详细介绍 CUDA Samples 示例工程

    展示了如何在运行时链接到 CUDA 驱动程序以及如何使用 PTX 代码进行 JIT(即时)编译。它是为了清晰说明各种 CUDA 编程原则,而不是为了提供最通用的高性能矩阵乘法内核。...这一部分的示例展示了如何查询设备的能力以及如何测量 GPU 和 CPU 之间的带宽。这些实用工具对于了解硬件性能和优化数据传输非常有用。...该示例还使用了 CUDA 管道接口提供的异步复制,全局内存数据复制到共享内存,从而提高内核性能减少寄存器压力。...bicubicTexture 此示例展示了如何使用 CUDA 纹理高效实现双三次 B 样条插值滤波器。...convolutionFFT2D 这个示例展示了如何使用 FFT 变换高效实现具有非常大核尺寸的 2D 卷积。

    85410

    兼容蓄——MNN异构计算设计与实践

    最常用的就是CPU,通用处理器,需要什么都能做,需要兼顾控制、计算与缓存。...近些年来随着摩尔定律的失效,CPU的算力提升渐渐接近瓶颈,而GPU则由于更高的画质方面的需求,厂商们把做得越来越强。...最简单的异构计算设计是直接在算子层别引入加速,算子的输入复制到执行端所需的内存上,异构计算完成后再复制回来,这样做会有较多的内存拷贝的损耗,移动端上一般会抵消异构计算本身的收益。...通过这样的接口设计,我们尽可能降低了各种硬件的适配成本,并且由于我们分离了资源准备和执行计算的过程,为后续非计算的损耗降为一次性的工作奠定了基础。...在接口层面,我们一方面会做流程方面的优化,数据前后处理与MNN中的异构计算结合,提升整体性能;另一方面,会研发自动调度能力,做到上游开发对硬件无感知。

    1.2K30

    深度学习落地移动端——Q音探歌实践(一)

    尽管所有的训练都还在专门的数据中心进行,但是越来越多的人深度学习推断,过渡到边缘,过渡到手机端执行。虽然相比于训练计算,推断计算所需的算力更低,这为在能耗限制更严格的移动端进行推断提供了可行性。...所有计算都必须在片段着色器(Fragment Shader)内进行,而一个片段着色器只能输出16位数据。因此,多通道卷积或矩阵乘法需要多次读取相同的输入。...提供与OpenGL ES 3.1类似的功能,同时具有一些减少内存开销的新API。展望未来,Vulkan是一个很有前途的GPGPU API。...36%的Android设备搭载了Vulkan,根据google的数据,2019年大约有73%的设备支持Android 7 以上的版本(并不代表都可以运行vulkan), 根据我们在优测平台的统计数据,大约有...很多框架开始采用vulkan来实现神经网络算法,也有一些框架选择去兼容比较复杂的情况,例如像Caffe2,甚至会针对Nivida的CUDA平台去做适配工作。

    1.7K20

    MLC LLM - 手机上的大模型

    MLC LLM 是一种通用解决方案,允许任何语言模型本地部署在各种硬件后端和本地应用程序上,此外还提供了一个高效的框架,供每个人根据自己的用例进一步优化模型性能。...此外,我们通过扩展 TVM 后端不断扩展 LLM 加速,使模型编译更加透明和高效。2、MLC 如何实现通用原生部署?...动态形状:我们语言模型烘焙为具有原生动态形状支持的 TVM IRModule,避免了对最大长度进行额外填充的需要,减少了计算量和内存使用量。...MLC 还通过 LLVM 支持各种 CPU 目标,包括 ARM 和 x86。...我们严重依赖开源生态系统,更具体说,TVM Unity,这是 TVM 项目中令人兴奋的最新开发,支持 python 优先的交互式 MLC 开发体验,使我们能够轻松在 Python 中编写新的优化,

    55430

    【建议收藏】30 分钟入门 Vulkan (中文翻译版)

    一些类型的内存可以被CPU访问,一些不可以。一些类型可以在GPU和CPU间保持数据一致性、一些类型可以被CPU缓存使用等等。可以通过查询物理设备获取这些信息。...继续考虑之前的类比,我们可以管线看作一个函数,具有多个结构体参数。...创建管线时,的每个参数的类型被确定(VkDescriptorSetLayout),进行数据绑定时我们实例(VkDescriptorSet)传递给管线。...Vulkan没有对使用的资源进行引用计数,我们需要自己保证在不再使用资源时释放Vulkan提供了VkEvent、VkSemaphore和VkFence用于CPU-GPU和GPU-GPU同步。...但使用UNDEFINED作为之前的图像布局也是常见的,表明我们不需要之前的图像数据,只需要将图像变换为需要的新布局。 渲染流程 Vulkan使用VkRenderpass来显式定义渲染操作流程。

    7K20

    陈天奇等人新作引爆AI界:手机原生跑大模型,算力不是问题了

    「我把大语言模型下到我的 iPhone 上,神奇跑起来了!」 五一假期还没过半,大模型领域的技术就已经发展到了这种程度。 对于陈天奇等人开源的新技术,大家一致的评论是「Amazing」。...在社交网络上人们纷纷点赞,表示 MLC-LLM 让我领教了低精度跑 AI 的可怕程度: 也有人晒出了自己的使用体验,iPhone 飞行模式本地跑大语言模型: 简单来说,MLC LLM 是一种通用解决方案,允许任何语言模型本地部署在各种硬件后端和本地应用程序上...此外,MLC LLM 还提供了一个高效的框架,供使用者根据需求进一步优化模型性能。...Dynamic shape:该研究语言模型烘焙(bake)为具有原生 Dynamic shape 支持的 TVM IRModule,避免了对最大输入长度进行额外填充的需要,减少了计算量和内存使用量。...此外,MLC 还为 CUDA、Vulkan 和 Metal 生成了 GPU shader,通过 LLVM 支持多种 CPU,包括 ARM 和 x86。

    34310

    为什么电脑配置高,玩《黑神话:悟空》需要等待这么久

    在这之前,先说下 GPU、CPUCPU 有着比较少的计算核心,但每个核心能干的事情比较多;而 GPU 虽然每个核心能干得不多,可数量多。...市面上有不同硬件厂商生产的不同显卡,首先游戏开发者与硬件厂商约定了一些标准/规范(OpenGL、Vulkan、DX 等),硬件厂商基于这些规范去实现相应硬件功能,游戏开发者根据这些规范编写代码,而编译过程则是这些代码变为显卡所能理解的二进制文件...现代的一些图形接口,如 Metal、Vulkan、DX12,允许编译得到中间格式的结果(比如 Metal IR、SPIR-V 等),一些引擎会选择这些中间格式结果打入安装包中,但仍然避免不了在首次加载时编译得到最终产物...以上也就是游戏在启动时编译着色器的过程,通常在首次加载游戏时需要对着色器进行编译,一些规范允许对编译产物进行缓存,之后能够更加快速进入游戏。...笔者对着色器编译的理解也非常肤浅,编译的一些底层细节以及如何跨平台进行编译,也留给我去慢慢学习,如有不对还请批评指教。

    15510

    轻量级深度学习端侧推理引擎 MNN,阿里开源!

    MNN背后的技术框架如何设计?未来有哪些规划?今天一起来深入了解。 ---- 1、MNN是什么? ?...CPU 和 GPU,可以动态导入 GPU Op 插件,替代 CPU Op 的实现; 轻量性: 针对端侧设备特点深度定制和裁剪,无任何依赖,可以方便部署到移动设备和各种嵌入式设备中; iOS 平台上,armv7...,常用模型上快于苹果原生的 CoreML; Android 上提供了 OpenCL、Vulkan、OpenGL 三套方案,尽可能多满足设备需求,针对主流 GPU(Adreno和Mali)做了深度调优;...,方便提取数据或者控制运行走向; 支持运行网络模型中的部分路径,或者指定 CPU 和 GPU 间并行运行; 3、MNN核心介绍 3.1 模块设计 ?...端智能即在端侧部署运行 AI 算法,相比服务端智能,端智能具有低延时、兼顾数据隐私、节省云端资源等优势。目前端智能正逐渐变为趋势,从业界来看,已经在 AI 摄像、视觉特效等场景发挥了巨大价值。

    7K40

    《Life of a Pixel》——浏览器渲染流程概要

    我将其演讲内容分为以下三个部分,第一个是静态渲染过程,讲述一个完整的从 content 到 pixel 的渲染过程;第二个是动态更新过程,讲述浏览器如何高效更新页面内容。 概览 ?...所以为了解决复杂性的问题,layout 阶段浏览器首先会生成一个和 DOM 树节点大致一一对应的 layout 树,然后遍历该树,经过计算后得出的位置布局数据填入节点。...在未来演进上,栅格化处理转移至 GPU 进程中进行,以提升性能。同时 Vulkan 也会被支持。...一个完整的渲染过程是很昂贵的,如何高效更新也是讨论的重点。 动态更新过程 ? 首先明确一个概念,帧。...这里为了实现可以一边可以执行前一个提交的图块绘制任务,一边继续等待新的任务,合成线程还做了一些优化,实现了一个 pending layer tree。

    1.6K20

    Android 11 --Use ANGLE for OpenGL ES

    Android 11,ANGLE APK包含一个配置文件,以按应用启用ANGLE。...同时,从Android 11开始,您可以使用ANGLE运行非核心应用程序以评估性能确定特定应用程序是否应使用ANGLE。该评估和选择加入选项使开发人员可以逐渐转向ANGLE。...OpenGL ES vs Vulkan 在移动领域,传统API的硬件程序模型已不再很好匹配硬件,而且CPU往多核发展后,传统API不能有效利用多核优势。...CPU占用率 如同OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,计划提供高性能和低CPU管理负担(overhead)。...Vulkan是OpenGL与OpenGL ES的继任者,并且更加高效。ARM日前便公布了一段视频对比了Vulkan API 与OpenGL ES API 在CPU占用率及能效上优劣。

    2.5K10

    MLC LLM——本地应用程序上原生部署任何语言模型

    前言 在AI浪潮风起云涌的当下,AI正在不断重塑着每一个行业。在各大厂先后争先恐后推出一系列大模型的同时,也不断出现了很多开源的大模型。...由于OpenCL支持有限,尚不能在Google Pixel上运行。我们继续提供支持,欢迎开源社区的贡献。您还可以查看我们的GitHub存储库,以从源代码构建Android应用程序。...此外,我们通过扩展TVM后端来不断扩大LLM的加速范围,使得模型编译更加透明高效。 MLC如何实现通用本地部署? 我们解决方案的基石是机器学习编译(MLC),通过我们能够高效部署AI模型。...MLC还通过LLVM支持包括ARM和x86在内的各种CPU目标。...我们在很大程度上依赖于开源生态系统,尤其是TVM Unity,这是TVM项目中令人兴奋的最新发展,实现了以Python为先的交互式MLC开发体验,让我们可以轻松组合新的优化策略,逐步将我们的应用程序带入感兴趣的环境中

    2.7K30

    贾扬清推荐:阿里开源轻量级深度学习框架 MNN,侧重推理加速和优化

    AI科学家贾扬清如此评价道: “与 Tensorflow、Caffe2 等同时覆盖训练和推理的通用框架相比,MNN 更注重在推理时的加速和优化,解决在模型部署的阶段的效率问题,从而在移动端更高效实现模型背后的业务...CPU 和 GPU,可以动态导入 GPU Op 插件,替代 CPU Op 的实现; 轻量性: 针对端侧设备特点深度定制和裁剪,无任何依赖,可以方便部署到移动设备和各种嵌入式设备中; iOS 平台上,...,常用模型上快于苹果原生的 CoreML; Android 上提供了 OpenCL、Vulkan、OpenGL 三套方案,尽可能多满足设备需求,针对主流 GPU(Adreno 和 Mali)做了深度调优...,方便提取数据或者控制运行走向; 支持运行网络模型中的部分路径,或者指定 CPU 和 GPU 间并行运行; 3、MNN 核心介绍 3.1 模块设计 ?...端智能即在端侧部署运行 AI 算法,相比服务端智能,端智能具有低延时、兼顾数据隐私、节省云端资源等优势。目前端智能正逐渐变为趋势,从业界来看,已经在 AI 摄像、视觉特效等场景发挥了巨大价值。

    3.1K30

    什么是 Vulkan

    就像OpenGL,Vulkan针对实时3D程序(如电子游戏)设计,Vulkan计划提供高性能和低CPU管理负担(overhead),这也是Direct3D12和 AMD 的 Mantle 的目标。...Vulkan兼容 Mantle 的一个分支,使用了 Mantle 的一些组件。 Vulkan 简介 Vulkan是一个用于图形和计算设备的编程接口。...Vulkan解决这个问题的方式是,状态跟踪、同步和内存管理交给了应用程序开发人员,同时正确性检查交给各个层进行代理,而要想使用这些层必须手动启用。这些层在正常情况下不会在应用程序里执行。...功能可以粗略划分为几类。...Vulkan的当前版本定义了传输类别——用于复制数据;计算类别——用于运行着色器进行计算工作;图形类别——包括光栅化、图元装配、混合、深度和模板测试,以及图形程序员所熟悉的其他功能。

    4.2K30

    谷歌正式发布WebGPU!90多位贡献者研发6年,浏览器终于可以利用底层硬件了

    “Web 图形的新曙光” WebGPU 是一种新型 Web API,能够公开现代硬件功能允许在 GPU 上执行渲染与计算操作,功能定位类似于 Direct3D 12、Metal 和 Vulkan。...(Vulkan 实际上应该有两个 API:一个用于桌面 GPU,一个用于移动 GPU——这些新扩展正在 Vulkan 分成两个或多或少分别独立的 API,一个对于移动 GPU 来说很糟糕,另一个相当不错...必须在同一代码库的桌面和移动设备上同样出色工作(移动设备实际上比桌面设备重要得多)。”flohofwoe 表示。...如果使用 WebGL 进行绘制的话,可以看到,使用 2070 显卡只能跑到 21FPS,而且每一帧的 CPU 时间需要 44 毫秒,但是同样用 WebGPU 来处理,可以跑到 123 帧,每一帧的 CPU...35465729 今日好文推荐 新手用ChatGPT仅需数小时轻松构建零日漏洞,69家专业公司都检测不出来:“不仅能调用开源库,还能彻底重写源代码” 揭秘 ChatGPT 背后的技术栈:OpenAI 如何

    1.2K30

    打破WiredTiger的Logjam(上篇):预写式日志(The Write-Ahead Log)

    下篇重点介绍我们如何消除瓶颈。我分析发生的根本原因描述支持我们解决方案的关键,详细介绍新算法以及它是怎么反映出我们所遇到的新条件。...所以现在,只是在等待监视slot_state,等待其关闭的指示。 如果一个线程获得的偏移量为零,那么它就会成为leader线程。leader线程不会坐等slot关闭,相反它会去关闭slot。...完成任务后,它们通过原子记录大小添加到slot_state来释放slot,该值现在是一个负数,指代剩余的要复制到缓冲区的总字节数。...对于那些等待记录复制到缓冲区的线程来说,核的可用性是很重要的,因为它们必须忙等待(busy-wait)slot_state更改,而这会消耗CPU周期。...负责管理slot_state和slot池的线程应该是优先级最高的,但是所有加入slot等待slot_state更改的线程已经使CPU不堪重负。

    1K30

    UE4UE5的RHI(Vulkan为例)

    UE5的RHI里也像Vulkan一样,把顶点或索引Buffer这样的说法废弃了,他们本质上都是一维数据,所以也用统一个类型表示就足够了。...Sampler:采样器,就是个数据的壳,也是告诉Vulkan具体怎么解读数据的。但和ImageView不一样,他不需要绑定到Image上。...因为牵扯到内存和显存的交互,为了保证访问安全,以及拿到设备上的数据,所以CPU在写这部分数据时需要先调用lock,写完后调用unlock,具体Lock/UnLock做了什么,后面RHIResource部分有说...有一点特别要注意的,这里虽然写成了Execute,但其实这里只是CPU把命令提交给GPU,真正是由GPU执行的,所以这里在准备一些数据的时候,我们感觉因为线程安全问题,资源是多个线程不能同时访问的,但其实不一定...而如果是写,Lock的时候创建个空的StagingBuffer,在UnLock的时候,把StagingBuffer内容复制到实际的Buffer上: 除了Buffer外,贴图也是类似的做法: 资源本身需要内存

    5.4K40
    领券