Я самообучаюсь писать эффективный, оптимизированный код глубокого обучения;но я очень новичок в этом.
Например: я читаю, что numpy
использует векторизацию , чтобы избежать петель питона .
Они также в значительной степени придумали термин широковещательный по этой ссылке, который используется TensorFlow, PyTorch и др.
Я немного покопался и обнаружил, что ldd
на моемОкно Debian показывает multiarray.so
ссылки libopenblasp-r0-39a31c03.2.18.so
.
Итак, давайте рассмотрим вариант использования матричного вычитания.Я хотел бы понять, как использовать openBLAS для улучшения этой очень наивной реализации:
void matrix_sub(Matrix *a, Matrix *b, Matrix *res)
{
assert(a->cols == b->cols);
assert(a->rows == b->rows);
zero_out_data(res, a->rows, a->cols);
for (int i = 0; i < (a->rows*a->cols); i++)
{
res->data[i] = a->data[i] - b->data[i];
}
}
Как мудрый внутренний продукт или дополнение?