7.2 1D PARALLEL CONVOLUTION—A BASIC ALGORITHM

正如我们在第7.1节中提到的,所有输出(P)元素的计算可以在卷积中并行完成。这使得卷积成为并行计算的理想问题。根据我们在矩阵-矩阵乘法方面的经验,我们可以快速编写一个简单的并行卷积内核。为了简单起见,我们将从1D卷积开始。
在这里插入图片描述
第一步是定义内核的主要输入参数。我们假设1D卷积内核收到五个参数:指向输入数组N的指针,指向输入掩码M的指针,指向输出数组P的指针,掩码Mask_Width的大小,以及输入和输出数组宽度的大小。因此,我们有以下设置:

__global__ void convolution_1D_basic_kernel(float *N, float *M,
float *P,int Mask_Width, int Width) {// kernel body
}

第二步是确定并实现线程到输出元素的映射。由于输出数组是ID,一个简单而好的方法是将线程组织成一个1D网格,并将每个线程放在网格中来计算一个输出元素。读者应该认识到,就输出元素而言,这与向量加法示例的安排相同。因此,我们可以使用以下语句从每个线程的块索引、块尺寸和线程索引中计算输出元素索引:

int i = blockIdx.x*blockDim.x + threadIdx.x;

一旦我们确定了输出元素索引,我们就可以使用输出元素索引的偏移量访问输入N元素和掩码M元素。为了简单起见,我们假设Mask_Width是一个奇数,卷积是对称的,即Mask_Width是2*n + 1,其中n是整数。P[i]的计算将使用 N[i-n], N[i-n+1],…, N[i-1], N[i], N[i+1], N[i+n-1], N[i+n]。我们可以使用一个简单的循环在内核中进行此计算:
在这里插入图片描述
变量Pvalue将允许将所有中间结果累积在寄存器中,以节省DRAM带宽。for循环累积了从相邻元素到输出P元素的所有贡献。循环中的if语句测试使用的任何输入N元素是否是幽灵单元,位于N数组的左侧或右侧。由于我们假设0值将用于幽灵细胞,我们可以简单地跳过幽灵细胞元素及其相应的N个元素的乘法和累积。循环结束后,我们将P值释放到输出P元素中。我们现在在图7.6.中有一个简单的内核。
在这里插入图片描述
我们可以对图7.6中的内核进行两项观察。首先,将有控制流发散计算P数组左端或右端附近的输出P元素的线程将处理幽灵单元格。正如我们在第7.1节中展示的那样,每个相邻的线程都会遇到不同数量的幽灵细胞。因此,在if声明中,它们都将是一些不同的决定。计算P[0]的线程将跳过大约一半的乘法累积语句,而计算P[1]的那个会少跳过一次,以及以此为由。控制发散的成本将取决于输入数组大小的宽度和掩码大小的mask_width。对于大型输入阵列和小型掩码,控制发散只发生在一小部分输出元素中,这将保持控制发散的影响很小。由于卷积通常应用于大型图像和空间数据,我们通常期望收敛的效果是适度的或微不足道的。

一个更严重的问题是内存带宽。在内核中,浮点算术计算与全局内存访问的比率仅约为1.0。正如我们在矩阵-矩阵乘法示例中看到的,这个简单的内核只能以峰值性能的一小部分运行。在接下来的两节中,我们将讨论减少全局内存访问次数的两个关键技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】数据库概述与SQL语句

一、数据库基本概念 数据库:DateBase,简称:DB 数据库特点: 持久化存储数据 -> 文件系统方便存储和管理数据使用了统一方式管理数据库 -> SQL 常见的数据库软件: OracleMySQLMicrosoft SQL ServerDB2SQLite …

【liunx】线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题

线程池单例模式STL,智能指针和线程安全其他常见的各种锁读者写者问题 1.线程池2.线程安全的单例模式3.STL,智能指针和线程安全4.其他常见的各种锁4.读者写者问题 喜欢的点赞,收藏,关注一下把! 1.线程池 目前我们学了挂起等待锁、条件变量、信…

【排序算法】一、排序概念和直接插入排序(C/C++)

「前言」文章内容是排序算法之直接插入排序的讲解。(所有文章已经分类好,放心食用) 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、排序概念的介绍二、直接插入排序2.1 原理2.2 代码实现(C/C&#xf…

Web API乐观锁和悲观锁

在 Web API 中,乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)是两种常见的并发控制机制。它们的目的都是在多个用户同时访问和修改相同资源时,确保数据的一致性和完整性。 乐观锁 乐观锁的思…

Linux的网络设置

一.查看网络配置 1.查看网络接口信息 - ifconfig ① 直接使用 ifconfig 命令 默认显示活动的网卡 解析: ② ifconfig 具体网卡名称 只显示具体的网卡的信息 ③ ifconfig -a 显示所有的网卡 ④ ifconfig 网卡名称 down 关闭网卡 ifdown 关闭网卡 …

