13 / 20 · Concepto
División en bloques y relleno de bordes
Asocia matrices mayores a una cuadrícula menor y gestiona el relleno con ceros y las máscaras de salida.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
Divide primero el espacio de salida
Una cuadrícula N×N procesa un resultado mayor M×P mediante ceil(M/N)×ceil(P/N) bloques espaciales. Nuestra base conserva toda la reducción K dentro de cada bloque y borra entre bloques de salida. El módulo envolvente almacena el origen r0,c0; el PE local (i,j) se asocia al C global (r0+i,c0+j). El desfase depende de las coordenadas locales.
Toma N=2 y M=P=K=3. Sean A=[[1,2,3],[4,5,6],[7,8,9]] y B=[[1,0,2],[0,1,0],[2,0,1]]. Su producto es [[7,2,5],[16,5,14],[25,8,23]]. Los cuatro orígenes de bloque son (0,0), (0,2), (2,0) y (2,2).
Rellena operandos y enmascara escrituras
Suministra filas de A y columnas de B fuera de intervalo como tokens cero válidos. Cada PE sigue consumiendo K términos, conservando el contrato sencillo de finalización. Invalidar los términos de relleno puede dejar algunos contadores por debajo de K para siempre. Enmascara por separado las escrituras de resultados para impedir escribir fuera de la matriz real.
El último bloque usa A=[[7,8,9],[0,0,0]] y B=[[2,0],[0,0],[1,0]]. Su resultado local es [[23,0],[0,0]], pero solo el valor superior izquierdo puede escribirse en C(2,2). Un cero numérico no hace segura una dirección fuera de intervalo.
Cada bloque usa cinco flancos con avance, veinte en total para cuatro bloques secuenciales, excluyendo borrado, carga y transferencia de salida. La cuadrícula ejecuta cuarenta y ocho MAC con relleno; solo veintisiete pertenecen al producto real 3×3.
Dividir la reducción en bloques exige conservar sumas
Dividir K requiere combinar sumas parciales de la misma salida. C(0,0)=1×1+2×0+3×2=7 se divide en parciales uno y seis para K=2+1. Borrar el acumulador final entre esas reducciones deja solo seis. Conserva el acumulador o combina sumas parciales anchas en otro lugar. Cuantizar cada parcial antes de combinarlo puede diferir de cuantizar una sola vez la suma completa.
El proyecto final empieza con bloques espaciales y K completo. Prueba límites de un solo elemento, dimensiones divisibles por N, un último bloque con una sola salida real, ceros de relleno válidos y máscaras de salida. Usa coordenadas globales como claves del marcador de referencia para que cambiar el orden de los bloques no cambie el resultado esperado.
Inténtalo tú
Para el bloque (0,2) del ejemplo 3×3, indica la máscara de salida y el resultado local. ¿Cuáles son las sumas parciales de C(0,2) al dividir K en 2+1?
Leer la explicación
El resultado local es [[5,0],[14,0]] y la máscara [[1,0],[1,0]]. C(0,2)=1×2+2×0+3×1 tiene sumas parciales dos y tres, que suman cinco.