diff options
author | Joe Zhao <ztuowen@gmail.com> | 2015-05-18 22:45:48 +0800 |
---|---|---|
committer | Joe Zhao <ztuowen@gmail.com> | 2015-05-18 22:45:48 +0800 |
commit | accb2b987662db4c8ced69aab78c95b622030576 (patch) | |
tree | 6f405c5d6b5f28b6f76494d2a1937ab8c10605d4 | |
parent | 1f53fe7adbb14e71d1c41459a8e4b579ef43559c (diff) | |
download | ranksvm-accb2b987662db4c8ced69aab78c95b622030576.tar.gz ranksvm-accb2b987662db4c8ced69aab78c95b622030576.tar.bz2 ranksvm-accb2b987662db4c8ced69aab78c95b622030576.zip |
openmp cont
-rw-r--r-- | model/ranksvmtn.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/model/ranksvmtn.cpp b/model/ranksvmtn.cpp index f904fdd..8448a8a 100644 --- a/model/ranksvmtn.cpp +++ b/model/ranksvmtn.cpp @@ -25,6 +25,22 @@ void cal_Dw(RidList &D,const VectorXd &w, VectorXd &Dw) Dw(i) = D.getVec(i).dot(w); } +void cal_Dtw(RidList &D,const VectorXd &w, VectorXd &Dw) +{ + int n = D.getSize(); + #pragma omp parallel + { + VectorXd Dw_private = VectorXd::Zero(D.getfSize()); + #pragma omp for nowait + for (int i=0;i<n;++i) + Dw_private = Dw_private + D.getVec(i)*w(i); + #pragma omp critical + { + Dw=Dw+Dw_private; + } + } +} + int cal_Hs(RidList &D,const vector<int> &rank,const VectorXd &corr,const VectorXd &alpha,const VectorXd s,VectorXd &Hs) { int n = D.getSize(); @@ -219,9 +235,8 @@ int train_orig(int fsize, RidList &Data,const VectorXd &corr,VectorXd &weight){ // Generate support vector matrix sv & gradient obj = (weight.dot(weight) + C*(alpha.dot(yt.cwiseProduct(yt))-beta.dot(yt)))/2; VectorXd tmp = alpha.cwiseProduct(yt)-beta; - VectorXd res = 0*weight; - for (int i=0;i<n;++i) - res = res + Data.getVec(i)*tmp[i]; + VectorXd res = VectorXd::Zero(fsize); + cal_Dtw(Data,tmp,res); grad = weight + C*res; step = grad*0; // Solve |