procesamiento paralelo - introducción c en unix …procesamiento paralelo introducci on c en unix...

42
Procesamiento Paralelo Introducci´ on C en UNIX Javier Iparraguirre Universidad Tecnol´ ogica Nacional, Facultad Regional Bah´ ıa Blanca 11 de Abril 461, Bah´ ıa Blanca, Argentina [email protected] http://www.frbb.utn.edu.ar/hpc/ 25 de marzo de 2016

Upload: lenhi

Post on 30-Jan-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Procesamiento ParaleloIntroduccion C en UNIX

Javier Iparraguirre

Universidad Tecnologica Nacional, Facultad Regional Bahıa Blanca11 de Abril 461, Bahıa Blanca, Argentina

[email protected]

http://www.frbb.utn.edu.ar/hpc/

25 de marzo de 2016

Inicio

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

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 ;

}

Salida

V a l o r i n t : 0Punto f l o t a n t e : −4.500000

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/Salida

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

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 ;

}

Salida programa

Sos menor de edad

Iteraciones

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 ;

}

Salida programa

V a l o r i : 0V a l o r i : 1V a l o r i : 2V a l o r i : 3V a l o r i : 4

Funciones

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 ” ) ;}

Salida programa

Hola !

Compilando

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

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: funciones.h (2 de 4)

v o i d i m p r i m i r S a l u d o ( ) ;

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$

make, qmake y cmake

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 (3 de 3)

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!

IDEs

IDEs

• Qt

• Eclipse

¡Muchas gracias!

¿Preguntas?

[email protected]

Referencias

• https://www.qt.io

• https://cmake.org

• http://www.cplusplus.com/