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 条评论
登录 后参与评论

相关文章

来自专栏天天P图攻城狮

终端图像处理系列 - OpenGL混合模式的使用

OpenGL一次渲染过程包含了多个阶段,包括顶点着色器、图元组装、栅格化、片元着色器、测试和混合等,最后将结果输出的FrameBuffer上。

56514
来自专栏AI科技大本营的专栏

你一定能看懂的算法基础书(代码示例基于Python)

本文引自图灵教育《算法图解》 你一定能看懂的算法基础书;代码示例基于Python;400多个示意图,生动介绍算法执行过程;展示不同算法在性能方面的优缺点;教会...

4207
来自专栏我是攻城师

使用python3+opencv3实现的识别答题卡的例子(01)

40810
来自专栏python学习之旅

算法学习笔记(二):贪心算法

1423
来自专栏人工智能头条

MXNet设计笔记之:深度学习的编程模式比较

1773
来自专栏Java面试通关手册

六道面试中常见的智力题 来看看你会做几道?

下面的题目来自滴滴出行2017秋招题。这些题目是我自己觉得比较难或者比较容易出错的题目。

1344
来自专栏PPV课数据科学社区

【学习】《R实战》读书笔记(第五章)

读书会是一种在于拓展视野、宏观思维、知识交流、提升生活的活动。PPV课R语言读书会以“学习、分享、进步”为宗旨,通过成员协作完成R语言专业书籍的精读和分享,达到...

4229
来自专栏Deep learning进阶路

OpenCV 学习日记(三)--- 常见数据类型

OpenCV基本数据类型: CvPoint,这些结构中最简单的一个,包含两个整型变量x和y。 CvPoint还有两个兄弟:CvPoint2D32f 和 CvPo...

2020
来自专栏落影的专栏

OpenGL ES不容错过的实战-碰碰车

教程 OpenGLES入门教程1-Tutorial01-GLKit OpenGLES入门教程2-Tutorial02-shader入门 OpenGLES入门...

2645
来自专栏数据科学与人工智能

【Python环境】可爱的 Python: 自然语言工具包入门

鄙人并非见多识广,虽然写过很多关于 文本处理 方面的东西(例如,一本书),但是,对我来说, 语言处理(linguistic processing) 是一个相对新...

2958

扫码关注云+社区