【VTK三维重建-体绘制】第四期 VTK中GPU加速

很高兴在雪易的CSDN遇见你 

VTK技术爱好者 QQ:870202403


前言

上期内容讲到VTK的体绘制技术vtkGPUVolumeRayCastMapper,本文分享VTK中GPU加速的相关内容,希望对各位小伙伴有所帮助!

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的点赞就是我的动力(^U^)ノ~YO


目录

前言

1. vtkGPUInfoList

1.1 Probe

1.2 IsProbed

1.3 GetNumberOfGPUs

1.4 GetGPUInfo

2. vtkGPUInfo

2.1 设置/获取专用显存(DedicatedVideoMemory)

2.2  设置/获取专用系统内存(DedicatedSystemMemory)

2.3 设置/获取共享系统内存(SharedSystemMemory)

3. 实际应用

4. vtkDummyGPUInfoList

 5. vtkGPUInfoList其他子类

结论:


1. vtkGPUInfoList

        用于存储主机各GPU显存信息列表。

        vtkGPUInfoList存储了一系列的vtkGPUInfo。一个主机可以有多个gpu。它通过使用系统调用探测主机来创建和设置列表。这是一个抽象类。具体类是特定于操作系统的。

        其重要参数如下:

1.1 Probe

        查询该主机中的vtkGPUInfo信息。

1.2 IsProbed

        返回是否查询该主机的vtkGPUInfo信息。

1.3 GetNumberOfGPUs

        获取GPU的数量

1.4 GetGPUInfo

        获取GPU的信息

  /*** Return information about GPU i.* \pre probed: IsProbed()* \pre valid_index: i>=0 && i<GetNumberOfGPUs()* \post result_exists: result!=0*/virtual vtkGPUInfo* GetGPUInfo(int i);

2. vtkGPUInfo

        用于存储GPU显存信息,其重要参数如下

2.1 设置/获取专用显存(DedicatedVideoMemory)

        以字节为单位设置/获取专用显存。初始值为0。通常是最快的。如果它不为0,应该首先考虑它,并且应该忽略DedicatedSystemMemory或SharedSystemMemory。

  //@{/*** Set/Get dedicated video memory in bytes. Initial value is 0.* Usually the fastest one. If it is not 0, it should be taken into* account first and DedicatedSystemMemory or SharedSystemMemory should be* ignored.* 以字节为单位设置/获取专用显存。初始值为0。通常是最快的。* 如果它不为0,应该首先考虑它,并且应该忽略DedicatedSystemMemory或SharedSystemMemory。*/vtkSetMacro(DedicatedVideoMemory, vtkTypeUInt64);vtkGetMacro(DedicatedVideoMemory, vtkTypeUInt64);//@}

2.2  设置/获取专用系统内存(DedicatedSystemMemory)

  //@{/*** Set/Get dedicated system memory in bytes. Initial value is 0.* This is slow memory. If it is not 0, this value should be taken into* account only if there is no DedicatedVideoMemory and SharedSystemMemory* should be ignored.* 以字节为单位设置专用系统内存,初始值为0.* 这是慢速内存。如果该值不为0,则只有在没有dedicatedvideommemory且* SharedSystemMemory被忽略的情况下才会考虑该值。*/vtkSetMacro(DedicatedSystemMemory, vtkTypeUInt64);vtkGetMacro(DedicatedSystemMemory, vtkTypeUInt64);//@}

2.3 设置/获取共享系统内存(SharedSystemMemory)

  //@{/*** Set/Get shared system memory in bytes. Initial value is 0.* Slowest memory. This value should be taken into account only if there is* neither DedicatedVideoMemory nor DedicatedSystemMemory.* 以字节为单位设置/获取共享系统内存,初始值为0. 此为最慢的内存。* 只有在既没有dedicatedvideommemory也没有DedicatedSystemMemory的情况下,才应该考虑这个值。*/vtkSetMacro(SharedSystemMemory, vtkTypeUInt64);vtkGetMacro(SharedSystemMemory, vtkTypeUInt64);//@}

3. 实际应用

