Pregunta

Dado el siguiente fragmento de código, generando una especie de diccionario de código con CUDA usando Thrust (biblioteca de plantillas C++ para CUDA):

thrust::device_vector<float> dCodes(codes->begin(), codes->end());
thrust::device_vector<int> dCounts(counts->begin(), counts->end());
thrust::device_vector<int> newCounts(counts->size());

for (int i = 0; i < dCodes.size(); i++) {
    float code = dCodes[i];
    int count = thrust::count(dCodes.begin(), dCodes.end(), code);

    newCounts[i] = dCounts[i] + count;

    //Had we already a count in one of the last runs?
    if (dCounts[i] > 0) {
        newCounts[i]--;
    }

    //Remove
    thrust::detail::normal_iterator<thrust::device_ptr<float> > newEnd = thrust::remove(dCodes.begin()+i+1, dCodes.end(), code);
    int dist = thrust::distance(dCodes.begin(), newEnd);
    dCodes.resize(dist);
    newCounts.resize(dist);
}

codes->resize(dCodes.size());
counts->resize(newCounts.size());

thrust::copy(dCodes.begin(), dCodes.end(), codes->begin());
thrust::copy(newCounts.begin(), newCounts.end(), counts->begin());

El problema es que he notado múltiples copias de 4 bytes usando el perfilador visual CUDA.En mi opinión, esto es generado por

  1. El contador de bucles i
  2. código flotante, recuento int y dist.
  3. Cada acceso a i y las variables mencionadas anteriormente

Esto parece ralentizar todo (la copia secuencial de 4 bytes no es divertida...).

Entonces, ¿cómo le digo a Thrust que estas variables se manejarán en el dispositivo?¿O ya lo son?

Usar Thrust::device_ptr no me parece suficiente, porque no estoy seguro de si el bucle for se ejecuta en el host o en el dispositivo (lo que también podría ser otra razón de la lentitud).

¿Fue útil?

Solución

para cada reiteración de i, tamaño, índice, código, etc. tienen que ser copiados desde el host al dispositivo de .. la forma en que tiene su programa, no hay mucho que puede hacer. Para obtener los mejores resultados, considere mover toda bucle i en el dispositivo, de esta manera usted no tendrá acogida a las copias del dispositivo.

La confianza es grande para algunas cosas, sin embargo, que los resultados se trate y algoritmo no funciones disponibles bastante en forma, es posible que tenga que volver a escribir para un mejor rendimiento sin necesidad de utilizar algoritmos de empuje de forma explícita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top