CUDA Texture纹理存储器 示例程序
/*
* Copyright 徐洪志(西北农林科技大学.信息工程学院). All rights reserved.
* Data: 2012-4-20
*/
//
// 此程序是演示了1D和2D纹理存储器的使用
#include <stdio.h>
#include <cutil_inline.h>
#include <iostream>
using namespace std; texture<float> texRef1D; // 1D texture
texture<float, > texRef2D; // 2D texture // 1D 纹理操作函数
__global__ void Texture1D(float *dst, int w, int h)
{
int x = threadIdx.x + blockIdx.x * blockDim.x;
int y = threadIdx.y + blockIdx.y * blockDim.y;
int offset = x + y * blockDim.x * gridDim.x; if(x<w && y<h)
dst[offset] = tex1Dfetch(texRef1D, offset);
}
// 2D 纹理操作函数
__global__ void Texture2D(float *dst, int w, int h)
{
int x = threadIdx.x + blockIdx.x * blockDim.x;
int y = threadIdx.y + blockIdx.y * blockDim.y;
int offset = x + y * blockDim.x * gridDim.x; dst[offset] = tex2D(texRef2D, x, y);
}
int main(int argc, char **argv)
{
CUT_DEVICE_INIT(argc, argv); // 启动 CUDA
/// 1D 纹理内存
cout << "1D texture" << endl;
float *host1D = (float*)calloc(, sizeof(float)); // 内存原数据
float *hostRet1D = (float*)calloc(, sizeof(float));// 内存保存返回数据 float *dev1D, *devRet1D; // 显存数据
int i;
cout << " host1D:" << endl;
for(i = ; i < ; ++i) // 初始化内存原数据
{
host1D[i] = i * ;
cout << " " << host1D[i] << " ";
}
cutilSafeCall( cudaMalloc((void**)&dev1D, sizeof(float)*)); // 申请显存空间
cutilSafeCall( cudaMalloc((void**)&devRet1D, sizeof(float)*));
cutilSafeCall( cudaMemcpy(dev1D, host1D, sizeof(float)*, cudaMemcpyHostToDevice)); // 将内存数据拷贝入显存
cutilSafeCall( cudaBindTexture(NULL, texRef1D, dev1D, sizeof(float)*)); // 将显存数据和纹理绑定 Texture1D<<<, >>>(devRet1D, , ); // 运行1D纹理操作函数 cutilSafeCall( cudaMemcpy(hostRet1D, devRet1D, sizeof(float)*, cudaMemcpyDeviceToHost)); // 将显存数据拷贝入内存
// 打印内存数据
cout << endl << " hostRet1D:" << endl;
for(i = ; i < ; ++i)
cout << " " << hostRet1D[i] << " "; cutilSafeCall( cudaUnbindTexture(texRef1D)); // 解绑定
cutilSafeCall( cudaFree(dev1D)); // 释放显存空间
cutilSafeCall( cudaFree(devRet1D));
free(host1D); // 释放内存空间
free(hostRet1D); /// 2D 纹理内存
cout << endl << "2D texture" << endl;
int width = , height = ;
float *host2D = (float*)calloc(width*height, sizeof(float)); // 内存原数据
float *hostRet2D = (float*)calloc(width*height, sizeof(float)); // 内存返回数据 cudaArray *cuArray; // CUDA数组
float *devRet2D; // 显存数据
int row, col;
cout << " host2D:" << endl;
for(row = ; row < height; ++row) // 初始化内存原数据
{
for(col = ; col < width; ++col)
{
host2D[row*width + col] = row + col;
cout << " " << host2D[row*width + col] << " ";
}
cout << endl;
}
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
cutilSafeCall( cudaMallocArray(&cuArray, &channelDesc, width, height)); // 申请显存空间
cutilSafeCall( cudaMalloc((void**) &devRet2D, sizeof(float)*width*height));
cutilSafeCall( cudaBindTextureToArray(texRef2D, cuArray)); // 将显存数据和纹理绑定
cutilSafeCall( cudaMemcpyToArray(cuArray, , , host2D, sizeof(float)*width*height, cudaMemcpyHostToDevice)); // 将内存数据拷贝入CUDA数组 dim3 threads(width, height);
Texture2D<<<, threads>>>(devRet2D, width, height); // 运行2D纹理操作函数 cutilSafeCall( cudaMemcpy(hostRet2D, devRet2D, sizeof(float)*width*height, cudaMemcpyDeviceToHost)); // 将显存数据拷贝入内存
// 打印内存数据
cout << " hostRet2D:" << endl;
for(row = ; row < height; ++row)
{
for(col = ; col < width; ++col)
cout << " " << hostRet2D[row*width + col] << " ";
cout << endl;
} cutilSafeCall( cudaUnbindTexture(texRef2D)); // 解绑定
cutilSafeCall( cudaFreeArray(cuArray)); // 释放显存空间
cutilSafeCall( cudaFree(devRet2D));
free(host2D); // 释放内存空间
free(hostRet2D); CUT_EXIT(argc, argv); // 退出CUDA
}
CUDA Texture纹理存储器 示例程序的更多相关文章
- CUDA C 纹理提取Texture Fetching
CUDA C 纹理提取Texture Fetching 一.参数曲面的纹理 使用纹理指定参数曲面属性. 二.CUDA C 纹理获取开发 用于计算纹理函数,根据纹理引用的各种属性返回的值的公式(请参见 ...
- OSG中的示例程序简介
OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示 ...
- OSG中的示例程序简介(转)
OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...
- VS2012下基于Glut 矩阵变换示例程序2:
在VS2012下基于Glut 矩阵变换示例程序:中我们在绘制甜圈或者圆柱时使用矩阵对相应的坐标进行变换后自己绘制甜圈或者圆柱.我们也可以使用glLoadMatrixf.glLoadMatrixd载入变 ...
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...
- .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序
在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- Salesforce Apex 使用JSON数据的示例程序
本文介绍了一个在Salesforce Apex中使用JSON数据的示例程序, 该示例程序由以下几部分组成: 1) Album.cls, 定了了封装相关字段的数据Model类 2) RestClient ...
- D3D三层Texture纹理经像素着色器实现渲染YUV420P
简单记录一下这两天用Texture实现渲染YUV420P的一些要点. 在视频播放的过程中,有的时候解码出来的数据是YUV420P的.表面(surface)通过设置参数是可以渲染YUV420P的,但Te ...
随机推荐
- OCR 维护 crsd.log
###########sample 1 OCR corruption messages are reported in crsd.log, automatic OCR backup is failin ...
- @ControllerAdvice 拦截异常并统一处理
在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...
- 性能测试工具LoadRunner08-LR之Virtual User Generator 检查点
步骤: 1.点击Vuser--->Run-Time Settings 2.点击Preferences--->Enable Image and text check 3.点击Content ...
- db2 存储过程参数传递--字段类型转换产生的问题
修改之前的脚本 select count(*) from dbdk.dtdkg010 A left join DBDK.DTDKG070 D ON D.PAY_NO = A.PAY_NO LEFT J ...
- webview的进度条的加载,webview的使用以及handle的理解与使用
Webview的几个关键方法要介绍一些: 谷歌官方文档是这么说的; A WebView has several customization points where you can add your ...
- 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法
不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...
- Linux网卡操作
单个网卡操作 [root@localhost ~]# ifdown eth0 #关闭网络 [root@localhost ~]# ifup eth0 #启动网络 网络服务: [root@localho ...
- DEDE列表页和内容页调用顶级栏目ID的方法
dede模板中添加顶级栏目id的方法总结,使用dede顶级栏目id可以实现很多功能.比如,在每个列表页调用不同的栏目图片(同一顶级栏目调用相同的图片),如果我们做N个栏目就意味着要做N个列表页模板,显 ...
- php乱码的解决方法
一般如果会出现乱码,基本都是因为编码不统一造成的,所以我们只需要把编码改成一样的就好了. 我们编码一般都是以utf-8为主: 文件编码都是UTF-8无BOM,如果文件不是这个编码,可以使用文件编辑器转 ...
- No module named Crypto--转
https://blog.csdn.net/lacoucou/article/details/53152122 背景:win10+python 2.7 在python 中使用AES算法时,会报告上述错 ...