variáveis compartilhadas e modelos de memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf ·...
TRANSCRIPT
![Page 1: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/1.jpg)
VariáveisCompartilhadaseModelosdeMemória
![Page 2: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/2.jpg)
Referências§ ThreadsBasics
Hans-J.Boehmhttp://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.htmlNovembro de2008/Janeirode2011(revisado)
§ YouDon’tKnowJackAboutSharedVariablesorMemoryModelsHans-J.BoehmeSarita V.AdveCommunicationsoftheACMFevereiro de2012
![Page 3: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/3.jpg)
Motivação
x++
![Page 4: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/4.jpg)
Motivação
x++
x=x+1
![Page 5: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/5.jpg)
Motivação
x++
x=x+1
lêxsomaumgravax
![Page 6: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/6.jpg)
Motivação
x++
x=x+1
lêxsomaumgravax
lêx//x=0
somaum//x=0
gravax//x=1
lêx//x=0
somaum//x=0
gravax//x=1
x=0
![Page 7: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/7.jpg)
Motivação
x++
x=x+1
lêxsomaumgravax
lêx//x=0
somaum//x=0
gravax//x=1lêx //x=1somaum//x=1gravax//x=2lêx//x=2somaum//x=2gravax//x=3lêx//x=3(...)somaum//x=998gravax//x=999
lêx//x=0
somaum//x=0
gravax//x=1
x=0
nãosepodenempensarem"algumasperdaspodemsertoleradas..."
![Page 8: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/8.jpg)
Motivação• Basedecimal;• Palavrasdememóriacomtrêsdígitos;• xcomseisdígitos.
x++
![Page 9: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/9.jpg)
Motivação• Basedecimal;• Palavrasdememóriacomtrêsdígitos;• xcomseisdígitos.
x++
tmp_hi=x_hi;tmp_lo=x_lo;(tmp_hi,tmp_lo)++;x_hi=tmp_hi;x_lo=tmp_lo;
![Page 10: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/10.jpg)
Motivação• Basedecimal;• Palavrasdememóriacomtrêsdígitos;• xcomseisdígitos.
x++
tmp_hi=x_hi;tmp_lo=x_lo;(tmp_hi,tmp_lo)++;x_hi=tmp_hi;x_lo=tmp_lo;
tmp_hi=x_hi;//tmp_hi=1tmp_lo=x_lo;//tmp_lo=999(tmp_hi,tmp_lo)++;//tmp_hi=2
//tmp_lo=0x_hi=tmp_hi;//x_hi=2x_lo=tmp_lo; //x_lo=0
tmp_hi=x_hi;//tmp_hi=0tmp_lo=x_lo;//tmp_lo=999(tmp_hi,tmp_lo)++;//tmp_hi=1
//tmp_lo=0x_hi=tmp_hi;//x_hi=1
//x_lo=999//x=1999
x_lo=tmp_lo;//x=2000
x=999(x_hi=0,x_lo=999)
![Page 11: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/11.jpg)
Motivação• Protocolodeentradaemregiãocríticaporbusywaiting.while(!done){}...=x;
x=...;done=true;
![Page 12: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/12.jpg)
Motivação• Protocolodeentradaemregiãocríticaporbusywaiting.while(!done){}...=x;
x=...;done=true;
tmp=done;while(!tmp){}
tmp=done;if(!tmp)while(true){}
Possíveisotimizaçõesdocompilador
![Page 13: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/13.jpg)
Motivação• Protocolodeentradaemregiãocríticaporbusywaiting.while(!done){}...=x;
x=...;done=true;
tmp=done;while(!tmp){}
tmp=done;if(!tmp)while(true){}
Possíveisotimizaçõesdocompilador
while(!done){}...=x
x=...;done=true;
done=false
OK
![Page 14: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/14.jpg)
Motivação• Protocolodeentradaemregiãocríticaporbusywaiting.while(!done){}...=x;
x=...;done=true;
tmp=done;while(!tmp){}
tmp=done;if(!tmp)while(true){}
Possíveisotimizaçõesdocompilador
while(!done){}...=x
x=...;done=true;
while(!done){}x=...;
done=true;
while(!done){}x=...;done=true;
done=false
OK
loopinfinito
loopinfinito
![Page 15: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/15.jpg)
Motivação• Mesmonaausênciadeotimizaçõesdocompilador...• Gravaçõesexecutadasporumnúcleoobservadasemordem
distintaporoutrosnúcleos.
![Page 16: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/16.jpg)
Motivação• Mesmonaausênciadeotimizaçõesdocompilador...• Gravaçõesexecutadasporumnúcleoobservadasemordem
distintaporoutrosnúcleos.
while(!done){}y=x; //y=???
x=3133;done=true;
done=true;
x=3133;
Execuçãodonúcleo1Gravaçõesdonúcleo2observadaspelonúcleo1 Execuçãodonúcleo2
![Page 17: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/17.jpg)
Conceitos• Execuçãodeumprogramamultithreaded podeservistacomo
execuçãointercaladadepassosdecadathread• execuçãoé“sequencialmente consistente”seequivalea
algumaexecuçãointercaladadessespassos
– LinguagenscomoJava,C11eC++11oferecem “consistênciasequencial”paraprogramasquenãopossuemcondiçõesdecorrida.
![Page 18: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/18.jpg)
Conceitos• Duasoperaçõesemmemóriasãoconsideradasconflitantes
quandoacessamamesmalocalizaçãodememóriaepelomenosumadelaséumaescrita.
• condiçãodecorriga:operaçõesconflitantesemthreadsdistintasquepodemserexecutadas“aomesmotempo”.– execução“aomesmotempo”significaexecutar imediatamentedepois
navisãointercaladadeexecuçãosequencialdepassosdecadathread.– operaçõesdesincronizaçãonãocontam
• ausênciadecondiçõesdecorrida:nãohácondiçõesdecorridaemnenhumaexecuçãosequencialmente consistente
![Page 19: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/19.jpg)
Conceitos
r2=y;w=r2;
r1=x;v=r1;y=2;
![Page 20: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/20.jpg)
Conceitos
r2=y;w=r2;
r1=x;v=r1;y=2;
r2=y;
w=r2;
r1=x;v=r1;
y=2; Condiçãodecorrida
![Page 21: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/21.jpg)
Proposta• Escrevercódigolivredecondiçõesdecorrida.
• Aimplementaçãogarantea“consistênciasequencial”.
if(x)y=true
if(y)x=true
x=y=false
![Page 22: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/22.jpg)
Consequências• Emprogramaslivresdecondiçõesdecorrida:
– Percepçãodeexecuçãoatômicadeblocosdecódigosemsincronização;
– Indiferençaemrelaçãoàgranularidadedaatualizaçãodamemória(porbytesouporpalavras,porexemplo);
– Percepçãodeexecuçãoemumúnicopassodechamadasdebibliotecassemsincronizaçãointerna;
– Reduçãodacomplexidadederaciocinarsobreprogramasmultithreaded.
![Page 23: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/23.jpg)
Consequências• Basta(!)garantirqueblocosdecódigosemsincronizaçãoque
sejamexecutadosaomesmotemponãoescrevamouleiameescrevamasmesmasvariáveis.
• Bibliotecaspodemdividiraresponsabilidadeporevitarcondiçõesdecorridaentrecódigodoclienteedabiblioteca:– Clienteprecisaassegurarqueduaschamadassimultâneasnão
acessamomesmoobjetooupelomenosnãomodificamoobjeto.– Bibliotecaprecisaassegurarqueacessosaobjetosdistintoseacessos
deleituraaobjetosnãointroduzemcondiçõesdecorrida.
![Page 24: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/24.jpg)
ExclusãoMútua• Formamaiscomumdeevitarcondiçõesdecorrida.• Nãofuncionabemcomrotinasdetratamentodesinaise
interrupções.• Custodedesempenho.• Empthreads,emparticular,incidênciadebugsecondiçõesde
corrida“benignas”.
![Page 25: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/25.jpg)
VariáveisdeSincronização• Comovariáveisnormais(dedados),masacessossão
consideradosoperaçõesdesincronização.• Admitemacessosapartirdemúltiplasthreads semimplicar
condiçãodecorrida.• Exemplos:
– volatileint(Java)– atomic<int>(C++)
• Adequadasparacasossimplesdevariáveiscompartilhadas;inadequadasparaestruturasdedadoscomplexas.
![Page 26: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/26.jpg)
Linguagens• Java:
– Garanteconsistênciasequencialparaprogramaslivresdecondiçõesdecorrida.
– Localizaçõesdememória=camposdeobjetoouelementosdearray.– Conjuntocomplexoderegrasparadefinirocomportamentode
objetoscompartilhadosentrethreads, inclusivequandoocorremcondiçõesdecorrida.
– Qualquerobjetopodeserutilizadocomolock paraumblocodecódigosincronizado:synchronized ( objeto ) {
região crítica}
– Suportetambémaoperaçõesexplícitasdelock.– Variáveisdesincronização(volatile)nãopodemserelementosde
array egarantematomicidadeapenasnoacessoàmemória.
![Page 27: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/27.jpg)
Linguagens• C++11:
– Garanteconsistênciasequencialparaprogramaslivresdecondiçõesdecorrida.
– Suporteexplícitoathreads napróprialinguagem(std::thread).– Semcomportamentodefinidoparacondiçõesdecorrida.– Suportealocks comoperaçõesexplícitas(std::mutex).– Variáveisdesincronização(atomic)garantematomicidadenoacessoà
memóriaeemalgumasoperações (como++,porexemplo).
![Page 28: Variáveis Compartilhadas e Modelos de Memórianoemi/pcp-16/aula2/askyrme_sharedvars.pdf · execução intercalada de passos de cada thread • execução é “sequencialmente consistente”](https://reader033.vdocuments.site/reader033/viewer/2022060912/60a648212b07b853e924a678/html5/thumbnails/28.jpg)
estadodascoisas• Garantirausênciadecondiçõesdecorridaaindaéum
problemadifícil.• Avançosrecentes:
– Detecçãodinâmicadecondiçõesdecorrida;– Suportedehardwareparageraçãodeexceçõesparacondiçõesde
corrida;– Anotaçõesdelinguagensdeprogramaçãoparaeliminarcondiçõesde
corridaduranteaconcepçãodeprogramas.
• Viabilidadecomercialaindareduzida.