没有域名 有公网ip 建网站可以,做网站昆山,太和网站开发招聘,wordpress悬浮音乐播放在接下来的几章中#xff0c;我们将讨论一组重要的并行计算模式。这些模式是许多并行应用中出现的广泛并行算法的基础。我们将从卷积开始#xff0c;这是一种流行的阵列操作#xff0c;以各种形式用于信号处理、数字记录、图像处理、视频处理和计算机视觉。在这些应用领域我们将讨论一组重要的并行计算模式。这些模式是许多并行应用中出现的广泛并行算法的基础。我们将从卷积开始这是一种流行的阵列操作以各种形式用于信号处理、数字记录、图像处理、视频处理和计算机视觉。在这些应用领域卷积通常作为过滤器执行将信号和像素转换为更理想的值。我们的图像模糊内核是一个过滤器可以平滑信号值以便人们可以看到大画面的趋势。另一个例子是高斯滤波器是卷积滤波器可用于锐化图像中对象的边界和边缘。
在高性能计算中卷积模式通常被称为模板计算这在求解微分方程的数值方法中广泛出现。它还构成了模拟模型中许多力计算算法的基础。卷积通常涉及每个数据元素上的大量算术运算。对于高清图像和视频等大型数据集计算量可能非常大。每个输出数据元素都可以相互独立计算这是并行计算的理想特征。另一方面在具有一定挑战性的边界条件的输出数据元素之间有相当程度的输入数据共享。这使得卷积成为复杂的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[22]的加权和。在这个例子中我们任意假设N个元素的值是123…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.5P1.0 的计算涉及N子数组中缺少两列和一个缺失的水平行。与1D卷积一样不同的应用程序对这些缺失的N个元素假设不同的默认值。在我们的示例中我们假设默认值为0。这些边界条件也会影响瓷砖的效率。我们很快就会回到这一点上。