Cuda 分散通信模式

Cuda 分散通信模式,cuda,parallel-processing,Cuda,Parallel Processing,我正在从Udacity的并行编程学习CUDA。在测验中,他们有一个给定的问题,排序一个预先排序的变量(球员的身高)。既然它是输入和输出数组之间的一一对应,那么它是否应该是一种映射通信模式,而不是一种分散 据我所知,CUDA对这些术语没有标准的定义。因此,我的回答只是建议如何解释它 因为,它是输入和输出数组之间的一一对应关系 该图似乎不支持此语句,它显示了输出数组中的间隙,而这些间隙没有与之关联的对应输入点 如果一组较小的值分布到一个较大的数组中(因此,在输出数组中,没有输入值对应于间隙位置),则

我正在从Udacity的并行编程学习CUDA。在测验中,他们有一个给定的问题,排序一个预先排序的变量(球员的身高)。既然它是输入和输出数组之间的一一对应,那么它是否应该是一种
映射
通信模式,而不是一种
分散

据我所知,CUDA对这些术语没有标准的定义。因此,我的回答只是建议如何解释它

因为,它是输入和输出数组之间的一一对应关系

该图似乎不支持此语句,它显示了输出数组中的间隙,而这些间隙没有与之关联的对应输入点

如果一组较小的值分布到一个较大的数组中(因此,在输出数组中,没有输入值对应于间隙位置),则可以使用散点来描述该操作。散点图和映射图都有描述输入值去向的映射图,但可能是讲师以区分这两种情况的方式定义了散点图和映射图,例如以下合理的定义:

分散:从输入到输出的一对一关系(即单向关系)。每个输入位置都有相应的输出位置,但并非每个输出位置都有相应的输入位置

映射:输入和输出之间的一对一关系(即双向关系)。每个输入位置都有一个对应的输出位置,每个输出位置都有一个对应的输入位置


聚集:从输出到输入的一对一关系(即单向关系)。每个输出位置都有相应的输入位置,但并非每个输入位置都有相应的输出位置。

每个通信模式(映射、分散、聚集等)的定义因语言/环境/上下文的不同而略有不同,但既然我也学过同样的Udacity课程,我将尝试在课程背景下解释这个术语:

Map
操作将每个输出元素计算为其相应输入元素的函数,即:

output[tid] = foo(input[tid]);
Gather
模式将每个输出元素计算为一个或多个(通常是多个)输入元素的函数,而不一定是对应的元素(通常是来自邻域的元素)。例如:

output[tid] = (input[tid-1] + input[tid+1]) / 2;
最后,
Scatter
操作使每个输入元素贡献给一个或多个(通常是多个)输出元素。比如说,

atomicAdd( &(output[tid-1]), input[tid]);
atomicAdd( &(output[tid]),   input[tid]);
atomicAdd( &(output[tid+1]), input[tid]);
问题中给出的示例显然是而不是地图,因为每个输出都是从不同位置的输入计算出来的

此外,很难看出同一个示例是如何分散的,因为每个输入元素只导致对输出的一次写入,但它确实是分散的,因为每个输入导致对其位置由输入确定的输出的写入


换句话说,每个CUDA线程在与其
tid
(线程ID号)关联的位置处理一个输入元素,并计算将结果写入何处。更常见的情况是,分散在几个地方而不是一个地方,因此这是一种特殊情况,最好用不同的名称命名。

每个玩家有3个属性(姓名、身高、等级)。 所以我认为散射是正确的,因为我们应该考虑这三个因素来产生输出。 如果玩家只有一个属性,比如等级, 我想这张地图是对的