Blas dgemv медленнее, чем ручная реализация

Я пытаюсь использовать BLAS в своей программе c, чтобы повысить скорость матричного/векторного продукта.

Вручную у меня был этот код:

for (j = 0; j < ann->hidden; ++j) {

        double delta = 0;
        //h is known before 
        for (k = 0; k < (h == ann->hidden_layers-1 ? ann->outputs : ann->hidden); ++k) {
            const double forward_delta = dd[k];
            const int windex = k * (ann->hidden + 1) + (j + 1);
            const double forward_weight = ww[windex];
            delta += forward_delta * forward_weight;
        }
        *d = *o * (1.0-*o) * delta;
        ++d; ++o;
    }
}

Итак, я попытался заменить этот двойник на функцию blas cblas_dgemv, и это выглядит так:

int n = h == ann->hidden_layers-1 ? ann->outputs : ann->hidden ;
    int m = ann->hidden ;
    double *delta = calloc(m,sizeof(double));
    cblas_dgemv(CblasColMajor,CblasNoTrans,m,n,1,&ww[1],m,dd,1,0.0,delta,1);
    for(j=0 ;  j < ann->hidden; ++j) {
      *d = *o * (1.0-*o)*delta[j];
      ++d; ++o;

    }
    free(delta);
    }

Выходное значение хорошее.

Проблема в том, что моя реализация с BLAS намного медленнее, чем "ручная"...

Я не знаю, потому ли это, что я не использую наиболее оптимизированную функцию для этого расчета, или я сделал что-то не так?


person Valentin Mercier    schedule 25.10.2017    source источник
comment
Вопросы о рабочем коде, вероятно, больше подходят для Code Review.   -  person underscore_d    schedule 25.10.2017
comment
Что такое проверка кода?   -  person Valentin Mercier    schedule 25.10.2017
comment
codereview.stackexchange.com   -  person underscore_d    schedule 25.10.2017
comment
спасибо, вы не знаете, могу ли я перенести этот пост?   -  person Valentin Mercier    schedule 25.10.2017
comment
На нем нет blas , cblas или open blas :/   -  person Valentin Mercier    schedule 25.10.2017


Ответы (1)


Хорошо, дело в том, что моя реализация blas быстрее для большой матрицы, но накладные расходы blas замедляют работу для маленькой матрицы!

person Valentin Mercier    schedule 27.10.2017