简单的 CUDA 应用模板,白送的 Sample。

▶ 源代码

 //template_cpu.cpp
extern "C" void computeGold(float *, const unsigned int); void computeGold(float *idata, const unsigned int len)
{
const float f_len = static_cast<float>(len);
for (unsigned int i = ; i < len; ++i)
idata[i] *= f_len;
}
 // template.cu
#include <stdio.h>
#include <cuda_runtime.h>
#include "device_launch_parameters.h"
#include <helper_functions.h> extern "C" void computeGold(float *, const unsigned int); __global__ void testKernel(float *g_idata, float *g_odata)
{
extern __shared__ float sdata[];
const unsigned int tid = threadIdx.x; sdata[tid] = g_idata[tid];
__syncthreads();
sdata[tid] = (float)blockDim.x * sdata[tid];
__syncthreads();
g_odata[tid] = sdata[tid];
} int main()
{
printf("\n\tStart.\n"); cudaSetDevice();
StopWatchInterface *timer = ;
sdkCreateTimer(&timer);
sdkStartTimer(&timer); unsigned int num_threads = ;
unsigned int mem_size = sizeof(float) * num_threads;
float *h_idata, *h_odata, *d_idata, *d_odata;
h_idata = (float *)malloc(mem_size);
h_odata = (float *)malloc(mem_size);
cudaMalloc((void **) &d_idata, mem_size);
cudaMalloc((void **)&d_odata, mem_size);
for (unsigned int i = ; i < num_threads; ++i)
h_idata[i] = (float)i;
cudaMemcpy(d_idata, h_idata, mem_size, cudaMemcpyHostToDevice); testKernel << < dim3(, , ), dim3(num_threads, , ), mem_size >> > (d_idata, d_odata);
//getLastCudaError("Kernel execution failed");// 检查内核调用的报错结果
cudaMemcpy(h_odata, d_odata, sizeof(float) * num_threads, cudaMemcpyDeviceToHost);
cudaDeviceSynchronize(); sdkStopTimer(&timer);
printf("\n\tProcessing time: %f ms\n", sdkGetTimerValue(&timer));
sdkDeleteTimer(&timer); computeGold(h_idata, num_threads);
printf("\n\tFinish, return %s.\n", compareData(h_idata, h_odata, num_threads, 0.0f,0.0f) ? "Passed" : "Failed"); free(h_idata);
free(h_odata);
cudaFree(d_idata);
cudaFree(d_odata);
getchar();
return ;
}

▶ 输出结果:

    Start.

    Processing time: 101.169357 ms

    Finish, return Passed.

▶ 涨姿势:没有

0_Simple__template的更多相关文章

随机推荐

  1. Fzu软工第一次作业-准备篇

    (0)一些想说的话 我叫陈浩,是16级计算机一个很普通的学生.我是补选选软工实践这门课的.选软工实践这门课我想了很久.因为学长学姐告诉我这是一门很锻炼人又很辛苦的课程,需要大量的时间和精力.然而如今的 ...

  2. hangfire docker-compose 运行

    hangfire 是一款基于.net 的任务调度系统 docker-compose 文件 version: '3' services: hangfire: image: direktchark/han ...

  3. 六、物理数据模型(PDM逆向工程)

      物理数据模型PDM 物理数据模型(Physical Data Model,PDM):在数据库的逻辑结构设计好之后,就需要完成其物理设计,PDM就是为实现这一目的而设计的. 物理数据模型是以常用的D ...

  4. Postman 常用测试结果验证及使用技巧

    Postman的test本质上是JavaScript代码,通过我们编写测试代码,每一个tests返回True,或是False.每一个tests实际上就是一个测试用例 官方文档给出了很多验证方式,我们通 ...

  5. actor model vs tasked based parallizm

    举例子:计算pi actor model概念:一般有n个actor(task),和一个调度线程(本身也是一个actor)调度线程负责向每个task发送命令执行计算,以及接收每个task的结果并归并到一 ...

  6. MySQL中character set与collation的理解(转)

    character set和collation的是什么? character set即字符集 我们常看到的UTF-8.GB2312.GB18030都是相互独立的character set.即对Unic ...

  7. cookie、localStorage、sessionStorage 的生命周期

    生命周期 存储 生命周期 cookie 没有设置 expires 选项时,cookie 的生命周期仅限于当前会话中,关闭浏览器意味着这次会话的结束,所以会话 cookie 仅存在于浏览器打开状态之下. ...

  8. Thread.currentThread()与this的区别

    Thread.currentThread()与this的区别: Thread.currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引 ...

  9. JUC线程池之 ThreadPoolExecutor简介

    ThreadPoolExecutor简介 ThreadPoolExecutor是线程池类.对于线程池,可以通俗的将它理解为"存放一定数量线程的一个线程集合.线程池允许若个线程同时允许,允许同 ...

  10. linux 命令 随笔

    1 查找命令 which (寻找执行档) :这个指令是根据PATH这个环境变量所规范的路径,去搜寻执行档的档名,所以,重点是找出执行档而已,which 后面接的是完整档名,也就说执行文件 wherei ...