2017-02-14 3 views
0

J'essaie d'évaluer des points dans un grand polynôme parcellaire, qui est obtenu à partir d'une spline cubique. J'essaye de faire ceci sur un GPU et je cours dans des limitations de mémoire. En tant que tel, je voudrais évaluer un polynôme par morceaux par lots.Évaluation par lots de polynômes par morceaux sur GPU

Code d'origine:

Y = some_matrix_of_data_values ; 
X = some_vector_of_data_sites ; 
pp = spline(X, Y) ; % get the piecewise polynomial form of the cubic spline. The resulting structure is very large. 

for t = 1: big_number 
    hcurrent = ppval(pp,t); %evaluate the piecewise polynomial at t 
    y(t) = sum(x(t:t+M-1).*hcurrent,1) ; % do some operation of the interpolated value. Most likely not relevant to this question. 
end 

vectorisé, nous l'espérons sur le chemin de traitement par lots GPU:

Y = some_matrix_of_data_values ; 
X = some_vector_of_data_sites ; 
pp = spline(X, Y) ; % get the piecewise polynomial form of the cubic spline. Resulting structure is very large. 
batchSize = 1024 ; 

for tt = 1: batchSize: big_number 
    if tt > big_number - batchSize % snatch up any remaining values at the end of the loop, and calculate those as well 
     batchSize = big_number - tt ; 
    end    
    hcurrent = ppval(pp ,(tt:tt+batchSize-1)) ; %evaluate pp at a couple of data sites  

    ind = bsxfun(@plus, 1:M, (tt-1:1:tt+batchSize-2).')) ; %make an index matrix to help with next calculation. Most likely not relevant to this question. 
    y(tt:tt+batchSize-1) = sum(x(ind).*hcurrent' , 2) ; % do some calculation, but now we have done it in batches! 
end 

Dans le code révisé, le polynôme par morceaux est évalué à plusieurs sites de données, donc nous sommes au moins sur notre chemin là-bas. Le polynôme par morceaux pp est trop volumineux pour être stocké sur le GPU. Y a-t-il un moyen de le décomposer pour le traitement par lots?

Répondre

0

Le fil de discussion utile here, qui parle plutôt de la parallélisation de l'évaluation polynomiale par morceaux. Cette solution peut être portée sur GPU pour le traitement par lots.