向量相加CUDA练习

 1 #include<string.h>
 2 #include<math.h>
 3 #include<stdlib.h>
 4 #include<stdio.h>
 5 #define N 100
 6
 7 __global__ void vecAdd(float* A,float* B,float* C){
 8     int i=threadIdx.x;
 9     if(i<N)
10         C[i]=A[i]+B[i];
11 }
12
13
14
15
16 int main(int argc,int argv){
17     size_t size=N*sizeof(float);
18     float *h_A,*h_B,*h_C;
19     h_A=(float*)malloc(size);
20     h_B=(float*)malloc(size);
21     h_C=(float*)malloc(size);
22     float* d_A;
23     cudaMalloc((void**)&d_A,size);
24     float* d_B;
25     cudaMalloc((void**)&d_B,size);
26     float* d_C;
27     cudaMalloc((void**)&d_C,size);
28     srand(time(NULL));
29     for(int i=0;i<N;i++){
30         h_A[i]=rand()%100;
31         h_B[i]=rand()%100;
32     }
33     cudaMemcpy(d_A,h_A,size,cudaMemcpyHostToDevice);
34     cudaMemcpy(d_B,h_B,size,cudaMemcpyHostToDevice);
35     int threadsPerBlock=256;
36     int threadsPerGrid=(N+threadsPerBlock-1)/threadsPerBlock;
37     vecAdd<<<threadsPerGrid,threadsPerBlock>>>(d_A,d_B,d_C);
38     cudaMemcpy(h_C,d_C,size,cudaMemcpyDeviceToHost);
39     for(int i=0;i<N;i++){
40         printf("%5.0d:%.0f+%.0f=%.0f\n",i,h_A[i],h_B[i],h_C[i]);
41     }
42     free(h_A);
43     free(h_B);
44     free(h_C);
45
46     cudaFree(d_A);
47     cudaFree(d_B);
48     cudaFree(d_C);
49 }
时间: 2024-11-18 18:34:20

向量相加CUDA练习的相关文章

tensorflow中一个矩阵和一个向量相加

import tensorflow as tf x=tf.constant([[1,2],[3,4]]) y=tf.constant([[1],[1]])#列向量 z=tf.constant([1,1])#行向量 u=x+y v=x+z print(u) print(v) tensorflow中矩阵可以和矢量相加, 输出结果: 原文地址:https://www.cnblogs.com/sinceret/p/11723227.html

cuda实现矩阵相加

cuda实现向量相加 博客最后附上整体代码 如果有说的不对的地方还请前辈指出, 因为cuda真的接触没几天 一些总结(建议看) cuda 并不纯GPU在运行程序, 而是 cpu 与 gpu 一起在运行程序, cpu负责调度, gpu 负责运算, cpu称为HOST , gpu 称为 DEVICE 记住三个东西 grid block thread ,关系分别是 grid 包含多个 block , block 包含多个 thread 一个block中thread个数选取一般为32的整数倍, 原因和w

CUDA从入门到精通

CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追求速度的应用来说无疑是一个理想的选择.还有不到一年毕业,怕是毕业后这些技术也就随毕业而去,准备这个暑假开辟一个CUDA专栏,从入门到精通,步步为营,顺便分享设计的一些经验教训,希望能给学习CUDA的童鞋提供一定指导.个人能力所及,错误难免,欢迎讨论. PS:申请专栏好像需要先发原创帖超过15篇...

cuda编程学习3——VectorSum

这个程序是把两个向量相加 add<<<N,1>>>(dev_a,dev_b,dev_c);//<N,1>,第一个参数N代表block的数量,第二个参数1代表每个block中thread的数量 tid=blockIdx.x;//blockIdx是一个内置变量,blockIdx.x代表这是一个2维索引 代码: /* ==========================================================================

CUDA从入门到精通 - Augusdi的专栏 - 博客频道 - CSDN.NET

http://blog.csdn.net/augusdi/article/details/12833235 CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示器的并行计算对于追求速度的应用来说无疑是一个理想的选择.还有不到一年毕业,怕是毕业后这些技术也就随毕业而去,准备这个暑假开辟一个CUDA专栏,从入门到精通,步步为营,顺便分享设计的一些经验教训,希望能给学习CU

BZOJ 2299 向量(裴蜀定理)

题意:给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y). 实际上前四个向量能拼出(ma,nb)(m%2=n%2).后四个向量拼出(xb,ya)(x%2=y%2). 这样可以枚举这四个未知数在模二意义下的解.这两个向量相加为(ma+xb,nb+ya). 对于ma+xb=X.根据系数的奇偶性,如果有系数为奇数,可使得等式两边都减去一个数使得系数都为偶

3D数学读书笔记——向量运算及在c++上的实现

本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 开始之前:接上上篇说的,张宇老师说过线性代数研究的就是向量.其实严谨的说,数学中专门研究向量的分之称作线性代数,线性代数是一个非常有趣并且应用广泛的研究 领域,但它与3D数学关注的领域并不相同.3D数学主要关心向量和向量运算的几何意义. 零向量:任何集合,都存在 the additive identity el

一种另类的计算向量旋转公式(复杂慎用)

一般来说,我们解决向量旋转问题一般要么是用旋转矩阵,要么是用四元数.但很早以前我从网上找了一种比较另类的函数,当时也没有深究.最近又把这个函数拿出看看,仔细一琢磨,发现真的很另类.这里分享一下,就当是扩展一下思维.我给这种方法起个名字——向量累加法. 这个方法的公式是这样的,P'=P·cosθ + (A×P)sinθ +A(A·P)(1 - cosθ).这种公式任谁第一眼看到都会摸不着头脑,我们首先来将公式换一个写法: 图1 这个公式中|A|=1.为什么这样变换呢?因为P'正好是三个向量相加,后

R简单算术操作符&lt;函数和+-*/&gt;,缺失值,正则向量,向量运算&lt;索引&gt;(二)

赋值操作 x <- c(1,2,3); x = c(1,2,3); c(1,2,3) -> x; assign("x", c(1,2,3)); 这四种形式在大部分时候都能达到一致的效果.推荐使用第一种 1:向量的定义 一串有序数值构成的数值向量(vector) ,创建一个向量我们使用c(num1,num2,num3); 在 R 环境里面,单个的数值也是被看作长度为1的向量. 1.1 向量的基本运算 在算术表达式中使用向量将会对该向量的每一个元素都进行同样算术运算.出现 在同