История изменений
Исправление bormant, (текущая версия) :
Далеко ходить не надо https://github.com/kostya/benchmarks
https://github.com/kostya/benchmarks/blob/master/matmul/matmul.c
В mm_init() вызывается calloc() по количеству строк матрицы.
Ни для кого не секрет, что calloc() заполняет нулями выделенную память, что с учетом последующей поэлементной инициализации (вызов mm_init()) является диким оверхэдом.
Второй раз это стреляет при создании временной транспонированной матрицы.
И затем mm_destroy() для каждой строки матрицы.
Итог: 12-е место в тесте matmul по времени (и это с трехкратным оверхэдом по заполнению памяти и оверхэдом по построчным вызовам менеджера памяти).
Исправление bormant, :
Далеко ходить не надо https://github.com/kostya/benchmarks
https://github.com/kostya/benchmarks/blob/master/matmul/matmul.c
В mm_init() вызывается calloc() по количеству строк матрицы.
Ни для кого не секрет, что calloc() заполняет нулями выделенную память, что с учетом последующей поэлементной инициализации (вызов mm_init()) является диким оверхэдом.
Второй раз это стреляет при создании временной транспонированной матрицы.
И затем mm_destroy() для каждой строки матрицы.
Итог: 12-е место в тесте matmul по времени (и это с трехкратным оверхэдом по заполнению памяти и оверхэдом по построчным вызовам).
Исходная версия bormant, :
Далеко ходить не надо https://github.com/kostya/benchmarks
https://github.com/kostya/benchmarks/blob/master/matmul/matmul.c
В mm_init() вызывается calloc() по количеству строк матрицы.
Ни для кого не секрет, что calloc() заполняет нулями выделенную память, что с учетом последующей поэлементной инициализации (вызов mm_init()) является диким оверхэдом.
Второй раз это стреляет при создании временной транспонированной матрицы.
Итог: 12-е место в тесте matmul по времени (и это с трехкратным оверхэдом).