DAY16:阅读纹理内存之纹理对象API

我们正带领大家开始阅读英文的《CUDA C Programming Guide》,今天是第16天,我们用几天时间来学习CUDA 的编程接口,其中最重要的部分就是CUDA C runtime.希望在接下来的84天里,您可以学习到原汁原味的CUDA,同时能养成英文阅读的习惯。

本文共计76字,阅读时间5分钟

3.2.11.1.1. Texture Object API

A texture object is created using cudaCreateTextureObject() from a resource description of type struct cudaResourceDesc, which specifies the texture, and from a texture description defined as such:

· addressMode specifies the addressing mode;

· filterMode specifies the filter【插值】 mode;

· readMode specifies the read mode;

· normalizedCoords specifies whether texture coordinates are normalized or not;

· See reference manual for sRGB, maxAnisotropy, mipmapFilterMode, mipmapLevelBias, minMipmapLevelClamp, and maxMipmapLevelClamp.

The following code sample applies some simple transformation kernel to a texture.

本文备注/经验分享:

昨天开始我们开始介绍纹理内存。

什么情况下使用纹理内存? 需要使用免费的地址变换, 值变换(归一化读取方式), 边界处理, 以及, 可能的CUDA Array的缓存优势的时候用,还有自带的免费插值(线性)。 不需要这些特性的请使用普通读取。请注意现在的卡使用纹理不一定有提速效果,这个不保证的。以前说纹理提速巨大那是说的1.X,1.X普通读取无缓存。现在已经过时了。

A texture object is created using cudaCreateTextureObject() from a resource description of type struct cudaResourceDesc, which specifies the texture, and from a texture description.... 这句是字面意思. 没啥可说的。主要注意,Texture Object没有单独的一个绑定过程,在创建的时候就已经绑定了。什么情况下要用纹理对象API ? 任何时候都可以使用,新代码建议总是使用Texture Object。 Texture Object的一大特点就是能作为参数用。

The following code sample applies some simple transformation kernel to a texture.这段读取texture,做简单的变换,这代码是做图像旋转的。(1)x和y坐标,分别除以总宽度和高度,这是将X: [0,W)和Y:[0,H)变换到(0,1)和(0,1)上

(坐标归一化),然后各自减掉0.5, 平移, 平移原点到中心位置,再用旋转公式在新坐标系下, 对新原点旋转, 因为之前平移过。对于对图像原本的中点旋转,旋转完了, 再恢复原本的以图像(0,0)点为原点, 平移回来。这样就得到了对中点旋转后的新坐标了。新坐标依然是归一化的,然后用texture的归一化坐标进行读取。最后将旋转后的结果图像,保存到普通内存。注意普通内存这里是普通坐标(x,y)的这种。x和y来自线程编号和block编号。另外注意这里用的是纹理的线性插值,如果旋转后的新坐标落到了原本的一些点的中间。则用它们的线性插值平均后的值作为新值,这样多少能让旋转后的图像变得平滑一点。

有不明白的地方,请在本文后留言

或者在我们的技术论坛bbs.gpuworld.cn上发帖

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2018-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

ChainerCV: 一个用于深度学习的计算机视觉库

ChainerCV是一个基于Chainer用于训练和运行计算机视觉任务的神经网络工具。它涵盖了计算机视觉模型的高质量实现,以及开展计算机视觉研究的必备工具集。 ...

49370
来自专栏CreateAMind

合成动态视频效果及声音合成

图片大小限制,更多可访问 http://www.stat.ucla.edu/~jxie/STGConvNet/STGConvNet.html

17020
来自专栏智能算法

深度学习三人行(第1期)---- TensorFlow爱之初体验

前面十个系列,我们一起学习了机器学习的相关知识,详情可在“智能算法”微信公众号中回复“机器学习”进行查看学习及代码实战。从该期开始,我们将一起学习深度学习相关知...

421140
来自专栏跟着阿笨一起玩NET

UML建模系列文章总结

本文转载:http://www.cnblogs.com/ywqu/tag/UML建模/

10210
来自专栏杨熹的专栏

TensorFlow-3: 用 feed-forward neural network 识别数字

这一节讲了使用 MNIST 数据集训练并评估一个简易前馈神经网络(feed-forward neural network),input,output 和前两节是...

54400
来自专栏大数据挖掘DT机器学习

Weka中BP神经网络的实践(参数调整以及结果分析)

本来想的是以理论和实践相结合,前面讲讲神经网络,后面简单讲下在weka中怎么使用BP神经网络,可惜最后时间不够。因为是讲稿,讲的要比写的多,所以很多地方口语化和...

66080
来自专栏程序员的知识天地

Python学习,这有可能是最详细的PIL库基本概念文章了

PIL有如下几个模块:Image模块、ImageChops模块、ImageCrackCode模块、ImageDraw模块、ImageEnhance模块、Imag...

12930
来自专栏开发与安全

算法:Solutions for the Maximum Subsequence Sum Problem

The maximum subarray problem is the task of finding the contiguous subarray wit...

21380
来自专栏漫漫深度学习路

MXNET学习笔记(一):Module类(1)

Module 是 mxnet 提供给用户的一个高级封装的类。有了它,我们可以很容易的来训练模型。 Module 包含以下单元的一个 wraper symbol ...

31650
来自专栏李智的专栏

Python中对文件夹下的特定格式图像全部读取并转化为数组保存(也可转化为txt文件)

python下对图像进行批处理少不了读取文件夹下的全部图像,下面就以具体实例分享下对文件夹下的特定格式图像全部读取并转化为数组保存的代码,代码详解请见注释 ...

35420

扫码关注云+社区

领取腾讯云代金券