Tengo alguna pregunta sobre cómo las GPU realizan sincronizaciones. Como sé, cuando una urdimbre encuentra una barrera (suponiendo que esté en OpenCL), y sabe que las otras urdimbres del mismo grupo todavía no han llegado. Entonces tiene que esperar. ¿Pero qué hace exactamente ese warp durante el tiempo de espera? ¿Sigue siendo un warp activo? ¿O hará algún tipo de operaciones nulas?Sincronizaciones en GPU
Como noté, cuando tenemos una sincronización en el kernel, el número de instrucciones aumenta. Me pregunto cuál es la fuente de este incremento. ¿La sincronización está desglosada en muchas instrucciones más pequeñas de la GPU? O porque las urdimbres ociosas realizan algunas instrucciones adicionales?
Y finalmente, me pregunto si el costo agregado por una sincronización, comparado con uno sin sincronización, (digamos barrera (CLK_LOCAL_MEM_FENCE)) se ve afectado por el número de warp en un grupo de trabajo (o threadblock)? Gracias
Gracias por la respuesta detallada. Sería bueno si pudieras compartir algunos documentos de los que obtuvieras el conocimiento. Me gustaría citar en mi investigación. ¿Podría explicarnos más por qué los núcleos vinculados a la memoria exponen latencias de memoria? Según entiendo ahora, una solicitud de memoria cerca de una sincronización (aparece antes de la sincronización) que se supone que está oculta por algún cálculo se detendrá hasta que lleguen los datos. ¿Es correcto? Por otro lado, si kernel no está vinculado a la memoria, ¿qué expone una sincronización? ¿Latencia de la tubería de instrucción? (Se supone que no hay divergencias, y sí, ¿qué hace todo esto con las divergencias?) – Zk1001