Parallel patterns: convolution —— An introduction to stencil computation

在接下来的几章中,我们将讨论一组重要的并行计算模式。这些模式是许多并行应用中出现的广泛并行算法的基础。我们将从卷积开始,这是一种流行的阵列操作,以各种形式用于信号处理、数字记录、图像处理、视频处理和计算机视觉。在这些应用领域,卷积通常作为过滤器执行,将信号和像素转换为更理想的值。我们的图像模糊内核是一个过滤器,可以平滑信号值,以便人们可以看到大画面的趋势。另一个例子是,高斯滤波器是卷积滤波器,可用于锐化图像中对象的边界和边缘。

在高性能计算中,卷积模式通常被称为模板计算,这在求解微分方程的数值方法中广泛出现。它还构成了模拟模型中许多力计算算法的基础。卷积通常涉及每个数据元素上的大量算术运算。对于高清图像和视频等大型数据集,计算量可能非常大。每个输出数据元素都可以相互独立计算,这是并行计算的理想特征。另一方面,在具有一定挑战性的边界条件的输出数据元素之间有相当程度的输入数据共享。这使得卷积成为复杂的tile方法和输入数据暂存方法的重要用例。

7.1 BACKGROUND
卷积是一种数组操作,其中每个输出数据元素是相邻输入元素集合的加权和。加权和计算中使用的权重由输入掩码数组定义,通常称为卷积内核。由于CUDA内核函数和卷积内核之间存在不幸的名称冲突,我们将这些掩码数组称为卷积掩码,以避免混淆。相同的卷积掩码通常用于数组的所有元素。

在这里插入图片描述

在音频数字信号处理中,输入数据为ID形式,并表示采样信号量作为时间函数。图7.1显示了1D数据的卷积示例,其中5元卷积掩码数组M应用于7元输入数组N。我们将遵循C语言惯例,其中N和P元素从0到6索引,M元素从0到4索引。我们使用5元素掩码M的事实意味着每个P元素是由对应位置的N个元素的加权和生成的,左边是两个N个元素,右边是两个N个元素。

例如, P[2] 的值生成为 N[0](即 N[2-2])到N[4](即N[2+2])的加权和。在这个例子中,我们任意假设N个元素的值是1,2,3,…,7。M元素定义了权重,在本例中,其值为3、4、5、4、3。在将乘积加在一起之前,每个权重值乘以相应的N个元素值。如图7.1所示,P[2]的计算如下:
在这里插入图片描述
通常,掩码的大小往往是一个奇数,这使得加权和计算围绕正在计算的元素是对称的。也就是说,一个奇数的掩码元素定义了加权和,以包括被计算元素两侧相同数量的元素。在图7.1,掩码尺寸是5。每个输出元素计算为相应输入元素、左侧两个元素和右侧两个元素的加权和。
在这里插入图片描述

在图7.1中,P[i] 的计算可以看作是从 N[i-2] 开始的N子数组和M数组之间的内积。图7.2显示了P[3]的计算。计算由一个N个元素从图7.1.中的N个元素移动。也就是说,P[3] 的值是N[1](即N[3-2])通过N[5](即N[3 + 2])的加权和。
我们可以认为 P[3] 的计算如下:
在这里插入图片描述
由于卷积是根据相邻元素定义的,因此接近数组末端的输出元素自然会出现边界条件。如图7.3所示,当我们计算P[1]时,N[1]左边只有一个N个元素。也就是说,根据我们的卷积定义,没有足够的N个元素来计算P[1]。处理此类边界条件的典型方法是定义这些缺失的N个元素的默认值。对于大多数应用程序,默认值是0,这是我们在图7.3.中使用的。例如,在音频信号处理中,我们可以假设信号音量在录制开始前和结束后为0。在这种情况下,P[1]的计算如下:
在这里插入图片描述
此计算中不存在的N元素在图7.3.中显示为虚数框。应该清楚的是,P[0]的计算将涉及两个缺失的N个元素,在本例中,这两个元素都将被假定为0。我们把P[0]的计算作为练习。这些缺失的元素在文献中通常被称为“ghost cells”或“halo cells”。由于在并行计算中使用 tile,还有其他类型的 ghost cells。这些幽灵细胞可以对tile的有效性和/或效率产生重大影响。我们很快就会回到这一点上。
在这里插入图片描述
此外,并非所有应用程序都假设幽灵单元格包含0。例如,一些应用程序可能会假设幽灵单元格包含与最接近的有效数据元素相同的值。

