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

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2050
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5426
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2635
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6768
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2526
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2142
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3105
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3859

扫码关注云+社区