2017-02-14 1 views
0

Ich versuche, Punkte in einem großen stückweisen Polynom zu bewerten, das von einem kubischen Spline erhalten wird. Ich versuche, dies auf einer GPU zu tun, und ich stoße auf Speicherbeschränkungen.Batchweise Auswertung von stückweisen Polynomen auf GPU

Als solche möchte ich ein Stückweise Polynom in Batches bewerten.

Originalcode:

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 

vektorisiert, hoffentlich auf dem Weg zum GPU Batch-Verarbeitung:

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 

In dem überarbeiteten Code, das abschnittsweise Polynom wird an mehreren Daten Websites ausgewertet, so dass wir zumindest auf dem Weg dorthin. Das stückweise Polynom pp ist zu groß, um es auf der GPU zu speichern, gibt es eine Möglichkeit, es für die Stapelverarbeitung aufzuteilen?

Antwort

0

Hilfreiche Thread here, die stattdessen über die Parallelisierung der stückweise Polynomauswertung spricht. Diese Lösung kann für die Stapelverarbeitung zur GPU portiert werden.