摘要:
如下图,将多个执行相同核函数的进程通过cuda流来使他们并发执行,提升效率 这很像cpu的流水线 想让下面这个核函数执行两次,每次都是不同的参数 我们需要用到cuda的流来并发的执行提升效率 __global__ void kernel( int *a, int *b, int *c ) { int 阅读全文
摘要:
如果不用原子操作,在进行计算直方图时会发生计算冲突 d_b[i]为h_a中数字i有几个 下面的代码将h_a全赋值为3,但d_b[3]却为1 #include<iostream> #include "cuda_runtime.h" #include "device_launch_parameters. 阅读全文
摘要:
这篇文章例子来自于 https://zhuanlan.zhihu.com/p/399150417 思想参考于我之前这篇博客 https://www.cnblogs.com/algoshimo/p/18063325 中若线程不够用的情况 # include "mpi.h" # include<stdi 阅读全文
摘要:
cuda内存模型其实概括来说就是下面三张图 双箭头代表可读可写,单箭头代表只读 1. local memory #include<iostream> #include "cuda_runtime.h" #include "device_launch_parameters.h" # define BL 阅读全文
摘要:
归:递归 约:减小 对于一个矩阵做求和运算 若串行求和的话需要o(n)的复杂度 但若向下图这样,俩俩并行相加,只需要o(logn)的复杂度 __global__ void reduceNeighbored(int* g_idata, int* g_odata, unsigned int n) //g 阅读全文
摘要:
虚函数 类的对象模型 class A{ public: void f1(){} void f2(){} virtual void f3(){} virtual void f4(){} }; class B{ public: void f1(){} void f2(){} }; class C{ }; 阅读全文
摘要:
不优化 对于一个m * n的矩阵a和一个n * k的矩阵b 因为最后得到一个m * k的矩阵c,那么我们可以分配m * k个线程。 在线程(i,j)里矩阵a的第i行和矩阵b的第j列进行点积运算得到c[i][j] #include<iostream> #include "cuda_runtime.h" 阅读全文
摘要:
左值和右值 一个值如果能取地址就是左值,反之就是右值 int a = 10 //a是左值,10是右值 左值引用 左值引用只能绑定左值 int l = 10; int& a = l; //正确 int& a = 10; //错误,10是右值,不能被左值引用绑定 const int& a = 10; / 阅读全文
摘要:
先看下为何需要cuda来实现gpu编程 如图所示,尽管现代cpu已经实现多核,但其和gpu相比还是要少得多。 所以一些重复的运算交给gpu,而一些逻辑运算交给cpu cpu控制逻辑,gpu来辅助运算 核函数 主机(host)通过核函数来操作gpu(device)辅助计算 需要注意的是只有核函数可以操 阅读全文
摘要:
若线程够用 # include<iostream> #include "cuda_runtime.h" #include "device_launch_parameters.h" # define n 10 //定义成宏而不是定义成全局变量 //是因为随便定义全局变量可能会导致在调用核函数的时候发生 阅读全文