GPU高性能计算-CUDA
前段时间有个同学的毕设是搞并行计算的,他基本不懂编程把我拉过去帮忙,我之前也没弄过,帮着搞了2天。先把代码贴上去,等有时间在把详细补充一些内容。
CUDA编程主要是利用了显卡优越的并行计算能力,把一个大的任务分成很多小的单位同时执行,这样就节省了运行的时间。
1:首先要在显存中分配空间,把内存中的变量复制到其中;
cudaMemcpy(gpu_img_1,buffer1,(img_1.w*img_1.h)*sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpy(gpu_img_2,buffer2,(img_1.w*img_1.h)*sizeof(float),cudaMemcpyHostToDevice);
clock_t start_time=clock();
dim3 blocks(block_num,block_num); //check 256*256;
dim3 threads(,);
VAR_KERNEL<<<blocks,threads>>>(gpu_img_1,gpu_img_2,mean_1,mean_2,gpu_variance_1, gpu_variance_2, gpu_covariance);
2:要分配线程块,对于怎么分配块的大小让显卡的性能达到最优,还不是特别清楚,网络上有一些经验的数字;
下面是核函数,与C/C++代码格式略有不同,
__global__ void VAR_KERNEL(float *img_1,float *img_2,float average_1,float average_2,float *variance1,float *variance2,float *covariance)
{
int x=threadIdx.x+blockIdx.x*blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;
int offset=x+y*blockDim.x*gridDim.x;
float pixel_1;
float pixel_2;
float temp;
pixel_1=img_1[offset];
pixel_2=img_2[offset];
temp=(pixel_1-average_1)*(pixel_1-average_1);// 计算x方差
variance1[offset]=temp;
temp=(pixel_2-average_2)*(pixel_2-average_2);//计算y方差
variance2[offset]=temp;
temp=(pixel_1-average_1)*(pixel_2-average_2);
covariance[offset]=temp;// 计算协方差
}
最后,我们现在要将计算结果拷贝出来,就算完成要做的事情了。
先就这样大致的写一下,等有时间再补充。
GPU高性能计算-CUDA的更多相关文章
- win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)
win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0) 用vs 2015打开 编译Release ...
- GPU 高性能计算
背景 近日忽然想到,在CPU类型的服务器即使给到足够的运算资源,与GPU类型的服务器做运算来讲仍然是相差甚远,而本人有一台闲置的AMD vega8集显的电脑.想要用来做计算,来探究其与CPU运算的差别 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU线程以网格(grid)的方式组织,而每个网格中又包含若干个线程块,在G80/GT200系列中,每一个线程块最多可包含512个线程,Fermi架构中每个线程块支持高达1536个线程.同一线程块中的 ...
- CPU、GPU、CUDA、cuDNN
CPU擅长逻辑处理控制,GPU适合高强度的并行计算任务,为什么会存在这种差别?今天搜集了些相关资料,摘抄总结如下. 一.什么是GPU GPU这个概念是由Nvidia公司于1999年提出的.GPU是显卡 ...
- 显卡、GPU和CUDA简介
http://blog.csdn.net/wu_nan_nan/article/details/45603299 声明: 本文部分内容来自网络.由于知识有限,有错误的地方还请指正.本帖为自己学习过程的 ...
- 显卡、显卡驱动、显存、GPU、CUDA、cuDNN
显卡 Video card,Graphics card,又叫显示接口卡,是一个硬件概念(相似的还有网卡),执行计算机到显示设备的数模信号转换任务,安装在计算机的主板上,将计算机的数字信号转换成模拟 ...
- gpu命令cuda命令
# device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")os.envi ...
- Windows7 64位机上,OpenCV中配置CUDA,实现GPU操作步骤
原文地址:http://blog.csdn.net/haorenka2010/article/details/24385955 按语:首先感谢http://blog.csdn.net/fengbing ...
- [转]如何远程连接运行OpenGL/Cuda 等GPU程序
发现一篇神文,解决了困扰许久的远程桌面OpenGL/GPU 等问题... 原地址在这:http://www.tanglei.name/how-to-run-gpu-programs-using-rem ...
随机推荐
- webservice wsdl axis2报错 Provider com.bea.xml.stream.MXParserFactory not found
错误信息: Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com. ...
- NSSortDescriptor对象进行数组排序
//创建一个数组 NSArray *array = @[@"zhangsan", @"lisi", @"zhonger", @"z ...
- 开发《基于Arcgis Online的家政管理服务信息系统》随笔2
解决了三天的一个问题终于搞定了,和大家分享一下... 1.来点开胃菜, 在Sql server 2008中想要增加修改字段,有时不能修改,作如下操作即可搞定此问题, 启动MSSQL SERVER 2 ...
- 如何优雅的实现INotifyPropertyChanged接口
INotifyPropertyChanged接口在WPF或WinFrom程序中使用还是经常用到,常用于通知界面属性变更.标准写法如下: class NotifyObject : INotifyProp ...
- 使用python的redis 实现消息的pub/sub功能
直接上代码: 首先需要明确的是,客户端向服务端去发送消息,服务端只需要订阅是哪些各频道即可,然后客户端向这些个频道发送消息 在客户端的代码: #!/usr/bin/env python #coding ...
- 设置TextBox控件的TextMode属性
我想在程式代碼中將TextBox控件的TextMode属性设置為Password,寫成TextBox1.TextMode=MultiLine和TextBox1.TextMode="Multi ...
- JS学习之路(这个觉得写的很好,放在这里是方便查看)
总则-都是对象,都是引用 在接触js前用的比较多的是java,在刚开始接触js的时候,老实讲,我是有点崩溃的,相信许多像我一样从后端语言向js转的童鞋们肯定有一样的感受,这玩意儿太灵活了,好像怎么样都 ...
- Java 分页通用
1.定义分页模型:PageModel package com.common.page; import java.util.List; /** * 封装分页信息 * @author Administra ...
- Word2013创建目录
1.写好文档内容后,将光标移到标题行,点击“开始”里的“样式”->“创建样式”,为该标题创建一个新的样式,同时点击“修改”,在打开的窗口中选择左下方的“格式”,进行标题格式的调整.依次可设定子标 ...
- Myeclipse中打开接口实现类的快捷键
Myeclipse中打开接口实现类的快捷键-----Ctrl + T Myeclipse中 Open Type快捷键-----Ctrl + Shift + T