Determinar el elemento mínimo y su posición en cada columna de matriz con CUDA Thrust

Tengo un problema bastante simple, pero no puedo encontrar una solución elegante.

Tengo un código de empuje que producec Vectores del mismo tamaño que contienen valores. Digamos cada uno de estosc Los vectores tienen un índice. Me gustaría para cada posición del vector obtener el índice dec Vector para el cual el valor es el más bajo:

Ejemplo:

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

Obtendría como resultado un vector que contiene el índice deC vector que tiene el valor más bajo:

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

He pensado en hacerlo utilizando iteradores de zip de empuje, pero he encontrado varios problemas: podría comprimir todos losc vectores e implementa una transformación arbitraria que toma una tupla y devuelve el índice de su valor más bajo, pero:

¿Cómo iterar sobre los contenidos de una tupla?Según entiendo, las tuplas solo pueden almacenar hasta10 Elementos y no puede haber mucho más que10 c vectores

Entonces pensé en hacerlo de esta manera: en lugar de tenerc separar los vectores, añadirlos todos en un solo vectorC, luego genere claves que hagan referencia a las posiciones y realice una clasificación estable por clave que reagrupará las entradas de vectores desde una misma posición. En el ejemplo que daría:

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 )

Luego genere claves con las posiciones en el vector, zip la salida con el índice de lac vectores y luego realice una reducción por clave con un functor personalizado que para cada reducción genera el índice con el valor más bajo. En el ejemplo:

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)

Sin embargo, ¿cómo escribir dicho funtor para la operación de reducción por tecla?

Respuestas a la pregunta(3)

Su respuesta a la pregunta