C++ 按键进行多次扫描

C++ 按键进行多次扫描,c++,cuda,C++,Cuda,我有一个4通道HSVL图像-色调,饱和度,值(浮点数),标签(无符号整数)。 任务是为每个唯一标签计算色调、饱和度和值之和的数组。例如,我将能够访问输出和[标签为455的像素]={Hue:500,Sat:100,Val:200}。图像的大小约为5 MP,有大约3000种不同的标签 我的想法是对图像的部分进行32次扫描,这将产生32 x NLabel和。然后我可以扫描图像的32个分区,得到nLabel和结构 是否存在一种“按键扫描”算法来解决这类问题?如果您想通过CUDA实现这一点,以下内容可能会

我有一个4通道HSVL图像-色调,饱和度,值(浮点数),标签(无符号整数)。 任务是为每个唯一标签计算色调、饱和度和值之和的数组。例如,我将能够访问输出和[标签为455的像素]={Hue:500,Sat:100,Val:200}。图像的大小约为5 MP,有大约3000种不同的标签

我的想法是对图像的部分进行32次扫描,这将产生32 x NLabel和。然后我可以扫描图像的32个分区,得到nLabel和结构


是否存在一种“按键扫描”算法来解决这类问题?

如果您想通过CUDA实现这一点,以下内容可能会有所帮助

由于您只需要求和值,我认为您需要的是“按键减少”。推力提供了一个可以满足您需求的实现

但在使用它之前,您必须按标签对所有像素进行排序。这可以通过


您可能还对它感兴趣,它可以将3个通道的HSV压缩到一个单值迭代器中进行排序和缩减。

如果您希望CUDA这样做,以下内容可能会有所帮助

由于您只需要求和值,我认为您需要的是“按键减少”。推力提供了一个可以满足您需求的实现

但在使用它之前,您必须按标签对所有像素进行排序。这可以通过


您可能还对它感兴趣,它可以将3个通道的HSV压缩到一个单值迭代器中进行排序和缩减。

如果您希望CUDA这样做,以下内容可能会有所帮助

由于您只需要求和值,我认为您需要的是“按键减少”。推力提供了一个可以满足您需求的实现

但在使用它之前,您必须按标签对所有像素进行排序。这可以通过


您可能还对它感兴趣,它可以将3个通道的HSV压缩到一个单值迭代器中进行排序和缩减。

如果您希望CUDA这样做,以下内容可能会有所帮助

由于您只需要求和值,我认为您需要的是“按键减少”。推力提供了一个可以满足您需求的实现

但在使用它之前,您必须按标签对所有像素进行排序。这可以通过


您可能还对它感兴趣,它可以将3个通道的HSV压缩到一个单值迭代器中进行排序和缩减。

我选中了reduce\u by\u key(),它似乎只缩减(求和)具有相同键的连续元素,因此如果您有数据的“包”(高度可能),它不会产生期望的结果。不要紧-这就是为什么您选择按键对像素排序,这将使算法提供正确的输出。您也可以先按键减少像素,然后按键排序,然后再按键减少像素。由于元素的数量减少,您将节省一些排序时间,但您需要按\u键减少两次。我不知道哪种方法更快。我选中了reduce_by_key(),它似乎只减少(求和)具有相同键的连续元素,因此如果你有“飞地”数据(很可能),它将不会产生所需的结果。没关系-这就是为什么你要按键对像素排序,这将使算法提供正确的输出。您还可以先按按键减少,然后按键排序,然后再按键减少。由于元素的数量减少,您将节省一些排序时间,但您需要按\u键减少两次。我不知道哪种方法更快。我选中了reduce_by_key(),它似乎只减少(求和)具有相同键的连续元素,因此如果你有“飞地”数据(很可能),它将不会产生所需的结果。没关系-这就是为什么你要按键对像素排序,这将使算法提供正确的输出。您还可以先按按键减少,然后按键排序,然后再按键减少。由于元素的数量减少,您将节省一些排序时间,但您需要按\u键减少两次。我不知道哪种方法更快。我选中了reduce_by_key(),它似乎只减少(求和)具有相同键的连续元素,因此如果你有“飞地”数据(很可能),它将不会产生所需的结果。没关系-这就是为什么你要按键对像素排序,这将使算法提供正确的输出。您还可以先按按键减少,然后按键排序,然后再按键减少。由于元素的数量减少,您将节省一些排序时间,但您需要按\u键减少两次。我不知道哪条路更快。