摘要:
归:递归 约:减小 对于一个矩阵做求和运算 若串行求和的话需要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 //定义成宏而不是定义成全局变量 //是因为随便定义全局变量可能会导致在调用核函数的时候发生 阅读全文
摘要:
1. 线程库的使用 创建进程 # include<iostream> # include<thread> //线程库头文件 using namespace std; void thread_1() { cout<<"子线程1"<<endl; } int thread_2(int x) { cout< 阅读全文
摘要:
引入 lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数 下面这行代码就是一个最简单的lambda表达式,最后输出为3 auto f = [](int x , int y)->int{return x+y;}; cout<<f(1,2); 我们来解析一下lambda表达式 a 阅读全文
摘要:
函数指针 int f(int x,int y) { return x*x+y*y; } int main() { int (*p) (int , int ); //括号里也可以写成(int x , int y) p = f; std::cout<<p(1,2); //输出为5 return 0; } 阅读全文