经过大牛指导,把多个线程装入一个线程块中。计算速度大幅提高!
第一版代码每个线程块仅包含一个线程,第二版一个线程块包含501个线程。
第一版GPU计算速度和CPU差不多,改进之后GPU运行速度达到了CPU的50倍!
#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; int i = threadIdx.x + blockIdx.x*blockDim.x; ccc[i] = 0; if (i < nMax)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]; } 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.010923; b[i] = 2.13*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<<<60,501>>>(devA, devB, devC); cudaEventRecord(stop1, NULL); cudaEventSynchronize(stop1); float msecTotal1 = 0.0f; cudaEventElapsedTime(&msecTotal1, start1, stop1); //cout << msecTotal1 << "ddd" << endl; endT = clock(); cout << "GPU计算耗时 " << msecTotal1 << "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.010923; b[i] = 2.13*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; }
相关推荐
NVIDIA_CUDA-python系列课程-并行计算基础 ---矩阵计算以及共享内存
cuda并行计算试题,内含大量与并行计算相关的习题,对并行计算感兴趣的可以看看
cuda并行计算 cuda并行计算与应用研究的文章 希望对大家有帮助
win7下CUDA并行计算加速方案 win7下CUDA并行计算加速方案 win7下CUDA并行计算加速方案
第2章 使用GPU理解并行计算 第3章 CUDA硬件概述 第4章 CUDA环境搭建 第5章 线程网格、线程块以及线程 第6章 CUDA内存处理 第7章 CUDA实践之道 第8章 多CPU和多GPU解决方案 第9章 应用程序性能优化 第10章 ...
CUDA并行程序设计 GPU编程指南-中文英文高清完整版(各500+页)
CUDA Programming,中文名:CUDA并行程序设计-GPU编程指南 2014年 含书签,高清。
CUDA并行计算入门,简单介绍了CUDA并行计算的过程
pycuda-2021.1+cuda102-cp37-cp37m-win_amd64
CUDA并行程序设计GPU编程指南(包含原书代码book.h CPUBitmap.h等)
pycuda-2021.1+cuda102-cp38-cp38-win_amd64.whl
tensorflow并行计算库文件nccl,nccl-repo-ubuntu1604-2.4.8-ga-cuda9.0_1-1_amd64.deb 适用于16.04ubuntu系统
CUDA_Introduction高性能计算的新发展--基于图形处理器的并行计算及CUDA编程
百度网盘提供,包含以下三种版本的cuda toolkit和对应的cudnn版本,适合windows10系统。 cudnn-10.1-windows10-x64-v7.6.4.38.zip cuda_10.1.243_426.00_win10.exe cudnn-11.0-windows-x64-v8.0.4.30.zip cuda_...
pycuda-2020.1+cuda102-cp36-cp36m-win_amd64
GPU并行计算与CUDA编程(2017) 视频地址:https://www.bilibili.com/video/av52338886
并行计算,使用CUDA计算数组求和,包含实验报告和源代码
pycuda-2020.1+cuda101-cp38-cp38-win_amd64
pycuda-2019.1.2+cuda101-cp35-cp35m-win_amd64
CUDA并行计算的应用研究