Estoy usando CUDA/Thrust/CUDPP. Según tengo entendido, en la compactación de Stream, ciertos elementos de una matriz se marcan como no válidos y luego se eliminan.Compactación de corriente CUDA: entendiendo el concepto
Ahora, ¿qué significa realmente "eliminación" aquí? Supongamos que la matriz original A
y tiene longitud 6. Si 2 elementos no son válidos (por cualquier condición que pueden proporcionar), entonces
¿El sistema de crear un nuevo matriz de tamaño 4 en GPU-memoria para almacenar la elementos válidos para obtener el resultado final?
O ¿elimina físicamente los elementos no válidos de la memoria y reduce el conjunto original A hasta el tamaño 4 manteniendo solo los elementos válidos?
En cualquier caso, ¿no significa que la asignación de memoria dinámica está ocurriendo debajo del capó? Pero había oído que la asignación de memoria dinámica no es posible en el mundo CUDA.
Existe otra posibilidad, que es que el tamaño de la asignación de memoria no cambia, y los primeros 4 elementos son válidos, los últimos 2 no están definidos. Pero, en realidad, esta pregunta se trata de cuestiones de implementación, y ¿quién puede decir que CUDPP o thrust funcionan de la misma manera? – talonmies
ArrayFire es una opción mejor/más fácil que Thrust y también gratuita, al menos para el uso de una sola GPU. http://accelereyes.com/arrayfire – arrayfire