Routine MKL o BLAS per moltiplicare il vettore per uno scalare fuori luogo

Routine MKL o BLAS per moltiplicare il vettore per uno scalare fuori luogo


Lavoro in software di simulazione e una delle tante operazioni eseguite sugli array è ridimensionare un vettore di un numero.


Ho un codice come questo:


//Just some initialization code, don't bother about this part
int n = 10000;
std::vector<double> input(n, 42.0);
std::vector<double> output(input.size());
double alpha = 69.0;
//the actual calculation:
for (size_t i = 0; i < n; ++i) {
output[i] = input[i] * alpha;
}

Ho la libreria MKL disponibile, quindi se i miei calcoli vengono eseguiti "sul posto" si può scrivere quanto segue:


cblas_dscal(n, alpha, &input[0], 1);

Tuttavia, questo cambierà il input variabile, che non è quello che voglio.


Ho provato a usare il mkl_domatcopy() ma è molto lento per questa operazione.


Risposte:


La soluzione che ho trovato è stata chiamare cblas_dcopy() quindi cblas_dscal() .


Non è il migliore di tutti i mondi, ma è comunque più veloce del ciclo grezzo.