对于图像处理和计算机视觉,输入数据通常是二维数组,像素在x-y空间中。因此,图像卷积是二维卷积,如图7.4.所示。在二维卷积中,掩码M是一个二维数组。它的x和y维度决定了加权和计算中要包含的邻居的范围。在图7.4中,为了简单起见,我们使用5×5的掩码。总的来说,掩码不一定是正方形数组。要生成输出元素,我们取中心位于输入数组N中相应位置的子数组。然后,我们在掩码数组的元素和图像数组的元素之间进行成对乘法。在我们的示例中,结果显示为图7.4.中N和P下方的5×5乘积数组。输出元素的值是乘积数组所有元素的总和。在这里插入图片描述
图7.4中的例子。显示了 P 2.2 P_{2.2} P2.2的计算。为了简洁,我们将使用Ny.x在寻址C数组时表示N[y][x]。由于N和P很可能是动态分配的数组,我们将在实际代码示例中使用线性化索引。N的子数组用于计算P2.2的值,在x或水平方向上从N0.0到N0.4,在y或垂直方向上从N0.0到N4.0。计算方法如下:
在这里插入图片描述
与1D卷积一样,2D卷积也必须处理边界条件。对于x和y维度的边界,有更复杂的边界条件:输出元素的计算可能涉及沿水平边界、垂直边界或两者的边界条件。图7.5说明了涉及两个边界的P元素的计算。来自图7.5,P1.0 的计算涉及N子数组中缺少两列和一个缺失的水平行。与1D卷积一样,不同的应用程序对这些缺失的N个元素假设不同的默认值。在我们的示例中,我们假设默认值为0。这些边界条件也会影响瓷砖的效率。我们很快就会回到这一点上。

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

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

相关文章

C/C++学习笔记 vcpkg使用备忘及简要说明

一、简述 vcpkg 是一个免费的 C/C 包管理器,用于获取和管理库。从 1500 多个开源库中进行选择,一步下载并构建,或者添加您自己的私有库以简化构建过程。由 Microsoft C 团队和开源贡献者维护。 官方教程 vcpkg 文档 | Microsoft Learnvcpkg …

玩转硬件之玩改朗逸中控设备

这是一个有关一件被拆卸的朗逸中控设备的故事。这个设备已经闲置多年,但是它的命运发生了转变。它被改装成了一台收音机和MP3播放器。 这个设备曾经是一辆朗逸的中控屏幕,就是因为它没有倒车影像,它就被拆了下来,被扔在了一个角落…

Realm Management Extension领域管理扩展之安全状态

RME基于Arm TrustZone技术。TrustZone技术在Armv6中引入,提供以下两个安全状态: 安全状态(Secure state)非安全状态(Non-secure state)以下图表显示了在AArch64中的这两个安全状态以及通常在每个安全状态中找到的软件组件: 该架构将在安全状态运行的软件与在非安全状态运…

03.SpringCloud服务间远程调用

一、Feign远程调用 feign是基于nacos,所以需要先引入对应的依赖。 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端…

探索Java中的Map:领略键值对的无限魅力

目录 1、前言 2、介绍Map 2.1 什么是Map 2.2 Map的特点 3、常用的Map实现类 3.1 HashMap 3.2 TreeMap 3.3 LinkedHashMap 3.4 Hashtable 3.5 ConcurrentHashMap 4、操作Map的常用方法 5、Map的应用场景 5.1 缓存 5.2 数据存储 5.3 计数器 6、常见问题解答 6.1…

【漏洞复现】锐捷EG易网关cli.php后台命令执行漏洞

Nx01 产品简介 锐捷EG易网关是一款综合网关,由锐捷网络完全自主研发。它集成了先进的软硬件体系架构,配备了DPI深入分析引擎、行为分析/管理引擎,可以在保证网络出口高效转发的条件下,提供专业的流控功能、出色的URL过滤以及本地化…

极海APM32F003通过IEC 60730/60335功能安全认证,为产品安全保驾护航

近日,极海APM32F003系列工业级超值型MCU,已顺利通过IEC 60730/60335功能安全认证,并可提供符合CLASS B标准的功能安全设计套件,有助于客户减少认证时间与成本,快速推出稳定可靠的终端产品。 *VDE是德国的一个权威性电气…

selenium处理iframe网页办法

学习selenium中,发现有一些网页是嵌套的,即一个html嵌套另一个html,这被称为iframe,selenium只能查找主网页的元素,无法查看嵌套的,进入嵌套的一行代码,首先定位到iframe,然后browser.switch_to.frame(ifra…

如何在企业中实施自适应人工智能?

人工智能不再是企业的选择。很快,它也将不再是一个区分因素。商业中的适应性人工智能正在改变格局。根据最近的统计数据,95%的企业以上都在追求人工智能。 因此,为了确保你拥有竞争优势,你必须期待先进的人工智能选项。适应性就是…

开发分销商城小程序app,轻松助你业绩倍增

开发分销商城小程序app,轻松助你业绩倍增! 1. 一键分享,业务拓展:分销商城小程序可生成独特的分销链接与二维码,让你的分销员分享给亲朋好友、社交媒体粉丝。迅速扩大销售网络,提升产品知名度。 2. 佣金管…

Python异步编程|PySimpleGUI界面读取PDF转换Excel

目录 实例要求 原始pdf文件格式 输出xls文件格式 运行界面 完整代码 代码分析 遍历表格 布局界面 控件简介 写入表格 表格排序 事件循环 异步编程 实例要求 使用PySimpleGUI做一个把单位考勤系统导出的pdf文件合并输出Excel的应用,故事出自&#xff1…

C++其他语法总结

目录 《C基础语法总结》《C面向对象语法总结(一)》《C面向对象语法总结(二)》《C面向对象语法总结(三)》 一、运算符重载 运算符重载可以为运算符增加一些新的功能全局函数、成员函数都支持运算符重载常用的运算符重载示例 class Point {…