Vòng lặp đủ đơn giản, nhưng tôi dường như không thể quấn quanh đầu tôi bằng cách sử dụng các thuật toán STL để cung cấp cùng một vòng lặp lồng nhau bên dưới.Làm thế nào để viết lại vòng lặp lồng nhau bằng thuật toán 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]);
}
Lý do tại sao tôi muốn làm điều này, là cho các thư viện Boost.Compute, mà sẽ làm các tính toán trên GPU sử dụng các thuật toán STL-like (std :: biến đổi, std :: for_each, vv .).
Có vẻ như bạn có thể viết lại thuật toán của mình bằng cách sử dụng các phép toán ma trận. –
Tôi nghĩ tốt hơn là cho phép người dùng viết các hạt tùy ý trong 'Boost.Compute' - nó sẽ hữu ích hơn nhiều. Ví dụ: thông qua phương thức ['TaskGraph'] (http://ideone.com/qQ4Pvo) mà tôi mô tả [ở đây] (http://boost.2283326.n4.nabble.com/compute-GPGPU-Library-Request-For -Feedback-tp4643691p4643927.html). –