CUDA并行简单加法

  1. #include<stdio.h>
  2. #define N 7
  3. __global__ void add(int *a,int *b,int *c)
  4. {
  5. int tid=blockIdx.x;
  6. if(tid<N)
  7. c[tid]=a[tid]+b[tid];
  8. }
  9. int main()
  10. {
  11. int arr1[N],arr2[N];
  12. int sum[N];
  13. for(int i=0;i<N;i++)
  14. {
  15. arr1[i]=i;
  16. arr2[i]=i+1;
  17. }
  18. int *a;
  19. int *b;
  20. int *res;
  21. cudaMalloc((void**)&res,sizeof(int)*N);
  22. cudaMalloc((void**)&a,sizeof(int)*N);
  23. cudaMalloc((void**)&b,sizeof(int)*N);
  24. cudaMemcpy(a,arr1,sizeof(int)*N,cudaMemcpyHostToDevice);
  25. cudaMemcpy(b,arr2,sizeof(int)*N,cudaMemcpyHostToDevice);
  26. //定义N个并行块执行这个函数
  27. add<<<N,1>>>(a,b,res);
  28. //把结果从device拷贝回host
  29. cudaMemcpy(sum,res,sizeof(int)*N,cudaMemcpyDeviceToHost);
  30. for(int i=0;i<N;i++)
  31. printf("%d\n",sum[i]);
  32. cudaFree(a);
  33. cudaFree(b);
  34. //for test
  35. scanf("%d",&sum);
  36. }
时间: 2024-11-08 20:06:48

CUDA并行简单加法的相关文章

【CUDA并行编程之三】Cuda矢量求和运算

本文将通过矢量求和运算来说明基本的Cuda并行编程的基本概念.所谓矢量求和运算,就是两个数组数据中对应的元素两两相加,并将结果保存在第三个数组中.如下图所示: 1.基于CPU的矢量求和: 代码非常简单: #include<iostream> using namespace std; const int N =10; void add( int *a ,int *b , int *c) { int tid = 0; while(tid < N) { c[tid] = a[tid] + b[

【CUDA并行编程之七】数组元素之和

现在需要求得一个数组的所有元素之和,之前感觉似乎不太可能,因为每个线程只处理一个元素,无法将所有元素联系起来,但是最近学习了一段代码可以实现,同时也对shared memory有了进一步的理解. 一.C++串行实现 串行实现的方法非常之简单,只要将所有元素依次相加就能够得到相应的结果,实际上我们注重的不是结果,而是运行的效率.那么代码如下: array_sum.cc: #include<iostream> #include<stdio.h> #include "kmean

C语言 &#183; 简单加法

算法提高 简单加法 时间限制:1.0s   内存限制:256.0MB 问题描述 小于10的自然数中有四个数字能除尽3或5(3, 5, 6, 9),它们的和为23. 请计算所有小于1000的自然数中能除尽3或5的数字的合.然后使用标准输出cout,输出你的结果. 输入格式 无. 输出格式 一行一个整数,表示你的结果. 1 #include<stdio.h> 2 int main(){ 3 int sum=0; 4 for(int i=0;i<1000;i++){ 5 if(i%3==0 |

【CUDA并行程序设计系列(1)】GPU技术简介

http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUDA并行程序设计系列(2)]CUDA简介及CUDA初步编程 [CUDA并行程序设计系列(3)]CUDA线程模型 [CUDA并行程序设计系列(4)]CUDA内存 [CUDA并行程序设计系列(5)]CUDA原子操作与同步 [CUDA并行程序设计系列(6)]CUDA流与多GPU 关于CUDA的一些学习资料

jQuery实现简单加法,扩展函数

一. jQuery实现简单加法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Simple addition</title> </head> <body> <input type="text" value="" /> + <

CUDA 并行编程简介

前言 并行就是让计算中相同或不同阶段的各个处理同时进行.目前有很多种实现并行的手段,如多核处理器,分布式系统等.本专题的文章将主要介绍使用 GPU 实现并行的方法.参考本专题文章前请务必搭建好 CUDA 开发平台,搭建方法可以参考上一篇文章. GPU 并行的优缺点 优点: 1. 显存具有更大的内存带宽 2. GPU 具有更大量的执行单元 3. 价格低廉 缺点: 1. 对于不能高度并行化的工作,能带来帮助不大. 2. 对于绝大多数显卡型号,CUDA 仅支持 float 类型而不支持 double

算法训练 简单加法(基本型)

问题描述 首先给出简单加法算式的定义: 如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称其为简单的加法算式. 例如:i=3时,3+4+5=12,有一个进位,因此3+4+5不是一个简单的加法算式: 又如i=112时,112+113+114=339,没有在任意数位上产生进位,故112+113+114是一个简单的加法算式. 问题:给定一个正整数n,问当i大于等于0且小于n时,有多少个算式(i)+(i+1)+(i+2)是简单加法算式.其中n<

【CUDA并行编程之八】Cuda实现Kmeans算法

本文主要介绍如何使用CUDA并行计算框架编程实现机器学习中的Kmeans算法,Kmeans算法的详细介绍在这里,本文重点在并行实现的过程. 当然还是简单的回顾一下kmeans算法的串行过程: 伪代码: 创建k个点作为起始质心(经常是随机选择) 当任意一个点的簇分配结果发生改变时 对数据集中的每个数据点 对每个质心 计算质心与数据点之间的距离 将数据点分配到距其最近的簇 对每一个簇,计算簇中所有点的均值并将均值作为质心 我们可以观察到有两个部分可以并行优化: ①line03-04:将每个数据点到多

【CUDA并行编程之六】KNN算法的并行实现

之前写了两篇文章一个是KNN算法的C++串行实现,另一个是CUDA计算向量的欧氏距离.那么这篇文章就可以说是前两篇文章的一个简单的整合.在看这篇文章之前可以先阅读前两篇文章. 一.生成数据集 现在需要生成一个N个D维的数据,没在一组数据都有一个类标,这个类标根据第一维的正负来进行标识样本数据的类标:Positive and Negative. #!/usr/bin/python import re import sys import random import os filename = "in