Я новичок как в Юлии, так и в C ++. Я кодировал проблему с фиксированной точкой в Julia и C ++ на машине windows (на базе Intel) с редактором Atom и компилятором gpp для C ++ (в пределах от Atom до MinGW)
Код Julia:
function _bellman(UU::Any, Vin::Any, K::Any, bet::Any)
# Step 1: for each possible total wealth I decide how much capital to have tomorrow
# Step 2: Conditional on the value function of each k', I calcule the new V
# Step 3: For each pair (c,k'| k0) what is the maximum value function
# Step 4: Find maximum difference and update
n = length(Vin);
dif0 = 0;
dif = 1;
Vout = fill(0.0,n,1);
Kprime = fill(0.0,n,1);
for row = 1:n
val0 = UU[row,1]+ bet*Vin[1];
index = 1;
for col = 1:n
val1 = UU[row,col]+ bet*Vin[col];
if val1>val0
index = col;
val0 = val1;
end
end
Vout[row] = val0;
dif = abs(val0-Vin[row]);
Kprime[row] = K[index];
if dif>dif0
dif0 = dif;
end
end
return Vout, Kprime, dif; end
В то время как код C ++ (он объявлен в том же. cpp, чем основной как):
tuple<vector<double>,vector<double>,double> _bellman(vector<vector<double>> UU, vector<double> Vin, vector<double> K, double bet) {
// Step 1: for each possible total wealth I decide how much capital to have tomorrow
// Step 2: Conditional on the value function of each k', I calcule the new V
// Step 3: For each pair (c,k'| k0) what is the maximum value function
// Step 4: Find maximum difference and update
int n, index,row,col;
double val0, val1,dif0, dif;
tuple<vector<double>,vector<double>,double> mytup;
n= Vin.size();
vector<double> Vout(n), Kprime(n);
dif0 = 0;
for (row = 0; row<n; row++){
val0 = UU[row][0]+ bet*Vin[0];
index = 0;
for (col = 1; col<n; col++){
val1 = UU[row][col]+ bet*Vin[col];
if (val1 > val0){
index = col;
val0 = val1;
}
}
Vout[row] = val0;
dif = abs(val0-Vin[row]);
Kprime[row] = K[index];
if (dif>dif0){
dif0 = dif;
}
}
mytup = make_tuple(Vout,Kprime,dif);
return mytup;
}
И компиляция в порядке, и их скорость аналогична для вектора длиной 250 ( UU - это матрица размером 250x250), но когда я увеличиваю размерность до 1000, Джулия быстрее (как в 6 раз). Почему это происходит? Как я могу улучшить производительность моего кода C ++? Большое спасибо, и извините, если вопрос глупый.