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

news2024/11/25 21:28:41

很高兴在雪易的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.coloradmin.cn/o/1349960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国标GB28181对接的时候如何配置服务端口和本地端口

目 录 一、国标GB28181对接需要配置的端口等参数 二、GB28181服务器端口的配置&#xff1a;SIP服务器端口 三、GB28181设备测端口的配置&#xff1a;本地SIP端口 &#xff08;一&#xff09;本地SIP端口配置的意义 &#xff08;二&#xf…

一文初识Linux进程(超详细!)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

QT上位机开发(绘图软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 稍微复杂一点的软件&#xff0c;一般都是带有绘图功能。绘图的意义&#xff0c;不仅仅是像CAD一样&#xff0c;可以进行模型的设计、比对和调试。它…

数字图像处理(3)——频域图像增强

&#x1f525;博客主页&#xff1a;是dream &#x1f680;系列专栏&#xff1a;深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 &#x1f498;每日语录&#xff1a;贤才&#xff0c;难进易出&#xff1b;庸才&#xff0c;易进易初出&#xff1b;…

IDA入门【二】IDA数据显示窗口

主窗口 IDA图形视图 图形视图会让人联想到程序流程图&#xff0c;因为它将一个函数分解成许多基本块&#xff0c;以生动显示该函数由一个块到另一个块的控制流程。 在屏幕上你会发现&#xff0c;IDA使用不同的彩色箭头区分函数块之间各种类型的流。 根据测试条件&#xff0c…

【Spring实战】15 Logback

文章目录 1. 依赖2. 配置3. 打印日志4. 启动程序5. 验证6. 调整日志级别7. 代码详细总结 Spring 作为一个现代化的 Java 开发框架&#xff0c;提供了很多便利的功能&#xff0c;其中包括灵活而强大的日志记录。本文将介绍如何结合 Spring 和 Logback 配置和使用日志&#xff0c…

旅游平台网页前后端

功能清单 游客功能 用户注册、登录登录权限拦截按名称搜索房间支付流程查看订单信息和状态评论预定过的房间&#xff0c;并自动修改订单状态查看统计剩余房间数量&#xff0c;数量为0时不可预定 管理员功能 房间分类管理 类型的删除、修改、查询&#xff08;准备添加增添功能…

一文通透Text Embedding模型:从text2vec、openai-ada-002到m3e、bge

前言 本文一开始是属于此文《知识库问答LangChainLLM的二次开发&#xff1a;商用时的典型问题及其改进方案》的1.2节&#xff0c;但为把Text Embedding模型阐述的更为精准、全面&#xff0c;特把那部分的内容抽取出来&#xff0c;不断完善成此文 第一部分 衡量文本向量表示效果…

【Java系列】文件操作详解

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

天气预报网站windy的使用简介

原来这些文章我都写在QQ日志里&#xff0c;只为方便自己翻阅&#xff0c;但QQ日志很不好的地方就是没有查找功能&#xff0c;自己想翻看都很不方便&#xff0c;以后就还是在熟悉的CSDN作记录吧。 windy是个很不错的天气预报网站&#xff0c;对喜欢钓鱼的我来说&#xff0c;能方…

Python-docx 深入word源码 带有序号的段落无法设置段后、段前距离、间距等段落属性

如果使用p doc.add_paragraph(内容, styleList Number)来创建序号段落&#xff0c;会发现设置序号段落之间的段前、段后以及段落间距无法生效。后来将docx库生成的word文档打开后发现段落的设置出现问题&#xff0c;如下图红框所示&#xff0c;将该选项去掉即可使段落间距属性…

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

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

mysql原理--MySQL基于规则的优化

设计 MySQL 的大叔依据一些规则&#xff0c;竭尽全力的把一些很糟糕的语句转换成某种可以比较高效执行的形式&#xff0c;这个过程也可以被称作 查询重写 &#xff08;就是人家觉得你写的语句不好&#xff0c;自己再重写一遍&#xff09;。 1.条件化简 我们编写的查询语句的搜…

怎么给直播录屏?超简单教程,一学就会!

随着直播行业的兴起&#xff0c;许多玩家和观众都希望能够录制直播内容以方便随时回顾或与他人分享。可是怎么给直播录屏呢&#xff1f;本文将详细介绍两种流行的直播录屏方法。通过学习这两种工具&#xff0c;你可以轻松实现直播录屏&#xff0c;记录并分享你的直播内容。 怎么…

jsp结合servlet

servlet配置 环境配置2023.12.31 idea配置搭建 创建一个普通的java项目 由于新版idea去除了add framework support的ui显示&#xff0c;可以在左边项目栏中使用快捷键shiftk或者setting中搜索add framework support在修改对应的快捷键 点击ok然后应该就是下面这样的结果 这里…

Zookeeper-Zookeeper选举源码

看源码方法&#xff1a; 1、先使用&#xff1a;先看官方文档快速掌握框架的基本使用 2、抓主线&#xff1a;找一个demo入手&#xff0c;顺藤摸瓜快速静态看一遍框架的主线源码&#xff0c;画出源码主流程图&#xff0c;切勿一开始就陷入源码的细枝末节&#xff0c;否则会把自…

用户侧智能配电与智能用电系统的应用及未来——安科瑞 顾烊宇

摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍。 1、智能配电…

SQL Server从0到1——基本语法

信息收集 用户&#xff1a; 当前用户名&#xff1a; select user 用户权限&#xff1a; 服务器级别&#xff1a; select IS_SRVROLEMEMBER(sysadmin) 数据库级别&#xff1a; select IS_MEMBER(db_owner) 2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt …

云计算:OpenStack 分布式架构添加LVM存储(单控制节点与多计算节点)

目录 一、实验 1.环境 2.安装并配置控制节点 3. 安装并配置存储节点 4.使用LVM存储 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部署compute01计算节点1192.168.204.211 已部署compute02计算节点2192.168.204.212已部署sto…

Docker:部署若依前后端分离版

Docker&#xff1a;部署若依前后端分离版 1. 停止天翼云上的原来跑的若依项目2. 停止腾讯云上的若依项目3. 使用Docker部署3.1 天翼云数据库&Redis3.1.1 部署数据库3.1.2 部署Redis数据库3.1.1 部署Nginx(这里被天翼云坑了换的腾讯云运行nginx) 3.2 腾讯云部署后端&前端…