#include<cuda_runtime.h>
#include<windows.h>
#include<iostream>
using namespace std;
const int nMax = 30000;
__global__ void addKernel(float *aaa,float *bbb, float *ccc)
{
int i = blockIdx.x;
for (int j = 0; j<500; j++)ccc[i] = aaa[i] * bbb[i];
}
void add(float *a, float *b,float *c,int i){
for (int j = 0;j<500;j++)c[i] = a[i] * b[i];
//return ;
}
int main(){
float a[nMax], b[nMax], c[nMax];
float *devA, *devB, *devC;
clock_t startT, endT;
for (int i = 0; i < nMax; i++){
a[i] = i*1.00001092653;
b[i] = i*i;
}
startT = clock();
cudaMalloc((void**)&devA, nMax*sizeof(float));
cudaMalloc((void**)&devB, nMax*sizeof(float));
cudaMalloc((void**)&devC, nMax*sizeof(float));
endT = clock();
cout << "分配设备空间耗时 " << endT - startT << "ms"<<endl;
startT = clock();
cudaMemcpy(devA,a,nMax*sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpy(devB, b, nMax*sizeof(float), cudaMemcpyHostToDevice);
endT = clock();
cout << "数据从主机写入设备耗时 " << endT - startT << "ms" << endl;
startT = clock();
cudaEvent_t start1;
cudaEventCreate(&start1);
cudaEvent_t stop1;
cudaEventCreate(&stop1);
cudaEventRecord(start1, NULL);
addKernel<<<nMax,1>>>(devA, devB, devC);
cudaEventRecord(stop1, NULL);
cudaEventSynchronize(stop1);
float msecTotal1 = 0.0f;
cudaEventElapsedTime(&msecTotal1, start1, stop1);
cout << msecTotal1 << "ddd" << endl;
endT = clock();
cout << "计算耗时 " << endT - startT << "ms" << endl;
startT = clock();
cudaMemcpy(c, devC, nMax*sizeof(float), cudaMemcpyDeviceToHost);
endT = clock();
cout << "数据从设备写入主机耗时 " << endT - startT << "ms" << endl;
cout <<"GPU计算结果 "<< c[nMax - 1] << endl;
for (int i = 0; i < nMax; i++){
a[i] = i*1.00001092653;
b[i] = i*i;
c[i] = 0;
}
startT = clock();
for (int i = 0; i < nMax; i++){
add(a, b, c, i);
}
endT = clock();
cout << "CPU计算耗时 " << endT - startT << "ms" << endl;
cout << "CPU计算结果 " << c[nMax - 1] << endl;
cin >> a[0];
return 0;
}
分享到:
相关推荐
并行计算,使用CUDA计算数组求和,包含实验报告和源代码
CUDA开发者社区技术总监亲自撰写,英伟达中国首批CUDA官方认证工程师翻译,译著双馨 全面、详实地讲解了CUDA并行程序设计的技术知识点和编程方法,包含大量实用代码示例,是目前学习CUDA编程最权威的著作之一
通过归并的思想,利用nvidia的cuda工具,对求和的算法进行gpu并行计算操作,使得求和的效率大大提高。
本书介绍了CUDA编程的核心知识,始于运行CUDA样例程序,快速引导读者构建自己的代码。书中配备的实践项目用以加深和巩固对CUDA编程的理解。
滑动卷积矩阵乘计算非常的费时,完成一个卷积神经网络模型的训练往往需要消耗大量的时间,针对这个问题,本次实验将构建一个基于CUDA架构的编程环境,采用CUDA/C++编程实现二维的卷积的并行计算,通过对比GPU实现与...
GPU并行计算与CUDA编程(2017) 视频地址:https://www.bilibili.com/video/av52338886
二、cuda与OpenCV结合方法 三、代码实例:图像均值滤波和图像反色 3.1 代码 3.2 代码说明 3.3 网格大小与线程块大小的确定 3.3.1 网格与线程块大小的限制 3.3.2 如何确定网格大小与线程块大小? 3.4 并行与串行的...
本文通过cuda实现计算向量a(n维)到矩阵b(n*n)的欧式距离,将结果输出到向量c(n维)中。本文主要采用cuda+c语言实现,代码经过调试。
彩色图像转灰度图像的CUDA源代码,Cpu: Intel® Core™ Duo CPU @1.80GHz 1.80GHz,优化前14ms/f; 优化后:4ms/f。
《GPU并行计算与CUDA编程》课程视频和代码
cuda程序示例代码,包括CUDA入门代码,CUDA进阶代码和CUDA实用代码,为《并行计算教程(第1版)》的配套代码
cuda入门示例代码
这是我自己编写的最典型的的蚁群算法求解TSP问题CUDA程序,全是由C语言写成,还没有进行并行化,看到网上有很多关于C语言的蚁群算法程序,但是下载后资源都不是很全,无法运行,本程序可以直接运行,已经编译成功,...
CUDA by example代码实例
英伟达cuda认证通过代码
《CUDA By Example》中文译名《GPU高性能编程CUDA实战》是研究GPGPU异构并行计算非常不错的工具书。书中给出的代码,非常个别的地方有失误,但是都有人为标注了,而且对不同的编程工具可能需要自己配置链接库。...
CudaPy是一个运行时库,可让Python程序员访问NVIDIA的CUDA并行计算API。 它使您可以用Python编写CUDA内核,并提供了一个不错的API来调用它们。 它通过将用Python编写的CUDA内核转换为C ++,然后使用nvcc JIT编译来...
:high_voltage: Ltgpos Ltgpos是基于网格搜索的并行闪电定位算法,具有CUDA并行计算加速功能。安装编译.so动态链接库,并加入库环境路径配置tools/pathcfg.sh中的路径,并运行以下Shell脚本bash tools/build.sh用法...
// 并行计算体现在次,多个thread并行进行 // 每个thread计算一行与一列的乘积 for (int k = 0; k ; ++k) { float Melement = M.elements[ty * M.pitch + k]; float Nelement = Nd.elements[k * N.pitch + tx...
CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 该资源主要由Introduction、Utilities、Concepts_and_Techniques、CUDA_Features、CUDA_Libraries等6个模块组成, 用于进行CUDA...