CUDA C
波雅_汉库克
这个作者很懒,什么都没留下…
展开
-
C++和cuda C的结合发挥各自的优点
本次实验主要是实现vector复制到cuda中,一般教材上都是使用指针,很是繁琐,而且STL优秀的算法不太容易使用。为了实现C++ STL的优秀算法和cuda的并行计算能力,二设计的本次实验。一下代码仅供提供思路。 #include <cuda_runtime.h>#include <iostream>#include <vector>#incl...原创 2018-10-28 21:58:20 · 1178 阅读 · 1 评论 -
cuda流,多GPU编程,纹理操作
流:一系列将在GPU上按顺序执行的操作步骤:定义流:cudaStream_t s1;创建流:cudaStreamCreate(&s1);销毁流:cudaStreamDestory(s1);多GPU编程统一地址:CPU和GPU分配使用统一的虚拟地址空间驱动/设备可以判断数据所在的地址GPU可以引用指针 另一个GPU上的地址Host上的地址...原创 2019-05-30 21:36:07 · 1793 阅读 · 0 评论 -
C++向上取整和向下取整函数,cuda也可以用
C/C++ 取整函数ceil(),floor()在cuda核函数中也可以用.但是cuda中要以%f的格式输出.int型能转换成double型,但是double还不能转换成int型.C/C++ 取整函数ceil(),floor()#include <math.h>double floor(doublex);float floorf(float x); long ...原创 2019-05-29 09:56:54 · 5277 阅读 · 2 评论 -
如何优雅的清空申请的显存
今天用到一个清空显存的函数cudaMemset,这个函数和memset函数用法很类似,而且,memset函数是可以在核函数中直接使用的.cudaMalloc((void**)&dVectorEx,sizeof(double) * 10);cudaMemset(dVectorEx,0,sizeof(double) * 10);举个栗子:第一行代码是我申请了10个double类...原创 2019-06-12 22:35:09 · 2471 阅读 · 0 评论 -
cuda输出的相同显存地址的不同的值
最近有一件事非常诡异,那就是我用cuda并行计算了一个向量,当发现一个问题那就是输出相同数组地址,但是值是不同的.上图:代码:结果:可以看到dVectorCON 的地址都是49154560但是一前一后的值是不同的.7是对的.这个问题困扰我很久,之前解决办法值在之前先输出几次,或者地址输出和数值输出点换一个位置就可以了.后来我发现其实我输出的方式不对,我按线程块...原创 2019-06-14 09:31:29 · 471 阅读 · 0 评论 -
转载一篇关于cuda-gdb的文章
将程序编译成可调式版本 nvcc –g –G program.cu –o program -g 表示将CPU代码(host)编译成可调式版本,-G表示将GPU代码(kernel)编译成可调式版本。 进入调试器 cuda-gdb program 调试指令 指令 简写 指令说明 举例 file exe_name ...转载 2019-06-04 09:11:16 · 225 阅读 · 0 评论 -
一个用GPU写的一维卷积
代码说明:本次代码采用GPU运算一维卷积.其中你需要输入两个数据,第一个是n是一位数据长度,一个是m卷积因子长度,代码会随机生成两个数组用于计算卷积.代码思路:在CPU中生成数据复制到GPU中,其中GPU有两个函数,一个是__global__ void juanji(int *d_a,int *d_b,int *d_c,int *d_data,int n, int m),这个函数就是核函数...原创 2019-08-18 19:35:23 · 780 阅读 · 0 评论 -
一个用GPU写的数组之间的求和
代码说明:输入一个数,这个数就是数组的长度,和之前的数组求和不同,这个是一个数组之间的求个,例如a[10];求这10个数的和.代码会随机产生n个数.然后求出这n个数的和.代码思路很简单:就是运行结果:代码:#include <cuda_runtime.h>#include <iostream>#include <stdlib.h>...原创 2019-08-18 21:13:21 · 545 阅读 · 0 评论 -
转载一篇从知乎看到比较好的文章(cuda笔记)
CUDA一些小知识整理之前写过一篇《CUDA C Programming Guide》(《CUDA C 编程指南》)导读,整理了一下基础的知识,但没有真正实践过最近由于工作需要使用到CUDA,因此需要再看一些书和博文,补一些知识。现将这些知识陈列在这里。参考内容:CUDA 基础知识博客整理CUDA错误码打印char* cudaGetErrorString(cudaErro...转载 2019-08-15 10:30:45 · 2113 阅读 · 0 评论 -
一个使用C++模板实现的GPU向量相加
代码实现:使用模板实现GPU不同的类型相加 int double等的相加.和之前的一个用GPU写的数组加法的代码不同的地方就是加入了函数模板.修改的地方只有两处一处是:另外一处是:这样就可以实现同一个核函数实现不同类型的数据相加,模板的功能功能很是强大.这里只用了冰山一角.以后需要多使用模板发挥C++ 语言的优势....原创 2019-08-22 09:53:46 · 342 阅读 · 0 评论 -
cuda代码GPU代码使用类
本次代码实现GPU代码中使用类语法.经过多次实验,发现类语法GPU是可以使用的但是是有条件的.比如__global__ 修饰的函数是不能写在类中的.__device__是可以写在类中的而且__device__是不能开线程的.例如: __device__ void add(int igdx) { printf("hello GPU = %d\n",igdx); }add...原创 2019-08-22 10:21:44 · 2310 阅读 · 2 评论 -
一个用GPU计算的向量内积代码
代码说明:运行代码后会提示输入一个矩阵维数:输入维数之后代码会自动生成一个向量,然后对应相乘相加,采用GPU多线程计算得到的.运行结果:#include <cuda_runtime.h>#include <iostream>__global__ void InnerProduct(int *d_a,int *d_b,int *d_c,int n...原创 2019-08-17 17:36:09 · 524 阅读 · 0 评论 -
一个用GPU写的数组加法
代码说明:输入运行代码后需要输入数组长度,代码会自动生成两个数组,然后求出数组对应相加的值存到另外一个数组中.运行结果:#include <cuda_runtime.h>#include <iostream>__global__ void add(int *d_a,int *d_b,int *d_c,int n){ int idx = thre...原创 2019-08-17 17:41:01 · 343 阅读 · 0 评论 -
一个用GPU写的矩阵转置
代码说明:输入一个数n,代码会随机产生一个n*n的矩阵,这个数为矩阵的维度,为了方便起见,这个矩阵为n*n的方阵.运行结果:#include <cuda_runtime.h>#include <iostream>#include <stdlib.h>#include <time.h>__global__ void zhua...原创 2019-08-18 09:35:47 · 439 阅读 · 0 评论 -
cuda高效策略,加载方式,内存使用,同步操作
高效策略1.公式1.1最大化计算强度:Math是数学计算量,Memory是每个线程的内存。1.最大化每个线程的计算量2.最小化每个线程个的内存读取速度每个线程读取的数据少 每个线程读取的速度快 -> 1.本地内存 > 共享内存 > > 全局内存 2.合并全局内存1.2 合并全局内存好的内存是内存是连续的 一般的内存存储是内...原创 2019-05-18 10:14:35 · 912 阅读 · 0 评论 -
核函数中使用C++类
如何在核函数中使用类,之前我一直在核函数中写的是C语言的代码,由于C++ 的优势,我不得不尝试在核函数中使用C++,之前听说在cuda5.5之后就已经支持C++ 语言了,由于初学cuda的时候写了一个hello GPU 的代码,一直编译不过去。(不知道为什么核函数不能使用cout,如果有大牛知道,请赐教小弟)一度让我以为GPU是不支持C++ 的(本人写单片机代码出身),以为cuda和单片机差不多只...原创 2019-05-17 17:07:25 · 1490 阅读 · 2 评论 -
第一个cuda代码
这是第一个cuda代码的实现。 #include <iostream> #include <cuda_runtime.h> #include <stdio.h> __global__ void print() { //std::cout << "hello GPU!!"<< std::endl; p...原创 2018-10-28 22:00:41 · 1231 阅读 · 0 评论 -
编写cuda代码查看自己机器的显卡信息
代码如下:cudaDeviceProp 是一个结构体,一些参数就是cudaDeviceProp 结构体中的参数。cudaGetDeviceProperties(&cudade,0);这个函数就是实例化,第一个参数就是实例化,第二个参数是哪一个显卡,默认0是第一块显卡,1为第二块显卡,以此类推。#include <cuda_runtime.h>#include <...原创 2018-10-28 22:07:25 · 2166 阅读 · 0 评论 -
cuda 单block多线程
cuda单block多thread的实现#include <iostream>#include <cuda_runtime.h>#include <stdio.h>#include <time.h>#include <stdlib.h>#include <string.h>__global__ void g...原创 2018-10-28 22:17:21 · 394 阅读 · 0 评论 -
C语言和cuda C实现的代码(教科书上的格式)
一般教科书都这么写,感觉不如STL的好。记下以便查阅。#include <cuda_runtime.h>#include <iostream>#include <stdio.h>__global__ void vector_add_gpu_2(float*d_a,float*d_b,float*d_c,int n){ int tid = th...原创 2018-10-28 22:22:36 · 1306 阅读 · 0 评论 -
cuda 多block多thread实现
#include <cuda_runtime.h>#include <iostream>#include <stdio.h>__global__ void vector_add_gpu_3(float* d_a,float* d_b,float* d_c,int n){ const int tidx = threadIdx.x; const in...原创 2018-10-28 22:23:24 · 455 阅读 · 0 评论 -
cuda C使用boost库
本次实验的前提是cuda环境和boost环境都搭建好了。使用nvcc编译含有boost库的代码。nvcc cuda_Array.cu -o Array -I. -arch=sm_35就可以了。https://developer.nvidia.com/cuda-gpus一下是我的代码,前提是目录下一定要求data.txt文件,要不然会出错。#include <ios...原创 2018-11-08 22:44:16 · 700 阅读 · 0 评论 -
NSight Eclipse Edition的汉化
之前在晚上搜索了一下,发现没有NSight Eclipse Edition的汉化教程。苦于英文不咋地,所以就去YouTube看看老外有没有汉化教程,发现没有NSight Eclipse Edition的汉服教程,但是有Eclipse的汉化教程,抱着试试的心态弄了一下,结果汉化了。结果还是让人比较满意的,虽然不是100%汉化的。这是汉化后的效果:第一步:去https://www...原创 2019-05-08 11:15:17 · 656 阅读 · 0 评论 -
cudaGPU算力表
英伟达官网:https://developer.nvidia.com/cuda-gpus#collapseOne原创 2019-05-08 20:49:01 · 5855 阅读 · 0 评论 -
新手使用Nsight Eclipse
转载一个不错的设置:https://blog.csdn.net/wu070815/article/details/8243521转载 2019-05-09 13:30:15 · 1653 阅读 · 0 评论 -
Eclipse快捷键
转载https://www.cnblogs.com/mq0036/p/4995390.htmlEclipse常用快捷键1几个最重要的快捷键代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2显示搜索对话框:Ctrl+H快速Outline:Ctrl+O打开资源:Ctrl+Shift+...转载 2019-05-10 09:14:16 · 118 阅读 · 0 评论 -
使用Nsight如何实现核函数的递归或者嵌套
实现cuda+ubuntu+nsight+动态并行,需要实现核函数的嵌套或者递归。第一种方式使用命令行NVCC编译:nvcc 111.cu -rdc=true -arch=sm_52只要-rdc=true 就可以了;第二钟方式,在NSight:在新建工程的时候需要打开要不然会报错。例如:我需要这么一行代码核函数中需要嵌套一个核函数,实现动态并行。...原创 2019-05-17 15:30:59 · 595 阅读 · 1 评论 -
关于thrust的使用的一些总结
void gpuInit(){ cudaSetDevice(0); thrust::host_vector<int> m(5); //主机向量 thrust::sequence(m.begin(),m.end());//顺序插入数0 1 2 3 .... thrust::device_vector<int> d_v(5);//设备向量 thrust::de...原创 2019-05-13 14:54:11 · 1698 阅读 · 0 评论 -
cudaMemcpy2D()和cudaMallocPitch()的使用
#include "head.h"void gpuInit(){ cudaSetDevice(0); size_t width = 5; size_t height = 5; float *h_data, *d_data; size_t pitch; h_data = (float*)malloc(sizeof(float)*width * height); for(int...原创 2019-05-13 15:55:57 · 1571 阅读 · 1 评论 -
一个用GPU写的矩阵乘法
这个过程相当繁琐,个人认为有优化的可能:先说一下思路,矩阵相乘A矩阵乘B矩阵相当于A矩阵和B矩阵的转置做内积.所以我就先把B矩阵做了转置,再做内积.其中有两个核函数是在主函数中执行的,先执行转置,再执行乘法.再乘法函数中又嵌套了一个内积函数.这样充分的利用了并行化.如图所示:以3*3矩阵为例.我先开3*3个线程做内积运算,然后在每个线程中又开了1*3个线程做内积运算.其中求和部分我...原创 2019-08-18 15:46:00 · 2694 阅读 · 0 评论