Tengo un kernel que se llama a una dispositivo función dentro de una instrucción if. El código es el siguiente:

__device__ void SetValues(int *ptr,int id)
{
    if(ptr[threadIdx.x]==id) //question related to here
          ptr[threadIdx.x]++;
}

__global__ void Kernel(int *ptr)
{
    if(threadIdx.x<2)
         SetValues(ptr,threadIdx.x);
}

En los subprocesos de núcleo 0-1 llamada SetValues al mismo tiempo. ¿Qué pasa después de eso? Quiero decir que hay ahora 2 llamadas simultáneas a SetValues. Cada llamada a la función de ejecutar en serie? Así se comportan como los 2 kernel de la función de llamadas?

InformationsquelleAutor scatman | 2011-04-19

1 Comentario

  1. 24

    CUDA en realidad inline todas las funciones por defecto (aunque Fermi y las nuevas arquitecturas de hacer también el apoyo de una adecuada ABI con punteros a función y la función real de las llamadas). Así que tu ejemplo de código se compila a algo como esto

    __global__ void Kernel(int *ptr)
    {
        if(threadIdx.x<2)
            if(ptr[threadIdx.x]==threadIdx.x)
                ptr[threadIdx.x]++;
    }

    Ejecución sucede en paralelo, al igual que lo normal código. Si un ingeniero de la memoria de la raza en una función, no hay ningún mecanismo de serialización que te pueden salvar.

    • tengo una tarjeta de fermi. esto significa que la función No es en línea? por lo tanto, la threadIdx.x en SetValues son todos los hilos y no sólo los hilos de 0 y 1?
    • Funciones todavía están alineadas de forma predeterminada en Fermi. Creo entender lo que en realidad está preguntando por ahora – que es lo que el ámbito de aplicación de construcción en cada subproceso variables (como threadIdx) está dentro de dispositivo funciones. Me estoy poniendo más caliente?
    • sí, esa es mi pregunta. pero desde dispositivo son funciones inline.. entonces supongo que el ámbito de aplicación de los hilos es el mismo como se llama <<<bloques de hilos>>> pero a causa de la rama de subprocesos sólo 0 y 1 ejecutar ptr[threadIdx.x]++. es esto correcto?
    • Sí, claro que lo es. Como no podía ser de otra manera?

Dejar respuesta

Please enter your comment!
Please enter your name here