`
暴风雪
  • 浏览: 388800 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

CUDA并行计算基础代码-第二版

    博客分类:
  • cuda
 
阅读更多

经过大牛指导,把多个线程装入一个线程块中。计算速度大幅提高!

第一版代码每个线程块仅包含一个线程,第二版一个线程块包含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;
}

 

26
12
分享到:
评论

相关推荐

    CUDA并行计算的应用研究.pdf

    ### CUDA并行计算的应用研究 #### 一、引言 随着GPU(Graphics Processing Unit,图形处理器)计算能力的迅速提升,其应用范围已远远超出了传统的图形渲染领域。NVIDIA公司推出的计算统一设备架构(Compute Unified ...

    并行计算——结构·算法·编程 习题答案

    根据提供的文件名“hw2_sol_2009F.pdf”和“hw1_sol_2009F.pdf”,我们可以推测这些习题可能覆盖了第一和第二学期的一部分内容,涵盖了并行计算的基础理论和实践应用。解题过程中,读者可能会接触到并行计算的基本...

    CUDA_C_Programming_Guide.pdf

    这些内容不仅帮助开发者掌握CUDA的基础知识,更是深入理解如何在实际应用中充分利用GPU的并行计算能力。 了解了这些CUDA编程指南的知识点后,编程人员就能在基于GPU的并行计算上更加游刃有余,开发出高性能的应用...

    CUDA 项目cmake编译

    CUDA是NVIDIA推出的并行计算平台及编程模型,它能够使开发人员利用GPU的强大计算能力。在构建基于CUDA的应用程序时,选择合适的构建系统至关重要。CMake作为一种跨平台的自动化构建系统,在CUDA项目中的应用非常广泛...

    PyPI 官网下载 | cupy_cuda111-9.3.0-cp39-cp39-manylinux1_x86_64.whl

    CUDA是由NVIDIA开发的一套用于GPU编程的并行计算框架,允许开发者利用GPU进行通用计算。每个CUDA版本都与特定的NVIDIA GPU驱动和硬件兼容,因此选择正确的CUDA版本至关重要。 `cp39-cp39`这部分是Python的兼容性...

    Python库 | cupy_cuda80-6.1.0-cp36-cp36m-win_amd64.whl

    CuPy是一个开源库,它为Python提供了与NumPy兼容的接口,但其计算是在NVIDIA的GPU上进行,利用了CUDA并行计算平台的强大性能。 CuPy是深度学习和高性能计算领域的重要工具,因为许多现代机器学习算法需要大量的数值...

    cuda-11.1.

    CUDA是NVIDIA公司推出的一种并行计算平台和编程模型,主要应用于高性能计算、深度学习、图形处理等领域。CUDA-11.1是CUDA Toolkit的一个版本,它为开发者提供了在GPU上编写并执行计算密集型任务的工具和库。在这个...

    PyPI 官网下载 | cupy_cuda102-8.4.0-cp38-cp38-win_amd64.whl

    CUDA是NVIDIA开发的一套并行计算平台和编程模型,允许开发者使用C、C++、Fortran等语言编写GPU并行程序。 `cp38`表示此包是为Python 3.8编译的,`cp38-cp38`代表它与Python 3.8的位数匹配(即64位)。`.whl`文件是...

    最新版CUDA7.5示例代码(1)

    在本示例代码“最新版CUDA7.5示例代码(1)”中,开发者提供了一个基础示例,帮助用户了解如何在CUDA环境中获取GPU的属性。这个代码适用于已经安装了Visual Studio 2013和CUDA 7.5开发工具的用户。 首先,让我们...

    CUDA 6.0 Programming Guide

    - **CUDA 的出现**:CUDA 的推出标志着 GPU 开始正式进入通用并行计算领域,它使得开发者能够更容易地利用 GPU 的强大并行计算能力。 ##### 1.2 CUDA:一种通用并行计算平台和编程模型 - **编程模型**:CUDA 提供了...

    cuda 三次B样条插值

    总之,CUDA 三次B样条插值是一种高效的数值计算技术,结合了B样条插值的平滑特性与CUDA并行计算的优势,适用于需要快速处理大量数据的场景。在实现和优化时,应关注内存管理、线程组织以及GPU计算的并行化策略。

    CUDA_Installation_Guide_Linux.pdf

    - 可选的操作包括安装第三方库(6.3.1节)和安装cuda-gdb的源代码(6.3.2节)。 7. 高级设置 章节7可能提供了针对不同需求的高级配置方法,但具体内容未给出。 8. 常见问题解答(FAQ) 在文档末尾的FAQ部分,列举...

    CUDA的配置与入门

    CUDA (Compute Unified Device Architecture) 是 NVIDIA 推出的一种并行计算平台和技术模型,能够利用 GPU 的强大计算能力来加速科学计算、图形处理等高性能计算任务。对于初学者来说,正确配置CUDA环境是顺利进行...

    CUDA编程5.0版本

    例如,第二章“编程模型”和第一章“导论”应该是核心内容的两个章节,其中“导论”可能会介绍CUDA的起源、重要性以及如何开始使用CUDA,而“编程模型”部分则会深入探讨CUDA的并行计算模型、内存管理、线程组织等...

    The CUDA Handbook: A Comprehensive Guide to GPU Programming

    第二部分为“细节”,全面描述了CUDA的各个方面,包括内存、流和事件、执行模型(包括CUDA 5.0中引入的动态并行性特性)、流多处理器(SM)的描述(包括SM 3.5架构的特性)、多GPU编程、文本处理等。此外,书中还...

    2024.1.8新版CUDA 官方文档CUDA_C_Programming_Guide.pdf

    2. **第2章:CUDA:一种通用并行计算平台和编程模型** - 阐述了CUDA的基本概念、架构特点以及如何将GPU作为一种通用并行计算平台来使用。 3. **第3章:可扩展的编程模型** - 讨论了CUDA编程模型的设计原则及其...

    CUDA5.0在windows环境安装指导

    #### 第二章:安装CUDA开发工具 本章节将详细介绍如何在Windows环境下安装CUDA5.0。 ##### 2.1 验证是否具有CUDA兼容的GPU 在安装CUDA之前,首先需要确保您的计算机配备了CUDA兼容的GPU。可以通过访问NVIDIA官方...

    CUDA.rar_cuda

    CUDA是NVIDIA公司推出的一种并行计算平台和编程模型,主要应用于高性能计算、深度学习、图形渲染等领域。本文将详细讲解CUDA的配置过程,旨在帮助GPU初学者快速掌握CUDA环境的搭建,避免在探索过程中遇到的常见问题...

    风辰翻译Cuda3.0 Programming Guide

    - **编译流程**:nvcc编译过程分为两个阶段,第一阶段将CUDA源代码转换为PTX(Parallel Thread Execution)中间代码,第二阶段将PTX代码编译为特定GPU架构的二进制代码。 - **二进制兼容性**:确保不同版本的CUDA...

Global site tag (gtag.js) - Google Analytics