Те же суммы, другой порядок загрузки
Для A[m,k],B[k,n] каждый изmnвыходов содержитkпроизведений. Обычно стоимость оценивают как2mknFLOPs: умножение и сложение считаются двумя операциями, даже если одна инструкция FMA выполняет их вместе. Точное число сложений для суммыkчленов —k−1, поэтому это соглашение счёта, а не число машинных инструкций. H04.
В маленьком примере A=[[1,2],[3,4]],B=[[5,6],[7,8]] результат[[19,22],[43,50]]. Первый элемент:1×5+2×7=19. Курсор раскрывает каждый multiply-accumulate, а tile1/2 меняет порядок посещения выходов и повторное использование входов.
FMA округляет ab+c один раз, а separate multiply/add — после каждого шага. При a=1+2^-23,c=−(1+2^-22) точноеa²+c=2^-46. ОтдельноеFP32округление произведения теряет этот остаток и даёт0. H01 приводит соответствующий двоичный пример; его исторические заявления об отсутствии CPU FMA не относятся к современным процессорам.
Исследовать. Сравните итогCприtile1и2, затем число modeled input reads. В идеальной маленькой моделиtile1требует16чтений входных скаляров, tile2—8, writes4вобоих случаях. Это не профилирование реального кеша. Большой tile повышает reuse, но может увеличить требования к локальному хранению и уменьшить число параллельных блоков.