CUDA学习(十九)

简介:

16位浮点纹理:
CUDA阵列支持的16位浮点或半格式与IEEE 754-2008 binary2格式相同。
CUDA C不支持匹配的数据类型,但提供了通过unsigned short类型__float2half_rn(float)和__half2float(unsigned short)转换32位浮点格式和从32位浮点格式转换的内部函数。 这些功能仅在设备代码中受支持。 主机代码的等价函数可以在OpenEXR库中找到。
在执行任何过滤之前,16位浮点组件在纹理提取期间被提升为32位浮点数。
可以通过调用cudaCreateChannelDescHalf *()函数之一来创建16位浮点格式的通道描述。
分层纹理:
一维或二维的分层纹理(也称为Direct3D中的纹理阵列和OpenGL中的阵列纹理)是由一系列层组成的纹理,它们都是具有相同维度,大小和数据类型的规则纹理。
使用整数索引和浮点纹理坐标来寻址一维分层纹理; 索引表示序列中的一个层,坐标表示该层内的纹理元素。 使用整数索引和两个浮点纹理坐标来寻址二维分层纹理; 索引表示序列中的一个层,坐标表示该层内的纹理元素。
通过使用cudaArrayLayered标志调用cudaMalloc3DArray()(一维分层纹理的高度为零),分层纹理只能是CUDA数组。
使用tex1DLayered(),tex1DLayered(),tex2DLayered()和tex2DLayered()中描述的设备函数来获取分层纹理。 纹理过滤(请参见纹理拾取)仅在一个图层内完成,而不是跨层完成。
立方地图纹理:
立方体贴图纹理是一种特殊类型的二维分层纹理,具有六个表示立方体面的图层:

  • 层的宽度等于它的高度。
  • 使用三个纹理坐标x,y和z来寻址立方体贴图,这三个纹理坐标被解释为从立方体的中心发出并且指向立方体的一个面的方向向量以及与该面对应的层内的纹理元素。 更具体地说,通过具有最大量值m的坐标来选择面部,并且使用坐标(s / m + 1)/ 2和(t / m + 1)/ 2来寻址对应的层,其中s和t在表1中定义

通过使用cudaArrayCubemap标志调用cudaMalloc3DArray(),分层纹理只能是CUDA数组。
使用texCubemap()和texCubemap()中描述的设备函数来获取立方体贴图纹理。
Cubemap纹理仅支
持计算能力为2.0或更高的设备。
立方体贴图分层纹理:
立方体贴图分层纹理是分层纹理,其图层是具有相同维度的立方体贴图。
使用整数索引和三个浮点纹理坐标来寻址立方体贴图分层纹理; 索引表示该序列内的立方体贴图,坐标表示该立方体贴图内的纹理元素。
通过使用cudaArrayLayered和cudaArrayCubemap标志调用cudaMalloc3DArray(),分层纹理只能是CUDA数组。
使用texCubemapLayered()和texCubemapLayered()中描述的设备功能获取立方体贴图分层纹理。 纹理过滤(请参见纹理拾取)仅在一个图层中完成,而不是跨层完成。
Cubemap分层纹理仅支持计算能力为2.0或更高的设备。
纹理聚集:
纹理拾取是一种特殊的纹理拾取,仅适用于二维纹理。 它由tex2Dgather()函数执行,该函数与tex2D()具有相同的参数,另外还有一个等于0,1,2或3的comp参数(请参阅tex2Dgather()和tex2Dgather())。 它将返回四个32位数字,它们对应于在常规纹理提取期间将用于双线性滤波的四个纹素中每一个的分量comp的值。 例如,如果这些纹理元素具有值(253,20,31,255),(250,25,29,254),(249,16,37,253),(251,22,30,250)和 comp是2,tex2Dgather()返回(31,29,37,30)
请注意,纹理坐标只用8位小数精度进行计算。 tex2Dgather()因此可能会返回意外的结果,其中tex2D()将为其权重之一使用1.0(α或β,请参阅线性过滤)。 例如,使用2.49805的x纹理坐标:xB = x-0.5 = 1.99805,但xB的小数部分以8位定点格式存储。 由于0.99805比256.f / 256.f更接近于255.f / 256.f,所以xB的值为2.因此,在这种情况下,tex2Dgather()将返回索引2和索引3,而不是索引 1和2。
只有用cudaArrayTextureGather标志创建的CUDA数组才支持纹理集合,并且纹理集合的宽度和高度小于表14中指定的最大值,这比纹理拾取的纹理集合小。 纹理集合仅在计算能力2.0和更高的设备上受支持。
timg

目录
相关文章
|
数据采集 监控 JavaScript
网站流量日志分析 —数据采集—页面埋点 JavaScript 收集数据|学习笔记
快速学习网站流量日志分析—数据采集—页面埋点 JavaScript 收集数据
1055 0
网站流量日志分析 —数据采集—页面埋点 JavaScript 收集数据|学习笔记
|
开发工具 git
Git从远程仓库拉取指定的分支
Git从远程仓库拉取指定的分支
4957 0
|
7月前
|
JavaScript 前端开发 Java
基于springboot的医院陪诊预约挂号系统
医院陪诊预约平台顺应老龄化社会需求,利用B/S架构与Spring、Vue、MySQL等技术,构建高效、便捷的线上陪诊服务系统,提升患者就医体验,优化医疗资源配置,推动医疗服务智能化发展。
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
874 3
|
10月前
|
存储 消息中间件 调度
Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
Celery Beat 是 Celery 的定时任务调度组件,支持固定间隔、CRON 表达式等规则,可实现任务的周期性执行。本文详解了其原理、配置方式、与 Django 的集成步骤及实战代码示例,适用于构建具备定时任务管理功能的后台系统。
846 0
Notepad++怎么对比文件,安装文件对比插件Compare plugin
Notepad++怎么对比文件,安装文件对比插件Compare plugin
5517 2
|
前端开发 编译器 C++
什么是LLVM项目?
什么是LLVM项目?
835 37
|
机器学习/深度学习 人工智能 前端开发
【AI系统】编译器基础介绍
随着深度学习的发展,AI模型和硬件技术不断演进,开发者面临如何有效利用算力及应对AI框架迭代的挑战。AI编译器成为解决这些问题的关键技术,它帮助用户专注于上层模型开发,减少手动优化性能的成本,最大化硬件效能。本文探讨编译器基础概念,解释编译器与AI框架的关系,介绍编译器与解释器的区别,以及AOT和JIT编译方式的特点和在AI框架中的应用。通过分析Pass和中间表示IR的作用,进一步理解编译器在AI领域的核心价值。
712 5
|
存储 人工智能 前端开发
【AI系统】LLVM IR 基本概念
本文深入探讨了LLVM的IR(中间表示)概念,解释了其在编译器工作原理中的重要性及应用方式。LLVM IR作为一种适中抽象级别的表示形式,能有效捕捉源代码信息,支持编译器的灵活操作与优化。文章进一步分析了LLVM IR的不同表现形式,包括内存中的编译中间语言、硬盘上的二进制格式和人类可读的文本格式,以及通过具体示例展示了如何使用Clang将C语言程序编译为LLVM IR。此外,还详细解析了LLVM IR的基本语法、条件语句、循环结构和指针操作等内容。
603 3