Określenie najmniejszego elementu i jego położenia w każdej kolumnie macierzy za pomocą ciągu CUDA

Mam dość prosty problem, ale nie mogę znaleźć eleganckiego rozwiązania.

Mam kod Thrust, który wytwarzac wektory o tym samym rozmiarze zawierające wartości. Powiedzmy, że każdy z nichc wektory mają indeks. Chciałbym dla każdej pozycji wektorowej uzyskać indeksc wektor, dla którego wartość jest najniższa:

Przykład:

C0 =     (0,10,20,3,40)
C1 =     (1,2 ,3 ,5,10)

Otrzymałbym w wyniku wektor zawierający indeksC wektor o najniższej wartości:

result = (0,1 ,1 ,0,1)

Pomyślałem o zrobieniu tego za pomocą iteratorów pchnięcia z pchnięciem, ale natknąłem się na problemy: mogłem rozpakować wszystkiec wektory i implementuj dowolną transformację, która przyjmuje krotkę i zwraca indeks swojej najniższej wartości, ale:

Jak iterować zawartość krotki?Jak rozumiem, krotki można przechowywać tylko do10 elementy i może być ich znacznie więcej10 c wektory.

Pomyślałem wtedy o zrobieniu tego w ten sposób: zamiast miećc oddzielne wektory, dołącz je wszystkie w jednym wektorzeC, następnie wygeneruj klucze odwołujące się do pozycji i wykonaj stabilny klucz sortowania, który spowoduje przegrupowanie pozycji wektora z tej samej pozycji razem. W przykładzie, który dałby:

C =      (0,10,20,3,40,1,2,3,5,10)
keys =   (0,1 ,2 ,3,4 ,0,1,2,3,4 )
after stable sort by key:
output = (0,1,10,2,20,3,3,5,40,10)
keys =   (0,0,1 ,1,2 ,2,3,3,4 ,4 )

Następnie wygeneruj klucze z pozycjami w wektorze, zapisz dane wyjściowe indeksemc wektory, a następnie wykonaj klucz zmniejszania za pomocą niestandardowego funktora, który dla każdej redukcji generuje indeks o najniższej wartości. W przykładzie:

input =  (0,1,10,2,20,3,3,5,40,10)
indexes= (0,1,0 ,1,0 ,1,0,1,0 ,1)
keys =   (0,0,1 ,1,2 ,2,3,3,4 ,4)
after reduce by keys on zipped input and indexes:
output = (0,1,1,0,1)

Jak jednak napisać taki funktor dla operacji zmniejszania za pomocą klucza?

questionAnswers(3)

yourAnswerToTheQuestion