经过大牛指导,把多个线程装入一个线程块中。计算速度大幅提高!
第一版代码每个线程块仅包含一个线程,第二版一个线程块包含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; }
相关推荐
### CUDA并行计算的应用研究 #### 一、引言 随着GPU(Graphics Processing Unit,图形处理器)计算能力的迅速提升,其应用范围已远远超出了传统的图形渲染领域。NVIDIA公司推出的计算统一设备架构(Compute Unified ...
根据提供的文件名“hw2_sol_2009F.pdf”和“hw1_sol_2009F.pdf”,我们可以推测这些习题可能覆盖了第一和第二学期的一部分内容,涵盖了并行计算的基础理论和实践应用。解题过程中,读者可能会接触到并行计算的基本...
这些内容不仅帮助开发者掌握CUDA的基础知识,更是深入理解如何在实际应用中充分利用GPU的并行计算能力。 了解了这些CUDA编程指南的知识点后,编程人员就能在基于GPU的并行计算上更加游刃有余,开发出高性能的应用...
CUDA是NVIDIA推出的并行计算平台及编程模型,它能够使开发人员利用GPU的强大计算能力。在构建基于CUDA的应用程序时,选择合适的构建系统至关重要。CMake作为一种跨平台的自动化构建系统,在CUDA项目中的应用非常广泛...
CUDA是由NVIDIA开发的一套用于GPU编程的并行计算框架,允许开发者利用GPU进行通用计算。每个CUDA版本都与特定的NVIDIA GPU驱动和硬件兼容,因此选择正确的CUDA版本至关重要。 `cp39-cp39`这部分是Python的兼容性...
CuPy是一个开源库,它为Python提供了与NumPy兼容的接口,但其计算是在NVIDIA的GPU上进行,利用了CUDA并行计算平台的强大性能。 CuPy是深度学习和高性能计算领域的重要工具,因为许多现代机器学习算法需要大量的数值...
CUDA是NVIDIA公司推出的一种并行计算平台和编程模型,主要应用于高性能计算、深度学习、图形处理等领域。CUDA-11.1是CUDA Toolkit的一个版本,它为开发者提供了在GPU上编写并执行计算密集型任务的工具和库。在这个...
CUDA是NVIDIA开发的一套并行计算平台和编程模型,允许开发者使用C、C++、Fortran等语言编写GPU并行程序。 `cp38`表示此包是为Python 3.8编译的,`cp38-cp38`代表它与Python 3.8的位数匹配(即64位)。`.whl`文件是...
在本示例代码“最新版CUDA7.5示例代码(1)”中,开发者提供了一个基础示例,帮助用户了解如何在CUDA环境中获取GPU的属性。这个代码适用于已经安装了Visual Studio 2013和CUDA 7.5开发工具的用户。 首先,让我们...
- **CUDA 的出现**:CUDA 的推出标志着 GPU 开始正式进入通用并行计算领域,它使得开发者能够更容易地利用 GPU 的强大并行计算能力。 ##### 1.2 CUDA:一种通用并行计算平台和编程模型 - **编程模型**:CUDA 提供了...
总之,CUDA 三次B样条插值是一种高效的数值计算技术,结合了B样条插值的平滑特性与CUDA并行计算的优势,适用于需要快速处理大量数据的场景。在实现和优化时,应关注内存管理、线程组织以及GPU计算的并行化策略。
- 可选的操作包括安装第三方库(6.3.1节)和安装cuda-gdb的源代码(6.3.2节)。 7. 高级设置 章节7可能提供了针对不同需求的高级配置方法,但具体内容未给出。 8. 常见问题解答(FAQ) 在文档末尾的FAQ部分,列举...
CUDA (Compute Unified Device Architecture) 是 NVIDIA 推出的一种并行计算平台和技术模型,能够利用 GPU 的强大计算能力来加速科学计算、图形处理等高性能计算任务。对于初学者来说,正确配置CUDA环境是顺利进行...
例如,第二章“编程模型”和第一章“导论”应该是核心内容的两个章节,其中“导论”可能会介绍CUDA的起源、重要性以及如何开始使用CUDA,而“编程模型”部分则会深入探讨CUDA的并行计算模型、内存管理、线程组织等...
第二部分为“细节”,全面描述了CUDA的各个方面,包括内存、流和事件、执行模型(包括CUDA 5.0中引入的动态并行性特性)、流多处理器(SM)的描述(包括SM 3.5架构的特性)、多GPU编程、文本处理等。此外,书中还...
2. **第2章:CUDA:一种通用并行计算平台和编程模型** - 阐述了CUDA的基本概念、架构特点以及如何将GPU作为一种通用并行计算平台来使用。 3. **第3章:可扩展的编程模型** - 讨论了CUDA编程模型的设计原则及其...
#### 第二章:安装CUDA开发工具 本章节将详细介绍如何在Windows环境下安装CUDA5.0。 ##### 2.1 验证是否具有CUDA兼容的GPU 在安装CUDA之前,首先需要确保您的计算机配备了CUDA兼容的GPU。可以通过访问NVIDIA官方...
CUDA是NVIDIA公司推出的一种并行计算平台和编程模型,主要应用于高性能计算、深度学习、图形渲染等领域。本文将详细讲解CUDA的配置过程,旨在帮助GPU初学者快速掌握CUDA环境的搭建,避免在探索过程中遇到的常见问题...
- **编译流程**:nvcc编译过程分为两个阶段,第一阶段将CUDA源代码转换为PTX(Parallel Thread Execution)中间代码,第二阶段将PTX代码编译为特定GPU架构的二进制代码。 - **二进制兼容性**:确保不同版本的CUDA...