2024年01月微软更新Bug 已解决 !Explorer.EXE 提示:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。

前倾概要 近期大量出现如上图问题,杀毒,系统急救箱都没反应,罪魁祸首就是微软更新! 点击什么都是:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。 但软件使用正常,还能通过建立…

MATLAB中slist函数用法

目录 语法 说明 示例 显示模型的已排序列表 slist函数的功能是在模拟调试会话期间显示已排序的模块列表。 语法 slist 说明 slist在MATLAB命令窗口中显示根系统以及根系统中的每个非虚拟子系统或引用模型的块的已排序列表。对于根系统、每个非虚拟子系统和每个引用模型&…

linux离线安装git

首先需要有一台有网的linux,下载git源码包 下载地址 Index of /pub/software/scm/git/ 我这里下载的是git-2.9.5.tar.gz,依次执行如下命令进行编译 # 在有网的环境中,编译git,然后打包拿到内网直接用 # 下载git-2.9.5.tar.gz&…

SQL Server 加密 view文本

CREATE VIEW dbo.View_building WITH ENCRYPTION AS SELECT * FROM Building_Temp; GO 注意: 加密後就看不到VIEW文本了,修改 ALTER VIEW dbo.View_building WITH ENCRYPTION AS –修改後的VIEW 文本 GO 或者刪除再新增。 所以,要另備份原V…

【产品应用】一体化伺服电机在管道检测机器人中的应用

一体化伺服电机在管道检测机器人的应用正日益受到关注。管道检测机器人是一种能够在管道内部进行检测和维护的智能化设备,它可以检测管道的内部结构、泄漏、腐蚀等问题,以确保管道的安全和稳定运行。而一体化伺服电机作为机器人的动力源,对于…

20230403读书笔记|《苏轼词集》——试问岭南应不好,此心安处是吾乡

20230403读书笔记|《苏轼词集》——试问岭南应不好,此心安处是吾乡 导读卷一卷二卷三 在书架里加了好几本苏轼词集,很多词是重复的,但这并不影响多读几本,苏轼的词豪迈大气,豁达爽朗,蛮值得一读的。有不少都…

中小型家具制造业使用制造管理MES系统应该注意什么?

随着人们生活水平变高,人们对家具的要求也在提高。为了应对越来越高的要求,企业开始寻找更有效的方法,其中就包括mes系统,那么中小型家具企业在使用mes的过程中应该注意什么呢? 第一,要考虑选择什么样的mes…

Pycharm直接从github上下载项目(社区版)

Pycharm直接从github上下载项目(社区版) 1.在pycharm上关联github账号2.导航栏——Git——clone 1.在pycharm上关联github账号 2.导航栏——Git——clone

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种,在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义:二叉树的创建:二叉树的遍历:前序遍历:中序遍历:后序遍历:层序遍历&#…

梯度提升决策树(Gradient Boosting Decision Trees,GBDT)

梯度提升决策树(Gradient Boosting Decision Trees,GBDT) ​ 提升树是以分类树或回归树为基本分类器的提升方法。 提升树被认为是统计学习 中性能最好的方法之一。 ​ 提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。 以决策…

Mendeley Word 文献引用

这里写目录标题 1. 下载Mendeley 并插入到Word1.1 下载安装1.2 在Word 中添加Mendeley 插件文献引用相关 1. 下载Mendeley 并插入到Word 1.1 下载安装 Mendeley 官网下载 1.2 在Word 中添加Mendeley 插件 打开 Mendeley,点击 Tools —>Install Mendeley Cite…

AWS云用户创建

问题 需要给工友创建AWS云的用户,这里假设使用分配给自己AWS开发者IAM账号,给别人创建aws IAM账号。 登录系统 打开页面:https://xxx.signin.aws.amazon.com/console,使用分配的开发者账号登录。如下图: 创建用户…

资源分享栏目一直会更新

文章目录 1. [南京大学IT侠文档共享计划](https://www.yuque.com/itxia)2. [洛谷OJ平台](https://www.luogu.com.cn/)3. [ChatGPT](chat.openai.com)4. [stackoverflow](stackoverflow.com) 1. 南京大学IT侠文档共享计划 可以解决大部分的电脑问题,如遇到Windows 系…

vue组件开发

1. 组件开发介绍 ① 组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为。 好处:便于维护,利于复用 → 提升开发效率。 组件分类:普通组件、根组件。② 根组件(App.vue&#xf…

Hive之set参数大全-5

I 限制外部表数据插入 set hive.insert.into.external.tablestrue;在Apache Hive中,通过INSERT INTO语句向外部表(External Table)插入数据时,有一些注意事项和限制。外部表是Hive中的一种特殊表,它与Hive管理的存储…