#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(Compute Unified Device Architecture)是NVIDIA推出的一种通用并行计算架构,它使得开发者可以利用NVIDIA的GPU来执行更为通用的计算任务,而不...
要使用CUDA并行计算,首先需要拥有一块支持CUDA功能的NVIDIA GPU。这些GPU通常具有CUDA核心,可进行并行计算。此外,确保你的电脑主板支持PCI Express插槽,因为大多数现代GPU都是通过这个接口连接到主板的。 三、...
理解并掌握CUDA编程需要对计算机体系结构、并行计算原理以及C/C++编程有一定基础。一旦掌握了这些知识,CUDA编程可以让你的代码在GPU上实现惊人的性能提升,尤其在处理大量数据或执行计算密集型任务时。通过阅读...
3. 性能分析:比较串行与并行求和的执行时间,展示CUDA并行计算的加速效果。 4. 结果验证:可能包括了错误检查和结果的正确性验证,以确保并行计算的正确性。 5. 结论与讨论:总结实验结果,探讨可能的优化方向和...
CUDA并行计算是利用GPU的大量核心来执行并行任务,从而大幅提升计算速度。下面将详细阐述CUDA的核心概念、并行计算流程以及相关知识点。 1. **CUDA架构**:CUDA架构包括GPU、CUDA核芯、流式多处理器(SM)、线程块...
### CUDA并行计算的应用研究 #### 一、引言 近年来,随着图形处理器(GPU)技术的迅猛发展,GPU已不仅仅是用于图形渲染的专用处理器,它还具备了强大的通用计算能力。NVIDIA公司推出的计算统一设备架构(Compute ...
这些核心数量众多,为并行计算提供了硬件基础。 2. **线程和线程块(Threads and Thread Blocks)**:CUDA编程模型将计算任务划分为线程,线程组织成二维或三维的线程块。线程块内的线程可以并行执行,线程块之间也...
四、CUDA并行计算模式 1. 数据并行:将大任务分解为多个小任务,每个任务由一个线程处理。 2. 分支并行:处理具有多个可能路径的问题,每个分支由一组线程独立执行。 3. 异步计算:同时处理多个任务,利用GPU的并发...
CUDA(Compute Unified Device Architecture)是NVIDIA推出的一种用于GPU(Graphics Processing Unit)并行计算的平台和编程模型,它使得开发者可以直接利用GPU的强大计算能力来处理高性能计算、科学计算、机器学习...
CUDA并行计算的优势在于,它能将计算密集型任务转化为数据并行,从而极大地提高了计算效率。 结合MPI和CUDA,我们可以构建一个混合并行计算模型,即MPI+CUDA。在这种模型中,主机CPU通过MPI进行任务调度和数据交换...
CUDA并行程序设计 GPU编程指南-中文英文高清完整版(各500+页)
本书介绍了CUDA编程的核心知识,始于运行CUDA样例程序,快速引导读者构建自己的代码。书中配备的实践项目用以加深和巩固对CUDA编程的理解。
- 在这个压缩包中的"并行计算代码"文件,可能包含了上述概念的具体实现,例如使用OpenMP进行循环并行化、利用MPI进行节点间通信,或者是基于CUDA的GPU编程示例。 通过分析这些源代码,我们可以深入理解并行计算的...
### CUDA并行计算的应用研究 #### 一、引言 随着GPU(Graphics Processing Unit,图形处理器)计算能力的迅速提升,其应用范围已远远超出了传统的图形渲染领域。NVIDIA公司推出的计算统一设备架构(Compute Unified ...
CUDA(Compute Unified Device Architecture)是由NVIDIA公司推出的一种...在进行CUDA并行程序设计时,应注重理解并行计算的原理,掌握内存管理、同步机制以及性能优化策略,这样才能编写出高效、可靠的GPU应用程序。
CUDA(Compute Unified Device Architecture)是NVIDIA公司推出的一种并行计算平台和编程模型,它允许开发者利用GPU(Graphics Processing Unit)的强大计算能力进行高性能计算。本资料包含《CUDA并行程序设计 GPU...
CUDA(Compute Unified Device Architecture)是NVIDIA推出的一种并行计算平台和编程模型,它允许开发者利用GPU的强大计算能力来加速计算密集型任务,如图像处理。在这个场景中,我们将深入探讨如何使用CUDA实现彩色...
3. **CUDA并行计算**:书中会深入探讨如何利用GPU的并行性,包括线程同步、原子操作和同步函数(如`cudaThreadSynchronize()`)的使用,以确保正确性和性能。 4. **内存管理**:在GPU编程中,内存管理是至关重要的...
GPU并行计算与CUDA编程是计算机科学领域中的一个重要主题,主要关注如何利用图形处理单元(GPU)的强大计算能力来加速高性能计算任务。CUDA(Compute Unified Device Architecture)是NVIDIA公司推出的一种并行计算...