- 博客(13)
- 收藏
- 关注
原创 CUDA编程入门——内存模型(七)
但一个 SM(Streaming Multiprocessor,流多处理器)中寄存器数量有限,若内核函数使用的寄存器超过硬件限制,会发生寄存器溢出,将多占用的寄存器用本地内存代替,影响性能,可通过 nvcc 编译选项。常量内存适合用于线程束中的所有线程都需从相同内存地址读取数据的情况,如所有线程都需要的常量参数,每个 GPU 可声明的常量内存不超过 64KB,每个 SM 都有专用的常量内存缓存。修饰符修饰的常量变量存储于此,需在全局空间内且所有内核函数之外声明,对同一编译单元中的内核函数都可见。
2025-03-13 12:28:47
572
原创 利用cuda加速图像处理—实现sobel边缘检测
代码从文件读取灰度图像,先进行高斯去噪,然后使用 CUDA 在 GPU 上执行 Sobel 边缘检测算法,最后展示原始图像、去噪后图像和边缘检测后的图像。
2025-02-09 16:21:59
272
原创 cuda编程入门——并行归约(五)
在并行计算中,是一种将多个数据通过特定操作(如求和、求最大值等)合并为单一结果的并行算法。其核心目标是通过并行化加速大规模数据集的聚合计算。shuffle。
2025-02-06 17:40:49
578
原创 cuda编程入门——执行基本单位warp(四)
线程束是SM中基本的执行单元。当一个线程块的网格被启动后,网格中的线程块分布在SM中。一旦线程块被调度到一个SM上,线程块中的线程会被进一步划分为线束。一个线程束由32个连续的线程组成,在一个线程束中,所有的线程按照单指令多线程(SIMT)方式执行;也就是说,所有线程都执行相同的指令,每个线程在私有数据上进行探作。图展示了线程块的逻辑视图和硬件视图之间的关系。一个线程块的线程束的数量可以根据下式确定:因此,硬件总是给一个线程块分配一定数量的线程束。线程束不会在不同的线程块之间分离。
2025-01-26 23:20:45
694
原创 CUDA编程入门—GPU架构SM(三)
流多处理器(Streaming Multiprocessor,简称 SM)是 GPU(图形处理器)内部的重要组成部分。
2025-01-26 17:21:45
1014
原创 cuda编程入门——并行性与异构性概念
概念分类CUDA编程非常适合解决数据并行计算的问题。本文的重点便是如何使用CUDA编程解决数据并行问题。许多处理大数据集的应用可以使用数据并行模型来提高计算单元的速度。数据并行处理可以将数据映射给并行线程。数据并行程序设计的第一步是把数据依据线程进行划分,以使每个线程处理一部分数据。通常来说,有两种方法可以对数据进行划分:块划分(block partitioning)和周期划分(cyclic partitioning)。在块划分中,一组连续的数据被分到一个块内。
2025-01-22 11:07:27
727
原创 cuda编程入门-CUDA运行实例(矩阵加法为例)
这个框架展示了CUDA程序的基本流程,包括核函数的定义、主机与设备内存的管理、数据传输以及核函数的调用等关键步骤。在实际编写CUDA程序时,需要根据具体的计算任务和数据结构,对这个框架进行扩展和优化,例如处理多维数据、利用共享内存提高性能等。
2025-01-18 20:54:40
549
原创 CUDA编程入门-核函数与线程模型(一)
在 CUDA(Compute Unified Device Architecture)中,核函数(Kernel Function)是一种特殊的函数,它是在 GPU 上执行的并行计算单元。__global__在上述代码中,myKernel就是一个核函数。注意:1.核函数限定词以__global__关键字修饰 2.返回值必须是void,void的位置与__global__的位置可以互换执行模型:GPU 执行的最小单位,多个线程组成一个线程块(Block)。
2025-01-17 15:49:25
885
原创 【快速幂】幂运算的快速入门
要想要了解快速幂,首先我们要对取模运算进行一个简单的了解1.模运算a mod b表示a除以b的余数。模运算同加减乘除一样拥有自己的性质。(1)p整除a,b之差,则a,b同余。(2)传递性(3)交换律,加法交换律,乘法交换律。(4)加法结合律,乘法结合律模运算的重要性质(1)a,b在模p下同余,则a,b与c之和或之积在模p下同余。(2)a+b在模p下同余并且c+d在模p下同余,则a+c,b+d在模p下同余模运算的基本四则运算(1)(a+b)modp=(amod...
2021-11-21 15:02:48
648
原创 【大数阶乘】从阶乘入门到大数阶乘
现在我们来探讨一下数论中的大数阶乘问题。要了解大数阶乘,首先我们来了解一下普通的阶乘的方法。1.一般来说第一时间想到的就是利用循环或者是递归简单列一下代码for(int i=1;i<=n;i++) ans*=i;或者return n*f(n-1);大家可以思考一下,当n比较大的时候,代码运行的时间会非常大,同时只能计算一个数的阶乘,我计算了10!,但是要求9!的阶乘的话还得再求一遍,数据无法保存,而且又发现10!=9!*10;那么我可不可以开一个数组把每一个数的阶...
2021-11-21 15:00:55
388
原创 【背包五讲】背包入门详解
背包问题一.(1)01背包:首先引入问题:什么是01背包?即我们现在有一个背包,背包有一定的大小,只能装入一定的物品,而你现在面前有一堆具备价值与体积的物品,你现在的目标就是,如何选择物品,使得装入背包的物品价值最大。(每一件物品只能选择一次)。怎么选择能使得价值最大?有人会提出使用贪心算法:即每一次选择都使得价值最大,那么装入的总价值就会最大吗? 假如一个小偷有一个可以容纳4千克的背包,但是发现面前只有有3样物品可以偷:台灯(30元,4千克)、音响(20元,3千克)、充电宝(15元,1..
2021-11-21 14:54:33
807
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人