实验思想:

在主机端将数据初始化后传输到设备端,设备端和主机端进行同样的操作对数据加1,然后将设备端的结果传输到主机,最后核对主机端的计算结果和设备端的计算结果是否一直。

 // incrementArray.cu

 #include <stdio.h>
#include <assert.h>
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h" /*
主机端函数
*/
void incrementArrayOnHost(float *a, int N)
{
int i;
for (i = ; i < N; i++) a[i] = a[i] + .f;
} /*
设备端函数(内核函数)
*/
__global__ void incrementArrayOnDevice(float *a, int N)
{
int idx = blockIdx.x*blockDim.x + threadIdx.x;
if (idx<N) a[idx] = a[idx] + .f;
} int main(void)
{
float *a_h, *b_h; //指向主机的指针
float *a_d; //指向设备的指针 int i, N = ;
size_t size = N*sizeof(float); //主机端申请内存
a_h = (float *)malloc(size);
b_h = (float *)malloc(size); //设备端申请存储
cudaMalloc((void **)&a_d, size); //主机端数据初始化
for (i = ; i < N; i++) a_h[i] = (float)i; //将数据从主机拷贝到设备:a_h-->a_d
cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice); //在主机端计算
incrementArrayOnHost(a_h, N); //在设备端计算
//块大小为4,Part 1 of 2. Compute execution configuration
int blockSize = ;
//如果N%blockSize取0则需要的块数为N / blockSize,否则再加一块已盛放余下的
int nBlocks = N / blockSize + (N%blockSize == ? : ); //Part 2 of 2. 调用内核函数,nBlocks为所需块数,blockSize为每一块大小
incrementArrayOnDevice << < nBlocks, blockSize >> > (a_d, N); //将数据从设备端传输到主机端并存储在b_h中
cudaMemcpy(b_h, a_d, sizeof(float)*N, cudaMemcpyDeviceToHost); //核对结果
for (i = ; i < N; i++) assert(a_h[i]== b_h[i]); //释放主机内存和设备端内存
free(a_h);
free(b_h);
cudaFree(a_d);
}

测试环境:

Win7+VS2013+CUDA6.5

下载链接

在主机端和设备端进行”incrementArray“并对结果进行比较的更多相关文章

  1. PHP项目实现手机端和PC端的页面切换

    目前访问页面的要切换成手机端和PC端,原理是通过对设备作出判断,显示不同的功能和页面. 如果手机端和PC端的功能结构不相同,一般会写两套系统,一套适用于PC端,一套适用于手机端. 如果功能相同,则只需 ...

  2. 配置puppet的主机端和客户端的自动认证

    配置puppet的主机端和客户端的自动认证 author:headsen  chen    2017-11-01  17:44:56 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,先在主机 ...

  3. 判断是手机端还是电脑端 isMobile()

    1.在PublicController控制器中写好判断手机端方法. <?php namespace Home\Controller; use Think\Controller; class Pu ...

  4. 腾讯首页分辨手机端与pc端代码

    腾讯首页分辨手机端与pc端代码 自己在做网页的时候在腾讯网首页借鉴的代码. 代码: <!-- 移动适配JS脚本 --> <script type="text/javascr ...

  5. PHP判断是手机端还是PC端

    function check_wap() { if (isset($_SERVER['HTTP_VIA'])) return true; if (isset($_SERVER['HTTP_X_NOKI ...

  6. HTML5中的audio在手机端和 微信端的自动播放

    再做H5页面的时候,发现audio在手机端和微信端添加了autoplay以后还是不可以自动播放,这是因为手机端为了节约流浪所设置的 通常解决方法是给一个交互事件,一定要是交互事件 标签:<aud ...

  7. gb28181的SPVMN测试环境搭建以及设备端和服务器的具体实现

    1.GB/T28181开发1之SPVMN(1.0.0.1)环境搭建 https://blog.csdn.net/hiwubihe/article/details/82910685 2.SPVMN 视频 ...

  8. CSS3及JS简单实现选项卡效果(适配手机端和pc端)

    想要适配手机端和pc端,有几种简单的方法,本人使用的是百分比分配的方法. *{ padding: 0; margin: 0; } body,html{ width: 100%; height: 100 ...

  9. 监听微信端,手机端,ios端的浏览器返回事件,pc端关闭事件

    直接上代码了,可以监听微信端,手机端,iOS端的浏览器返回事件,关闭事件不支持 当进入该页面,我们就给这个history压入一个本地的连接.当点击返回.后退及上一页的操作时,就进行监听,在监听代码中实 ...

随机推荐

  1. 《H5+移动应用实战开发》已出版

    <H5+移动应用实战开发>终于出版了,最近在忙着Vue和Webpack相关的前端书籍写稿.本书面向的读者为:从后端转前端,或零基础开始学习移动端开发的人.前后端完全分离的开发方式越来越成为 ...

  2. oracle基本命令

    1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 password: 新用户的密码也可以不创建新 ...

  3. Python网络爬虫(四)

    关于Robots协议 Robots协议也称为爬虫协议,是网络爬虫排除标准(Robots Exclusion Protocol),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取.因为我们如果无限 ...

  4. 联想电脑Fn+F6禁用触摸板功能不管用

    我的原因是电脑没有安装触摸板驱动,解决方法:去联想官网根据自己的主机编号下载适合自己的触摸板驱动,安装重启即可解决

  5. Java安装JDBC驱动教程(SQL Server系列)

    端口一般开放都没问题,默认设置就行,第一步下载JDBC,我自己在使用微软新的JDBC6.0的包的时候出错,后来就退回到JDBC4.0引用,完美使用. SQLJDBC4.0下载地址:点击下载 下载之后, ...

  6. Vue.extend动态注册子组件

    写本篇文章之前其实也关注过vue中的一个关于加载动态组件is的API,最开始研究它只是用来实现一个tab切换的功能,使用起来也蛮不错的. is 预期:string | Object (组件的选项对象) ...

  7. Python3学习实例上手(1)-----模拟登录认证

    要求:输入用户名.密码进行认证,认证成功则欢迎,若输错三次会锁定最后一次输入的用户 知识点归纳:字典操作(items()方法).字符串操作(如strip().split()等).文件读写(for li ...

  8. liunx下文件授权可执行权限chmod

    Cannot find ./catalina.sh The file is absent or does not have execute permission This file is needed ...

  9. 让zepto支持requirejs的方法

    window.Zepto = Zepto '$' in window || (window.$ = Zepto) if ( typeof define === "function" ...

  10. IOS防作弊产品技术原理分析

    由于时间和水平有限,本文会存在诸多不足,希望得到您的及时反馈与指正,多谢! 工具环境: iPhone 6.系统版本 10.1.1IDA Pro 7.0 0x00:防作弊产品介绍 1.由于IOS系统的不 ...