procesamiento paralelo - introducción c en unix …procesamiento paralelo introducci on c en unix...
TRANSCRIPT
Procesamiento ParaleloIntroduccion C en UNIX
Javier Iparraguirre
Universidad Tecnologica Nacional, Facultad Regional Bahıa Blanca11 de Abril 461, Bahıa Blanca, Argentina
http://www.frbb.utn.edu.ar/hpc/
25 de marzo de 2016
Primer programa en C
#i n c l u d e <s t d i o . h>
i n t main ( ){
p r i n t f (” %s \n ” , ” h o l a UTN! ” ) ;
r e t u r n 0 ;}
Variables y asignaciones
#i n c l u d e <s t d i o . h>i n t main ( ){
i n t u n a V a r i a b l e E n t e r a ; // no e s recomendab lep r i n t f (” V a l o r i n t : %i \n ” , u n a V a r i a b l e E n t e r a ) ;d o u b l e e n P u n t o F l o t a n t e = −4.5 f ;p r i n t f (” Punto f l o t a n t e : %l f \n ” ,
e n P u n t o F l o t a n t e ) ;r e t u r n 0 ;
}
Tipos fundamentales
c h a rs h o r t ( i n t )i n tl o n g ( i n t )b o o lf l o a td o u b l el o n g d o u b l e
Entrada y salida
#i n c l u d e <s t d i o . h>i n t main ( ){
c h a r cadena [ 8 0 ] ;i n t edad ;p r i n t f (” I n g r e s e nombre : ” ) ;s c a n f (” %s ” , cadena ) ;p r i n t f (” I n g r e s e edad : ” ) ;s c a n f (” %d”,& edad ) ;p r i n t f (” Hola %s , t e n e s %d .\ n ” , cadena , edad ) ;r e t u r n 0 ;
}
Salida programa
j a v i e r @ d e l f i n : ˜ / $ . / b i n a r i oI n g r e s e nombre : J a v i e rI n g r e s e edad : 34Hola J a v i e r , t e n e s 3 4 .
Condicionales
#i n c l u d e <s t d i o . h>i n t main ( ){
i n t edad = 1 8 ;i f ( edad <= 18){
p r i n t f (” Sos menor de edad\n ” ) ;}e l s e{
p r i n t f (” Sos mayor de edad\n ” ) ;}r e t u r n 0 ;
}
Iteraciones
#i n c l u d e <s t d i o . h>i n t main ( ){
i n t i = −1;f o r ( i = 0 ; i < 5 ; i ++)
p r i n t f (” V a l o r i : %i \n ” , i ) ;r e t u r n 0 ;
}
Funciones
#i n c l u d e <s t d i o . h>v o i d i m p r i m i r S a l u d o ( ) ;i n t main ( ){
i m p r i m i r S a l u d o ( ) ;r e t u r n 0 ;
}v o i d i m p r i m i r S a l u d o ( ){
p r i n t f (” Hola !\ n ” ) ;}
Compilando en Unix C
j a v i e r @ o r c a : ˜ / Downloads$ touch main . cj a v i e r @ o r c a : ˜ / Downloads$ nano main . cj a v i e r @ o r c a : ˜ / Downloads$ gcc −o b i n a r i o main . cj a v i e r @ o r c a : ˜ / Downloads$ l sb i n a r i o main . cj a v i e r @ o r c a : ˜ / Downloads$ . / b i n a r i oh o l a UTN!j a v i e r @ o r c a : ˜ / Downloads$
Varios archivos: funciones.c (1 de 4)
#i n c l u d e <s t d i o . h>#i n c l u d e ” f u n c i o n e s . h”
v o i d i m p r i m i r S a l u d o ( ){
p r i n t f (” %s \n ” , ” h o l a UTN! ” ) ;}
Varios archivos: main.c (3 de 4)
#i n c l u d e ” f u n c i o n e s . h”
i n t main ( ){
i m p r i m i r S a l u d o ( ) ;r e t u r n 0 ;
}
Varios archivos (4 de 4)
j a v i e r @ o r c a : ˜ / Downloads$ gcc −o s a l i d a main . c f u n c i o n e s . c −I .j a v i e r @ o r c a : ˜ / Downloads$ . / s a l i d ah o l a UTN!j a v i e r @ o r c a : ˜ / Downloads$ l sf u n c i o n e s . c f u n c i o n e s . h main . c s a l i d aj a v i e r @ o r c a : ˜ / Downloads$
Makefile simple (1 de 2)
h e l l o m a k e : main . c f u n c i o n e s . c f u n c i o n e s . hgcc −o h e l l o m a k e main . c f u n c i o n e s . c − I .
Makefile simple (2 de 2)
j a v i e r @ o r c a : ˜ / Downloads$ l sf u n c i o n e s . c f u n c i o n e s . h main . c M a k e f i l ej a v i e r @ o r c a : ˜ / Downloads$ makegcc −o h e l l o m a k e main . c f u n c i o n e s . c − I .j a v i e r @ o r c a : ˜ / Downloads$ . / h e l l o m a k eh o l a UTN!j a v i e r @ o r c a : ˜ / Downloads$ makemake : ‘ he l lomake ’ i s up to dat e .j a v i e r @ o r c a : ˜ / Downloads$
Makefile con constantes (1 de 2)
CC=gccCFLAGS=−I .
h e l l o m a k e : main . c f u n c i o n e s . c f u n c i o n e s . h$ (CC) −o h e l l o m a k e main . c f u n c i o n e s . c − I .
Makefile con constantes (2 de 2)
j a v i e r @ o r c a : ˜ / Downloads$ l sf u n c i o n e s . c f u n c i o n e s . h main . c M a k e f i l ej a v i e r @ o r c a : ˜ / Downloads$ makegcc −o h e l l o m a k e main . c f u n c i o n e s . c − I .j a v i e r @ o r c a : ˜ / Downloads$ l sf u n c i o n e s . c f u n c i o n e s . h h e l l o m a k e main . c M a k e f i l ej a v i e r @ o r c a : ˜ / Downloads$ . / h e l l o m a k eh o l a UTN!j a v i e r @ o r c a : ˜ / Downloads$
Qmake (1 de 3)
j a v i e r @ o r c a : ˜ / Downloads$ l sf u n c i o n e s . c f u n c i o n e s . h main . cj a v i e r @ o r c a : ˜ / Downloads$ qmake −p r o j e c tj a v i e r @ o r c a : ˜ / Downloads$ l sDownloads . pro f u n c i o n e s . c f u n c i o n e s . h main . cj a v i e r @ o r c a : ˜ / Downloads$ qmakej a v i e r @ o r c a : ˜ / Downloads$ l sDownloads . pro f u n c i o n e s . c f u n c i o n e s . h main . c M a k e f i l ej a v i e r @ o r c a : ˜ / Downloads$ makegcc −c −p i p e −O2 −Wall −W −D REENTRANT −DQT WEBKIT −DQT NO DEBUG −DQT GUI LIB −DQT CORE LIB −DQT SHARED −I / u s r / s h a r e / qt4 / mkspecs / l i n u x−g++ −I . −I / u s r / i n c l u d e / qt4 / QtCore −I / u s r / i n c l u d e / qt4 / QtGui −I / u s r / i n c l u d e / qt4 −I . −I . −o f u n c i o n e s . o f u n c i o n e s . cgcc −c −p i p e −O2 −Wall −W −D REENTRANT −DQT WEBKIT −DQT NO DEBUG −DQT GUI LIB −DQT CORE LIB −DQT SHARED −I / u s r / s h a r e / qt4 / mkspecs / l i n u x−g++ −I . −I / u s r / i n c l u d e / qt4 / QtCore −I / u s r / i n c l u d e / qt4 / QtGui −I / u s r / i n c l u d e / qt4 −I . −I . −o main . o main . cg++ −Wl,−O1 −o Downloads f u n c i o n e s . o main . o −L/ u s r / l i b −l Q t G u i −lQtCore −l p t h r e a dj a v i e r @ o r c a : ˜ / Downloads$ l sDownloads Downloads . pro f u n c i o n e s . c f u n c i o n e s . h f u n c i o n e s . o main . c main . oM a k e f i l ej a v i e r @ o r c a : ˜ / Downloads$ . / Downloadsh o l a UTN!
Qmake (2 de 3)
####################################################################### A u t o m a t i c a l l y g e n e r a t e d by qmake ( 2 . 0 1 a ) Tue Mar 20 0 2 : 1 3 : 1 8 2012######################################################################
TEMPLATE = appTARGET =DEPENDPATH += .INCLUDEPATH += .
# I n p u tHEADERS += f u n c i o n e s . hSOURCES += f u n c i o n e s . c main . c
Qmake (2 de 3)
####################################################################### A u t o m a t i c a l l y g e n e r a t e d by qmake ( 2 . 0 1 a ) Tue Mar 20 0 2 : 1 3 : 1 8 2012######################################################################
TEMPLATE = appTARGET =DEPENDPATH += .INCLUDEPATH += .
# I n p u tHEADERS += f u n c i o n e s . hSOURCES += f u n c i o n e s . c main . c
CMake
• CMake es una herramienta multiplataforma de generacion oautomatizacion de codigo.
• Completamente codigo abierto.
• Independiente de la plataforma.
• Necesita al menos de un archivo CMakeLists.txt
CMakeLists.txt
cmake min imum requ i red (VERSION 2 . 6 )p r o j e c t ( T u t o r i a l )a d d e x e c u t a b l e ( T u t o r i a l main . c )
Comandos CMake
j a v i e r @ d e l f i n : ˜ > mkdir b u i l dj a v i e r @ d e l f i n : ˜ > cd b u i l d /j a v i e r @ d e l f i n : ˜ / b u i l d > cmake . .−− The C c o m p i l e r i d e n t i f i c a t i o n i s GNU 4 . 8 . 4−− The CXX c o m p i l e r i d e n t i f i c a t i o n i s GNU 4 . 8 . 4−− Check f o r work ing C c o m p i l e r : / u s r / b i n / cc−− Check f o r work ing C c o m p i l e r : / u s r / b i n / cc −− works−− D e t e c t i n g C c o m p i l e r ABI i n f o−− D e t e c t i n g C c o m p i l e r ABI i n f o − done−− Check f o r work ing CXX c o m p i l e r : / u s r / b i n / c++−− Check f o r work ing CXX c o m p i l e r : / u s r / b i n / c++ −− works−− D e t e c t i n g CXX c o m p i l e r ABI i n f o−− D e t e c t i n g CXX c o m p i l e r ABI i n f o − done−− C o n f i g u r i n g done−− G e n e r a t i n g done−− B u i l d f i l e s have been w r i t t e n to : /home/ j a v i e r / b u i l dj a v i e r @ d e l f i n : ˜ / b u i l d > l sCMakeCache . t x t CMakeFi les c m a k e i n s t a l l . cmake M a k e f i l ej a v i e r @ d e l f i n : ˜ / b u i l d > makeScann ing d e p e n d e n c i e s o f t a r g e t T u t o r i a l[100 %] B u i l d i n g C o b j e c t CMakeFi les / T u t o r i a l . d i r / main . c . oL i n k i n g C e x e c u t a b l e T u t o r i a l[100 %] B u i l t t a r g e t T u t o r i a lj a v i e r @ d e l f i n : ˜ / b u i l d > l sCMakeCache . t x t CMakeFi les c m a k e i n s t a l l . cmake M a k e f i l e T u t o r i a lj a v i e r @ d e l f i n : ˜ / b u i l d > . / T u t o r i a lh o l a UTN!
Referencias
• https://www.qt.io
• https://cmake.org
• http://www.cplusplus.com/