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?