Il ciclo è abbastanza semplice, ma non riesco a spiegarmi come usare gli algoritmi STL per fornire lo stesso ciclo annidato in basso.Come riscrivere un ciclo annidato usando gli algoritmi C++ STL?
const int a_size = 5; // input
const int c_size = 2; // output
const int b_size = a_size * c_size; // multipliers
std::vector<float> a(a_size);
std::vector<float> b(b_size);
std::vector<float> c(c_size);
// fill a and b with data
// this nested loop
for(int i = 0; i<c_size; i++) {
c[i] = 0.0;
for(int k = 0; k<a_size; k++) {
c[i] += (a[k] * b[i*a_size+k]);
}
c[i] = sigmoid(c[i]);
}
Il motivo per cui mi piacerebbe fare questo, è per la biblioteca Boost.Compute, che avrebbe fatto i calcoli sulla GPU utilizzando algoritmi STL-simile (std :: trasformare, std :: for_each, ecc .).
Sembra che si possa riscrivere l'algoritmo utilizzando le operazioni con le matrici. –
Penso che sia meglio consentire agli utenti di scrivere kernel arbitrari in "Boost.Compute" - sarà molto più utile. Ad esempio tramite il metodo ['TaskGraph'] (http://ideone.com/qQ4Pvo) che ho descritto [qui] (http://boost.2283326.n4.nabble.com/compute-GPGPU-Library-Request-For -Feedback-tp4643691p4643927.html). –