//摘自vtkGPUVolumeRayCastMapper  
this->MaxMemoryInBytes = 0;vtkGPUInfoList* l = vtkGPUInfoList::New();l->Probe();if (l->GetNumberOfGPUs() > 0){vtkGPUInfo* info = l->GetGPUInfo(0);this->MaxMemoryInBytes = info->GetDedicatedVideoMemory();if (this->MaxMemoryInBytes == 0){this->MaxMemoryInBytes = info->GetDedicatedSystemMemory();}// we ignore info->GetSharedSystemMemory(); as this is very slow.}l->Delete();if (this->MaxMemoryInBytes == 0) // use some default value: 128MB.{this->MaxMemoryInBytes = 128 * 1024 * 1024;}

4. vtkDummyGPUInfoList

        vtkDummyGPUInfoList通过将gpu的计数设置为零来实现Probe()。在没有特定于操作系统的实现时非常有用。主要用于重写Probe函数。将GPU的数量置零。

void vtkDummyGPUInfoList::Probe()
{if (!this->Probed){this->Probed = true;this->Array = new vtkGPUInfoListArray;this->Array->v.resize(0); // no GPU.}assert("post: probed" && this->IsProbed());
}

 5. vtkGPUInfoList其他子类

        本文基于VTK9.0.3版本,无vtkCoreGraphicsGPUInfoList,vtkDirectXGPUInfoList和vtkXGPUInfoList接口。

结论:

        本文粗略讨论VTK中使用GPU的方法,以后再慢慢研究VTK进行GPU加速的详细流程。

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的赞赏是我的最最最最大的动力(^U^)ノ~YO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/314820.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于简化版python+VGG+MiniGoogLeNet的智能43类交通标志识别—深度学习算法应用(含全部python工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建1&#xff09;VGG模型简化版2&#xff09;GoogLeNet简化版——MiniGoogLeNet 3. 模型训练及保存 相关其它博客工程源代码下载其它资料下载 前言 本项目专注于解决出国自驾游特定场景下的交…

ES6之Promise的链式调用

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

使用Gitea搭建自己的git远程仓库

Gitea 为什么需要自建仓库 原因只有一个&#xff1a;折腾。其实国内的码云加上github已经足够用了。 官方原话 Gitea 的首要目标是创建一个极易安装&#xff0c;运行非常快速&#xff0c;安装和使用体验良好的自建 Git 服务。我们采用 Go 作为后端语言&#xff0c;这使我们…

关于解决引用第三方依赖突然失效的问题解决办法

目录 背景回顾解决办法结果 背景 出现该问题的背景是这样的。在项目中需要支持加载pdf文档的功能。所以采取了使用第三方PDF库的方法来实现加载pdf文档。集成完后&#xff0c;功能是正常的。后来过了一段时间&#xff0c;发现加载pdf的功能不能正常使用了&#xff0c;加载不出…

docker-compose快速搭建passbolt服务及CA证书的使用(https协议访问)

文章目录 1. 服务搭建2. 创建管理员用户3. 使用CA认证 1. 服务搭建 创建passbolt目录&#xff0c;并进入该目录创建docker-compose.yml 文件&#xff0c;内容如下&#xff1a; version: 3services:db:image: mariadb:10.6container_name: pb-mariadbrestart: unless-stoppede…

SpringBoot灵活集成多数据源(定制版)

如来说世界&#xff0c;非世界&#xff0c;是名世界 如来说目录&#xff0c;非目录&#xff0c;是名目录 前言前期准备代码实现演示扩展 前言 本篇博客基于SpringBoot整合MyBatis-plus&#xff0c;如果有不懂这个的&#xff0c; 可以查看我的这篇博客&#xff1a;快速CRUD的秘诀…

【操作系统】虚拟存储管理-页面置换算法

文章目录 一. 实验目的二. 实验内容三. 实验步骤四. 实验结果五. 实验总结附&#xff1a;系列文章 一. 实验目的 &#xff08;1&#xff09;理解虚拟内存管理的原理和技术&#xff1b; &#xff08;2&#xff09;掌握请求分页存储管理中的页面置换算法&#xff1b; &#xff0…

zlib.decompressFile报错 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:方案1方案2此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了zlib.decompressFile报错 的问题。 问题: zlib.decompressFile报错,怎么解…

软件设计模式 --- 类,对象和工厂模式的引入

Q1&#xff1a;什么是软件设计模式&#xff1f; A&#xff1a;软件设计模式&#xff0c;又称设计模式。它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。综上&…

【Java系列】文件操作详解

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

高精度定位赛道爆发前夜 谁在强势崛起?|高工微报告

伴随着以NOA为代表的高阶智驾功能加速渗透&#xff0c;高精度定位赛道正进入快速增长通道。 整体技术链路上&#xff0c;高精度定位为高阶智驾的刚需&#xff1a;在“重地图、轻感知”阶段&#xff0c;其结合高精地图发挥作用&#xff1b;在“轻地图、重感知”阶段&#xff0c…

Django 学习教程- Django模板(Template)

系列 Django 学习教程-介绍与安装-CSDN博客 Django 学习教程- Hello world入门案例-CSDN博客 前言 在上一章节中我们使用django.http.HttpResponse() 来输出 "Hello World&#xff01;"。该方式将数据与视图混合在一起&#xff0c;不符合 Django 的 MTV 思想。 本…