Ejecución de código MATLAB sin licencias disponibles : Compilador
de MATLAB
Un problema habitual de los usuarios de MATLAB en el CESGA es el limitado número de licencias
disponibles: Por ejemplo si en el HPC320 3 usuarios están utilizando MATLAB en un momento dado, un
cuarto usuario debe esperar para ejecutar su código. Una solución a este problema estriba en el uso del
compilador de MATLAB "mcc" para crear a partir de código MATLAB un programa independiente. Este
programa es más rápido y no requiere una licencia de MATLAB para su ejecución.
Uso recomendado del mcc:
1. Adaptar el código matlab a una función sin argumentos (por ej main.m) desde la cual se
llame al resto de funciones.
2. Desde la terminal ejecutar "source /opt/cesga/matlab/bin/usemcc"
3. Desde la terminal ejecutar mcc [-o <nombre_del_ejecutable>] -m main.m
4. Ejecutar el programa resultante
5. Para su ejecución en cola es necesario incluir "source /opt/cesga/matlab/bin/usemcc" en el
script de envio a cola
Ejemplo:
Radiación de un cuerpo negro (Fórmula de Planck):
u
p
n
)(
=
3
pn
8
c
3
h
n
h
)
(
Tk
Be
1
-
blackbody.m:
function BB = blackbody(T,lambda)
h = 6.6261*10^-34; % Planck's constant J s
c = 2.9979*10^8; % speed of light m/s
k = 1.3807*10^-23; % Boltzmann's constant
J/K
A = (h.*c)./(k.*T.*lambda);
%energy density function:
B = (8.*pi.*h.*c)./lambda.^5;
BB = B.*(1./(exp(A)-1));
Si quisiéramos ver la variación de la intensidad de la radiación con la temperatura y la longitud de onda
podríamos utilizar un programa como el que sigue:
script.m:
T = 1000:100:8000;
lambda = 50e-9:10e-9:3000e-9;
i=1;
for TT = T
j=1;
for nn = lambda
U(i,j) = blackbody(TT,nn);
j=j+1;
end
i=i+1;
end
surf(lambda,T,U,'EdgeColor','none',
'FaceColor','interp',
'FaceLighting','phong');
hold on;
contour3(lambda,T,U,20,'k');
colormap hsv;
l = light('Position',[-50 -15 29]);
xlabel('lambda');
ylabel('T');
zlabel('U');
print('-depsc2','fig.eps');
save blackbody.mat lambda T U;
fichero blackbody.mat
En el
salvamos datos de
intensidad
variando la longitud de onda de
50 nm a 3000 nm a temperaturas
entre 1000 y 8000 K. A su vez en
el fichero fig.eps se salva el
gráfico tridimensional.
1. añadimos “function main” al principio de script.m y lo
salvamos como main.m
2. ejecutamos "source /opt/cesga/matlab/bin/usemcc"
(esto sólo es necesario una vez por sesión)
3. ejecutamos "mcc -o blackbody -m main.m" y
obtenemos el ejecutable "blackbody"
4. ejecutamos "./blackbody" y obtenemos el mismo
resultado que en la ejecución usando matlab aunque sin
necesidad de tener una licencia del mismo disponible.
Para su ejecución:
matlab -nosplash < script.m
Para su compilación con el compilador de MATLAB:
main.m:
function main
T = 1000:100:8000;
lambda = 50e-9:10e-9:3000e-9;
i=1;
for TT = T
j=1;
for nn = lambda
U(i,j) = blackbody(TT,nn);
j=j+1;
end
…
En el caso de la versión del compilador del SVGD existen pocas limitaciones en código que puede ser
compilable, sin embargo, en el caso del HPC320 hay más, por ej las funciones gráficas del ejemplo no
compilarán. Se pueden ver las limitaciones en los siguientes enlaces:
HPC320: Compiler 3.0
http://www.mathworks.com/access/helpdesk_r13/help/toolbox/compiler/ch01in13.html
SVGD: Compiler 4.3
http://www.mathworks.com/products/compiler/compiler_support.html
Más información:
http://www.mathworks.com/access/helpdesk/help/toolbox/compiler/
Lectura recomendada: Mathworks white paper Writing Fast MATLAB Code
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=5685&objectType=file
Cualquier duda al respecto no dude en consultarnos en
[email protected]
(c) CESGA 2006
Autor: Aurelio Rodríguez
Trabajo cofinanciado por el FSE (Fondo Social Europeo)
Comentarios de: Ejecución de código MATLAB sin licencias disponibles : Compilador de MATLAB (0)
No hay comentarios