Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
PONTIFICIA UNIVERSIDADE CATOLICA DE MINAS GERAIS
Programa de Pos-Graduacao em Informatica
Lucas Henrique Silva Valentim
INTRODUCAO DE PROGRAMACAO PARALELA
HETEROGENEA EM OPENCL PARA ALUNOS DE
SISTEMAS DE INFORMACAO
Belo Horizonte
2019
Lucas Henrique Silva Valentim
INTRODUCAO DE PROGRAMACAO PARALELA
HETEROGENEA EM OPENCL PARA ALUNOS DE
SISTEMAS DE INFORMACAO
Dissertacao apresentada ao Programa dePos-Graduacao em Informatica da PontifıciaUniversidade Catolica de Minas Gerais, comorequisito parcial para obtencao do tıtulo deMestre em Informatica.
Orientador: Prof. Dr. Henrique Cota deFreitas
Belo Horizonte
2019
FICHA CATALOGRÁFICA
Elaborada pela Biblioteca da Pontifícia Universidade Católica de Minas Gerais
Valentim, Lucas Henrique Silva
V155i Introdução de programação paralela heterogênea em OPENCL para alunos
de sistemas de informação / Lucas Henrique Silva Valentim. Belo Horizonte,
2019.
138 f. : il.
Orientador: Henrique Cota de Freitas
Dissertação (Mestrado) – Pontifícia Universidade Católica de Minas Gerais.
Programa de Pós-Graduação em Informática
1. Programação paralela (Computação). 2. OpenCL (Linguagem de
programação de computador). 3. Algoritmos computacionais. 4. Estruturas de
dados (Computação). 5. Linguagem de programação (Computadores).
6. Estudantes universitários. 7. Sistemas de informação. 8. Ensino - Metodologia.
I. Freitas, Henrique Cota de. II. Pontifícia Universidade Católica de Minas Gerais.
Programa de Pós-Graduação em Informática. III. Título.
CDU: 681.3.01
Ficha catalográfica elaborada por Fabiana Marques de Souza e Silva - CRB 6/2086
Lucas Henrique Silva Valentim
INTRODUCAO DE PROGRAMACAO PARALELA
HETEROGENEA EM OPENCL PARA ALUNOS DE
SISTEMAS DE INFORMACAO
Dissertacao apresentada ao Programade Pos-Graduacao em Informatica comorequisito parcial para qualificacao aoGrau de Mestre em Informatica pelaPontifıcia Universidade Catolica deMinas Gerais.
Prof. Dr. Henrique Cota de Freitas – PUCMinas
Prof.a Dr.a Renata Mendes de Araujo –Mackenzie
Prof. Dr. Luıs Fabrıcio Wanderley Goes –PUC Minas
Belo Horizonte, 09 de Julho de 2019
Dedico este trabalho a minha esposa Raıssa Carolini
Goncalves Santos, ao meu filho Matheus Goncalves
Valentim e aos meus avos paternos e maternos, “In
Memorian”, pela existencia de meus pais, Luciana
Silva Valentim e Antonio Augusto Valentim, pois sem
eles este trabalho e muitos dos meus sonhos nao se
realizariam.
AGRADECIMENTOS
O presente trabalho foi realizado com apoio da Coordenacao de Aperfeicoamento de
Pessoal de Nıvel Superior – Brasil (CAPES) – Codigo de Financiamento 001, alem do apoio
do CNPq, FAPEMIG e PUC Minas. Agradeco em especial ao meu orientador Henrique
Cota de Freitas pelo suporte durante toda a pesquisa desenvolvida neste trabalho.
“A educacao tem raızes amargas, mas os seus
frutos sao doces.”
Aristoteles
RESUMO
Esta dissertacao apresenta uma abordagem a ser utilizada na introducao da programacao
paralela em ambientes heterogeneos nos cursos de Bacharelado em Sistemas de Informacao.
O principal objetivo dessa abordagem e possibilitar uma transicao suave entre o paradigma
de programacao sequencial para a programacao paralela em ambientes heterogeneos,
capacitando os alunos de graduacao a extrair melhor desempenho das arquiteturas
atuais. A proposta apresentada neste trabalho e composta por tres modulos, sao eles:
Modulo introdutorio, responsavel por introduzir os conceitos de programacao paralela e
computacao heterogenea, apresentar o paradigma de programacao paralela por meio da
linguagem de programacao OpenMP, resumir as principais caracterısticas da linguagem de
programacao OpenCL e auxiliar na configuracao de seu ambiente de desenvolvimento. O
segundo modulo e responsavel por unir a teoria com a pratica atraves de oito exercıcios com
nıveis de complexidade crescente que abordam algumas das caracterısticas de aplicacoes
paralelas. Por fim o terceiro modulo e composto por exercıcios avaliativos utilizados para
medir o desempenho dos alunos apos serem expostos a abordagem de ensino proposta
nesta dissertacao. A abordagem proposta foi aplicada em um estudo de caso onde
quinze alunos participaram. Os resultados obtidos mostram que apesar de necessitar de
melhorias a abordagem proposta nesta dissertacao obteve durante aplicacao do modulo
avaliativo media superior a 70% nas questoes relacionadas a programacao paralela e
aproximadamente 60% nas questoes relacionadas a computacao heterogenea. A media
de aprovacao geral foi de aproximadamente 66%.
Palavras-chave: OpenCL; Programacao Paralela; Arquitetura Paralela; Computacao
Heterogenea; Educacao; Sistemas de Informacao.
ABSTRACT
This dissertation presents an approach to be used in the introduction of parallel
programming in heterogeneous environments in the Bachelor of Information Systems
course. The main objective of this approach is to enable a smooth transition
between the sequential programming paradigm for parallel programming in heterogeneous
environments, enabling undergraduate students to extract better performance from
current architectures. The proposal presented in this paper is composed of three
modules, namely: Introductory module, responsible for introducing the concepts
of parallel programming and heterogeneous computation, presenting the parallel
programming paradigm through the OpenMP programming language, summarizing the
main characteristics of the programming language. OpenCL programming and assist in
configuring your development environment. The second module is responsible for linking
theory with practice through eight exercises with increasing levels of complexity that
address some of the characteristics of parallel applications. Finally, the third module
is composed of evaluation exercises used to measure students’ performance after being
exposed to the teaching approach proposed in this dissertation. The proposed approach
was applied in a case study where fifteen students participated. The results show that,
despite the need for improvements, the approach proposed in this dissertation obtained
during application of the mean evaluation module higher than 70 % in the questions related
to parallel programming and approximately 60 % in the questions related to heterogeneous
computation. The overall approval rating was approximately 66 %.
Keywords: OpenCL; Parallel Programming; Parallel Architecture; Heterogeneous
Computing; Education; Information Systems.
LISTA DE FIGURAS
FIGURA 1 – Taxonomia de Bloom Revisada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
FIGURA 2 – Desempenho de chips multi-core e single-core . . . . . . . . . . . . . . . . . . . . . 28
FIGURA 3 – Taxonomia de Flynn - SISD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
FIGURA 4 – Taxonomia de Flynn - SIMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
FIGURA 5 – Taxonomia de Flynn - MISD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
FIGURA 6 – Taxonomia de Flynn - MIMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
FIGURA 7 – Modelo Fork-Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
FIGURA 8 – OpenMP Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
FIGURA 9 – Memoria Compartilhada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
FIGURA 10 – Principais Componentes OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
FIGURA 11 – Abstracao OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
FIGURA 12 – Regioes de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
FIGURA 13 – Comparacao FOR / ND-Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
FIGURA 14 – Mapeamento da funcao Kernel com WorkGroup . . . . . . . . . . . . . . . . . . 39
FIGURA 15 – Desenvolvimento da abordagem proposta . . . . . . . . . . . . . . . . . . . . . . . . 45
FIGURA 16 – Processo de elaboracao do questionario . . . . . . . . . . . . . . . . . . . . . . . . . . 47
FIGURA 17 – Aplicacao Questionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
FIGURA 18 – Aplicacao exercıcios avaliativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
FIGURA 19 – Heterogeneidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
FIGURA 20 – Programacao Paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
FIGURA 21 – Aplicacao exercıcios avaliativos praticos . . . . . . . . . . . . . . . . . . . . . . . . . 66
FIGURA 22 – % de aprovacao do minicurso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
FIGURA 23 – Multiplicador de vetor simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
FIGURA 24 – Multiplicador de vetor simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
FIGURA 25 – Ordenacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
FIGURA 26 – Planning and Budgeting Cloud Services - Rule Creator . . . . . . . . . . . . 73
LISTA DE TABELAS
TABELA 1 – Linguagens abordadas por trabalhos relacionados . . . . . . . . . . . . . . . . . . 42
TABELA 2 – Correlacao exercıcio avaliativo com Heterogeneidade e Paralelismo . . . 62
TABELA 3 – Capacidades dos egressos dos cursos de graduacao na area de Computacao115
TABELA 4 – Habilidades e competencias mınimas dos egressos de cursos de
graduacao em Computacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
TABELA 5 – Capacidades dos egressos do curso de graduacao em SI . . . . . . . . . . . . . 117
TABELA 6 – Habilidades e competencias mınimas dos egressos do curso de SI . . . . . 118
LISTA DE ALGORITMOS
ALGORITMO 1 – Multiplicacao de vetor simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
ALGORITMO 2 – Multiplicacao de vetor por vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
ALGORITMO 3 – Multiplicacao de matriz por constante . . . . . . . . . . . . . . . . . . . . . . . 54
ALGORITMO 4 – Calculo de PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
ALGORITMO 5 – Multiplicacao de matriz por matriz . . . . . . . . . . . . . . . . . . . . . . . . . . 55
ALGORITMO 6 – Ordenacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
ALGORITMO 7 – Reducao Numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
ALGORITMO 8 – Friendly-Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
ALGORITMO 9 – K-means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
LISTA DE ABREVIATURAS E SIGLAS
GPU Unidade de Processamento Grafico
CPU Unidade Central de Processamento
CU Unidade de computacao
PE Elemento de processamento
API Interface de programacao
IDE Ambiente de desenvolvimento integrado
MIMD Multiplas intrucoes sobre multiplos dados
MISD Multiplas instrucoes sobre um unico dado
SIMD Uma unica instrucao sobre multiplos dados
SISD Uma unica instrucao sobre um unico dado
MEC Ministerio da Educacao
SBC Sociedade Brasileira de Computacao
AMD Advanced Micro Devices
OpenMP Open Multi-Processing
OpenCL Open Computingn Language
DCN Diretrizes Curriculares Nacionais
RF-SI Referencial de formacao de Sistemas de Informacao
RF Referencial de formacao
UMA Uniform memory access
NUMA Non-uniform memory access
FPGA Field Programmable Gate Array
NUST National University of Sciences and Technology
SDK Software development kit
SUMARIO
1 INTRODUCAO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.1 Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.2 Objetivos Especıficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4 Organizacao da Dissertacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2 REFERENCIAL TEORICO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1 Formacao em Computacao e Sistemas de informacao . . . . . . . . . . . . 23
2.1.1 Diretrizes Curriculares Nacionais . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.2 Referenciais de Formacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.3 Programacao paralela e Computacao heterogena dentro doRF-SI e DCNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.3.1 DCNs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1.3.2 RF-SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2 Arquiteturas Paralelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3 OpenMP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4 OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4.1 Principais Componentes OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4.2 Abstracao OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.2.1 Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.2.2 Regioes de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.4.2.3 Processamento paralelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3 TRABALHOS RELACIONADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1 Identificacao da necessidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.1 Questionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.2 Exercıcios avaliativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Construcao dos modulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.2.1 Aplicacao e analise de resultados. . . . . . . . . . . . . . . . . . . . . . . . . . 49
5 PROPOSTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1 Modulo introdutorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2 Modulo pratico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.3 Modulo Avaliativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.1 Aplicacao da abordagem proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.1.1 Resultados obtidos apos aplicacao da abordagem . . . . . . . . . . . . . 63
6.2 Impacto da programacao sequencial sobre arquiteturas paralelas eheterogeneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7 DISCUSSAO SOBRE ABORDAGEM PROPOSTA . . . . . . . . . . . . . . . . . . 71
7.1 Analise da grade curricular do curso de Bacharelado em SI da PUCMinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.2 Impacto nas funcoes exercidas pelos egressos no mercado de trabalho 72
8 CONCLUSAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
REFERENCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
APENDICE A -- ALGORITMOS DESENVOLVIDOS . . . . . . . . . . . . . . . . . . . 79
APENDICE B -- EXERCICIOS AVALIATIVOS . . . . . . . . . . . . . . . . . . . . . . . . . 97
B.1 Exercıcio para avaliacao previa de conhecimento . . . . . . . . . . . . . . . 97
B.2 Exercıcios para avaliacao da abordagem proposta . . . . . . . . . . . . . . . 103
APENDICE C -- QUESTIONARIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
ANEXO A -- DIRETRIZES CURRICULARES NACIONAIS . . . . . . . . . . . . 115
ANEXO B -- REFERENCIAL DE FORMACAO PARA O CURSO DESISTEMAS DE INFORMACAO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
B.1 Eixo de formacao : Visao Sistemica . . . . . . . . . . . . . . . . . . . . . . . . . . 119
B.1.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 119
B.1.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
B.2 Eixo de formacao : Gestao de sistemas de informacao e datecnologia da informacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
B.2.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 121
B.2.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
B.3 Eixo de formacao : Desenvolvimento de software para Sistemas deInformacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
B.3.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 124
B.3.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
B.4 Eixo de formacao : Engenharia de dados e informacao . . . . . . . . . . . 127
B.4.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 127
B.4.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
B.5 Eixo de formacao : Infraestrutura para Sistemas de Informacao . . . 130
B.5.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 130
B.5.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
B.6 Eixo de formacao : Pesquisa, inovacao e empreendedorismo . . . . . . 131
B.6.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 131
B.6.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
B.6.3 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
B.7 Eixo de formacao : Desenvolvimento pessoal e profissional . . . . . . . 134
B.7.1 Competencia Geral esperada para o eixo: . . . . . . . . . . . . . . . . . . . 134
B.7.2 Competencias derivadas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
B.8 Relacao com as Diretrizes Curriculares Nacionais . . . . . . . . . . . . . . . 136
B.8.1 Competencias e habilidades gerais dos egressos dos Cursos deBacharelado e Licenciatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
B.8.2 Competencias e habilidades dos egressos dos Cursos deBacharelado em Sistemas de Informacao . . . . . . . . . . . . . . . . . . 137
19
1 INTRODUCAO
Grande parte dos estudos cientıficos em arquitetura na decada de oitenta ate
meados da decada de 90, estavam focados em viabilizar o aumento de frequencia dos
processadores. Esse perıodo ficou conhecido como a corrida pelo aumento de frequencia.
A estrategia de aumento de frequencia nao vem sendo mais utilizada nos moldes anteriores
devido a limitacoes tais como: aumento do consumo de energia desproporcional ao
ganho de desempenho obtido, pipeline muito profundo e ineficiente, pois o tempo de
comunicacao entre as etapas se torna maior que o tempo de execucao das instrucoes,
dificuldade para conter dissipacao de calor e pelo hiato criado entre a velocidade em
que o processador processa as informacoes e a velocidade em que a memoria consegue
entregar essas informacoes ao processador (BORKAR, 2007),(KEYES, 2001). Essa diferenca
e conhecida como Gargalo de von Neumann (LU et al., 2013).
A escalada da frequencia era uma otima forma de aumentar o desempenho
computacional, pois ao aumentar a frequencia aumentava-se o desempenho das aplicacoes
sem a necessidade de alteracao de codigo fonte das mesmas. Com o objetivo de transpor as
limitacoes encontradas no grande aumento de frequencia e continuar atendendo a demanda
por desempenho, que e crescente e contınua, surge a estrategia de fabricar chips com mais
de um processador. Essa estrategia tem como resultado os processadores de proposito
geral multi-core e consequentemente os many-core.
A diminuicao dos transistores atualmente e responsavel por possibilitar um maior
numero de nucleos dentro de um processador e nao mais por possibilitar o grande aumento
de frequencia. Alem disto pode-se visualizar que a performance da arquitetura e do
software vinham crescendo juntos quando os estudos estavam centralizados em aumento
de frequencia. Porem, quando essa estrategia se tornou inviavel, foi necessario adotar uma
abordagem que consiste na paralelizacao do processamento (DITTAMO, 2009) (BELIKOV;
LOIDL; MICHAELSON, 2014). Dessa forma, o potencial de hardware volta a subir em uma
escala exponencial, enquanto o software nao acompanha esse desempenho, pois diferente
do aumento de frequencia, a estrategia de processamento paralelo exige mudanca no
desenvolvimento da aplicacao para extrair o maximo desempenho dos diversos nucleos,
e e altamente dependente do potencial paralelo da aplicacao. Sendo assim, desenvolver
aplicacoes inteiramente sequenciais ja nao faz mais sentido, e necessario que as aplicacoes
acompanhem as mudancas arquiteturais.
As arquiteturas atuais sao alem de paralelas, heterogeneas. Uma arquitetura
heterogenea e composta por mais de um tipo de processador, como por exemplo uma
arquitetura que tenha um processador de proposito especıfico e um processador de
proposito geral trabalhando juntos para executar aplicacoes, sendo que cada um sera
20
responsavel por executar a carga de trabalho que tiver caracterısticas que se comportem
melhor em sua arquitetura, possibilitando extrair de cada aplicacao o melhor desempenho
(STRINGHINI; GONCALVES; GOLDMAN, 2012).
A mudanca do cenario onde os processadores eram sequenciais e sua arquitetura
homogenea para computadores paralelos e compostos por processadores de proposito
especıfico e geral, modifica o ensino de programacao e de arquitetura de computadores
(MURESANO; REXACHS; LUQUE, 2010). No cenario atual, para extrair o desempenho
maximo das arquiteturas e necessario saber programar de forma paralela, e ter
conhecimento sobre as diferentes propostas de arquiteturas e suas caracterısticas
(PAPRZYCKI, 2006). Sendo assim, e necessario que os programadores se atualizem e
se capacitem, de maneira a estarem aptos a desenvolver aplicacoes capazes de consumir
o potencial de hardware disponıvel nas arquiteturas atuais. Arquiteturas que sao tanto
paralelas quanto heterogeneas. A atualizacao dos cursos de graduacao nao se mostra uma
tarefa trivial, uma vez que o ensino de programacao paralela por si so exige uma quebra
no paradigma de ensino praticado atualmente em varios cursos de computacao. Alem
disto, ha a necessidade do ensino da computacao heterogenea.
Tendo sido identificada a falta de conhecimento em programacao paralela e
computacao heterogenea em alguns cursos de computacao, foi desenvolvido um estudo
de caso com o objetivo de num primeiro momento verificar o nıvel de conhecimento em
programacao paralela e computacao heterogenea dos alunos formados no curso de Sistemas
de informacao da Pontifıcia Universidade Catolica de Minas Gerais e posteriormente
expo-los a abordagem de introducao de programacao paralela em ambientes heterogeneos
proposta nesta dissertacao, com o objetivo de comparar seu desempenho antes e apos o
contato com o conteudo disponibilizado pelo autor.
Pesquisas vem sendo desenvolvidas com o proposito de transpor os obstaculos
identificados com o objetivo de facilitar a introducao do paradigma de programacao
paralela em ambientes heterogeneos. Porem, nao foi identificado nenhum trabalho
academico que tenha disponibilizado uma metodologia capaz de abordar de forma
abrangente e correlacionada os conceitos de programacao paralela, arquitetura de
computadores e computacao heterogenea. Sendo assim, este trabalho visa contribuir
com uma abordagem para introduzir estes topicos por meio da utilizacao da linguagem
OpenCL, que e uma linguagem padronizada pelo KhronosGroup. Grupo este que e
integrado por diversas empresas como Intel corporation, NVIDIA, Sun Microsystems,
AMD, entre outras. KhronosGroup estabeleceu que todas as arquiteturas desenvolvidas
pelas empresas parceiras, apos a criacao do consorcio, deveriam ter suporte a
OpenCL. Dessa forma, OpenCL e uma linguagem gratuita, com grande capilaridade e
possibilita extrair desempenho de arquiteturas heterogeneas. Pelas caracterısticas listadas
anteriormente, a linguagem OpenCL foi escolhida para ser utilizada no desenvolvimento
21
desta abordagem (MUNSHI, 2009).
1.1 Problema
Em um cenario onde os processadores many-core e multi-core se confirmaram como
tendencia (MURESANO; REXACHS; LUQUE, 2010), alguns cursos de Sistemas de Informacao
ainda nao abordam os topicos de programacao paralela e computacao heterogenea, tendo
como resultado egressos que desenvolvem aplicacoes sequenciais para serem executados
sobre arquiteturas paralelas e heterogeneas (ZORZO et al., 2017), resultando em enorme
desperdıcio de potencial de hardware, fazendo com que aplicacoes gastem mais tempo
para serem executadas do que necessario. Desta forma, o problema se resume na seguinte
pergunta: Como introduzir programacao paralela e computacao heterogenea para alunos
de Sistemas de Informacao?
1.2 Objetivos
Essa secao apresenta o objetivo geral desta pesquisa. Em seguida sao listados
os objetivos especıficos que representam os pontos intermediarios desenvolvidos neste
trabalho.
1.2.1 Objetivo Geral
Desenvolver uma abordagem para introducao de programacao paralela e
computacao heterogenea para alunos do curso de graduacao de Sistema de Informacao.
1.2.2 Objetivos Especıficos
Para atingir o objetivo geral os seguintes objetivos especıficos foram necessarios:
• Desenvolver aplicacoes em OpenCL com nıveis de complexidade crescente;
• Desenvolver um material capaz de resumir as principais caracterısticas da linguagem
de programacao OpenCL e configuracao do ambiente de desenvolvimento;
• Desenvolver um questionario com o objetivo de avaliar o conhecimento previo dos
alunos do cursos de Sistemas de Informacao em relacao aos topicos abordados nesta
dissertacao;
• Elaborar e avaliar um conjunto de exercıcios e resultados obtidos referente a
aplicacao da abordagem proposta;
22
1.3 Justificativa
Existe um grande investimento financeiro e de tempo em pesquisas relacionadas
a arquiteturas heterogeneas, haja vista que a demanda por alto desempenho e baixo
consumo de energia e alta e constante. Sendo assim, novas propostas de arquiteturas
paralelas e heterogeneas vem surgindo e se confirmando como tendencia. Em um cenario
como esse e essencial que egressos de cursos de graduacao de computacao que abordem
os assuntos relacionados ao desenvolvimento de aplicacoes, estejam aptos a identificar
aplicacoes com potencial paralelo, propostas arquiteturais ideais para suas aplicacoes e
desenvolver softwares capazes de extrair o potencial de processamento disponıvel nestas
novas propostas arquiteturais, pois caso contrario um enorme potencial de hardware sera
desperdicado e em alguns casos aplicacoes consumirao mais energia do que necessario,
prejudicando tanto os usuarios das aplicacoes quanto o meio ambiente e limitando o
desenvolvimento tecnologico.
1.4 Organizacao da Dissertacao
A dissertacao se divide nos seguintes capıtulos:
No Capıtulo 2 e apresentado o referencial teorico que serve como base
para entendimento dos conceitos envolvidos em programacao paralela e computacao
heterogenea alem de apresentar, de forma resumida, caracterısticas da linguagem de
programacao utilizada no modulo pratico OpenCL. O Capıtulo 3 identifica os trabalhos
relacionados e as suas diferencas em relacao a proposta desenvolvida nesta dissertacao.
O Capıtulo 4 detalha a metodologia definida para a realizacao deste trabalho. No
Capıtulo 5 e apresentada a proposta de introducao de programacao paralela em ambientes
heterogeneos desenvolvida nesta dissertacao. No Capıtulo 6 sao exibidos os resultados da
aplicacao da abordagem proposta apos aplicacao em um estudo de caso. No Capıtulo 7
e feita uma discussao a cerca da abordagem proposta em relacao a grade curricular do
curso de Bacharelado de Sistemas de Informacao da PUC Minas e por fim, o Capıtulo 8
apresenta a conclusao.
23
2 REFERENCIAL TEORICO
Esse Capıtulo identifica e descreve os principais componentes, assuntos e materiais
que influenciaram de forma direta ou indireta a pesquisa descrita nesta dissertacao.
2.1 Formacao em Computacao e Sistemas de informacao
Essa secao apresenta as Diretrizes Curriculares Nacionais (DCNs) elaboradas e
aprovadas pelo MEC, o Referencial de Formacao em Sistemas de Informacao (RF-SI)
elaborado pela Sociedade Brasileira de Computacao (SBC) com base nas DCNs e por fim
identifica os principais topicos tanto da RF-SI, quanto das DCNs que estao relacionados
com a programacao paralela e a computacao heterogenea.
2.1.1 Diretrizes Curriculares Nacionais
As Diretrizes Curriculares Nacionais (DCNs), homologadas em novembro de 2016,
por meio da Resolucao No 05 de 16/11/2016 (ZORZO et al., 2017) surgiram a partir
dos currıculos de referencia e discussoes a respeito de como os cursos de graduacao em
computacao deveriam ser conduzidos. Tal Resolucao aborda os cursos de Computacao,
sendo incluıdos os cursos de Bacharelado em: Ciencia da Computacao, Sistemas de
Informacao, Engenharia de Computacao, Engenharia de Software e Licenciatura em
Computacao. A Sociedade Brasileira de Computacao (SBC) teve um papel fundamental
no direcionamento do ensino de computacao no Brasil e neste processo que culminou na
criacao das DCNs. Cada sistema de ensino ao elaborar seu currıculo e projeto pedagogico
deve basear-se nas DCNs e buscar desenvolver habilidades e competencias das Tabelas 4
Anexo A e 6 Anexo A para que o egresso de seus cursos, seja capaz de desenvolver as
atividades listadas na Tabela 3 Anexo A que se refere a todos os cursos de Computacao e
especificamente tenha as competencias relacionadas ao curso de Sistemas de Informacao
listadas na Tabela 5 Anexo A.
2.1.2 Referenciais de Formacao
A Sociedade Brasileira de Computacao (SBC) com o objetivo de auxiliar na
elaboracao de projetos pedagogicos de cursos de Computacao, seguindo as definicoes
feitas por meio das (DCNs), elaborou os Referenciais de Formacao (RFs), que objetivam
auxiliar na elaboracao de projetos pedagogicos dos cursos de Computacao abordados
24
pelas (DCNs), tendo tambem o objetivo de transmitir de forma transparente para os
interessados a natureza destes cursos (ZORZO et al., 2017).
Araujo et al. foram os responsaveis por desenvolver o Referencial de Formacao para
o curso de Bacharelado em Sistemas de Informacao (ZORZO et al., 2017), com o objetivo
de auxiliar na elaboracao de projetos pedagogicos de cursos de Bacharelado em Sistemas
de Informacao (RF-SI), sendo este especificamente o Referencial citado nesta dissertacao
(ZORZO et al., 2017).
O desenvolvimento dos (RFs) e feito com base em uma abordagem por competencia
(ZORZO et al., 2017), ao inves do modelo convencional que utiliza uma abordagem
por conteudo. Segundo (ZORZO et al., 2017), que cita (KLINK; BOON; SCHLUSMANS,
2007), ”As principais vantagens de uso de uma abordagem por competencias sao: sua
reconhecida capacidade em dar significado ou razao aos conteudos de conhecimento que
compoem o currıculo; a ampliacao do currıculo para incluir habilidades e atitudes, alem
de conhecimento; e uma maior aderencia ao perfil do egresso esperado pelo curso”. Dentre
as abordagens por conteudo existentes, a SBC optou por desenvolver os Referenciais de
Formacao (RFs) dos cursos de computacao com base na Taxonomia de Bloom Revisada.
Segundo essa abordagem, a SBC desenvolveu os (RFs) conforme ilustrado na Figura 1,
onde o objetivo geral do curso e definido com base no perfil esperado para o egresso
e detalhado em eixos de formacao que objetivam capacitar o mesmo em competencias
genericas, que se ramificam em competencias derivadas que precisam ser adquiridas
para que o aluno obtenha as competencias genericas. Esse aprendizado se da por meio
do contato com conteudos especıficos abordados dentre outras formas pelas disciplinas
(ZORZO et al., 2017).
25
Figura 1 – Taxonomia de Bloom Revisada
Fonte: (ZORZO et al., 2017)
As competencias derivadas de eixos de formacao representam o maior nıvel da
Taxonomia de Bloom Revisada - Criar, Avaliar e Analisar. Sendo que os cursos ao
desenvolverem seus projetos pedagogicos ficam livres para definir a estrategia que sera
utilizada para alcancar as competencias genericas deriviando-as em competencias mais
especıficas em nıveis mais basicos da taxonomia - Aplicar, Entender e Lembrar, ate
chegarem ao nıvel de Conteudos (FERRAZ; BELHOT et al., 2010). As definicoes feitas
por meio das DCNs e RF-SI podem ser vistas nos Anexos A e B.
2.1.3 Programacao paralela e Computacao heterogena dentro do RF-SI eDCNs
As DCNs definem de forma generica o perfil esperado e as habilidades dos egressos,
conforme pode ser visto nas Tabelas 3, 4, 5 e 6, que se referem em parte exclusivamente
ao curso de Sistemas de Informacao. Dessa forma, cada sistema de ensino, ao elaborar
seu currıculo e projeto pedagogico, deve desenvolver conteudos que possibilitem que
seus egressos tenham alcancado os topicos identificados pelas DCNs. Ficando estes
responsaveis por uma formacao deficitaria de seus alunos caso nao o facam em sua
totalidade, porem, ficando livres para dar enfase em topicos de acordo com as necessidades
locais e focos de ensino da instituicao. Um dos objetivos das (RFs) e auxiliar na
construcao do projeto pedagogico das instuicoes de ensino, dessa forma, a RF-SI identifica
26
as competencias que os egressos do curso de Sistemas de Informacao devem possuir.
Tanto na (RF-SI) quanto nas DCNs, e possıvel identificar topicos que estao direta
ou indiretamente relacionados com a programacao paralela e a computacao heterogenea.
Para que um egresso do curso de Sistemas de Informacao seja capaz de desenvolver as
habilidades e competencias definidas por estes topicos e necessario que a programacao
paralela e computacao heterogenea sejam contempladas na grade curricular dos cursos de
Sistemas de Informacao. As subsecoes a seguir listam os topicos.
2.1.3.1 DCNs
Em relacao as diretrizes especıficas para os cursos de computacao em geral:
1) Tomar decisoes e inovar, com base no conhecimento do funcionamento e das
caracterısticas tecnicas de hardware e da infraestrutura de software dos sistemas de
computacao consciente dos aspectos eticos, legais e dos impactos ambientais decorrentes.
2) Avaliar criticamente projetos de sistemas de computacao.
3) Adequar-se rapidamente as mudancas tecnologicas e aos novos ambientes de
trabalho.
E em relacao as diretrizes especıficas para o curso de Sistemas de Informacao:
1) Modelar e implementar solucoes de Tecnologia de Informacao em variados
domınios de aplicacao
2) Gerenciar o desempenho das aplicacoes e a escalabilidade dos sistemas de
informacao
2.1.3.2 RF-SI
1) Eixo de formacao: Gestao de sistemas de informacao e da tecnologia da
informacao:
Competencia: C.2.4, que aborda os conteudos: Aquisicao de infraestrutura,
servicos e aplicacoes
2) Eixo de formacao: Desenvolvimento de softwares para sistemas de informacao:
Competencias: c.3.1, c.3.3, c.3.4 e c.3.6 que abordam os conteudos: Componente
de sistemas de informacao, Programacao de Computadores, Fundamento de Linguagens
de Programacao, Algoritmos e Complexidade, e Manutencao de software.
3) Eixo de formacao: Engenharia de dados e informacao
27
Competencia: C.4.5 que aborda os conteudos: Mineracao de dados e Big data.
4) Eixo de formacao: Infraestrutura para Sistemas de Informacao
Competencia: C.5.1 que aborda o conteudo: Arquitetura de Computadores
2.2 Arquiteturas Paralelas
Para possibilitar o aumento de frequencia em chips com somente um processador,
algumas caracterısticas na arquitetura precisam ser alteradas. As principais caracterısticas
que precisam ser modificadas sao: diminuir o tamanho do transistor e desenvolver pipilines
profundos de forma que o perıodo de tempo para executar uma funcao do pipiline seja
pequeno. Sendo assim, a frequencia pode ser alta, porem, essa tecnica atinge um limite
onde se torna inviavel aumentar o desempenho dos processadores apenas aumentando a
frequencia, principalmente por dois motivos, sao eles: consumo de energia nao traduzir
o ganho em desempenho, e o segundo pipilines muito profundos passarao a gastar mais
tempo transferindo informacoes de uma etapa para outra, do que realizando as tarefas de
processamento (HENNESSY; PATTERSON, 2011).
Para conseguir continuar atendendo a demanda crescente por desempenho das
aplicacoes, surge uma nova proposta de arquitetura que e inserir mais de um processador
em um mesmo chip. Dessa forma, surgem os chips multi-core e many-core. Ao trocar o
aumento de frequencia pela arquitetura paralela, os pesquisadores passam a ter de lidar
com o potencial paralelo da aplicacao e com a necessidade de paralelizacao dos codigos
para ter ganho de desempenho.
A diferenca entre o desempenho do hardware e do software em arquiteturas
paralelas pode ser vista na Figura 2.
28
Figura 2 – Desempenho de chips multi-core e single-core
Fonte: (DITTAMO, 2009).
Alguns pesquisadores afirmam que no futuro um chip sera composto por milhares
de nucleos de processamento e com processadores de propositos diferentes em um
mesmo chip, exigindo assim que novos modelos de arquitetura e programacao sejam
desenvolvidos. Podemos perceber que o aumento do numero de processadores e utilizacao
de processadores de proposito especıfico e geral e uma tendencia que vem se confirmando
(HENNESSY; PATTERSON, 2011).
O pensamento acerca da execucao de operacoes paralelas surge em 1966 quando e
apresentada a taxonomia de Flynn (FLYNN; RUDD, 1996), que classifica os diferentes tipos
de execucao paralela em quatro categorias, sao elas:
Single Struction stream, Single Data stream (SISD) - Essa classe representa os
chips que contem um unico processador e o mesmo executa uma unica instrucao por
iteracao em um unico dado (Figura 3).
29
Figura 3 – Taxonomia de Flynn - SISD
Fonte: (ROSE; NAVAUX, 2002).
Single Instruction stream, Multiple Data streams (SIMD) - Essa classe representa
as arquiteturas onde uma mesma instrucao e executada em paralelo sobre um mesmo
conjunto de dados (Figura 4).
Figura 4 – Taxonomia de Flynn - SIMD
Fonte: (ROSE; NAVAUX, 2002).
Multiple Instruction streams, Single Data stream (MISD) - Essa classe representa
as arquiteturas onde diferentes tarefas sao executadas sobre um mesmo dado. Essa
arquitetura nao e encontrada em processadores comerciais, por nao representar uma
necessidade atual das aplicacoes (Figura 5).
30
Figura 5 – Taxonomia de Flynn - MISD
Fonte: (ROSE; NAVAUX, 2002).
Multiple Instruction streams, Multiple Data stream (MIMD) - Essa classe
representa as arquiteturas onde diferentes tarefas sao executadas em simultaneo sobre
diferentes conjuntos de dados (Figura 6).
Figura 6 – Taxonomia de Flynn - MIMD
Fonte: (ROSE; NAVAUX, 2002).
Apesar da classificacao de Flynn ter sido desenvolvida em 1966, ela e capaz de
31
abranger todas as diferentes arquiteturas desenvolvidas atualmente no que diz respeito
a como o paralelismo e implementado. Nesse trabalho, as arquiteturas heterogeneas sao
compostas por arquiteturas MIMD e SIMD.
2.3 OpenMP
OpenMP e uma Aplication Programing Interface - (API) que pode ser utilizada
para paralelizar trechos de codigos sequenciais por meio de diretivas para o compilador.
Seu modelo e baseado no modelo Fork-Join que pode ser visto na Figura 7. Nesse modelo
o codigo inicia sendo executado de forma sequencial por meio de uma unica Thread
Master, ate que um trecho paralelo seja identificado pelo compilador. Esse trecho tera seu
processamento dividido em N threads que serao encaminhadas para serem executadas em
paralelo para os elementos de processamento da CPU, sendo N um valor padrao definido
pelo compilador ou pelo proprio programador, que comumente e representado pelo numero
de processadores do CPU. Apos a execucao do trecho paralelo, o processamento volta a
ser sequencial e executado pela Thread Master (DAGUM; MENON, 1998). A marcacao de
trechos paralelos e feita pelo proprio programador por meio de diretivas que indicam o
inıcio e fim do trecho de codigo que devera ser executado de forma paralela, sendo o mesmo
responsavel por identificar trechos com: dependencia de dados e condicoes de corrida com
o objetivo de trata -los de maneira que o processamento paralelo nao resulte em valores
incorretos ao final de sua execucao (DAGUM; MENON, 1998).
Figura 7 – Modelo Fork-Join
Fonte: Proprio Autor
Para que o programador possa paralelizar seus codigos por meio da API OpenMP, e
necessario que a arquitetura utilizada tenha um processador que a nıvel de hardware tenha
32
um unico espaco de enderecamento para todos seus elementos de processamento. Tambem
e necessario que o sistema operacional utilizado tenha suporte a memoria compartilhada,
execucao em threads e que o compilador tenha suporte a OpenMP, como pode ser visto
na Figura 8. Os sistemas operacionais que atendem as exigencias sao o Unix e Windows.
Figura 8 – OpenMP Layer
Fonte: Proprio Autor
A API OpenMP foi desenvolvida para ser executada sobre hardware com tecnologia
de memoria compartilhada, podendo estas serem memorias com acesso uniforme - (UMA)
ou memorias com acesso nao uniforme - (NUMA). Em memorias UMA, cada elemento
de processamento leva o mesmo tempo para acessar uma regiao de memoria, haja vista
que os barramentos que interligam os elementos de processamento a memoria sao iguais.
Ja em memorias NUMA, os elementos de processamento estao agrupados em Clusters,
onde cada Cluster tem uma regiao de memoria. Dessa forma, para que um elemento
de processamento tenha acesso a memoria de outro Cluster que nao o seu proprio, e
necessario um barramento de interconexao interligando os diferentes Clusters. Sendo
assim, em memorias NUMA, o tempo de acesso de um elemento de processamento a sua
33
propria regiao de memoria e diferente de um elemento de processamento que acessa a
memoria de um Cluster vizinho (LAMETER et al., 2013), (NIELSEN; HUSSAIN, 2000). As
memorias NUMA e UMA tem seu modelo ilustrado na Figura 9.
Figura 9 – Memoria Compartilhada
Fonte: Proprio Autor
Por OpenMP ser uma API que faz uso de memoria compartilhada, uma regiao
de memoria global pode tentar ser acessada por mais de uma thread. Esse problema e
conhecido como condicao de corrida. OpenMP possibilita solucionar este problema por
diversas maneiras, uma delas e por meio de uma diretiva Atomic. Essa diretiva garante
que as demais threads entrem em estado de espera, enquanto uma unica thread acessa
uma regiao de memoria em especıfico. Tal diretiva impacta diretamente no desempenho
da aplicacao. Outro problema inerente a programacao paralela e a dependencia de dados.
Em momentos onde a dependencia for identificada, o programador deve trata-la alterando
a estrategia do algoritmo ou por meio de diretivas que sincronizam os dados em um certo
ponto do codigo. O sincronismo de threads tambem impacta na performance da aplicacao
(OPENMP,2008).
2.4 OpenCL
As informacoes contidas nesta secao tem o objetivo de identificar as principais
caracterısticas da linguagem OpenCL, de forma reduzida e simplificada, o que
nao substitui a necessidade de leitura da especificacao OpenCL disponıvel em:
https://www.khronos.org/registry/OpenCL/. O documento se restringe a explicar as
principais caracterısticas da versao OpenCL 1.2, pois nem todos os fabricantes suportam
as versoes superiores. Vale ressaltar que restringir a explicacao a versao 1.2 nao torna o
34
documento desatualizado, pois as caracterısticas exemplificadas aqui se mantem na versao
2.0.
A linguagem de programacao OpenCL, disponibilizada pelo consorcio
KhronosGroup, surge com o proposito de unificar o cenario de programacao paralela
e heterogenea, por meio de uma linguagem livre, tendo como objetivo o aumento de
produtividade dos programadores, evitando que os mesmos tenham que se adaptar aos
diferentes fabricantes de hardware. Para possibilitar a portabilidade do codigo OpenCL
entre os diferentes fabricantes de hardware, que fazem parte do consorcio KhronosGroup,
entre outros requisitos que viabilizam o bom funcionamento do codigo, e necessario que
estes implementem o suporte a abstracao arquitetural exigida pela linguagem.
2.4.1 Principais Componentes OpenCL
Esta secao apresenta uma visao macro acerca dos principais elementos que
compoem a programacao em OpenCL. A Figura 10 ilustra estes componentes.
Figura 10 – Principais Componentes OpenCL
Fonte: Proprio Autor
Como exemplificado na Figura 10 a proposta da programacao em OpenCL e extrair
eficiente desempenho de uma arquitetura heterogenea. Isso e possıvel, pois diferentes
hardwares como CPU, GPU, Xeon PHI e FPGA sao programaveis por meio da linguagem
de programacao OpenCL C e coordenados pelo controlador por meio de uma API. Dessa
forma, e possıvel que trechos dos codigos sejam executados em diferentes hardwares, como
por exemplo, um trecho com baixo potencial paralelo pode ser executado no proprio Host
sequencialmente, e outro trecho, com alto potencial paralelo, escrito em OpenCL C pode
ser executado na GPU possibilitando, assim, extrair as qualidades de diferentes propostas
de arquitetura.
A programacao em OpenCL e composta por duas linguagens de programacao
35
semelhantes, sao elas: API Controladora que e desenvolvida em C e a linguagem de
programacao OpenCL C que herdou grande parte das caracterısticas da linguagem C99,
porem, com restricoes tais como nao permitir o uso de recursividade.
A API controladora e utilizada para coordenar o funcionamento de todos os
dispositivos. Sendo assim, o programador utiliza essa API para informar aos dispositivos
o que eles devem fazer, por exemplo: quantas vezes devem repetir a execucao de um trecho
de codigo, quais regioes de memoria estao disponıveis para os dispositivos, se um comando
enviado deve esperar pela finalizacao de outro, entre outras diversas formas disponıveis
para realizar a coordenacao dos dispositivos.
A linguagem de programacao OpenCL C e a linguagem utilizada para escrever
o codigo que sera executado pelos dispositivos. Essa linguagem utiliza o marcador
Kernel para identificar as funcoes que serao executadas pelos nos de processamento dos
dispositivos. Um Kernel e a menor instancia de execucao em um processo paralelo, e para
se atingir o resultado final, na maioria das vezes uma mesma funcao Kernel e chamada
repetidas vezes, de forma similar a uma estrutura de repeticao FOR comumente utilizada
nas linguagens sequenciais.
2.4.2 Abstracao OpenCL
Entendendo que a programacao em OpenCL e uma forma de se extrair desempenho
por meio da paralelizacao dos codigos e da correta distribuicao de trechos de codigos
entre diferentes propostas arquiteturais que compoem um ambiente heterogeneo, esta
secao identifica os principais elementos da abstracao OpenCL que possibilitam tanto a
paralelizacao, quanto a distribuicao entre diferentes arquiteturas de diferentes fabricantes.
2.4.2.1 Devices
Para possibilitar a alta portabilidade entre diferentes fabricantes, o KhronousGroup
exige que os dispositivos fabricados pelos membros de seu consorcio suportem a abstracao
OpenCL ilustrada na Figura 11.
36
Figura 11 – Abstracao OpenCL
Fonte: Proprio Autor
Elemento de processamento (PE): Os elementos de processamento (PE) sao os
responsaveis por executar todas as linhas de codigo desenvolvidas em OpenCL C, ou
seja, sao eles os responsaveis por executar todas as instrucoes. Em um dispositivo
com 128 elementos de processamento, e possıvel executar 128 threads em paralelo, ou
dividir o trabalho de processamento entre as unidades de computacao (CU). Dessa
forma, os elementos de processamento trabalham em conjunto ao processar uma thread
e compartilham informacao entre si. A escolha acerca da forma de execucao e altamente
dependente das caracterısticas da aplicacao.
Unidade de Computacao (CU): A unidade de computacao e um aglomerado de
elementos de processamento (PE). A unidade de computacao em si nao executa nenhuma
instrucao, seu papel e possibilitar a distribuicao da carga de processamento entre os
elementos de processamento contidos em uma Unidade de Computacao.
2.4.2.2 Regioes de memoria
A abstracao OpenCL especifica quatro diferentes regioes de memoria a saber: a
memoria global, privada, constante e local, que podem ser visualizadas na Figura 12.
A utilizacao correta das memorias resulta em aumento de desempenho, pois e possıvel
melhorar a comunicacao e diminuir a latencia.
37
Figura 12 – Regioes de memoria
Fonte: Proprio Autor
Memoria Privada: Todo elemento de processamento (PE), tem sua memoria
privada. Essa memoria e de seu acesso exclusivo e outros elementos de processamento
nao podem acessa-la.
Memoria Local: Toda unidade de computacao (CU) tem sua memoria local. Essa
memoria e compartilhada exclusivamente entre os elementos de processamento (PE) que
estao contidos nessa CU, sendo que estes tem acesso tanto de leitura, quanto de escrita a
essa regiao de memoria.
Memoria Global: A memoria Global e acessada tanto pelo controlador, quanto por
todos os elementos de processamento (PE).
Memoria Constante: A memoria Constante esta disponıvel a todos os elementos de
processamento (PE), porem, para essa regiao de memoria a permissao e somente leitura.
2.4.2.3 Processamento paralelo
OpenCL possibilita nao so criar aplicacoes com alta portabilidade entre diferentes
fabricantes de hardware, como tambem que estas aplicacoes extraiam o desempenho de
processamento disponıvel em arquiteturas paralelas. Esta secao lista, de forma resumida,
os principais elementos que permitem a paralelizacao de trechos de codigos em OpenCL,
sao eles:
Funcao Kernel : As funcoes com assinatura Kernel sao executadas pelos elementos
38
de processamento (PE). Estas funcoes possibilitam o recebimento de parametros que serao
utilizados durante sua execucao.
ND-Range: OpenCL viabiliza a criacao de estruturas de repeticao paralelas
por meio do conceito ND-Range. Esse conceito possibilita que diversos elementos de
processamento executem uma funcao Kernel de forma paralela por meio da criacao de
ındices, a quantidade de ındices necessarios para a correta execucao da funcao e definida
e controlada pelo programador ao definir o WorkSize por meio da “C API”. Cada ındice
esta atrelado a um elemento de processamento (PE), dessa forma, e possıvel que ao criar
uma funcao Kernel o programador utilize essa identificacao para realizar as logicas de
tratamento e execucao necessarias para o correto funcionamento de sua funcao. Para
facilitar o entendimento a Figura 13 ilustra a comparacao do conceito ND-Range com a
estrutura de repeticao sequencial amplamente conhecida FOR.
Figura 13 – Comparacao FOR / ND-Range
Fonte: Proprio Autor
WorkGroup: Como ilustrado na Figura 11 os elementos de processamento sao
agrupados em unidades de computacao. Esse agrupamento possibilita a divisao de
trabalho e comunicacao entre os elementos de processamento de uma mesma unidade.
Para definir a quantidade de trabalho que sera enviada para cada unidade de computacao
e utilizado o conceito de WorkGroup. O programador e o responsavel por definir o
tamanho do WorkGroup. Dessa forma, e possıvel otimizar a execucao de cada trecho
paralelo levando em consideracao caracterısticas da arquitetura alvo que ira executa-lo. A
definicao do WorkGroup tem forte impacto na performance da aplicacao, pois a definicao
incorreta pode acarretar em sobrecarga de alguns nucleos gerando desbalanceamento. A
Figura 14 ilustra uma definicao de workgroupsize que pode acarretar em ociosidade de
alguns nucleos.
39
Figura 14 – Mapeamento da funcao Kernel com WorkGroup
Fonte: Proprio Autor
40
41
3 TRABALHOS RELACIONADOS
Dakkak et al. (DAKKAK; PEARSON; HWU, 2016) desenvolveram a WebGPU,
uma plataforma escalavel de desenvolvimento online para cursos de programacao em
GPU. Os usuarios da plataforma tem acesso a um ambiente onde podem desenvolver e
executar codigos paralelos em OpenCL, OpenACC, CUDA e MPI. O desenvolvimento
dessa plataforma resolve alguns problemas inerentes aos cursos gratuitos e online de
programacao a saber: reduz a exigencia de que todos os alunos tenham um computador
pessoal semelhante aos comercializados atualmente, ambiente de programacao com
diversos fabricantes e diferentes configuracoes para iniciar o desenvolvimento, capacidade
de armazenar os exercıcios executados pelos alunos e as modificacoes realizadas ao
longo do tempo, entre outros inumeros benefıcios disponibilizados por esta pesquisa.
Porem, nenhum desses benefıcios cobre a proposta desta dissertacao que e disponibilizar
uma abordagem de ensino que auxilie no inıcio da programacao paralela em ambientes
heterogeneos e no entendimento de suas caracterısticas arquiteturais, pois a plataforma
WebGPU disponibiliza somente o ambiente que viabiliza esse aprendizado e nao o material
didatico a ser utilizado nos cursos.
Finlayson et al. (FINLAYSON et al., 2015) acreditam que os principais obstaculos
para o ensino de programacao paralela na graduacao sao as linguagens de alto desempenho
tais como: C, C++, Fortran, OpenCL e CUDA, classificando-as como linguagens de difıcil
utilizacao. Outro obstaculo, segundo os autores, e que os ambientes de desenvolvimento
integrados (IDEs) e as ferramentas de depuracao de codigo existentes para programacao
paralela disponıveis atualmente sao difıceis de usar, proprietarias ou contem poucos
recursos de depuracao de codigo. Para solucionar os obstaculos identificados anteriormente
Finlayson et al. propoem a linguagem de programacao Tetra, por meio de um ambiente
de desenvolvimento integrado. A linguagem Tetra vem para facilitar o aprendizado
de programacao paralela abrindo mao do desempenho mas com foco na simplicidade,
contendo caracterısticas de linguagem de alto nıvel e realizando a paralelizacao por
trechos por meio de marcadores, nao exigindo inicialmente grandes mudancas no codigo
sequencial, diferentemente de OpenCL e CUDA. O ambiente de desenvolvimento proposto
vem com o objetivo de facilitar a execucao e depuracao do codigo paralelo, caracterıstica
relevante para entendimento da execucao dos diversos trechos paralelos.
Apesar de muito relevante, o esforco realizado pelos autores ao desenvolver a
linguagem Tetra e o ambiente que possibilite principalmente depurar a execucao de
codigos paralelos, Finlayson et al. nao focam no aprendizado de programacao paralela
de alto desempenho como a pesquisa realizada nesta dissertacao. Entretanto, mesmo nao
tendo o mesmo foco, a linguagem Tetra e a abordagem apresentada nesta dissertacao,
podem ser utilizadas em conjunto para introduzir o paradigma de programacao paralela.
42
Sendo a linguagem Tetra responsavel por apresentar o universo paralelo e a abordagem
proposta responsavel por realizar uma transicao suave entre a programacao sequencial
para a programacao de alto desempenho paralela e heterogenea.
Shafi et al. (SHAFI et al., 2014) desenvolveram as etapas e conteudos de um curso
para ensino de programacao paralela, com o intuito de possibilitar que engenheiros de
software tivessem contato com o novo paradigma de programacao ao cursar o bacharelado
em Engenharia de software na National University of Sciences and Technology - (NUST),
no Paquistao (SHAFI et al., 2014). O curso, no primeiro momento, introduz os conceitos
de programacao paralela, hardware aceleradores, metricas para analise de desempenho e
sistemas de memoria distribuıda e compartilhada. Apos a introducao o curso e dividido
em tres secoes. A primeira secao cobre tecnicas de programacao paralela em sistemas de
memoria compartilhada, utilizando as linguagens de programacao OpenMP (CHANDRA et
al., 2001), Intel Cilk Plus (FRIGO; LEISERSON; RANDALL, 1998) e Java threads (OAKS;
WONG, 2004). A segunda secao apresenta ferramentas de programacao e APIs para
programacao paralela em sistemas com memoria distribuıda, tendo como foco a utilizacao
do software MPJ Express para atividades praticas de desenvolvimento das aplicacoes
paralelas (OAKS; WONG, 2004). A terceira e ultima secao introduz a programacao paralela
avancada por meio da utilizacao de aceleradores de proposito geral GPU e o modelo de
programacao MapReduce por meio da utilizacao do Hadoop (WHITE, 2009). O trabalho
desenvolvido por Shafi et al. e de grande valia para o meio academico, pois aborda temas
atuais que se relacionam com a programacao paralela e disponibiliza uma metodologia
para ensino destes conceitos. Porem, diferentemente da proposta dessa dissertacao, a
utilizacao de aceleradores e superficial segundo os proprios autores.
A Tabela 2 identifica quais areas os trabalhos correlatos abrangem.
Tabela 1 – Linguagens abordadas por trabalhos relacionados
Trabalhos
Relacionados
Infraestrutura
Paralela/Heterogenea
Programacao
paralela
Computacao
Heterogenea
DaKKak X
Finlayson X
Shafi X X
Fonte: Elaborado pelo autor
A proposta de introducao de programacao paralela em ambientes heterogeneos
desenvolvida nesta dissertacao se diferencia dos trabalhos correlatos pelas seguintes razoes:
Em Dakkak et al. (DAKKAK; PEARSON; HWU, 2016) o objetivo nao e disponibilizar
43
uma abordagem ou metodologia capaz de auxiliar na difıcil tarefa de introducao de
programacao paralela ou computacao heterogenea, e sim em reduzir os custos intrınsecos
ao seu ensino por meio da Virtualizacao do hardware necessario para tal e disponibilizando
um conjunto de features que possibilitam que o professor consiga acompanhar o
desenvolvimento de seus alunos por meio da plataforma WebGPU.
A pesquisa desenvolvida por Finlayson et al. em (FINLAYSON et al., 2015) aborda
apenas a programacao paralela por meio da linguagem Tetra, deixando de lado a
computacao heterogenea. A linguagem Tetra e uma linguagem de alto nıvel com o
objetivo de facilitar o ensino. O autor dessa dissertacao concorda com a utilizacao de
linguagens de alto nıvel para introduzir a programacao paralela e por isso a linguagem de
programacao OpenMP faz parte do modulo introdutorio, porem, a pratica de programacao
paralela tem como objetivo extrair maxima performance das arquiteturas atuais, sendo
assim, e necessario que os programadores tenham contato com linguagens como CUDA
e OpenCL que permitem que o programador otimize seus codigos de acordo com a
arquitetura alvo, possibilitando melhorar a extracao de performance das arquiteturas
atuais por meio da computacao paralela e heterogenea. Ja a pesquisa desenvolvida
por Shafi et al. (SHAFI et al., 2014) e a que mais se assemelha a desenvolvida nesta
dissertacao, pois tem como objetivo introduzir o ensino de programacao paralela em um
curso de graduacao. A composicao da metodologia de ensino proposta por Shafi tambem e
semelhante a proposta nesta dissertacao, pois e composta por modulos que compreendem
tanto a introducao de conceitos de arquitetura e programacao que sao essenciais para
iniciar o ensino da programacao paralela, quanto um modulo praticos de desenvolvimento.
A pesquisa desenvolvida por Shafi se diferencia da abordagem proposta nessa dissertacao,
pois segundo os proprios autores em (SHAFI et al., 2014) a programacao paralela utilizando
aceleradores e abordada de forma superficial e a computacao em ambiente heterogeneo e
um dos principais focos da abordagem de ensino proposta nesta dissertacao.
44
45
4 METODOLOGIA
Esse capıtulo apresenta a metodologia utilizada para o desenvolvimento da
abordagem de introducao de programacao paralela em ambientes heterogeneos proposta
nesta dissertacao. O detalhamento de tal metodologia, ilustrada na Figura 15, se da
por meio da explanacao acerca de como os materiais e metodos aqui identificados foram
utilizados em sua construcao.
Figura 15 – Desenvolvimento da abordagem proposta
Fonte: Proprio Autor
A utilizacao dos materiais e metodos pode ser dividida em tres momentos
principais, sao eles: identificacao da necessidade do desenvolvimento de abordagens para
auxiliar a introducao de programacao paralela em ambientes heterogeneos nos cursos de
Sistemas de Informacao da PUC Minas, desenvolvimento e aplicacao dos modulos que
46
compoem a abordagem proposta e analise de resultados.
4.1 Identificacao da necessidade
A suspeita da necessidade do desenvolvimento da abordagem proposta neste
trabalho se deu apos analise da grade curricular1 do curso de Sistemas de Informacao
da PUC Minas nao ter sido identificada nenhuma materia que explicitamente informasse
cobrir os topicos de programacao paralela ou computacao heterogenea. A necessidade
foi comprovada por meio de dois metodos, sao eles: questionario e exercıcio avaliativo.
O questionario foi utilizado em um maior numero de pessoas em relacao ao exercıcio
avaliativo, haja vista que nem todos que responderam o questionario tiveram interesse em
participar do minicurso ministrado pelo autor, inviabilizando assim a aplicacao do metodo
avaliativo.
4.1.1 Questionario
Pesquisas anteriores como a desenvolvida por (MURESANO; REXACHS; LUQUE,
2010) identificam que os alunos de graduacao nos cursos de computacao tem pouco ou
nenhum contato com o paradigma de programacao paralela. Com o objetivo de verificar
nao so o conhecimento previo dos alunos de Sistemas de Informacao da PUC Minas
formados em 2017 ou 2018 em relacao a programacao paralela, mas tambem com relacao
a programacao em ambientes heterogeneos, foi aplicado um questionario composto por
onze questoes, sendo sete dicotomicas e as demais multipla escolha. Um total de 49
alunos responderam o questionario superando a amostra mınima de 44 indıviduos que
deveriam ser entrevistados.
A analise de representatividade da amostra foi feita utilizando a formula 4.1, onde
o tamanho do universo era de 149 alunos, com nıvel de confianca de 95%, margem de erro
de 10% e com uma populacao mais homogenea 80/20:
n =N ∗ Z2 ∗ p ∗ (1− p)
(N − 1) ∗ e2 + Z2 ∗ p ∗ (1− p)
onde N = Tam. do Universo, Z = Nıvel de Confianca, e = Margem de erro e p = Prop. amostral(4.1)
O desenvolvimento do questionario seguiu os princıpios e etapas definidas por
(AAKER; KUMAR; DAY, 2001), onde as etapas identificadas pelo fluxograma da Figura
16 foram executadas:
1Grade Curricular - PUC Minas - https://www.pucminas.br
47
Figura 16 – Processo de elaboracao do questionario
Fonte: Proprio Autor
O uso de questionarios para obtencao de informacao e um metodo questionavel em
alguns cenarios, haja vista que perguntas de cunho pessoal tendem a receber respostas
que nao condizem com a verdade (CHAGAS, 2000). Com o objetivo de impedir que
tais respostas impactassem nos resultados obtidos, o questionario foi desenvolvido com
perguntas de multipla escolha que possibilitam identificar conflito entre as respostas caso
as perguntas dicotomicas sejam respondidas com informacoes falsas. Tal abordagem
em conjunto com a aplicacao dos exercıcios avaliativos garantem maior acertividade dos
resultados apresentados.
4.1.2 Exercıcios avaliativos
Os exercıcios avaliativos tiveram mais de uma funcao na construcao da abordagem
desenvolvida nesta dissertacao. Inicialmente os exercıcios foram utilizados para verificar se
os topicos de ensino contidos na abordagem foram abordados pelos cursos de graduacao
em computacao e, se foram, em quais nıveis. Tal avaliacao visava, em conjunto com
o questionario, verificar a necessidade da elaboracao da proposta desenvolvida neste
trabalho.
Em um segundo momento os exercıcios avaliativos foram utilizados para possibilitar
a comparacao antes e apos a aplicacao da abordagem de introducao de programacao
paralela em ambientes heterogeneos proposta. Sendo assim, dois conjuntos de questoes
avaliativas foram utilizados. O primeiro tem questoes com menor nıvel de dificuldade que
48
avaliam o conhecimento previo dos alunos em relacao aos topicos: paralelismo, sincronismo
de threads, classificacoes de arquiteturas paralelas, granularidade e desempenho de
aplicacoes paralelas, algoritmos paralelos e bibliotecas para exploracao de paralelismo.
O segundo exercıcio avaliativo e aplicado apos o aluno concluir o minicurso ministrado
pelo autor que utiliza a abordagem proposta neste trabalho. A segunda avaliacao tem o
objetivo de avaliar tanto o entendimento teorico, quanto pratico adquirido em relacao aos
topicos abordados pela primeira bateria de exercıcios.
4.2 Construcao dos modulos
A escolha dos materiais teve duas premissas basicas, sao elas: Os software deveriam
ser livres para estudantes e deveriam facilitar o ensino de programacao paralela em
ambientes heterogeneos. O modulo introdutorio e responsavel por reforcar conceitos
basicos de programacao paralela como: Arquiteturas paralelas, linguagens de programacao
paralela, sincronismo de threads, medidas de avaliacao de desempenho, regioes de
memoria e caracterısticas basicas dos processadores. Alem disso, e responsavel tambem
por apresentar os principais conceitos da linguagem de programacao OpenCL, de seus
requisitos de hardware e de software. Dois documentos foram desenvolvidos e incluıdos
neste modulo, sao eles: Resumo ilustrado das principais caracterısticas da abstracao
OpenCL 1.2 e guia para configuracao do ambiente de desenvolvimento por meio da IDE
Visual Studio e implementacao OpenCL da AMD. Para o desenvolvimento do resumo foi
utilizado como base a especificacao OpenCL 1.2 (MUNSHI, 2009).
As aplicacoes contidas no modulo pratico tem como objetivo apresentar de forma
pratica as principais caracterısticas da programacao paralela em ambientes heterogeneos.
O desenvolvimento das aplicacoes foi feito utilizando a IDE Visual Studio Community
2017, a SDK da AMD, e uma biblioteca desenvolvida pelo autor. Atraves tanto da
SDK da AMD quanto da biblioteca desenvolvida pelo autor, algumas particularidades
da programacao em OpenCL sao abstraıdas facilitando manter o foco nos conceitos
apresentados por cada aplicacao. A utilizacao da IDE Visual Studio Comunnity 2017,
facilita a configuracao das bibliotecas, SDK e possibilita debugar o codigo desenvolvido
para execucao no Host de maneira intuitiva e familiar para os estudantes de graduacao
em computacao.
A execucao das aplicacoes desenvolvidas no modulo intermediario foi feita
utilizando sistema operacional Windows 10 de 64 bits. A arquitetura foi composta por
um processador de proposito geral Intel Xeon E3- 1240, uma placa aceleradora grafica
AMD Radeon R7 360 e 64 Gigabytes de memoria principal. A GPGPU AMD Radeon
R7 360 contem 768 elementos de processamento. O processo de fabricacao do chip e
de 28nm, o Clock dos elementos de processamento e de 1050MHz, a largura de banda
49
de comunicacao com a memoria e de 128-bit com capacidade maxima de transferencia
de 104 GB/s e contem capacidade de armazenamento de 2GB GDDR5 em sua memoria
principal. O processador Intel Xeon E3-1240 contem 4 nucleos de processamento com a
tecnologia SMT - Simultaneous Multithreading que possibilita a execucao de 8 threads
em paralelo. O processo de fabricacao do chip e de 32 nm, a frequencia maxima dos
nucleos e de 3,7 GHz e tem capacidade de armazenamento de 128 kB em sua cache nıvel
1, 1024 kB em sua cache nıvel 2 e 8 MB em sua memoria cache nıvel 3. As analises de
desempenho realizadas utilizando as aplicacoes de ordenacao e de multiplicacao simples
tiveram carga de trabalho fixa e foram executadas vinte vezes. A unidade de tempo esta
em milissegundos para todas as avaliacoes.
4.2.1 Aplicacao e analise de resultados
Dois pequenos grupos compostos por 3 alunos foram utilizados com o objetivo
de aperfeicoar os materiais e conteudos que compoem a abordagem de introducao de
programacao paralela em ambientes heterogeneos proposta. Os pontos de melhoria
foram identificados por meio da analise dos resultados obtidos em cada topico abordado
pelos exercıcios avaliativos e por meio de feedbacks por parte dos alunos. Para que a
abordagem estivesse pronta para ser utilizada, mais de 60% dos alunos deveriam responder
corretamente mais de 60% das questoes que compoem a bateria de exercıcios aplicados.
Apos a abordagem ter sido formalizada, foi utilizada em pequenas turmas que se
inscreveram no minicurso ministrado pelo autor. Tais alunos tiverem seus conhecimentos
previos avaliados, foram expostos aos conteudos contidos na abordagem e tiveram seus
resultados analisados novamente. Tanto a avaliacao previa quanto a aplicada apos
exposicao a abordagem proposta, sao compostas pelo mesmo numero de questoes com
nıveis de dificuldade semelhantes e abordam a mesma quantidade de assuntos teoricos
e praticos. Os assuntos abordados pelos exercıcios avaliativos sao: classificacao de
arquiteturas paralelas, linguagens de programacao paralelas, arquitetura de processadores,
granularidade e desempenho de aplicacoes paralelas, identificacao de trechos com potencial
de paralelismo e sincronismo de threads. Para medir o ganho de conhecimento obtido
pelos alunos, seus resultados medios obtidos na avaliacao previa de conhecimento foram
comparados com seus resultados medios obtidos apos exposicao a abordagem proposta.
As figuras que ilustram esses resultados podem ser vistas no Capıtulo 6.
50
51
5 PROPOSTA
A proposta para auxiliar a introducao da programacao paralela em ambientes
heterogeneos e composta por tres modulos que cobrem tanto aspectos teoricos, quanto
praticos, relacionados a este tipo de programacao. O primeiro modulo e o modulo
introdutorio, responsavel por: apresentar os conceitos essenciais para o entendimento
do modelo de programacao paralela e computacao heterogenea, introduzir a programacao
paralela por meio da API OpenMP, apresentar as principais caracterısticas da linguagem
de programacao OpenCL e auxiliar na configuracao do ambiente de desenvolvimento da
linguagem OpenCL. O segundo modulo e o modulo pratico. Este modulo e composto
por oito aplicacoes com nıveis de complexidade crescente que juntas cobrem aspectos
importantes da programacao paralela em ambientes heterogeneos, que precisam ser
ensinados. Essas aplicacoes devem ser construıdas de forma pratica pelos alunos de
maneira a possibilitar uma transicao suave entre o paradigma de programacao sequencial
para o paradigma de programacao de alto desempenho. O terceiro e ultimo modulo e o
modulo avaliativo. Este e composto por exercıcios praticos e teoricos capazes de avaliar
o conhecimento adquirido pelos alunos apos a utilizacao da metodologia proposta pelos
autores.
5.1 Modulo introdutorio
a) Conceitos essenciais
Nessa etapa o conhecimento teorico necessario para compreensao do modelo
de programacao paralela em ambientes heterogeneos e transmitido aos alunos,
abordando os seguintes assuntos: dependencia de dados, condicao de corrida,
balanceamento de carga, paralelismo de dados e de tarefas, arquitetura de von
Neumann, hierarquia de memoria, memoria distribuıda e centralizada, classificacao
de Flynn, arquitetura de processadores de proposito especıfico e de proposito geral.
Caso a grade curricular do curso ja tenha abordado estes assuntos, essa etapa pode
ter seu tempo reduzido, abordando os assuntos apenas de forma superficial.
b) Quebra de paradigma
Apos os alunos terem tido contato com os conceitos essenciais para entender a
programacao paralela, o impacto da arquitetura sobre a performance das aplicacoes
e elementos da computacao heterogenea, deve-se iniciar o ensino da identificacao
de trechos com alto potencial paralelo, por meio da identificacao de trechos
concorrentes possıveis de serem paralelizados. Em seguida e ensinado a identificacao
52
de caracterısticas GPU-Friendly com o objetivo de instruir o aluno a identificar
trechos que terao ganho de desempenho se enviados para um hardware acelerador
GPU.
c) OpenMP
Para possibilitar uma transicao suave entre o paradigma de programacao sequencial
e o paradigma de programacao paralela em ambientes heterogeneos, a API OpenMP
e utilizada com o objetivo de introduzir a programacao paralela aos alunos, sendo
essa etapa composta pela explicacao das principais caracterısticas da API OpenMP,
seu modelo de paralelizacao e sua sintaxe para tratamento de dependencia de dados
e condicao de corrida.
d) OpenCL
Com o objetivo de evitar que os programadores tivessem de se preocupar com
as especificidades das arquiteturas entre diferentes fabricante ao desenvolver seus
codigos, o consorcio KhronosGroup desenvolveu a linguagem de programacao
OpenCL que disponibiliza uma abstracao da arquitetura e todos os fabricantes
devem implementar essa abstracao. Para iniciar a programacao em OpenCL e
essencial que alem do entendimento da semantica e sintaxe dessa linguagem o aluno
tenha compreendido completamente essa abstracao. Para facilitar o inıcio do estudo
as caracterısticas basicas tanto da abstracao OpenCL, quanto da semantica da
linguagem foram resumidas no documento Abstracao OpenCL 1.22 disponibilizado
pelo autor.
e) Configuracao do ambiente
A configuracao do ambiente para iniciar a programacao em OpenCL nao e trivial
e existem diferentes formas de faze-la. Com o objetivo de simplificar e padronizar
esta etapa o autor disponibiliza um manual com os passos necessarios tanto para
configurar o ambiente de desenvolvimento e iniciar a programacao em OpenCL,
quanto para reproduzir os resultados apresentados nesta dissertacao.
5.2 Modulo pratico
Esse modulo e composto por oito aplicacoes com nıveis de complexidade crescente.
Cada aplicacao foi escolhida por possibilitar a explicacao de um aspecto importante
da programacao paralela em ambientes heterogeneos ou por possibilitar verificar se tais
aspectos foram absorvidos pelos alunos durante aplicacao do exercıcio avaliativo pratico.
a) Multiplicacao de vetor simples
Esta aplicacao consiste na multiplicacao de todos os elementos de um vetor por uma
constante de forma paralela, ou seja, cada nucleo de processamento e responsavel
2Abstracao OpenCL - https://github.com/lucashsvalentim/opencl-friendly
53
por realizar a multiplicacao de um elemento do vetor. Esta aplicacao foi escolhida
com o objetivo de introduzir a programacao paralela, pois alem de sua simplicidade e
uma aplicacao que facilmente se identifica a nao existencia de dependencia de dados,
possibilitando a divisao de trabalho de forma paralela. A aplicacao multiplicacao
de vetor simples e a aplicacao de menor complexidade do conjunto proposto nessa
dissertacao, sendo a aplicacao recomendada para o primeiro contato do programador
com a pratica de programacao paralela. O pseudo codigo desta aplicacao e ilustrado
no Algoritmo 1:
Algorithm 1 Multiplicacao de vetor simplesData: Conjunto unidimensional I
Result: Conjunto unidimensional O
Create Conjunto I and O in Device and Populate Conjunto I in Device
Call Parallel Function Kernel - NDRange(0)=[I.size;MaxWorkGroupSize]
foreach WorkItem doO[GlobalThreadID(0)] = I[GlobalThreadID(0)]*2
end
Get Conjunto S in Device
b) Multiplicacao de vetor x vetor
A multiplicacao de vetor por vetor contem todas as caracterısticas que a
multiplicacao de vetor simples possui, porem, com pequenas diferencas que
aumentam um pouco a complexidade da aplicacao. Nessa aplicacao cada elemento
de um vetor e multiplicado pelo mesmo elemento de outro vetor, tendo como saıda
um vetor com o resultado da multiplicacao. Tais caracterısticas exigem que o
programador aloque mais regioes de memoria no device e as configure de maneira
a obter maximo desempenho por meio dos marcadores oferecidos pela linguagem
OpenCL. Essa aplicacao foi escolhida para compor o conjunto proposto justamente
para que o aumento de complexidade fosse crescente e possibilitasse uma transicao
suave entre os diferentes paradigmas de programacao. O pseudo codigo desta
aplicacao e ilustrado no Algoritmo 2:
Algorithm 2 Multiplicacao de vetor por vetorData: Conjunto unidimensional I and O
Result: O produto da multiplicacao I * O
Create Conjunto I, O and W in Device and Populate Conjunto I and O in Device
Call Parallel Function Kernel - NDRange(0)=[I.size;MaxWorkGroupSize]
foreach WorkItem doW[GlobalThreadID(0)] = I[GlobalThreadID(0)]*O[GlobalThreadID(0)]
end
Get Conjunto W in Device
54
c) Multiplicacao de matriz x constante
Ao se programar em OpenCL e possıvel dividir o trabalho de processamento paralelo
utilizando uma, duas ou ate no maximo tres dimensoes. A correta utilizacao da
dimensionalidade em conjunto com a tecnica de balanceamento de carga, por meio
da correta definicao dos grupos de trabalho, possibilita uma maior extracao de
desempenho e, por possibilitar exercitar essas caracterısticas, a multiplicacao de
matriz x matriz foi escolhida para compor o modulo pratico. O pseudo codigo desta
aplicacao e ilustrado no Algoritmo 3:
Algorithm 3 Multiplicacao de matriz por constanteData: Matriz unidimensional S
Result: Produto Matriz unidimensional S
Create and Populate Conjunto S in Device
Call Parallel Function Kernel - NDRange(0,1)=[Linha,Coluna]
foreach WorkItem doS[GlobalThreadID(1) * GlobalThreadID(o) + GlobalThreadID(0)] =* 2
end
Get Conjunto S in Device
d) Calculo de PI
O numero que representa o PI e bastante utilizado pela matematica por ser um
numero constante, sempre igual, que representa a razao entre o perımetro de um
cırculo e o seu diametro. A precisao do numero PI e razao de estudo para diversos
pesquisadores e amplamente utilizada em trabalhos cientıficos de programacao
paralela. A formula utilizada como base para o desenvolvimento do pseudo codigo
responsavel por calcular o numero PI com alta precisao foi a 5.1, que consiste em
uma aproximacao por meio do calculo de uma integral (LUCAS, 2007). A parte
central da formula ilustrada em 5.1 e justamente a parte que pode ser executada de
forma paralela sem dependencia de dados pelos elementos de processamento. Esse
algoritmo foi escolhido para compor o conjunto de aplicacoes do modulo pratico, pois
ele possibilita apresentar uma divisao de trabalho por meio do ID global de cada
elemento de processamento. Dessa forma, cada elemento de processamento fica
responsavel por processar um intervalo definido pelo programador. O entendimento
da forma de distribuicao apresentada pelo algoritmo de calculo de PI e essencial
para que a distribuicao mais complexa feita pelo algoritmo de reducao numerica seja
ensinada em um segundo momento. Por esse motivo essa aplicacao foi escolhida para
compor o modulo pratico. O pseudo codigo desta aplicacao e ilustrado no Algoritmo
4: ∫ 1
0
4.0
(1 + x2)(5.1)
55
Algorithm 4 Calculo de PIData: Num of repetitions and size of division
Result: The number PI with hight precision
Create Conjunto S in Device
Create Mult = 1.0 / numofrepetition in device
Create PartOfWork = numofrepetition / div in device
Call Parallel Function Kernel - NDRange(0)=[div]
foreach WorkItem doCreate Init = GlobalThreadID(0) * PartOfWork
Create End = Init + PartOfWork
Create Local Varsoma, X
for J = Init; J < End; J++ doX = ( j + 0.5 ) * Mult
varsoma += 4.0 / (1. + x.x)
end
Alocate S[GlobalThreadID(0)] = varsoma
end
Get Conjunto S in device sum of S elements and multiply by Mult
Get Conjunto S in Device
e) Multiplicacao de matriz x matriz
De forma semelhante a multiplicacao de matriz por constante, a multiplicacao
de matriz por matriz tambem utiliza mais de uma dimensao ao distribuir o
processamento paralelo aos elementos de processamento, porem, a coordenacao de
execucao por meio do ID de cada thread e mais complexa devido as caracterısticas
intrısecas a esta aplicacao, possibilitando assim apresentar aos alunos o sincronismo
de threads. O pseudo codigo desta aplicacao e ilustrado no Algoritmo 5:
Algorithm 5 Multiplicacao de matriz por matrizData: Matriz Unidimensional A and B
Result: Produto Matriz A x B
Create Conjunto A,B and C and Populate Conjunto A and B in Device
Call Parallel Function Kernel - NDRange(0,1)=[A.Size,B.Size]
foreach WorkItem do
for J = 0; J < A.size; J++ doFloat ElementA = A[GlobalThreadID(1) * Alinha.size + J] Float ElementB = B[J
* Blinha.size + GlobalThreadID(o)] Float Value += ElementA + ElementB
end
C[GlobalThreadID(1) * A.linha + GlobalThreadID(o)] = Value
end
Get Conjunto C in Device
56
f) Ordenacao por forca bruta
Em um ambiente composto por diferentes propostas arquiteturais, e necessario
saber identificar qual delas e melhor para executar cada trecho de codigo. O
trecho de maior esforco computacional da aplicacao, Ordenacao, contem duas
caracterısticas bastante amigaveis aos aceleradores de proposito especıfico, que
sao: Realizar uma grande quantidade de operacoes logicas sobre a quantidade
de memoria deslocada do Host ao device de maneira a esconder a latencia dessa
movimentacao e nao ter dependencia de dados. Dessa forma, ao enviar o trecho de
maior esforco computacional para um device como uma GPU, a aplicacao obtem
um grande aumento de desempenho e assim possibilita facilmente identificar a
proposta arquitetura ideal e, por isso, a aplicacao de ordenacao compoe o conjunto
de aplicacoes do modulo pratico. O pseudo codigo desta aplicacao e ilustrado no
Algoritmo 6:
Algorithm 6 OrdenacaoData: Conjunto unidimensional S
Result: Conjunto unidimensional S ordenado
Create and Populate Conjunto S in Device
foreach Inteiro s in S doCall Parallel Function Kernel - NDRange(0)=[S.size]
foreach WorkItem do
if s[GlobalThreadID(o)] > s[GlobalThreadID(o) + 1] thenTrocar posicoes de S[Thread] com S[Thread + 1]
elseend
end
Get Conjunto S in Device
g) Reducao Numerica
A aplicacao de reducao numerica consiste em retornar a soma de todos os elementos
de um vetor de forma paralela. Essa aplicacao foi escolhida para compor o modulo
pratico, pois nela e possıvel introduzir os conceitos de corrida, dependencia de dados,
sincronismos de threads e barreiras de memoria, aumentando assim a complexidade
da aplicacao e possibilitando o ensino de conceitos importantes da programacao
paralela. O pseudo codigo desta aplicacao e ilustrado no Algoritmo 7:
57
Algorithm 7 Reducao NumericaData: Conjunto unidimensional S
Result: Soma de todos elementos de S
Create and Populate Conjunto S in Device
Create Conjunto J in Device
Set NumOfWorkGroups = S.size / MaxWorkGroupSize
Call Parallel Function Kernel - NDRange(0)=[S.size;MaxWorkGruopSize]
foreach WorkItem doCreate Conjunto W
Mova S[GlobalThreadID] para W[LocalThreadID]
Sincronize threads com barreira de memoria Local
for I = MaxWorkGroupSize; I > 0; I > > 1 do
if GlobalThreadID(o) > 1 thenW[LocalThreadID] += W[LocalThreadID + 1]
Sincronize threads com barreira de memoria Localend
if LocalThreadID(o) == 0 thenJ[GroupID(0)] = W[0]
end
end
end
Get Conjunto J in device and sum all of its elements
h) Friendly-Numbers
A aplicacao FriendlyNumbers e baseada na teoria dos numeros amigos. Esta teoria
define que dois numeros sao amigos caso eles compartilhem a mesma abundancia,
onde a abundancia e o resultado da divisao entre a soma de todos os divisores de um
numero pelo proprio numero. Sendo assim essa aplicacao e capaz de identificar todos
os numeros amigos, dentro de um intervalo definido. Esta aplicacao foi escolhida
por possibilitar abordar claramente o tema balanceamento de carga, pois quanto
maior o numero, maior sera o trabalho dado a cada nucleo de processamento. Se o
trabalho for distribuıdo de forma desbalanceada o desempenho sera prejudicado. O
pseudo codigo desta aplicacao e ilustrado no Algoritmo 8:
58
Algorithm 8 Friendly-NumbersData: Conjunto unidimensional S
Result: Total of Friendly-numbers
Create and Populate Conjunto S in Device
Call Parallel Function Kernel - NDRange(0,1)=[S.size,S.size]
foreach WorkItem do
if GlobalThreadID(0) < GlobalThreadID(1) thenCreate a private and Local Variable Aux
Create a private and Local Variable Aux2
Create a global Variable NumOfFrindlyNumbers
Aux = Sum of the divisors of s[GlobalThreadID(0)]
Aux2 = Sum of the divisors of s[GlobalThreadID(1)]
if Aux = s[GlobalThreadID(1)] and Aux2 = s[GlobalThreadID(0)]
thenNumOfFriendlyNumbers ++
end
end
end
Get NumOfFriendlyNumbers in Device
i) K-means
K-means e uma solucao de clusterizacao de dados. Uma das utilizacoes e
por exemplo a identificacao de grupos com um mesmo perfil de cliente. A
aplicacao desenvolvida em OpenCL pelos autores utiliza a distancia Euclidiana
como parametro para identificar a qual cluster um elemento pertence. E necessario
que o usuario informe quantos clusters deseja que a solucao identifique. Apos
essa definicao o algoritmo definira centroids aleatorios para cada cluster. Com os
centroids definidos cada no sera verificado a qual centroid esta mais proximo e sera
atribuıdo a este cluster. Apos todos os nos terem sido atribuıdos a um cluster, o
centroid de cada cluster e recalculado e as analises se repetem, ate as condicoes de
parada serem atendidas. Essa aplicacao foi escolhida para que os alunos consigam
paralelizar aplicacoes do mundo real com um maior nıvel de complexidade. O pseudo
codigo desta aplicacao e ilustrado no Algoritmo 9:
59
Algorithm 9 K-meansData: Npoints, Dimension, Ncentroids, Mindistance
Result: Num of Itarations to solve the problem
Create DataBuffer, CentroidsBuffer, MapBuffer, DirtyBuffer and TooFarBuffer in Device
while Centroids dosen’t change or itareta 200 times doPopulate CentroidsBuffer, MapBuffer, DirtyBuffer and tooFarBuffer in Device
Call Parallel Function Kernel - NDRange(0)=[Npoints]
foreach WorkItem do
if GlobalThreadID(0) < Npoints thenCalculate the distance of Data[GlobalThreadID(0)] to all of the another points
Alocate the Point to the nearest centroidsend
end
Recalculate the centroid by Median
Iteration ++end
5.3 Modulo Avaliativo
Esse modulo e responsavel por medir o conhecimento adquirido apos o aluno ser
exposto a metodologia apresentada neste artigo. Tal avaliacao pode ser dividida em
duas partes, sao elas: Teorica e pratica. A avaliacao teorica acontece em dois momentos,
antes e apos exposicao a abordagem de introducao de programacao paralela em ambientes
heterogeneos proposta. Em cada avaliacao sao utilizados diferentes exercıcios avaliativos.
Ambos sao composto por 16 questoes que cobrem nove diferentes assuntos, sao eles:
Dependencia de dados, arquitetura de processadores de proposito especıfico e geral,
classificacao de Flynn, linguagens de programacao paralela, granularidade e desempenho
de aplicacoes paralelas, medidas de avaliacao de desempenho, computacao heterogenea,
identificacao de trechos com potencial paralelo e capacidade em unir os conceitos de
linguagem, arquitetura e aplicacao paralela. A aplicacao de diferentes exercıcios que
cobrem os mesmos assuntos em dois diferentes momentos tem como objetivo comparar os
resultados obtidos em cada um deles para avaliar o ganho de conhecimento apos exposicao
ao conteudo desenvolvido nesta pesquisa. A avaliacao pratica consiste no desenvolvimento
de quatro aplicacoes do modulo pratico, sao elas: Multiplicacao de vetor por vetor,
Multiplicacao de matriz por matriz, Ordenacao e Reducao Numerica. Tal avaliacao tem
como objetivo avaliar de forma pratica se os alunos absorveram os conceitos abordados
pelo modulo introdutorio e conseguem aplica-los, por meio do desenvolvimento de
algoritmos paralelos em ambientes heterogeneos, utilizando a linguagem de programacao
OpenCL.
60
61
6 RESULTADOS
Um total de quinze alunos participaram do minicurso ministrado pelo autor. Esta
secao pode ser dividida em dois momentos, sendo que o primeiro exibe os resultados ao
comparar o desempenho medio dos quinze alunos antes e apos exposicao a abordagem
de introducao de programacao paralela em ambientes heterogeneos proposta, e o segundo
momento ilustra o impacto no desempenho das aplicacoes ocasionado pelos principais erros
cometidos pelos alunos durante o desenvolvimento das aplicacoes praticas em OpenCL e
o enorme desperdıcio de potencial de hardware ao se programar de forma sequencial.
6.1 Aplicacao da abordagem proposta
Um total de 53 alunos formados entre os anos de 2017 e 2018, no curso de
Sistemas de Informacao, responderam o questionario identificado na Subsecao 4.1.1. Apos
eliminacao de respostas conflitantes ou incompletas, 49 questionarios foram utilizados para
construcao dos resultados ilustrado na Figura 17.
A Figura 17 identifica que aproximadamente 93% dos entrevistados afirmam nao
terem tido contato com este paradigma de programacao, e aproximadamente 100%
afirmam nao terem desenvolvido codigos capazes de extrair desempenho de arquiteturas
heterogeneas.
Figura 17 – Aplicacao Questionario
Fonte: Proprio Autor
Dos 49 alunos que responderam o questionario corretamente, quinze se
62
matricularam no minicurso de OpenCL ministrado pelo autor. Antes do inıcio do
curso o exercıcio avaliativo identificado na secao 4.1.2 foi aplicado a estes alunos com o
objetivo de mapear o conhecimento previo em relacao aos topicos identificados na Tabela
2. Como pode ser visto na Figura 18, que agrupa os topicos identificados na Tabela
2 em Heterogeneidade e Paralelismo, os alunos tem pouco conhecimento em relacao
a programacao paralela e quase nenhum conhecimento em relacao a programacao em
ambientes heterogeneos, sendo que o conhecimento em relacao a programacao paralela
se limita ao ambito teorico, pois aproximadamente 88% das questoes de paralelismo
respondidas corretamente sao teoricas.
A Tabela 2 agrupa os nove diferentes assuntos abordados pelo exercıcio avaliativo
teorico entre as categorias: Programacao Paralela, Programacao Paralela / Computacao
Heterogenea e Computacao Heterogenea. Dessa forma, de 288 questoes respondidas pelos
alunos, 207 questoes abordam paralelismo e 81 abordam a computacao heterogenea.
Tabela 2 – Correlacao exercıcio avaliativo com Heterogeneidade e Paralelismo
Exercıcio avaliativo
teorico
Programacao
Paralela
Programacao
Paralela/Heterogenea
Computacao
Heterogenea
Sincronismo de thread X
Identificacao de trechos
paralelos
X
Arquiteturas paralelas X
Granularidade e
desempenho de
aplicacoes paralelas
X
Linguagem de
programacao paralela
X
Questao Composta
(Linguagem,
arquitetura e
aplicacao)
X
Arquitetura de
processadores
X
Computacao
Heterogenea
X
Fonte: Elaborado pelo autor
A Figura 18 foi feita com base na classificacao da Tabela 2, onde de um total de 180
63
questoes que abordam paralelismo, aproximadamente 14 foram respondidas corretamente
e de um total de 75 questoes que abordam a computacao em ambiente heterogeneo,
aproximadamente apenas 1 foi respondida corretamente. Das 14 questoes respondidas
corretamente relacionadas a paralelismo 88% eram teoricas.
Figura 18 – Aplicacao exercıcios avaliativos
Fonte: Proprio Autor
Apos analisar as Figuras 17 e 18 e possıvel afirmar que os resultados obtidos durante
aplicacao do questionario sao verdadeiros, uma vez que tanto a aplicacao do questionario,
quanto a aplicacao do exercıcio avaliativo, apontam que o curso de Sistemas de Informacao
da PUC Minas esta em desacordo com as demandas do mercado e da academia, pois
apresentam de forma superficial a pratica de programacao paralela e nao apresentam a
programacao heterogenea, ficando presos ao ensino apenas do paradigma de programacao
sequencial. Esta metodologia tem como resultado programadores que nao conseguem
extrair maximo desempenho das arquiteturas atuais e, codigos que desperdicam um
enorme potencial de hardware.
6.1.1 Resultados obtidos apos aplicacao da abordagem
Apos os quinze alunos concluırem o minicurso ministrado pelo autor, foram
aplicados novos exercıcios avaliativos teoricos com o objetivo de comparar a performance
obtida antes e apos participarem do minicurso. A analise foi feita comparando o resultado
medio obtido pelos alunos em cada um dos nove topicos abordados pelos exercıcios e
64
agrupado-os de acordo com a classificacao da Tabela 2. As Figuras 19 e 20 ilustram a
diferenca media obtida nas questoes que abordam paralelismos e computacao heterogenea,
sendo o ponto inicial do grafico o resultado medio obtido antes da aplicacao da abordagem
e o ponto final o resultado medio obtido apos aplicacao da abordagem.
A Figura 19 ilustra em percentual o resultado medio obtido pelos alunos ao
responderem as questoes que abordam paralelismos de forma direta ou indireta.
Figura 19 – Heterogeneidade
Fonte: Proprio Autor
A Figura 20 ilustra em percentual o resultado medio obtido pelos alunos ao
responderem as questoes que abordam conceitos de computacao heterogenea de forma
direta ou indireta.
65
Figura 20 – Programacao Paralela
Fonte: Proprio Autor
Durante o minicurso o pseudo-codigo dos algoritmos do modulo introdutorio e
apresentado e tem suas principais caracterısticas identificadas pelo autor. Ao final de cada
aula e realizado um exercıcio pratico que consiste na construcao de um dos algoritmos que
foram estudados durante o dia. A Figura 21 ilustra o percentual de alunos que durante
os exercıcios praticos desenvolveram as aplicacoes conforme solicitado.
66
Figura 21 – Aplicacao exercıcios avaliativos praticos
Fonte: Proprio Autor
A Figura 22 ilustra o percentual de reprovados e aprovados antes e apos a aplicacao
da abordagem proposta com base nos resultados obtidos por meio da aplicacao dos
exercıcios avaliativos teoricos. A nota media para aprovacao foi de 60%.
67
Figura 22 – % de aprovacao do minicurso
Fonte: Proprio Autor
6.2 Impacto da programacao sequencial sobre arquiteturas paralelas eheterogeneas
Nesta secao sao apresentados resultados da execucao de algumas das aplicacoes do
modulo pratico com o objetivo de ilustrar: o enorme desperdıcio de potencial de hardware
ao se programar de forma sequencial e, passando a programar de forma paralela em
ambientes heterogeneos, alguns dos erros mais comuns cometidos pelos alunos durante o
minicurso.
a) Impacto ao programar em OpenCL sem foco na arquitetura alvo:
Uma das crıticas que o autor faz ao curso de Sistemas de Informacao da PUC Minas,
e o distanciamento em relacao as caracterısticas arquiteturais causada pela alta abstracao
das linguagens de programacao utilizadas durante o Bacharelado pois, tal distanciamento
causa a falsa impressao de que o programador nao precisa se preocupar com caracterısticas
da arquitetura alvo, acarretando em erros comuns como os evidenciados nas Figuras 23 e
24.
Ao programar em OpenCL e nao distribuir a carga de trabalho entre as unidades
de computacao do dispostivo corretamente, e possıvel que potencial de hardware seja
desperdicado. A Figura 23 ilustra o possıvel desperdıcio de hardware caso o programador
nao distribua corretamente a carga de trabalho para a aplicacao “multiplicacao de vetor
x vetor”. Ao se dimensionar corretamente a carga de trabalho para as unidades de
68
computacao levando em consideracao a granularidade do processamento e a quantidade
de elementos de processamento disponıveis em cada unidade de computacao, evita-se
que alguma unidade de computacao ou elemento de processamento fique ocioso ou
sobrecarregado. No caso onde a carga e dimensionada corretamente e possıvel melhorar
o desempenho da aplicacao “multiplicacao de vetor simples” em aproximadamente tres
vezes.
Figura 23 – Multiplicador de vetor simples
Fonte: Proprio Autor
b) Impacto ao programar sem conhecer conceitos basicos da computacao
heterogenea:
O desenvolvimento paralelo e em ambiente heterogeneo tem como objetivo extrair
maximo desempenho das arquiteturas atuais. Nesse paradigma de programacao e essencial
que o desenvolvedor tenha foco na arquitetura onde seu algoritmo sera executado, conheca
os conceitos basicos de programacao paralela e computacao heterogenea. A Figura 24
ilustra uma ocasiao onde mesmo ao se paralelizar um codigo e envia-lo a um hardware
acelerador (GPU), o ganho de desempenho nao e tao expressivo. Esse pouco ganho pode
ser explicado devido a latencia de acesso a memoria, pois a aplicacao multiplicacao de
vetor simples nao realiza operacoes suficiente sobre os dados alocados em memoria, sendo
assim, tal latencia oculta o ganho de desempenho em relacao as operacoes logicas.
Para que uma aplicacao tenha um bom ganho de desempenho ao ser executada em
um acelerador como a arquitetura de GPU utilizada, uma das caracterısticas necessarias
da aplicacao e que a latencia de acesso a memoria seja ocultada pela carga de trabalho que
69
sera realizada sobre os dados. A aplicacao “multiplicacao de vetor x vetor” realiza poucas
operacoes logicas apos transferir todo o vetor para a memoria do dispositivo. Sendo assim,
o seu ganho de desempenho sobre a aplicacao sequencial e ocultado pelo tempo de leitura
e transferencia de dados para a memoria do dispositivo. Esse ganho de aproximadamente
1,5x pode ser visualizado na Figura 24, onde as aplicacoes sequencial e paralela realizaram
a multiplicacao de 196.777.216 posicoes de um vetor pela constante 8.
Figura 24 – Multiplicador de vetor simples
Fonte: Proprio Autor
c) Desperdıcio de potencial de hardware ao se programar de forma sequencial:
A Figura 26 ilustra o enorme desperdıcio de potencial de hardware ocasionado por
algoritmos sequenciais que utilizam um unico processador em um ambiente composto por
mais de uma proposta arquitetural de processadores paralelos. A aplicacao “ordenacao
por forca bruta” obtem enorme ganho de desempenho quando programada em OpenCL
de forma paralela em um ambiente heterogeneo. Esse resultado e obtido pois essa
aplicacao contem caracterısticas que contribuem para um otimo ganho de desempenho
ao ser executada em placas aceleradoras com arquiteturas SIMD. A aplicacao contem
caracterısticas como: i) mesma operacao sobre diferentes dados, ii) tempo de transferencia
dos dados muito inferior ao tempo de processamento e iii) nao existencia de dependencia
de dados nem condicao de corrida. Aplicacoes com essas caracterısticas obtem bons
resultados ao serem paralelizadas. A Figura 26 ilustra o ganho de desempenho da aplicacao
de “ordenacao por forca bruta” sobre a mesma aplicacao sequencial ao ordenar um vetor
com cem mil posicoes
70
Figura 25 – Ordenacao
Fonte: Proprio Autor
71
7 DISCUSSAO SOBRE ABORDAGEM PROPOSTA
Esse capıtulo apresenta inicialmente uma reflexao acerca de topicos relacionados a
programacao paralela e computacao heterogenea que podem ser inseridos em disciplinas
da grade curricular1 de SI da PUC Minas, com o objetivo de facilitar a aplicacao da
abordagem proposta. Posteriormente e apresentado um caso real vivido pelo autor, onde
conceitos de programacao paralela e computacao heterogenea influenciam diretamente nas
funcoes exercidas pelo egresso do curso de Sistemas de Informacao no contexto atual.
7.1 Analise da grade curricular do curso de Bacharelado em SI da PUC Minas
Ao analisar as disciplinas e suas ementas contidas na grade curricular1 e possıvel
identificar que a programacao paralela e computacao heterogenea nao e abordada no curso
de SI da PUC Minas, e essa observacao se comprova mediante os resultados apresentados.
O Referencial de Formacao em SI (RF-SI) identifica trechos que estao relacionados
a programacao paralela e computacao heterogenea como pode ser visto na Secao 2.1.3,
entretanto e informado que os cursos podem abordadar cada topico com diferentes nıveis
de profundidade de maneira a atender os interesses regionais e especialidades de cada
instituicao.
Em um cenario onde as arquiteturas paralelas e heterogeneas sao uma realidade
inclusive nos computadores pessoais, os topicos de paralelismo e computacao heterogenea
precisam ser abordados na formacao de alunos do curso de Sistemas de Informacao, haja
vista que estes terao que desempenhar as competencias identificadas na secao 2.1.3 em um
ambiente paralelo e heterogeneo. Como um egresso do curso de Sistemas de Informacao
sera capaz de adquirir infraestrutura, servicos e aplicacoes se nao detem conhecimento
acerca das arquiteturas atuais? Como sera capaz de desenvolver aplicacoes eficientes e
ecologicas se seus codigos desperdicam um enorme potencial de hardware?
Com o objetivo de aumentar a compreensao dos egressos do curso de Bacharelado
em SI acerca dos topicos contidos na abordagem de introducao da programacao paralela
em ambientes heterogeneos proposta neste dissertacao, sao identificadas disciplinas que
deveriam introduzir alguns topicos contribuindo para uma maior absorcao dos conteudos
contidos na abordagem proposta, sao elas:
1) Arquitetura de Computadores (2◦ perıodo): Essa disciplina devera apresentar
1Grade Curricular - PUC Minas - https://www.pucminas.br
72
as diferentes propostas arquiteturais disponıveis e suas caracterısticas, fazendo com que o
programador inicie a compreensao acerca das diferentes caracterısticas de processadores
de proposito especıfico e geral.
2) Laboratorio de Algoritmos e Estrutura de Dados (3◦ perıodo): Quando o
aluno chega ao terceiro perıodo ele ja passou pelas disciplinas: Algoritmos e Tecnicas
de Programacao e Programacao Orientada por Objetos, pois sao pre-requisitos para a
disciplina Laboratorio de algoritmos e estrutura de dados. Nessa disciplina a programacao
paralela deve ser apresentada de forma introdutoria atraves de linguagens de mais facil
compreensao como por exemplo OpenMP, para que o aluno tenha maior facilidade quando
for exposto a programacao de alto desempenho em arquiteturas heterogeneas.
3) Tecnicas Avancadas de Programacao (5◦ perıodo): A abordagem proposta deve
ser aplicada nesta disciplina ou, caso nao seja possıvel neste perıodo, em uma disciplina
propria de programacao paralela, haja vista que o aluno ja teve contato com arquiteturas
paralelas na disciplina de arquitetura de computadores e ja foi apresentado, mesmo que
de forma teorica, a linguagens paralelas de menor complexidade como OpenMP.
7.2 Impacto nas funcoes exercidas pelos egressos no mercado de trabalho
A falta do ensino de programacao paralela e computacao heterogenea causa impacto
no desempenho das funcoes exercidas pelos egressos de SI. Um exemplo pratico e o
vivido pelos consultores que exercem a funcao de consultor de planejamento financeiro de
grandes empresas, que optam pela solucao Planning and Budgeting Cloud Service – PBCS.
Parte dos codigos desenvolvidos nesta aplicacao podem ser inteiramente desenvolvidos
arrastando ıcones que representam, por exemplo, uma estrutura de repeticao, uma
condicao, dentre outras possibilidades como pode ser visto na Figura 26.
73
Figura 26 – Planning and Budgeting Cloud Services - Rule Creator
Fonte: Proprio Autor
Mesmo em aplicacoes de alto nıvel como a solucao PBCS desenvolvida pela Oracle,
existe a possibilidade de que o codigo seja executado em paralelo e o programador
defina quantos nucleos serao utilizados (ORACLE, 2018), porem, a solucao desativara o
processamento paralelo caso o programador nao tenha tratado possıveis dependencias de
dados (ORACLE, 2018).
O banco de dados utilizado pela solucao PBCS e o banco de dados multidimencional
Essbase (ORACLE, 2018). Nessa estrutura de banco, os dados sao armazenados nos
diferentes pontos de vista - (PDV’s) das dimensoes. Uma aplicacao de planejamento
implementada atraves da solucao PBCS, tem no mınimo 6 dimensoes (ORACLE, 2018).
Cada dimensao e composta por membros que irao representar o nıvel de granularidade do
orcamento do cliente e possibilitar a visualizacao de diferentes pontos de vista.
Os calculos de projecoes orcamentarias destas aplicacoes sao compostos por uma
74
ou mais estrutura de repeticao. E o esforco computacional dessas estruturas de repeticao
e a multiplicacao da quantidade de membros de cada dimensao. Sendo assim, caso
as 6 dimensoes tenham cada uma 200 membros, a quantidade de iteracoes no pior
caso para cada estrutura de repeticoes pode chegar a 64 trilhoes de possibilidades. O
potencial paralelo desta aplicacao e tao grande que em alguns casos calculos de projecoes
orcamentarios que demoravam horas passaram a ser executados em minutos , apos serem
tratados e paralelizados.
Os primeiros consultores que implementaram a solucao de planejamento nao
tinham conhecimento a cerca de programacao paralela e mesmo habilitando o
processamento paralelo disponıvel pela aplicacao, nao souberam tratar as dependencias de
dados. Dessa forma, o calculo foi executado sequencialmente, resultando em um enorme
desperdıcio de potencial de hardware e prejudicando toda uma industria que esperava
horas pela execucao de um calculo que poderia ser executado em minutos.
75
8 CONCLUSAO
A tendencia de processadores com mais de um nucleo ja e realidade e infelizmente
os cursos de Sistemas de Informacao possuem dificuldade para introduzir a computacao
paralela em ambientes heterogeneos na sua grade curricular. Essa dificuldade resulta
em producao de codigos sequenciais para serem executados em maquinas paralelas tendo
como consequencia enorme desperdıcio de hardware. Diminuir os desafios da introducao
de programacao paralela nos cursos de Sistemas de Informacao e essencial para modificar
esse cenario. Sendo assim, pesquisas precisam dar continuidade a essa linha de trabalho
disponibilizando ferramentas e tecnicas que viabilizem o ensino de programacao paralela
em ambientes heterogeneos nos cursos de graduacao.
Iniciar a programacao em linguagens paralelas e um desafio e exige a quebra do
paradigma de programacao sequencial, porem, no cenario atual onde a era many-core e
uma realidade, programar de forma sequencial e um enorme erro. OpenCL permite ir
alem. Voce nao so programa de forma paralela, mas programa usufruindo de todos os
benefıcios de uma arquitetura heterogenea com alto nıvel de portabilidade entre diferentes
fabricantes.
E possıvel concluir, apos analisar a curva de aprendizado dos alunos que
participaram do minicurso ministrado pelo autor, que a abordagem proposta teve razoavel
exito na transmissao dos topicos: programacao paralela e computacao heterogenea. Se
mostrando uma opcao a ser utilizada na introducao da programacao paralela e computacao
heterogenea nos cursos de Graduacao em SI que ainda nao o fazem. Entretanto, foi
identificado que aplicacoes com maior nıvel de complexidade nao foram tao bem absorvidas
pelos alunos, resultando em um menor numero de algoritmos que executassem de maneira
correta durante a aplicacao do exercıcio pratico.
O autor salienta que, apesar de nao fazer parte da abordagem e recomendado que
o aluno alem de desenvolver codigos paralelos em um ambiente heterogeneo, seja capaz de
desenvolver codigos com mais de uma linguagem de programacao paralela, pois em alguns
casos uma linguagem e mais eficiente que outra. Um caso onde OpenMP se saira melhor
que OpenCL e ao executar a aplicacao multiplicacao de vetor x vetor, pois neste caso
nao seria necessario enviar dados para a memoria do device e a extracao de desempenho
do processador de proposito especıfico seria melhor explorada. Outro caso e quando o
acelerador for do fabricante Nvidia, que claramente pelos benchmarks realizados no meio
cientıfico, a linguagem de programacao CUDA e superior a OpenCL quando utilizada
76
sobre arquitetura Nvidia.
Para trabalhos futuros os resultados obtidos serao utilizados como um norte para
evolucao da proposta de introducao de programacao paralela em ambientes heterogeneos,
com o objetivo de tornar mais claro os topicos: granularidade e desempenho de aplicacoes
paralelas e questoes que unem mais de uma area de conhecimento, em ambos a media
dos alunos foi inferior a 60%, mostrando que a abordagem precisa simplifica-los. Com o
objetivo de aumentar o numero de resultados obtidos e possibilitar analises estatısticas,
a abordagem proposta sera aplicada a um maior numero de alunos.
77
REFERENCIAS
AAKER, D. A.; KUMAR, V.; DAY, G. S. Marketing research, 7th. John WileyOperations Research & Sons, New York, v. 51, n. 4, p. 509–518, 2001.
BELIKOV, E.; LOIDL, H.-W.; MICHAELSON, G. Characterisation of parallel functionalapplications. In: Draft Proceedings of the 2014 Symposium on Trends inFunctional Programming. [S.l.: s.n.], 2014. v. 1.
BORKAR, S. Thousand core chipsa technology perspective. In: IEEE. 2007 44thACM/IEEE Design Automation Conference. [S.l.], 2007. p. 746–749.
CHAGAS, A. T. R. O questionario na pesquisa cientıfica. Administracao OnLine:Pratica, Pesquisa, Ensino, Sao Paulo, v. 1, n. 1, p. 23–48, 2000.
CHANDRA, R. et al. Parallel programming in OpenMP. [S.l.]: Morgan kaufmann,2001.
DAGUM, L.; MENON, R. Openmp: An industry-standard api for shared-memoryprogramming. Computing in Science & Engineering, IEEE, n. 1, p. 46–55, 1998.
DAKKAK, A.; PEARSON, C.; HWU, W.-m. Webgpu: A scalable online developmentplatform for gpu programming courses. In: IEEE. 2016 IEEE InternationalParallel and Distributed Processing Symposium Workshops (IPDPSW).[S.l.], 2016. p. 942–949.
DITTAMO, C. On expressing different concurrency paradigms on virtual executionsystems. In: IEEE. 2009 33rd Annual IEEE International ComputerSoftware and Applications Conference. [S.l.], 2009. v. 1, p. 664–667.
FERRAZ, A.; BELHOT, R. V. et al. Taxonomia de bloom: revisao teorica e apresentacaodas adequacoes do instrumento para definicao de objetivos instrucionais. Gest. Prod.,Sao Carlos, v. 17, n. 2, p. 421–431, 2010.
FINLAYSON, I. et al. Introducing tetra: an educational parallel programming system.In: IEEE. 2015 IEEE International Parallel and Distributed ProcessingSymposium Workshop. [S.l.], 2015. p. 746–751.
FLYNN, M. J.; RUDD, K. W. Parallel architectures. ACM Computing Surveys(CSUR), Citeseer, v. 28, n. 1, p. 67–70, 1996.
FRIGO, M.; LEISERSON, C. E.; RANDALL, K. H. The implementation of the cilk-5multithreaded language. ACM Sigplan Notices, ACM, v. 33, n. 5, p. 212–223, 1998.
HENNESSY, J. L.; PATTERSON, D. A. Computer architecture: a quantitativeapproach. [S.l.]: Elsevier, 2011.
KEYES, R. W. Fundamental limits of silicon technology. Proceedings of the IEEE,IEEE, v. 89, n. 3, p. 227–239, 2001.
78
KLINK, M. Van der; BOON, J.; SCHLUSMANS, K. Competencias e ensino superiorprofissional: presente e futuro. Revista Europeia de Formacao Profissional,v. 40, n. 1, p. 72–89, 2007.
LAMETER, C. et al. Numa (non-uniform memory access): An overview. Acm Queue,v. 11, n. 7, p. 40, 2013.
LU, C.-H. et al. Reconfigurable multi-core architecture–a plausible solution to thevon neumann performance bottleneck. In: IEEE. 2013 IEEE 7th InternationalSymposium on Embedded Multicore Socs. [S.l.], 2013. p. 159–164.
MUNSHI, A. The opencl specification. In: IEEE. 2009 IEEE Hot Chips 21Symposium (HCS). [S.l.], 2009. p. 1–314.
MURESANO, R.; REXACHS, D.; LUQUE, E. Learning parallel programming: achallenge for university students. Procedia Computer Science, Elsevier, v. 1, n. 1,p. 875–883, 2010.
NIELSEN, M. J.; HUSSAIN, Z. S. Unified memory computer architecture withdynamic graphics memory allocation. [S.l.]: Google Patents, ago. 15 2000. USPatent 6,104,417.
OAKS, S.; WONG, H. Java Threads: Understanding and MasteringConcurrent Programming. [S.l.]: ”O’Reilly Media, Inc.”, 2004.
ORACLE. Using parallel calculation. In: . [S.l.]: Oracle Center 2018, 2018. cap. 0,p. 39.
PAPRZYCKI, M. Education: Integrating parallel and distributed computing in computerscience curricula. IEEE Distributed Systems Online, IEEE, v. 7, n. 2, p. 6–6, 2006.
ROSE, C. D.; NAVAUX, P. Fundamentos de processamento de alto desempenho. Anais:2a Escola Regional de Alto Desempenho, p. 3–29, 2002.
SHAFI, A. et al. Teaching parallel programming using java. In: IEEE PRESS.Proceedings of the Workshop on Education for High-PerformanceComputing. [S.l.], 2014. p. 56–63.
STRINGHINI, D.; GONCALVES, R. A.; GOLDMAN, A. Introducao a computacaoheterogenea. XXXI Jornada de atualizaca em Informatica (JAI), 2012.
WHITE, T. Hadoop,“The Definitive Guide (1st edn.)”. [S.l.]: O’Reilly Media,Inc., United States of America, 2009.
ZORZO, A. et al. Referenciais de formacao para os cursos de graduacao emcomputac ao. sociedade brasileira de computac ao (SBC). [S.l.], 2017.
79
APENDICE A -- ALGORITMOS DESENVOLVIDOS
Os algoritmos apresentam uma versao resumida dos algoritmos desenvolvidos pelo
autor.
Codigo A.1 – Multiplicacao de Vetor x Constante Sequencial
1 int main ( )
2 {3 c l o c k t tempodeex ;
4 int x = 196777216;
5 int ∗vec ;
6 int ∗vec2 ;
7 int num = 196777216;
8 vec = ( int ∗) mal loc ( s izeof ( int ) ∗ num) ;
9 vec2 = ( int ∗) mal loc ( s izeof ( int ) ∗ num) ;
10 int l en = s izeof ( vec ) / s izeof ( int ) ;
11 for ( int i = 0 ; i < num; i++)
12 {13 vec [ i ] = 4 ;
14 }15 for ( int i = 0 ; i < num; i++)
16 {17 vec2 [ i ] = vec [ i ] ∗ 2 ;
18 }19 int contador = 0 ;
20 for ( int i = 0 ; i < 1 ; i++)
21 {22 contador = contador + 1 ;
23 p r i n t f ("%d " , vec2 [ x−1]) ;
24 }25 }
Codigo A.2 – Multiplicacao de Vetor x Constante Paralelo
1 int main ( )
2 {3 c l : : Program program = CreateProgram ("Multvet.cl" ) ;
4 auto context = program . get In fo<CL PROGRAM CONTEXT>() ;
5 auto d e v i c e s = context . ge t In fo<CL CONTEXT DEVICES>() ;
6 auto& dev i ce = d e v i c e s . f r o n t ( ) ;
7 auto vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
8 vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
9 auto maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
10 maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
11 std : : vector<int> vec (196777216) ; //GRANDE
12 int n = 196777216;
13 c l i n t e r r = 0 ;
80
14 c l : : Bu f f e r inBuf ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR, s izeof ( int )
15 ∗ vec . s i z e ( ) , vec . data ( ) , &e r r ) ;
16 c l : : Bu f f e r outBuf ( context , CL MEM WRITE ONLY, s izeof ( int ) ∗ vec . s i z e ( ) , nu l lp t r ,
17 &e r r ) ;
18 c l : : Kernel k e rne l ( program , "Multvet" ) ;
19 e r r = ke rne l . setArg (0 , inBuf ) ;
20 e r r = ke rne l . setArg (1 , outBuf ) ;
21 c l : : CommandQueue queue ( context , dev i c e ) ;
22 e r r = queue . enqueueF i l lBu f f e r ( inBuf , 4 , NULL, s izeof ( int ) ∗ ( vec . s i z e ( ) ) ) ;
23 e r r = queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange , c l : : NDRange(196777216) ,
24 c l : : NDRange(256) ) ;
25 e r r = queue . enqueueReadBuffer ( outBuf , CL TRUE, 0 , s izeof ( int ) ∗ vec . s i z e ( ) ,
26 vec . data ( ) ) ;
27 }28 //Arquivo . c l
29 ke rne l void Multvet ( g l o b a l int∗ data , g l o b a l int∗ outData )
30 {31 int g id = g e t g l o b a l i d (0 ) ;
32 outData [ g id ] = data [ g id ] ∗ 2 ;
33 }
Codigo A.3 – Multiplicacao de Vetor x Vetor Paralelo
1 int main ( )
2 {3 c l : : Program program = CreateProgram ("vetorxvetor.cl" ) ;
4 auto context = program . get In fo<CL PROGRAM CONTEXT>() ;
5 auto d e v i c e s = context . ge t In fo<CL CONTEXT DEVICES>() ;
6 auto& dev i ce = d e v i c e s . f r o n t ( ) ;
7 auto vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
8 vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
9 auto maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
10 maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
11 std : : vector<int> vec (90000000) ; //MEDIA
12 int n = 10 ;
13 c l i n t e r r = 0 ;
14 c l : : Bu f f e r inBuf ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR, s izeof ( int )
15 ∗ vec . s i z e ( ) , vec . data ( ) , &e r r ) ;
16 c l : : Bu f f e r inBuf2 ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR, s izeof ( int )
17 ∗ vec2 . s i z e ( ) , vec2 . data ( ) , &e r r ) ;
18 c l : : Bu f f e r outBuf ( context , CL MEM WRITE ONLY, s izeof ( int ) ∗ vec . s i z e ( ) , nu l lp t r ,
19 &e r r ) ;
20 c l : : Kernel k e rne l ( program , "vetorxvetor" ) ;
21 e r r = ke rne l . setArg (0 , inBuf ) ;
22 e r r = ke rne l . setArg (1 , outBuf ) ;
23 e r r = ke rne l . setArg (2 , inBuf2 ) ;
24 c l : : CommandQueue queue ( context , dev i c e ) ;
81
25 e r r = queue . enqueueF i l lBu f f e r ( inBuf , 4 , NULL, s izeof ( int ) ∗ ( vec . s i z e ( ) ) ) ;
26 e r r = queue . enqueueF i l lBu f f e r ( inBuf2 , 4 , NULL, s izeof ( int ) ∗ ( vec . s i z e ( ) ) ) ;
27 e r r = queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange , c l : : NDRange( vec . s i z e ( ) ) ) ;
28 e r r = queue . enqueueReadBuffer ( outBuf , CL TRUE, 0 , s izeof ( int ) ∗ vec . s i z e ( ) ,
29 vec . data ( ) ) ;
30 c l : : f i n i s h ( ) ;
31 }32 //Arquivo . c l
33 k e r n e l void veto rxve to r ( g l o b a l int∗ data , g l o b a l int∗ outData ,
34 g l o b a l int∗ data2 )
35 {36 outData [ g e t g l o b a l i d (0 ) ] = data [ g e t g l o b a l i d (0 ) ] ∗ data2 [ g e t g l o b a l i d (0 ) ] ;
37 }
Codigo A.4 – Friendly Numbers Paralelo
1 void fnSeq ( vector<int> v a l o r e s ) {2 cout << "SEQUENCIAL" << endl ;
3 vector<int> valSumm( v a l o r e s . s i z e ( ) ) ;
4 for ( int i = 0 ; i < v a l o r e s . s i z e ( ) ; i++) {5 for ( int j = 1 ; j < v a l o r e s [ i ] ; j++) {6 i f ( v a l o r e s [ i ] % j == 0) { valSumm [ i ] += j ; }7 }8 }9 }
10 void fNumbers2 ( vector<int> v a l o r e s ) {11 oc lSetup s ("fNumbers.cl" ) ;
12 c l : : Context context = s . context ;
13 c l : : Program program = s . program ;
14 c l : : Device dev i ce = s . dev i c e ;
15 c l i n t e r r = 0 ;
16 c l : : Kernel k e rne l ( program , "fNumbers" ) ;
17 int valoresMem = v a l o r e s . s i z e ( ) ∗ s izeof ( int ) ;
18 vector<int> summ( v a l o r e s . s i z e ( ) ) ;
19 c l : : Bu f f e r bufVal ( context , CL MEM READ ONLY | CL MEM HOST NO ACCESS |20 CL MEM COPY HOST PTR, valoresMem , v a l o r e s . data ( ) , &e r r ) ;
21 c l : : Bu f f e r bufSumm( context , CL MEM WRITE ONLY, valoresMem , &e r r ) ;
22 c l : : Bu f f e r outBuf ( context , CL MEM WRITE ONLY, valoresMem ∗ valoresMem ,
23 &e r r ) ;
24 e r r = ke rne l . setArg (0 , bufVal ) ;
25 e r r = ke rne l . setArg (1 , bufSumm) ;
26 e r r = ke rne l . setArg (2 , outBuf ) ;
27 vector<int> outMat ( v a l o r e s . s i z e ( ) ∗ v a l o r e s . s i z e ( ) ) ;
28 c l : : CommandQueue queue ( context , dev i c e ) ;
29 e r r = queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange ,
30 c l : : NDRange( v a l o r e s . s i z e ( ) , v a l o r e s . s i z e ( ) ) ) ;
31 e r r = queue . enqueueReadBuffer ( outBuf , GL TRUE, 0 , s izeof ( int ) ∗outMat . s i z e ( ) ,
82
32 outMat . data ( ) ) ;
33 for ( int i = 0 ; i< v a l o r e s . s i z e ( ) ; i++)
34 {35 cout<< v a l o r e s [ i ] << " " ;
36 }37 cout << endl << endl ;
38 for ( int i = 0 ; i < v a l o r e s . s i z e ( ) ; i++) {39 for ( int j = 0 ; j < v a l o r e s . s i z e ( ) ; j++) {40 i f ( outMat [ ( j ∗ v a l o r e s . s i z e ( ) ) + i ] == v a l o r e s [ j ] )
41 cout << v a l o r e s [ i ] << " e " << outMat [ ( j ∗ v a l o r e s . s i z e ( ) ) + i ]
42 << " sao amigos" << endl ;
43 }44 }45 cout << "-----------------------" << endl ;
46 }47 int main ( ) {48 vector<int> v a l o r e s = { 5 , 220 , 284 , 7 , 1184 , 11 , 1210} ;
49 fNumbers2 ( v a l o r e s ) ;
50 }51 //ARQUIVO .CL
52
53 k e r n e l void fNumbers ( g l o b a l int∗ data , g l o b a l int∗ summ,
54 g l o b a l int∗ outData )
55 {56 int d1 = g e t g l o b a l i d (0 ) ;
57 int d2 = g e t g l o b a l i d (1 ) ;
58 int s i z e 2 = g e t g l o b a l s i z e (1 ) ;
59 i f ( d2 == d1 ) {60 for ( int i = 1 ; i < data [ d1 ] ; i++)
61 {62 i f ( data [ d1 ] % i == 0)
63 {64 summ[ d1 ] += i ;
65 }66 }67 }68 b a r r i e r (CLK GLOBAL MEM FENCE) ;
69 i f ( d2 >= d1 ) {70 i f ( data [ d2 ] == summ[ d1 ] ) {71 i f ( data [ d1 ] == summ[ d2 ] ) {72 outData [ ( d2 ∗ s i z e 2 ) + d1 ] = summ[ d1 ] ;
73 }74 }75 }76 }
Codigo A.5 – Ordenacao Sequencial
83
1 int main ( )
2 {3 int ∗vec ;
4 int num = 100000;
5 int aux = 0 ;
6 vec = ( int ∗) mal loc ( s izeof ( int ) ∗ num) ;
7 for ( int i = 0 ; i < num; i++)
8 {9 vec [ i ] = rand ( ) ;
10 }11 tempodeex = c lock ( ) ;
12 for ( int i = 0 ; i < num; i++)
13 {14 for ( int y = 0 ; y < num−1; y++)
15 {16 i f ( vec [ y ] > vec [ y+1])
17 { aux = vec [ y ] ;
18 vec [ y ] = vec [ y + 1 ] ;
19 vec [ y + 1 ] = aux ;
20 }21 }22 }23 }
Codigo A.6 – Ordenacao Paralela
1 int main ( )
2 {3 c l : : Program program = CreateProgram ("ordenacaoparalela.cl" ) ;
4 auto context = program . get In fo<CL PROGRAM CONTEXT>() ;
5 auto d e v i c e s = context . ge t In fo<CL CONTEXT DEVICES>() ;
6 auto& dev i ce = d e v i c e s . f r o n t ( ) ;
7 auto vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
8 vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
9 auto maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
10 maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
11 tempodeex = c lock ( ) ;
12 std : : vector<int> vec (100000) ;
13 c l i n t e r r = 0 ;
14 for ( int i = 0 ; i < vec . s i z e ( ) ; i++)
15 {16 vec [ i ] = rand ( ) ;
17 }18 c l : : Bu f f e r inBuf ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR,
19 s izeof ( int ) ∗ vec . s i z e ( ) , vec . data ( ) , &e r r ) ;
20 c l : : Kernel k e rne l ( program , "ProcessArray" ) ;
21 c l : : CommandQueue queue ( context , dev i c e ) ;
84
22 for ( int i = 0 ; i < 100 ; i++)
23 {24 ke rne l . setArg (0 , inBuf ) ;
25 queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange ,
26 c l : : NDRange( vec . s i z e ( )−1) ) ;
27 }28 e r r = queue . enqueueReadBuffer ( inBuf , CL TRUE, 0 , s izeof ( int ) ∗ vec . s i z e ( ) ,
29 }30 //Arquivo .CL
31 k e r n e l void ProcessArray ( g l o b a l int∗ data )
32 {33 s i z e t id = g e t g l o b a l i d (0 ) ;
34 s i z e t id2 = g e t g l o b a l i d (0 ) + 1 ;
35 i f ( data [ id ] > data [ id2 ] )
36 {37 int aux = data [ id ] ;
38 data [ id ] = data [ id2 ] ;
39 data [ id2 ] = aux ;
40 }41 }
Codigo A.7 – Multiplicacao de Matriz por constante Paralela
1 int main ( )
2 {3 c l : : Program program = CreateProgram ("matrizxconstanteparalelo.cl" ) ;
4 auto context = program . get In fo<CL PROGRAM CONTEXT>() ;
5 auto d e v i c e s = context . ge t In fo<CL CONTEXT DEVICES>() ;
6 auto& dev i ce = d e v i c e s . f r o n t ( ) ;
7 const int l i n h a s = 3000 ;
8 const int co lunas = 60000 ;
9 const int count = l i n h a s ∗ co lunas ;
10 std : : array<std : : array<int , co lunas >, l i nhas> ar r ;
11 auto vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
12 vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
13 auto maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
14 maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
15 c l : : Bu f f e r buf ( context , CL MEM READ WRITE | CL MEM HOST READ ONLY |16 CL MEM COPY HOST PTR, s izeof ( int ) ∗ count , a r r . data ( ) ) ;
17 c l : : Kernel k e rne l ( program , "matrizxconstanteparalelo" ) ;
18 ke rne l . setArg (0 , buf ) ;
19 c l : : CommandQueue queue ( context , dev i c e ) ;
20 tempodeex = c lock ( ) ;
21 queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange , c l : : NDRange(3000 , 60000) ,
22 c l : : NDRange(16 , 16) ) ;
23 queue . enqueueReadBuffer ( buf , GL TRUE, 0 , s izeof ( int ) ∗ count , a r r . data ( ) ) ;
24 }
85
25 //ARQUIVO .CL
26 k e r n e l void matr i zxcons tan t epa ra l e l o ( g l o b a l int∗ data )
27 {28 s i z e t id = ( g e t g l o b a l i d (1 ) ∗ g e t g l o b a l s i z e (0 ) ) + g e t g l o b a l i d (0 ) ;
29 data [ id ] = data [ id ] ∗ 2 ;
30 }
Codigo A.8 – Multiplicacao de Matriz por Matriz Paralela
1 int main (void ) {2 int i ;
3 int catchCode ;
4 int l ength , d i rname length ;
5 char ∗ resourcePath=0x0 ;
6 char ∗ kernelPath=0x0 ;
7 char ∗ ke rne lS r c=0x0 ;
8 KernelData ∗ kernelData ;
9 cl mem d A ;
10 cl mem d B ;
11 cl mem d C ;
12 int tamlinha = 2200 ;
13 int tamcol = 2200 ;
14 int WA = tamlinha ;
15 int HA = tamcol ;
16 int WB = tamlinha ;
17 int HB = tamcol ;
18 int WC = tamlinha ;
19 int HC = tamcol ;
20 unsigned int s i z e A = WA ∗ HA;
21 unsigned int mem size A = s izeof ( f loat ) ∗ s i z e A ;
22 f loat ∗ h A = ( f loat ∗) mal loc ( mem size A ) ;
23 unsigned int s i z e B = WB ∗ HB;
24 unsigned int mem size B = s izeof ( f loat ) ∗ s i z e B ;
25 f loat ∗ h B = ( f loat ∗) mal loc ( mem size B ) ;
26 unsigned int s i z e C = WC ∗ HC;
27 unsigned int mem size C = s izeof ( f loat ) ∗ s i z e C ;
28 f loat ∗ h C = ( f loat ∗) mal loc ( mem size C ) ;
29 l ength = wai getExecutablePath (NULL, 0 , &dirname length ) ;
30 resourcePath = (char ∗) mal loc ( s izeof (char ) ∗ l ength ) ;
31 checkMallocMain ( resourcePath ) ;
32 wai getExecutablePath ( resourcePath , length , &dirname length ) ;
33 resourcePath [ d irname length ] = ’\0’ ;
34 kernelPath=conca tS t r i ng s ( resourcePath , "\\openclCodes\\add.cl" ) ;
35 checkMallocMain ( kerne lPath ) ;
36 catchCode=loadOpenclKernel (&kerne lSrc , kerne lPath ) ;
37 checkGenericMain ( catchCode ) ; checkMallocMain ( ke rne lS r c ) ;
38 c l p l a t f o r m i d plat form ;
86
39 c l d e v i c e i d dev i c e ;
40 d i s p l a y I n f o ( ) ;
41 getPlatformAndDevice (1 , 0 , &platform , &dev i c e ) ;
42 kernelData= new KernelData ( kerne lSrc , "add" , platform , device ,&catchCode ) ;
43 checkCLMain ( catchCode ) ; checkGenericMain ( catchCode ) ;
44 checkMallocMain ( kernelData ) ;
45 c l c o n t e x t context=getContext KernelData ( kernelData ) ;
46 cl command queue command queue= getCommand queue KernelData ( kernelData ) ;
47 d C = c lC rea t eB u f f e r ( context , CL MEM READ WRITE, mem size A , NULL, &catchCode ) ;
48 d A = c lC rea t eB u f f e r ( context , CL MEM READ WRITE |49 CL MEM COPY HOST PTR, mem size A , h A , &catchCode ) ;
50 d B = c lC re a t e Bu f f e r ( context , CL MEM READ WRITE |51 CL MEM COPY HOST PTR, mem size B , h B , &catchCode ) ;
52 c l k e r n e l k e rne l=getKerne l Kerne lData ( kernelData ) ;
53 int wA = WA;
54 int wC = WC;
55 catchCode = clSetKerne lArg ( kerne l , 0 , s izeof ( cl mem ) , (void ∗)&d C) ;
56 catchCode = clSetKerne lArg ( kerne l , 1 , s izeof ( cl mem ) , (void ∗)&d A) ;
57 catchCode = clSetKerne lArg ( kerne l , 2 , s izeof ( cl mem ) , (void ∗)&d B ) ;
58 catchCode = clSetKerne lArg ( kerne l , 3 , s izeof ( int ) , (void ∗)&wA) ;
59 catchCode = clSetKerne lArg ( kerne l , 4 , s izeof ( int ) , (void ∗)&wC) ;
60 s i z e t globalWorkSize [ 2 ] ;
61 globalWorkSize [ 0 ] =WA;
62 globalWorkSize [ 1 ] =WA;
63 catchCode = clEnqueueNDRangeKernel ( command queue , kerne l , 2 , NULL, globalWorkSize ,
64 NULL, 0 , NULL, NULL) ; checkCLMain ( catchCode ) ;
65 catchCode=clEnqueueReadBuffer ( command queue , d C ,CL TRUE, 0 , mem size A , h C , 0 ,NULL,NULL)
66 ; checkCLMain ( catchCode ) ;
67 }68 //Arquivo . c l
69
70 k e r n e l void add ( g l o b a l f loat ∗ C, g l o b a l f loat ∗ A,
71 g l o b a l f loat ∗ B, int TamA, int TamB) {72 int tx = g e t g l o b a l i d (0 ) ;
73 int ty = g e t g l o b a l i d (1 ) ;
74 f loat value =0;
75 int k =0;
76 for ( k =0; k < TamA; ++k )
77 {78 f loat elementA = A[ ty ∗ TamA + k ] ;
79 f loat elementB = B[ k ∗ TamA + tx ] ;
80 value += elementA ∗ elementB ;
81 }82 C[ ty ∗ TamA + tx ] = value ;
83 }
Codigo A.9 – Calculo de PI Paralelo
87
1 int main ( )
2 {3 int num steps = 1000000;
4 int d i v i s o r = 50000 ;
5 double s t ep = (double ) 1 .0/ num steps ;
6 f loat intrnCnt= num steps / d i v i s o r ;
7 unsigned int s i z e C = d i v i s o r ;
8 unsigned int mem size C = s izeof (double ) ∗ s i z e C ;
9 double∗ h C = (double∗) mal loc ( mem size C ) ;
10 std : : vector<c l : : Platform> plat fo rms ;
11 c l : : Platform : : get (&plat fo rms ) ;
12 auto plat form = plat fo rms . f r o n t ( ) ;
13 std : : vector<c l : : Device> d e v i c e s ;
14 plat form . getDev ice s (CL DEVICE TYPE GPU, &de v i c e s ) ;
15 auto dev i ce = d e v i c e s . f r o n t ( ) ;
16 std : : i f s t r e a m codfonte ("pi.cl" ) ;
17 std : : s t r i n g s r c ( std : : i s t r e a m b u f i t e r a t o r <char>( cod fonte ) ,
18 ( std : : i s t r e a m b u f i t e r a t o r <char>() ) ) ;
19 c l : : Program : : Sources sour c e s (1 , std : : make pair ( s r c . c s t r ( ) ,
20 s r c . l ength ( ) + 1) ) ;
21 c l : : Context context ( dev i ce ) ;
22 c l : : Program program ( context , s ou r c e s ) ;
23 auto e r r = program . bu i ld ("-cl-std=CL1.2" ) ;
24 c l : : Bu f f e r CLBufferCreate ( context , CL MEM WRITE ONLY, s izeof (double ) ∗25 d i v i s o r , nu l lp t r , &e r r ) ;
26 c l : : Kernel k e rne l ( program , "pi" , &e r r ) ;
27 ke rne l . setArg (0 , CLBufferCreate ) ;
28 ke rne l . setArg (1 , intrnCnt ) ;
29 ke rne l . setArg (2 , s t ep ) ;
30 c l : : CommandQueue queue ( context , dev i c e ) ;
31 e r r = queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange ,
32 c l : : NDRange( d i v i s o r ) ) ;
33 std : : vector<double> buf ( d i v i s o r ) ; // a t en t i on po in t
34 queue . enqueueReadBuffer ( CLBufferCreate , CL TRUE, 0 , s izeof (double ) ∗35 buf . s i z e ( ) , buf . data ( ) ) ;
36 double sum = 0 . 0 ;
37 for ( int w = 0 ; w< d i v i s o r ; w++)
38 {39 sum += buf [w ] ;
40 }41 double pi = (sum∗ s t ep ) ;
42 p r i n t f ("O pi [U+FFFD]e:" ) ;
43 p r i n t f ("%.20f" , p i ) ;
44 p r i n t f ("\n" ) ;
45 }46 //ARQUIVO .CL
88
47 k e r n e l void pi ( g l o b a l double∗ C, p r i v a t e const f loat X,
48 p r i v a t e const double Y) {49 int i = g e t g l o b a l i d (0 ) ;
50 double Part = 0 . 0 ;
51 double x = 0 . 0 ;
52 long from = i ∗ X;
53 long to = from + X;
54 for ( long j = from ; j < to ; j++)
55 {56 x = ( j + 0 .5 ) ∗ Y;
57 Part += 4.0 / ( 1 . + x∗x ) ;
58 }59 C[ i ] = Part ;
60 }
Codigo A.10 – Reducao Numerica Sequencial
1 int main ( )
2 {3 int ∗vec ;
4 int num = 33554432;
5 vec = ( int ∗) mal loc ( s izeof ( int ) ∗ num) ;
6 int acumulador = 0 ;
7 for ( int i = 0 ; i < num; i++)
8 {9 vec [ i ] = 1 ;
10 }11 for ( int i = 0 ; i < num; i++)
12 {13 acumulador += vec [ i ] ;
14 }15 }
Codigo A.11 – Reducao Numerica Paralela
1 int main ( )
2 {3 c l : : Program program = CreateProgram ("somadetodoselementosdeumvetor.cl" ) ;
4 auto context = program . get In fo<CL PROGRAM CONTEXT>() ;
5 auto d e v i c e s = context . ge t In fo<CL CONTEXT DEVICES>() ;
6 auto& dev i ce = d e v i c e s . f r o n t ( ) ;
7 std : : vector<int> vec (2048) ;
8 c l : : Kernel k e rne l ( program , "somadetodoselementosdeumvetor" ) ;
9 auto workGroupSize = ke rne l . getWorkGroupInfo<CL KERNEL WORK GROUP SIZE>( dev i c e ) ;
10 auto numWorkGroups = vec . s i z e ( ) / workGroupSize ;
11 c l : : Bu f f e r buf ( context , CL MEM READ ONLY | CL MEM HOST NO ACCESS
12 | CL MEM COPY HOST PTR, s izeof ( int ) ∗ vec . s i z e ( ) , vec . data ( ) ) ;
13 c l : : Bu f f e r outBuf ( context , CL MEM WRITE ONLY | CL MEM HOST READ ONLY,
89
14 s izeof ( int ) ∗ numWorkGroups) ;
15 ke rne l . setArg (0 , buf ) ;
16 ke rne l . setArg (1 , s izeof ( int ) ∗ workGroupSize , n u l l p t r ) ;
17 ke rne l . setArg (2 , outBuf ) ;
18 std : : vector<int> outVec (numWorkGroups) ;
19 c l : : CommandQueue queue ( context , dev i c e ) ;
20 tempodeex = c lock ( ) ;
21 queue . enqueueNDRangeKernel ( kerne l , c l : : NullRange , c l : : NDRange( vec . s i z e ( ) ) ,
22 c l : : NDRange( workGroupSize ) ) ;
23 queue . enqueueReadBuffer ( outBuf , GL TRUE, 0 , s izeof ( int ) ∗ outVec . s i z e ( ) ,
24 outVec . data ( ) ) ;
25 }26 //Arquivo . c l
27 k e r n e l void somadetodoselementosdeumvetor ( g l o b a l int∗ data , l o c a l int∗28 VetorLocal , g l o b a l int∗ VetordeSaida )
29 {30 s i z e t g l o b a l I d = g e t g l o b a l i d (0 ) ;
31 s i z e t l o c a l S i z e = g e t l o c a l s i z e (0 ) ;
32 s i z e t l o c a l I d = g e t l o c a l i d (0 ) ;
33 VetorLocal [ l o c a l I d ] = data [ g l o b a l I d ] ;
34 b a r r i e r (CLK LOCAL MEM FENCE) ;
35 for ( int i = l o c a l S i z e >> 1 ; i > 0 ; i >>= 1)
36 {37 i f ( l o c a l I d < i )
38 {39 VetorLocal [ l o c a l I d ] += VetorLocal [ l o c a l I d + i ] ;
40 }41 b a r r i e r (CLK LOCAL MEM FENCE) ;
42 }43 i f ( l o c a l I d == 0)
44 {45 VetordeSaida [ g e t g roup id (0 ) ] = VetorLocal [ 0 ] ;
46 }47 }
Codigo A.12 – K-means Paralelo
1 struct problem
2 {3 int npo ints ;
4 int dimension ;
5 int ncent ro id s ;
6 f loat mindistance ;
7 } ;
8 stat ic struct problem huge = { 65536 , 16 , 1024 , 0 . 0 } ;
9 stat ic struct problem ∗p = &t iny ;
10 int nthreads = 1 ;
90
11 int nWorkingGroups = 0 ;
12 c l p l a t f o r m i d plat form = NULL;
13 c l d e v i c e i d dev i c e = NULL;
14 c l : : Context context = NULL; // To run on GPU
15 c l k e r n e l k e rne l = NULL;
16 cl command queue queue = NULL;
17 c l i n t s t a t u s = NULL;
18 c l : : Program program ; // To run on GPU
19
20 c l : : Program initGPU ( const std : : s t r i n g& f i l e )
21 {22 std : : vector<c l : : Platform> plat fo rms ;
23 c l : : Platform : : get (&plat fo rms ) ;
24 auto plat form = plat fo rms . f r o n t ( ) ;
25 std : : vector<c l : : Device> d e v i c e s ;
26 plat form . getDev ice s (CL DEVICE TYPE ALL, &d e v i c e s ) ;
27 auto dev i ce = d e v i c e s . f r o n t ( ) ;
28 std : : i f s t r e a m kmf i l e ( f i l e ) ;
29 std : : s t r i n g s r c ( std : : i s t r e a m b u f i t e r a t o r <char>( kmf i l e ) ,
30 ( std : : i s t r e a m b u f i t e r a t o r <char>() ) ) ;
31 c l : : Program : : Sources sour c e s (1 , std : : make pair ( s r c . c s t r ( ) , s r c . l ength ( ) + 1) ) ;
32 c l : : Context context ( dev i ce ) ;
33 c l : : Program program ( context , s ou r c e s ) ;
34 program . bu i ld ("-cl-std=CL1.2" ) ;
35 return program ;
36 }37 int main ( )
38 {39 program = initGPU ("km.cl" ) ;
40 auto context = program . get In fo<CL PROGRAM CONTEXT>() ;
41 auto d e v i c e s = context . ge t In fo<CL CONTEXT DEVICES>() ;
42 auto& dev i ce = d e v i c e s . f r o n t ( ) ;
43 auto vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
44 vendor = dev i c e . ge t In fo<CL DEVICE VENDOR>() ;
45 auto maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
46 maxworkitem = dev i ce . ge t In fo<CL DEVICE MAX WORK ITEM SIZES>() ;
47 c l : : CommandQueue queue ( context , dev i c e ) ;
48 int i ;
49 f loat ∗ data ;
50 int data2 ;
51 p = &smalL ;
52 nthreads = 1 ;
53 verbose = 0 ;
54 srandnum (0) ;
55 omp set num threads ( nthreads ) ;
56 data2 = p−>npo ints ∗ p−>dimension ;
57 data = ( f loat ∗) mal loc ( s izeof ( f loat ) ∗ p−>npo ints ∗ p−>dimension ) ;
91
58 for ( i = 0 ; i < (p−>npo ints ∗ p−>dimension ) ; i++)
59 {60 data [ i ] = randnum ( ) & 0 x f f f f ;
61 }62 for ( i = 0 ; i < (p−>npo ints ∗ p−>dimension ) ; i++)
63 kmeans ( data , p−>npoints , p−>ncentro ids , p−>dimension , p−>mindistance ,
64 context , queue ) ;
65 std : : c in . get ( ) ;
66 }67
68 f loat ∗data ;
69 int npo ints ;
70 int ncent ro id s ;
71 int ndimension ;
72 f loat mindistance ;
73 int ∗map ;
74 f loat ∗ c e n t r o i d s ;
75 int ∗ d i r t y ;
76 int ∗ t o o f a r ;
77 int ∗has changed ;
78 c l : : CommandQueue queuex ;
79 void i n i tD a ta S t ru c tu r e s (void ) {80 int i , j , k ;
81 t o o f a r = ( int ∗) mal loc ( s izeof ( int ) ) ;
82 has changed = ( int ∗) mal loc ( s izeof ( int ) ∗ nthreads ) ;
83 map = ( int ∗) mal loc ( s izeof ( int ) ∗ npo ints ) ;
84 for ( i = 0 ; i < npo ints ; i++)
85 map [ i ] = −1;
86 d i r t y = ( int ∗) mal loc ( s izeof ( int ) ∗ ncent ro id s ) ;
87 c e n t r o i d s = ( f loat ∗) mal loc ( s izeof ( f loat ) ∗ ncent ro id s ∗ ndimension ) ;
88 for ( i = 0 ; i < ncent ro id s ; i++)
89 {90 d i r t y [ i ] = 1 ;
91 k = randnum ( ) % npoints ;
92 for ( j = 0 ; j<ndimension ; j++)
93 c e n t r o i d s [ i ∗ ndimension + j ] = data [ k ∗ ndimension + j ] ;
94 map [ k ] = i ;
95 }96 for ( i = 0 ; i < npo ints ; i++)
97 {98 i f (map [ i ] < 0)
99 map [ i ] = randnum ( ) % ncent ro id s ;
100 }101 for ( i = 0 ; i < npo ints ; i++)
102 {103 p r i n t f ("%d\n" , map [ i ] ) ;
104 }
92
105 }106
107 void computeDistance ( c l : : Bu f f e r dataBufferx , c l : : Bu f f e r c en t ro id sBu f f e rx ,
108 c l : : Bu f f e r mapBufferx , c l : : Bu f f e r d i r tyBuf f e rx , c l : : Bu f f e r tooFarBufferx ,
109 c l : : Kernel k e rne l ) {110 s i z e t g loba l work [ 3 ] = { npo ints , 1 , 1 } ;
111 s t a t u s = queuex . enqueueWriteBuffer ( c en t ro id sBu f f e rx , CL FALSE, 0 ,
112 s izeof ( f loat ) ∗ ndimension ∗ ncentro ids , c e n t r o i d s ) ;
113 s t a t u s = queuex . enqueueWriteBuffer ( mapBufferx , CL FALSE, 0 ,
114 s izeof ( int ) ∗ npoints , map) ;
115 s t a t u s = queuex . enqueueWriteBuffer ( d i r tyBuf f e rx , CL FALSE, 0 ,
116 s izeof ( int ) ∗ ncentro ids , d i r t y ) ;
117 s t a t u s = queuex . enqueueWriteBuffer ( tooFarBufferx , CL FALSE, 0 ,
118 s izeof ( int ) , t o o f a r ) ;
119 s t a t u s = ke rne l . setArg (1 , npo ints ) ;
120 s t a t u s = ke rne l . setArg (2 , ndimension ) ;
121 s t a t u s = ke rne l . setArg (3 , c e n t r o i d s B u f f e r x ) ;
122 s t a t u s = ke rne l . setArg (4 , nc en t ro id s ) ;
123 s t a t u s = ke rne l . setArg (5 , mapBufferx ) ;
124 s t a t u s = ke rne l . setArg (6 , d i r t y B u f f e r x ) ;
125 s t a t u s = ke rne l . setArg (7 , tooFarBuf ferx ) ;
126 s t a t u s = ke rne l . setArg (8 , mindistance ) ;
127 s t a t u s = queuex . enqueueNDRangeKernel ( kerne l , c l : : NullRange ,
128 c l : : NDRange( npo ints ) ) ;
129 s t a t u s = queuex . enqueueReadBuffer ( c en t ro id sBu f f e rx , CL TRUE,
130 0 , s izeof ( f loat ) ∗ ncent ro id s ∗ ndimension , c e n t r o i d s ) ;
131 s t a t u s = queuex . enqueueReadBuffer ( mapBufferx , CL TRUE, 0 ,
132 s izeof ( int ) ∗ npoints , map) ;
133 s t a t u s = queuex . enqueueReadBuffer ( tooFarBufferx , CL TRUE, 0 ,
134 s izeof ( int ) , t o o f a r ) ;
135 s t a t u s = queuex . enqueueReadBuffer ( d i r tyBuf f e rx , CL TRUE, 0 ,
136 s izeof ( int ) ∗ ncentro ids , d i r t y ) ;
137 s t a t u s = c l F i n i s h ( queue ) ;
138 }139 void computeCentroids (void ) {140 int i , j , k , populat ion , t i d ;
141 #pragma omp p a r a l l e l p r i v a t e ( i , j , k , populat ion , t i d ) default ( shared )
142 {143 t i d = omp get thread num ( ) ;
144 has changed [ t i d ] = 0 ;
145 #pragma omp for
146 for ( i = 0 ; i < ncent ro id s ; i++)
147 {148 i f ( ! d i r t y [ i ] ) {149 continue ;
150 }151 for ( k = 0 ; k < ndimension ; k++) {
93
152 c e n t r o i d s [ i ∗ ndimension + k ] = 0 . 0 ;
153 }154 populat ion = 0 ;
155 for ( j = 0 ; j < npo ints ; j++)
156 {157 i f (map [ j ] != i )
158 continue ;
159 for ( k = 0 ; k < ndimension ; k++) {160 c e n t r o i d s [ i ∗ ndimension + k ] += data [ j ∗ ndimension + k ] ;
161 }162 populat ion++;
163 }164 i f ( populat ion > 1) {165 for ( k = 0 ; k < ndimension ; k++) {166 c e n t r o i d s [ i ∗ ndimension + k ] ∗= 1.0 / populat ion ;
167 }168 }169 has changed [ t i d ] = 1 ;
170 }171 }172 for ( i = 0 ; i < ncent ro id s ; i++) {173 d i r t y [ i ] = 0 ;
174 }175 }176 int ∗kmeans ( f loat ∗ data , int npoints , int ncent ro id s , int ndimension ,
177 f loat mindistance , c l : : Context context , c l : : CommandQueue queuex )
178 {179 data = data ;
180 npo ints = npo int s ;
181 ncent ro id s = n c e n t r o i d s ;
182 ndimension = ndimension ;
183 mindistance = mindi s tance ;
184 context = context ;
185 queuex = queuex ;
186 int i , j , k , again , i t e r ;
187 double s ta r t t ime , cent t ime , d i s t t i m e ;
188 i n i tD a ta S t ru c t u r e s ( ) ;
189 c r ea teKerne l ( ) ;
190 c l : : Kernel k e rne l ( program , "kmeans" , &s t a t u s ) ;
191 createMemoryBuffers ( ) ;
192 c l : : Bu f f e r dataBuf ferx ( context , CL MEM READ ONLY | CL MEM COPY HOST PTR,
193 s izeof ( f loat ) ∗ ndimension ∗ npoints , data , &s t a t u s ) ;
194 c l : : Bu f f e r c e n t r o i d s B u f f e r x ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR,
195 s izeof ( f loat ) ∗ ndimension ∗ ncentro ids , c en t ro id s , &s t a t u s ) ;
196 c l : : Bu f f e r mapBufferx ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR,
197 s izeof ( int ) ∗ npoints , map , &s t a t u s ) ;
198 c l : : Bu f f e r d i r t y B u f f e r x ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR,
94
199 s izeof ( int ) ∗ ncentro ids , d i r ty , &s t a t u s ) ;
200 c l : : Bu f f e r tooFarBuf ferx ( context , CL MEM READ WRITE | CL MEM COPY HOST PTR,
201 s izeof ( int ) , t oo f a r , &s t a t u s ) ;
202 cent t ime = 0 . 0 ; d i s t t i m e = 0 . 0 ;
203 i t e r = 0 ;
204 s t a t u s = ke rne l . setArg (0 , dataBuf ferx ) ;
205 i t e r = 0 ;
206 do {207 computeDistance ( dataBufferx , c en t ro id sBu f f e rx , mapBufferx , d i r tyBuf f e rx ,
208 tooFarBufferx , k e rne l ) ;
209 computeCentroids ( ) ;
210 for ( i = 0 ; i < nthreads ; i++)
211 {212 i f ( has changed [ i ] )
213 break ;
214 }215 again = ( ( i < nthreads ) && t o o f a r [ 0 ] ) ? 1 : 0 ;
216 i t e r ++;
217 } while ( again && i t e r < 200) ;
218 p r i n t f ("Iterations: %d\n" , i t e r ) ;
219 p r i n t f ("Distance spent: %f s\n" , ( d i s t t i m e ) ) ;
220 p r i n t f ("Centroids spent: %f s\n" , ( cent t ime ) ) ;
221 f r e e ( d i r t y ) ;
222 f r e e ( c e n t r o i d s ) ;
223 return (map) ;
224 }225 //ARQUIVO . c l
226 k e r n e l void
227 kmeans ( g l o b a l f loat ∗ r e s t r i c t data , const int npoints ,
228 const int ndimension ,
229 g l o b a l f loat ∗ r e s t r i c t c ent ro id s , const int ncentro ids ,
230 g l o b a l int∗ r e s t r i c t map, g l o b a l int∗ r e s t r i c t d i r ty ,
231 g l o b a l int∗ r e s t r i c t t oo f a r , const f loat mindistance )
232 {233 int po int id , j , k , m, n ;
234 f loat tmpDist , d i s tance , tmpVar ;
235 p o i n t i d = g e t g l o b a l i d (0 ) ;
236 t o o f a r [ 0 ] = 0 ;
237 i f ( p o i n t i d < npo ints ) {238 d i s t anc e = 0 . 0 ;
239 m = map [ p o i n t i d ] ∗ ndimension ;
240 n = p o i n t i d ∗ ndimension ;
241 #pragma u n r o l l 16
242 for ( k = 0 ; k < ndimension ; k++) {243 tmpVar = c e n t r o i d s [m + k ] − data [ n + k ] ;
244 d i s t anc e += tmpVar ∗ tmpVar ;
245 }
95
246 #pragma l o o p c o a l e s c e
247 for ( j = 0 ; j < ncent ro id s ; j++)
248 {249 m = j ∗ ndimension ;
250 tmpDist = 0 . 0 ;
251 #pragma u n r o l l 16
252 for ( k = 0 ; k < ndimension ; k++) {253 tmpVar = c e n t r o i d s [m + k ] − data [ n + k ] ;
254 tmpDist += tmpVar ∗ tmpVar ;
255 }256 i f ( tmpDist < d i s t anc e )
257 {258 map [ p o i n t i d ] = j ;
259 d i s t anc e = tmpDist ;
260 d i r t y [ j ] = 1 ;
261 }262 }263 i f ( d i s t ance > mindistance )
264 t o o f a r [ 0 ] = 1 ;
265 }266 }
96
97
APENDICE B -- EXERCICIOS AVALIATIVOS
B.1 Exercıcio para avaliacao previa de conhecimento
1. O pseudocodigo a seguir representa um algoritmo que move todos os elementos do vetor
A para o vetor B, em seguida divide o vetor B pela constante 2, e depois exibe o resultado
de A - B. Identifique no pseudocodigo o trecho que exige sincronismo de Threads.
Data: Vetor A com a posicoes, Vetor B com a posicoes
Result: A-B
Step1:
Estrutura de repeticao
A[i] = B[i]
Fim da estrutura de repeticao
Step2:
Estrutura de repeticao
B[i] = B[i]/2
Fim da estrutura de repeticao
Step3:
Estrutura de repeticao
A[i] = A[i] - B[i]
Fim da estrutura de repeticao
a) O trecho Step1, Step2 e Step3 exigem sincronismo de threads.
b) O trecho Step3 exige sincronismo de threads.
c) O trecho Step2 exige sincronismo de threads.
d) Nenhuma das opcoes anteriores
2. Observe o pseudocodigo a seguir:
Data: Vetor A com a posicoes e Vetor B com a posicoes
Result: Produto de A x B + B/5
98
1. Inicializa vetor A com valores aleatorios
2. Inicializa vetor B com Valores aleatorios
3. Estrutura de repeticao
4. A[i] = A[i] * B[i]
5. Fim da estrutura de repeticao
6. Estrutura de repeticao
7. Aux[i] = B[i] / 5
8. Fim da estrutura de repeticao
9. Estrutura de repeticao
10. A[i] = A[I] + Aux[i]
11. Fim da estrutura de repeticao
12. Print A[I]
Marque abaixo as opcoes que Identificam os trechos com potencial paralelo do
pseudocodigo observado acima:
a) As estruturas de repeticao das linhas: 3, 6 e 9
b) As estruturas de repeticao das linhas: 3 e 6
c) As estruturas de repeticao das linhas: 3 e 9
d) Nenhuma das estruturas, todas precisam de sincronismo de threads
3. Uma placa de vıdeo aceleradora pode ser classificada como uma arquitetura:
a) SIMD
b) MIMD
c) SISD
d) MISD
4. Um processador Intel core I7 pode ser classificado como uma arquitetura:
a) SIMD
b) MIMD
c) SISD
d) MISD
99
5. Em relacao a programacao paralela e a granularidade de uma carga de execucao,
marque a afirmativa incorreta.
a) Ao desenvolver de forma paralela e necessario se preocupar com a granularidade
do esforco computacional que sera feito por cada nucleo, tendo como foco a arquitetura
alvo.
b) Ao desenvolver codigos paralelos, que serao executados por Processadores de
proposito especıfico, e necessario se atentar a granularidade do esforco computacional
feito por cada nucleo, caso contrario pode-se perder desempenho.
c) Ao se programar de forma paralela para GPU’s modernas e necessario redefinir
logicas condicionais, haja vista que tais arquiteturas nao possibilitam desvios condicionais
em codigos paralelos.
d) Nao e necessario se preocupar com balanceamento de carga quando a arquitetura
alvo e composta exclusivamente por um processador sequencial.
6. Qual linguagem de programacao a seguir pode ser considerada uma linguagem de
programacao que possibilita extrair performance de ambientes heterogeneos ?
a) C
b) Python
c) R
d) OpenCL
7. A linguagem de programacao OpenMP e considerada uma linguagem de programacao
paralela ?
a) Sim
b) Nao
c) Somente se utilizada em um acelerador do tipo GPU
d) Somente se utilizada em um acelerador do tipo Xeon Phi
8. Em qual modelo de programacao a linguagem de programacao OpenMP se baseia?
a) Master e Slave
b) Fork Join
c) MapReduce
d) Sequencial
100
9. Em relacao a programacao paralela, marque a alternativa correta.
a) Ao se desenvolver aplicacoes em C, uma das linguagens de programacao mais
utilizadas pelos desenvolvedores Microsoft, entende-se que serao desenvolvidos softwares
empresariais ou aplicativos mobile. Tais aplicacoes sempre exigem pouco processamento
e. por isso. nao justifica paraleliza-las, pois em todos casos o codigo fica mais lento. Por
isso nao e possıvel utilizar OpenMP em conjunto com C.
b) Ao se desenvolver aplicacoes em C, entende-se que C e por si so uma linguagem
de alto desempenho, o que torna desnecessario uni-la a linguagens como OpenMP e
OpenCL.
c) Linguagens paralelas sao usadas exclusivamente para processamento grafico, pois
o calculo de cada pixel e independente, possibilitando um enorme ganho ao paralelizar
tais algoritmos.
d) Nao e possıvel que codigos de uma aplicacao comum sejam executados de forma
paralela em arquiteturas SISD.
10. Observe o pseudocodigo a seguir :
1. Estrutura de repeticao
2. A = A + B
3. Fim da estrutura de repeticao
4. Estrutura de repeticao
5. A = B + C
6. Fim da estrutura de repeticao
7. Estrutura de repeticao
8. C = A + C
9. Fim da estrutura de repeticao
Agora marque as opcoes corretas em relacao aos trechos com dependencia de dados
do pseudocodigo :
a) O trecho com dependencia de dados e o trecho que inicia na linha 4 e termina
na linha 6.
b) O unico trecho sem dependencia de dados e o trecho que inicia na linha 4 e
termina na linha 6.
c) O trecho que inicia na linha 1 e termina na linha tres. em conjunto com o trecho
que inicia na linha 7 e termina na linha 9, tem dependencia de dados.
101
d) Todos trechos podem ser paralelizados
11. Identifique as razoes que motivaram a fabricacao de processadores paralelos:
a) A estrategia de aumento de frequencia nao obtinha resultados que justificassem
a continuacao dessa abordagem;
b) Era impossıvel aumentar a frequencia dos processadores;
c) A programacao sequencial continua tendo enormes ganhos de desempenho em
arquiteturas paralelas. Basta trocar por um processador mais recente, que as aplicacoes
continuam aumentando sua performance sem necessidade de alteracao de codigo.
d) O consumo energetico e dificuldade para dissipacao de calor, sao um dos motivos
que contribuıram para o desenvolvimento de processadores paralelos.
12. Para que e utilizada a formula que calcula o Speed-up ?
a) A formula do Speed-up e utilizada para identificar regioes paralelas
b) A formula do Speed-up e utilizada para calcular a frequencia de um processador
c) Para representar o quao rapido uma aplicacao paralela e em relacao a sua versao
sequencial. Muitos utilizam a formula do Speed-up para quantificar essa diferenca.
d) A formula que calcula o Speed-up pode substituir a formula que calcula a
eficiencia.
13. Escolha abaixo qual das opcoes e a correta:
a) Fabio esta desenvolvendo o algoritmo K-means e ira desenvolver em CUDA. Seu
codigo sera executado em uma GPU com arquitetura do fabricante AMD.
b) Fabio pretende diminuir o tempo de execucao de seu codigo sequencial. Para
tal ele ira utilizar a linguagem de programacao OpenMP, por ser uma linguagem muito
mais simples que OpenCL e CUDA. Nao sera necessario lidar com dependencia de dados.
c) Fabio acaba de comprar um FPGA e ira executar nele alguns trechos do seu
algoritmo K-means atraves da linguagem de programacao OpenCL.
d) OpenCL pode ser executado tanto sobre arquitetura de proposito geral, quanto
especıficos. Porem, e necessario escolher uma destas para execucao de seu codigo. Sendo
assim, nao e possıvel utilizar duas diferentes arquiteturas em uma mesma aplicacao.
14. Marque a opcao correta em relacao a dependencia de dados:
a) Codigos com dependencia de dados nao podem ser paralelizados, por isso a
linguagem de programacao OpenMP utiliza o modelo Fork-join.
102
b) Trechos com dependencia de dados podem ser paralelizados, porem e inevitavel
que estres trechos percam um pouco de desempenho ao definir as barreiras que sincronizam
as threads.
c) OpenCL nao permite paralelizar trechos com dependencia de dados.
d) Cuda nao permite paralelizar trechos com dependencia de dados.
15. A respeito de processadores, assinale a opcao correta:
a) Processadores com maior frequencia irao, inevitavelmente, ser superiores no
quesito tempo de execucao em relacao a processadores com frequencia menor.
b) Processadores paralelos tem normalmente maior frequencia que processadores
sequenciais.
c) Processadores SISD nao permitem paralelismo
d) Processadores MIMD permitem paralelismo
16. Sua empresa acaba de definir que entrara no mundo de analytics. Para isto iniciara
nesse mercado oferecendo um algoritmo de clusterizacao para identificacao do perfil de
clientes do Supermercado Epa. Escolha qual linguagem de programacao sera utilizada ,
com o objetivo de extrair maxima performance do supercomputador com diversos nucleos
em seu processador de proposito geral (CPU) e de proposito especıfico (GPU) que o cliente
possui.
a) Python em conjunto com OpenCL.
b) C em conjunto com C
c) C++ em conjunto com PHP
d) C em conjunto com R
17. Em relacao a computacao heterogenea, marque a afirmativa correta:
a) Os computadores pessoais atuais sao compostos por mais de uma arquitetura
de processadores, o que possibilita desenvolver aplicacoes, que sao capazes de extrair
desempenho distribuindo trechos de codigos para a abordagem que melhor executara tais
trechos.
b) A computacao heterogenea, ainda nao e uma realidade, haja vista que nao e
simples controlar a distribuicao de trechos de codigos a diferentes processadores.
c) Um processador e considerado heterogeneo se este for composto por memorias
distribuıdas e centralizadas.
d) Computacao heterogenea possibilita bons ganhos de desempenho porem, e
103
inevitavel o aumento de consumo de energia ao utilizar essa abordagem.
B.2 Exercıcios para avaliacao da abordagem proposta
Exercıcios para serem aplicados apos o mini curso.
1 Escolha a melhor solucao para atender a necessidade do cliente a seguir:
Contexto: O cliente e dono de uma rede de supermercados e deseja mapear o
perfil de seus consumidores. Para tal o mesmo contratou uma consultoria que propos o
desenvolvimento do algoritmo de clusterizacao K-means. O algoritmo de clusterizacao
K-means e classificado como um padrao paralelo Map. Os consultores identificaram no
mınimo dois trechos com alto potencial paralelo. Escolha a melhor solucao para atender
a necessidade do cliente a seguir:
a) O ideal para atender a demanda do cliente e um computador com processador
Core i7 7700K, 1TB de HD, SSD de 240, 64 GB de memoria e sistema operacional Linux.
A linguagem de programacao ideal para atender essa demanda e a linguagem C.
b) O ideal para atender a demanda do cliente e um computador com processador
AMD Ryzen 7, 1TB de HD, SSD de 240, 64 GB de memoria e sistema operacional Linux.
A linguagem de programacao ideal para atender essa demanda e a linguagem Python.
c) O ideal para atender a demanda do cliente e um computador com processador
Intel I7 7700K, 1TB de HD, SSD de 240GB, 64 GB de memoria e sistema operacional
Linux. A linguagem de programacao ideal para atender essa demanda e a linguagem C
em conjunto com a linguagem de programacao OpenMP para extrair paralelismos das
threads disponıveis no processador Intel I7 7700K.
d) O ideal para atender a demanda do cliente e um computador com processador
Intel I7 7700K, 1TB de HD, SSD de 240GB, 64GB de memoria RAM, GPU com suporte
a OpenCL e sistema operacional Linux. A linguagem de programacao ideal para atender
essa demanda e a linguagem C em conjunto com a linguagem de programacao OpenCL,
para extrair paralelismo de todos os dispositivos de hardware disponıveis.
2 Identifique a resposta que identifica a linguagem de programacao capaz de extrair
performance de um ambiente heterogeneo:
a) C
b) Python
c) OpenCL
d) C++
104
3 Identifique o trecho de codigo com alto potencial paralelo no codigo a seguir:
Print(“Insira o nome do funcionario:”)
Name = Getname();
Printf(“Insira o CPF do funcionario:”)
CPF = GetCPF();
For(int i = 0 ; i <QTDdeFuncionarios; i ++)
If (Vetortodosfuncionarios[i].CPF = CPF)
Printf(“O funcionario ” + Name + “ e um funcionario do grupo pao de acucar”);
Else
Printf(“Nao identificar o funcionario com esse CPF”);
4 Com relacao a programacao em OpenCL, escolha a opcao correta para o cenario a seguir:
Uma aplicacao contem um trecho de codigo, onde diversos elementos de processamento
irao consultar uma mesma variavel, sem a necessidade de realizar alteracoes nessa variavel,
ou seja, sera um acesso de somente leitura. Identifique a regiao de memoria ideal para
que essa variavel seja armazenada de acordo com a abstracao OpenCL.
a) Memoria Privada
b) Memoria Local
c) Memoria Global
d) Memoria Constante
5 Selecione as alternativas incorretas:
a) Ao definir o workgroupsize e recomendado verificar o maximo suportado pelo
dispositivo.
b) Ao definir o workgroupsize e recomendado verificar o maximo suportado pelo
dispositivo com o comando maxworkgroupsize.
c) E recomendado utilizar sempre o maior workgroup size possıvel.
d) Em alguns casos utilizar o maior workgroup size possıvel pode resultar em ganho
de performance.
6 Leve em consideracao os conceitos que definem aplicacoes gpufriendly para selecionar a
afirmacao correta a seguir:
a) Uma aplicacao onde todas as posicoes de um vetor sao multiplicadas por uma
105
constante, em um dispositivo acelerador, nao sofrera impacto em sua performance, caso
a largura de banda utilizada para transportar os dados ate a memoria do device caia pela
metade. Haja vista que essa aplicacao e uma aplicacao muito simples.
b) Para que uma aplicacao tenha um ganho relativamente bom ou otimo, ao ser
executada em um acelerador, uma das caracterısticas que a aplicacao deve ter e : Que um
grande volume de calculos seja feito sobre os dados que foram carregados em memoria,
de maneira a esconder a latencia de acesso a memoria.
c) Uma aplicacao com codigos com alto potencial paralelo, porem com dependencia
de dados, deve sempre ser executada em um processador sequencial.
d) Uma aplicacao com um trecho sem dependencia de dados e com muitas iteracoes
sempre tera melhor performance se executado por um dispositivo acelerador, do que
ser executado em um processador de proposito geral. Levando em consideracao que as
linguagens utilizadas sao OpenCL e OpenMP.
7 De acordo com as definicoes da abstracao OpenCL, marque a opcao correta:
a) Um elemento de processamento – PE, e um cluster composto por diversos
processadores.
b) A memoria global pode ser acessada por todos os elementos de processamento
– PE.
c) A memoria privada e compartilhada e pode ser acessada por todos os elementos
de um mesmo workgroup.
d) A memoria Constante pode ser utilizada para escrita de dados que serao
consumidos por todos os elementos de processamento e, em caso de necessidade, estes
podem ser alterados e gravado novamente nesta regiao de memoria.
8 Marque a afirmacao incorreta a seguir:
a) A linguagem de programacao OpenCL possibilita extrair performance de um
ambiente heterogeneo.
b) A linguagem de programacao OpenCL possibilita extrair performance atraves
da paralelizacao de trechos de codigos e distribuicao entre diferentes devices.
c) A linguagem de programacao OpenCL e limitada a criacao de um unico contexto,
onde este pode ser composto por processadores de proposito especıfico e geral.
d) A linguagem de programacao OpenCL e suportada por diferentes fabricantes de
hardware, o que aumenta sua capilaridade em relacao a outras linguagens como CUDA.
9 Identifique abaixo as DUAS opcoes incorretas com relacao a ordem de insercao de
106
processos na fila de execucao de uma aplicacao convencional:
a) Alocar espaco em memoria do device -> mover dados da memoria do host para
a memoria do device -> mover dados da memoria do device para a memoria do Host.
b) Alocar espaco na memoria do device -> mover dados da memoria do device para
a memoria do Host.
c) Alocar espaco na memoria do device -> mover dados da memoria do device para
a memoria do Host.
d) Mover dados da memoria do host para o device -> mover dados da memoria do
device para a memoria do Host.
10 Identifique o trecho com dependencia de dados:
Int a;
Int b;
For ( inti = 0; i< 1000; i++)
A = 1 + i;
For (int i = 0; i< 100; i ++)
B = 1 + i;
IF ( B> 50 )
A = 0;
If( B> 98)
B = A + 2;
11 Quantas vezes a palavra CPU sera exibida com um NDRange = (2,2)?
a) 3
b) 2
c) 8
d) 4
12 Escolha, dentre as afirmacoes abaixo, a alternativa correta:
a) OpenCL e uma linguagem que pode ser utilizada em placas fabricadas pela
Nvidia.
b) OpenCL e uma linguagem que pode ser utilizada em FPGA.
107
c) OpenCL e uma linguagem que pode ser utilizada em Processadores AMD e Intel.
d) Todas as afirmativas anteriores estao corretas.
13 Escolha, dentre as opcoes abaixo , as DUAS afirmacoes incorretas :
a) OpenCL e suportado em todos os dispositivos da AMD e Intel.
b) E possıvel ter ganho de performance ao alterar o WorkGroupSize.
c) E possıvel ter ganho de performance aumentando o NDRange.
d) OpenCL e uma linguagem de programacao de alta performance.
14 Marque abaixo a alternativa correta :
a) Para iniciar a programacao em OpenCL e necessario uma IDE, uma
implementacao OpenCL e um dispositivo que suporte OpenCL.
b) Para iniciar a programacao em OpenCL e necessario uma implementacao
OpenCL e um dispositivo que suporte OpenCL.
c) Para iniciar a programacao em OpenCL e necessario somente um dispositivo
com suporte a OpenCL.
d) Para iniciar a programacao em OpenCL e necessario somente uma
implementacao OpenCL.
15 Marque as DUAS alternativas CORRETAS a seguir:
a) E possıvel distribuir o processamento entre os grupos de trabalho (WK).
b) E possıvel distribuir o processamento entre os elementos de processamento (PE)
que integram um grupo de trabalho (WK).
c) E possıvel compartilhar dados, que sao somente leitura, entre todos os elementos
de processamento (PE).
d) E possıvel compartilhar dados, que sao somente leitura, exclusivamente entre
elementos de processamento(PE) que estao em um mesmo grupo de trabalho (WK).
16 O pseudo codigo a seguir representa um trecho de codigo que realiza as seguintes
operacoes: Transfere os dados do Vetor X (Memoria global) para o Vetor Y (Memoria
Local) e em seguida multiplica todas as posicoes de Y pela constante 5. Selecione a opcao
que identifica necessidade de sincronismo de threads.
Data: Vetor X com x posicoes e vetor Y com y posicoes
Result: Y*5
108
Kernel( Global X)
1. Estrutura de repeticao Paralela
2. Y[i] = X[i]
3.
4. Fim da estrutura de repeticao
5. Estrutura de repeticao
6. Y[i] = Y[i]*5
7.
8. Fim da estrutura de repeticao
9. Estrutura de repeticao
10. Print Y[i]
11. Fim da estrutura de repeticao
a) E necessario sincronizar os elementos de processamento nas linhas: 3,7 e 11
b) E necessario sincronizar os elementos de processamento nas linhas: 7 e 11
c) E necessario sincronizar os elementos de processamento somente na linha 3
d) Nao existe necessidade de sincronizar as threads nesse algoritmo
17 Diante da afirmacao : Dobrar a quantidade de processadores nao necessariamente ira
diminuir pela metade o tempo de execucao. Selecione a opcao incorreta a seguir:
a) Um dos motivos que pode impactar no tempo de execucao de codigos paralelos,
e a necessidade de sincronismo de threads.
b) Um dos motivos que pode impactar no tempo de execucao de codigos paralelos,
e que nem todos os trechos podem ser paralelizados.
c) Um dos motivos que pode impactar positivamente no tempo de execucao,
diminuindo mais que pela metade o tempo de execucao de uma aplicacao ao dobrar o
numero de processadores. e quando os dados solicitados por mais de um thread ja se
encontram em memoria. Uma das formas de se forcar esse efeito e ter acesso a memoria
coerente pelas diversas threads.
d) Nao e possıvel que ao dobrar a quantidade de processadores o tempo de execucao
caia mais que pela metade.
18 Quais arquiteturas possibilitam algum tipo de paralelismo?
109
a) Somente a arquitetura SISD
b) As arquiteturas SIMD, MIMD E MISD
c) Somente a arquitetura SIMD
d) Somente a arquitetura MISD
19 Um consultor de computacao de alto desempenho esta recomendando um hardware
para execucao do algoritmo de clusterizacao K-means, utilizado pela sua empresa. Diante
desta afirmacao , o email enviado por ele viria com qual das definicoes a seguir?
a) A arquitetura ideal para sua aplicacao, que ira realizar uma mesma operacao
sobre diversos dados, e a arquitetura SIMD.
b) A arquitetura ideal para sua aplicacao, que ira realizar uma mesma operacao
sobre diversos dados, e a arquitetura SISD.
c) A arquitetura ideal para a sua aplicacao ,que ira realizar uma mesma operacao
sobre um mesmo dado, e a arquitetura MISD.
d) A arquitetura ideal para a sua aplicacao, que ira realizar uma mesma operacao
sobre um mesmo dado, e a arquitetura MIMD.
20 Diversas razoes motivaram a construcao de processadores com mais de um nucleo de
processamento. Um dos motivos e que o pipiline muito profundo gastava mais tempo em
comunicacao do que de fato em processsamento. Em relacao as razoes que motivaram a
construcao de processadores paralelos, marque a opcao correta.
a) Dissipacao de calor, Gargalo de Von Neumman e Consumo de energia
b) Dificuldade em encontrar silıcio
c) O tamanho dos processadores
d) Nenhuma das opcoes anteriores
21 Existe uma medida bastante utilizada no meio cientıfico para mostrar o quanto uma
aplicacao melhorou do ponto de vista de tempo de execucao. Marque a opcao que identifica
essa medida.
a) Frequencia e calculo de complexidade
b) Speed-up
c) Desvio padao e frequencia
d) Nenhuma das anteriores
110
22 Processadores paralelos sao processadores com mais de um nucleo. Estes foram
divididos em processadores de proposito especıfico e geral. Em relacao aos processadores
paralelos marque a opcao correta.
a) Processadores paralelos sao o futuro, porem atualmente estes ainda se encontram
somente em supercomputadores.
b) Processadores paralelos sao tao comuns que os celulares modernos ja sao
equipados com essa tecnologia.
c) Um processadores com um unico nucleo, porem com pipiline super escalar, pode
ser considerado um processador paralelo.
d) Todas as opcao anteriores estao incorretas.
23 Marque dentre as opcoes abaixo, a afirmativa que e FALSA:
a) A distribuicao de trechos de codigos entre diferentes arquiteturas de
processadores e possıvel e bastante eficiente.
b) Ao selecionar uma arquitetura de proposito especıfica, como uma GPU, para
executar um codigo, e necessario se preocupar com latencia de acesso a memoria.
c) A nao distribuicao de trechos de codigos entre diferentes propostas arquiteturais
como CPU e GPU, atualmente , e um enorme desperdıcio de potencial de hardware.
d) A distribuicao de trechos de codigos entre diferentes arquiteturas de
processadores e complexa e automatica. O programador nao precisa interferir.
111
APENDICE C -- QUESTIONARIO
O questionario foi utilizado para avaliar o conhecimento previo dos alunos em
relacao aos topicos computacao heterogenea e computacao paralela.
Questionario - Caracterizacao do Usuario
Este questionario foi montado durante projeto de pesquisa do aluno Lucas H. S.
Valentim. O objetivo deste questionario e identificar o conhecimento adquirido nos cursos
de computacao de nıvel superior em relacao a computacao paralela e heterogenea . Os
resultados extraıdos deste questionario serao utilizados na elaboracao da proposta de
inclusao do ensino de programacao paralela em ambiente heterogenea desenvolvida por
Lucas H.S. Valentim.
O criterio escolhido para sintetizar os questionarios foi o de aplicabilidade geral,
ou seja, nao foram incluıdas neste questionario questoes de carater muito especıfico..
1) Voce teve a disciplina arquitetura de computadores na sua graduacao ?
1 - Sim
2 - Nao
2) Ja concluiu sua graduacao ?
1 - Sim
2 - Nao
3) Em qual perıodo do seu curso de graduacao voce esta ?
1 - 1◦ Perıodo
2 - 2◦ Perıodo
3 - 3◦ Perıodo
4 - 4◦ Perıodo
5 - 5◦ Perıodo
6 - 6◦ Perıodo
7 - 7◦ Perıodo
8 - 8◦ Perıodo
112
9 - Nao se aplica
4) O tema computacao heterogenea foi abordado no seu curso de graduacao ?
1 - Sim
2 - Nao
5) O seu curso de graduacao ensinou de forma pratica a programacao paralela ?
1 - Sim
2 - Nao
6) Quais das arquiteturas a seguir podem ser classificadas como heterogeneas ?
1 - 1◦ CPU com somente um nucleo
2 - 2◦ CPU com mais de um nucleo
3 - 3◦ GPU com somente um nucleo
4 - 4◦ GPU com mais de um nucleo
5 - Nenhuma das anteriores
7) O tema programacao paralela foi abordado durante seu curso de graduacao ?
1 - Sim
2 - Nao
8) Ja utilizou uma das linguagens paralelas a seguir ?
1 - OpenMP
2 - CUDA
3 - OpenCL
4 - C++
9) A classificacao de Flynn foi apresentada durante seu curso de graduacao ?
1 - Ruim
2 - Regular
3 - Bom
4 - Otimo
10) Voce sabe o que e dependencia de dados dentro do contexto de programacao paralela
113
?
1 - Sim
2 - Nao
114
115
ANEXO A -- DIRETRIZES CURRICULARES NACIONAIS
A Camara de Educacao Superior (CES) do Conselho Nacional de Educacao
(CNE) aprovou as Diretrizes Curriculares Nacionais (DCNs) para Cursos de Graduacao
em Computacao por meio do Parecer CNE/CSE 136/2012 de 09 de marco de 2012,
posteriormente homologadas pela Portaria No 05 de 16/11/2016.
Tabela 3 – Capacidades dos egressos dos cursos de graduacao na area deComputacao
Espera-se que os egressos dos curso de graduacao em Computacao sejam dotados:
I - de conhecimento das questoes sociais, profissionais, legais, eticas, polıticas e humanısticas;
II - da compreensao do impacto da computacao e suas tecnologias na sociedade no que concerne
ao atendimento e a antecipacao estrategica das necessidades da sociedade;
III - de visao crıtica e criativa na identificacao e resolucao de problemas contribuindo para o
desenvolvimento de sua area;
IV - da capacidade de atuar de forma empreendedora, abrangente e cooperativa no atendimento
as demandas sociais da regiao onde atua, do Brasil e do mundo;
V - de utilizar racionalmente os recursos disponıveis de forma transdisciplinar; VI - da
compreensao das necessidades da contınua atualizacao e aprimoramento de suas competencias
e habilidades;
VII - da capacidade de reconhecer a importancia do pensamento computacional na vida
cotidiana, como tambem sua aplicacao em outros domınios e ser capaz de aplica-lo em
circunstancias apropriadas; e
VIII - da capacidade de atuar em um mundo de trabalho globalizado.
Fonte: (ZORZO et al., 2017)
116
Tabela 4 – Habilidades e competencias mınimas dos egressos de cursos degraduacao em Computacao
Os egressos de cursos de graduacao em Computacao devem ser capazes de pelo
menos:
I - identificar problemas que tenham solucao algorıtmica;
II - conhecer os limites da computacao;
III - resolver problemas usando ambientes de programacao;
IV - tomar decisoes e inovar, com base no conhecimento do funcionamento e das caracterısticas
tecnicas de hardware e da infraestrutura de software dos sistemas de computacao consciente
dos aspectos eticos, legais e dos impactos ambientais decorrentes;
V - compreender e explicar as dimensoes quantitativas de um problema;
VI - gerir a sua propria aprendizagem e desenvolvimento, incluindo a gestao de tempo e
competencias organizacionais;
VII - preparar e apresentar seus trabalhos e problemas tecnicos e suas solucoes para audiencias
diversas, em formatos apropriados (oral e escrito);
VIII - avaliar criticamente projetos de sistemas de computacao;
IX - adequar-se rapidamente as mudancas tecnologicas e aos novos ambientes de trabalho;
X - ler textos tecnicos na lıngua inglesa;
XI - empreender e exercer lideranca, coordenacao e supervisao na sua area de atuacao
profissional;
XII - ser capaz de realizar trabalho cooperativo e entender os benefıcios que este pode produzir.
Fonte: (ZORZO et al., 2017)
117
Tabela 5 – Capacidades dos egressos do curso de graduacao em SI
Espera-se que os egressos do curso de graduacao em SI:
I - possuam solida formacao em Ciencia da Computacao, Matematica e Administracao visando o
desenvolvimento e a gestao de solucoes baseadas em tecnologia da informacao para os processos
de negocio das organizacoes de forma que elas atinjam efetivamente seus objetivos estrategicos
de negocio
II - possam determinar os requisitos, desenvolver, evoluir e administrar os sistemas de
informacao das organizacoes, assegurando que elas tenham as informacoes e os sistemas de
que necessitam para prover suporte as suas operacoes e obter vantagem competitiva;
III - sejam capazes de inovar, planejar e gerenciar a infraestrutura de tecnologia da informacao
em organizacoes, bem como desenvolver e evoluir sistemas de informacao para uso em processos
organizacionais, departamentais e/ou individuais;
IV - possam escolher e configurar equipamentos, sistemas e programas para a solucao de
problemas que envolvam a coleta, processamento e disseminacao de informacoes;
V - entendam o contexto, envolvendo as implicacoes organizacionais e sociais, no qual as solucoes
de sistemas de informacao sao desenvolvidas e implantadas;
VI - compreendam os modelos e as areas de negocios, atuando como agentes de mudanca no
contexto organizacional;
VII - possam desenvolver pensamento sistemico que permita analisar e entender os problemas
organizacionais
Fonte: (ZORZO et al., 2017)
118
Tabela 6 – Habilidades e competencias mınimas dos egressos do curso de SI
Os egressos do curso de SI devem ser capazes de pelo menos:
I - selecionar, configurar e gerenciar tecnologias da Informacao nas organizacoes;
II - atuar nas organizacoes publicas e privadas, para atingir os objetivos organizacionais, usando
as modernas tecnologias da informacao;
III - identificar oportunidades de mudancas e projetar solucoes usando tecnologias da informacao
nas organizacoes;
IV - comparar solucoes alternativas para demandas organizacionais, incluindo a analise de risco
e integracao das solucoes propostas;
V - gerenciar, manter e garantir a seguranca dos sistemas de informacao e da infraestrutura de
Tecnologia da Informacao de uma organizacao;
VI - modelar e implementar solucoes de Tecnologia de Informacao em variados domınios de
aplicacao;
VII - aplicar metodos e tecnicas de negociacao;
VIII - gerenciar equipes de trabalho no desenvolvimento e evolucao de Sistemas de Informacao;
IX - aprender sobre novos processos de negocio;
X - representar os modelos mentais dos indivıduos e do coletivo na analise de requisitos de um
Sistema de Informacao;
XI - aplicar conceitos, metodos, tecnicas e ferramentas de gerenciamento de projetos em sua
area de atuacao;
XII - entender e projetar o papel de sistemas de informacao na gerencia de risco e no controle
organizacional;
XIII - aprimorar experiencia das partes interessadas na interacao com a organizacao incluindo
aspectos da relacao humano-computador;
XIV - identificar e projetar solucoes de alto nıvel e opcoes de fornecimento de servicos, realizando
estudos de viabilidade com multiplos criterios de decisao;
XV - fazer estudos de viabilidade financeira para projetos de tecnologia da informacao;
XVI - gerenciar o desempenho das aplicacoes e a escalabilidade dos sistemas de informacao.
Fonte: (ZORZO et al., 2017)
119
ANEXO B -- REFERENCIAL DE FORMACAO PARA O CURSO DE
SISTEMAS DE INFORMACAO
Este capıtulo identifica conteudos utilizados pelo autor durante o desenvolvimento
desta dissertacao. (FERRAZ; BELHOT et al., 2010)
B.1 Eixo de formacao : Visao Sistemica
B.1.1 Competencia Geral esperada para o eixo:
Descrever a dinamica de sistemas sociais e organizacionais, distinguindo seus
elementos constituintes de forma interdisciplinar, analisando as dependencias (objetivos,
informacao, atividades) entre eles, propondo solucoes que os aprimorem, criticando os
resultados do sistema e aplicando conceitos de sistemas de informacao.
B.1.2 Competencias derivadas:
C.1.1) Decompor o funcionamento de organizacoes sociais e de negocio como Sistemas
de Informacao, distinguindo seus elementos e multiplas relacoes internas e externas e
construindo modelos para sua representacao.
Conteudo Classificacao (Criar):
a) Fundamentos de Ciencias Sociais
b) Redes e cadeias de valor economico/social
c) Teoria e pratica da interdisciplinaridade e suas aplicacoes em Sistemas de
Informacao
d) Teorias Sociotecnicas em Sistemas de Informacao
e) Teoria Geral de Sistemas
f) Epistemologia, teoria e pratica em Sistemas de Informacao.
g) Fundamentos de Sistemas de Informacao
h) Componentes de Sistemas de Informacao (hardware, software, dados, redes,
pessoas, servicos, instalacoes fısicas, parceiros etc).
e) Modelagem Organizacional
f) Modelagem de Sistemas de Informacao
C.1.2) Avaliar a eficacia, eficiencia, efetividade e sustentabilidade dos sistemas
de informacao examinando seus elementos e suas relacoes, considerando questoes
120
tecnologicas, economicas, sociais e ambientais, aplicando metodos quantitativos e
qualitativos.
Conteudo Classificacao (Avaliar):
a) Teoria e pratica da interdisciplinaridade e suas aplicacoes em Sistemas de
Informacao
b) Probabilidade e estatıstica e suas aplicacoes em Sistemas de Informacao
c) Matematica discreta e suas aplicacoes em Sistemas de Informacao
d) Grafos e suas aplicacoes em Sistemas de Informacao
e) Simulacao de Sistemas de Informacao
f) Fundamentos de pesquisa operacional e suas aplicacoes em Sistemas de
Informacao.
g) Complexidade e avaliacao de desempenho de Sistemas de Informacao
h) Impactos tecnologicos, sociais, economicos e ambientais de Sistemas de
Informacao
e) Interacao Humano-Computador
f) Psicologia e suas aplicacoes em Sistemas de Informacao
g) Comportamento organizacional
C.1.3) Elaborar solucoes eficazes, eficientes, efetivas e sustentaveis de sistemas de
informacao, considerando aspectos tecnologicos, economicos, sociais e ambientais.
Conteudo Classificacao (Criar):
a) Teoria e pratica da interdisciplinaridade e suas aplicacoes em Sistemas de
Informacao
b) Metodos de analise e solucao de problemas
c) Pesquisa e prospeccao de novas tecnologias e suas implicacoes para Sistemas de
Informacao
d) Tecnologia como habilitador de mudancas
e) Adocao de tecnologias
f) Modelos de negocio para Sistemas de Informacao
g) Custo, valor e qualidade de Sistemas de Informacao
h) Inclusao digital
121
e) Globalizacao e estrategias globais com uso de Sistemas de Informacao
f) Vantagem competitiva e suas relacoes com Sistemas de Informacao
g) Avaliacao de investimentos em Sistemas de Informacao
h) Inovacao e seus processos
i) Fundamentos de Economia e suas aplicacoes em Sistemas de Informacao
j) Modelagem de Sistemas de Informacao
l) Desafios culturais, eticos e polıticos com o uso de Sistemas de Informacao
m) Etica e legislacao em Sistemas de Informacao
n) Interacao Humano Computador
B.2 Eixo de formacao : Gestao de sistemas de informacao e da tecnologia dainformacao
B.2.1 Competencia Geral esperada para o eixo:
Gerir os sistemas de informacao e a arquitetura de tecnologia da informacao em
organizacoes, propondo solucoes de sistemas de informacao, de software, de informacao e
de infraestrutura de armazenamento e comunicacao alinhadas aos objetivos e estrategias
organizacionais, realizando projetos de sistemas de informacao e de tecnologia da
informacao e aplicando conceitos, metodos, tecnicas e ferramentas adequadas a gestao
e governanca de sistemas de informacao e tecnologia da informacao.
B.2.2 Competencias derivadas:
C.2.1) Gerir os processos organizacionais, descrevendo seu funcionamento, avaliando seu
desempenho e implementando mudancas em seu funcionamento aplicando conceitos de
sistemas de informacao.
Conteudo Classificacao (Criar):
a) Planejamento estrategico
b) Modelagem organizacional
c) Gestao de Processos de Negocio (Levantamento, Modelagem. Analise,
Redesenho, Automacao, Avaliacao e Medicao)
d) Ferramentas automatizadas para gestao de processos organizacionais
e) Gestao de mudancas em processos organizacionais
122
C.2.2) Gerir os sistemas de informacao em organizacoes, prospectando solucoes para
o aprimoramento da eficacia, eficiencia, efetividade e sustentabilidade desses sistemas,
considerando seu alinhamento aos objetivos e estrategias organizacionais.
Conteudo Classificacao (Analisar):
a) Planejamento estrategico
b) Planejamento Alinhamento estrategico de Sistemas de Informacao/Tecnologia
da Informacao
c) Gestao de Sistemas de Informacao
d) Fundamentos da Administracao
e) Tecnologias de colaboracao e comunicacao
f) Gestao de dados, informacao e conhecimento. Sistemas de Apoio a Decisao.
g) Sistemas de Informacao sustentaveis e Green Computing
h) Gerencia de Riscos em Sistemas de Informacao
i) Gerencia de continuidade de negocio e o papel de Sistemas de Informacao
j) Fundamentos de Economia e suas aplicacoes em Sistemas de Informacao
k) Planejamento e avaliacao de investimentos em Sistemas de Informacao
l) Estrutura organizacional para funcoes de gestao de Sistemas de Informacao
(lideranca, CIO, contratacao)
m) Gestao de Mudancas
n) Gestao de Pessoas
o) Implantacao e gestao de sistemas de informacao empresariais (ERP, SCM,
CRM,BI)
C.2.3) Gerir a arquitetura de tecnologia da informacao em organizacoes, identificando as
demandas dos sistemas de informacao organizacionais e elaborando solucoes de tecnologia
da informacao para o seu apoio.
Conteudo Classificacao (Criar):
a) Planejamento estrategico
b) Arquitetura de Tecnologia da Informacao
c) Arquitetura Empresarial
d) Arquitetura de Informacao
123
e) Arquitetura orientada a servicos
f) Gestao de dados, informacao e conhecimento
g) Gestao da Tecnologia da Informacao
h) Modelos de governanca de Tecnologia da Informacao
i) Virtualizacao de armazenamento e de Sistemas de Informacao
j) Alternativas tecnologicas e suas implicacoes para Sistemas de Informacao
C.2.4) Gerenciar projetos de sistemas de informacao e de tecnologia da informacao
para manutencao dos sistemas de informacao organizacionais e da arquitetura de
tecnologia da informacao da organizacao, aplicando conceitos e processos de planejamento,
acompanhamento e avaliacao de projetos de tecnologia da informacao.
Conteudo Classificacao (Aplicar):
a) Conceitos, areas e processos da Gerencia de Projetos
b) Gerencia de equipes
c) Ciclos de vida de desenvolvimento de projetos de sistemas de informacao
d) Integracao de Sistemas de Informacao
e) Pesquisa e prospeccao de novas tecnologias para gestao de Sistemas de
Informacao
f) Aquisicao de infraestrutura, servicos e aplicacoes
C.2.5) Gerenciar o funcionamento dos sistemas de informacao, mantendo seu alinhamento
aos objetivos e estrategias organizacionais e avaliando seu suporte as operacoes
Conteudo Classificacao (Aplicar):
a) Auditoria em Tecnologia da Informacao e Sistemas de Informacao
b) Gestao de continuidade
c) Controles de processo e informacao
d) Administracao de Sistemas de Informacao
e) Modelos de governanca de Sistemas e Tecnologia da Informacao
f) Avaliacao de impacto de Sistemas de Informacao nos processos e estrutura
organizacional
g) Recuperacao de desastres
124
B.3 Eixo de formacao : Desenvolvimento de software para Sistemas deInformacao
B.3.1 Competencia Geral esperada para o eixo:
Competencia geral esperada para o eixo: Gerenciar os sistemas de informacao em
contextos sociais e organizacionais, avaliando as necessidades de informatizacao nestes
sistemas, especificando solucoes de software para sistemas de informacao, produzindo
o software para o atendimento destas necessidades, aplicando processos, tecnicas e
ferramentas de desenvolvimento de software, implantando o software em contextos sociais
e organizacionais de sistemas de informacao, mantendo sua operacao e avaliando o impacto
de seu uso.
B.3.2 Competencias derivadas:
C.3.1) Avaliar as necessidades de informatizar sistemas, articulando visoes individuais e
organizacionais, e apreciando oportunidades de melhorias e/ou mudancas em processos,
com o uso ou evolucao do software.
Conteudo Classificacao (Avaliar):
a) Analise de Sistemas
b) Teoria Geral de Sistemas
c) Modelagem de Sistemas de Informacao
d) Componentes de Sistemas de Informacao (hardware, software, dados, redes,
pessoas, servicos, instalacoes fısicas, parceiros)
e) Modelagem Organizacional
f) Fundamentos de Sistemas de Informacao
g) Analise de Riscos
h) Estudo de Viabilidade
i) Tomada de Decisao Multicriterio
j) Engenharia de Requisitos de Sistemas
l) Gestao de Sistemas de Informacao
m) Sustentacao e continuidade de Sistemas de Informacao
C.3.2) Especificar software para informatizacao de sistemas, elicitando os requisitos do
software em conformidade com os requisitos do produto, dos processos e das partes
125
interessadas, analisando e especificando seus requisitos funcionais e naofuncionais e
validando o seu potencial de solucao das necessidades de sistemas de informacao.
Conteudo Classificacao (Criar):
a) Especificacao de sistemas
b) Analise de Sistemas
c) Modelagem de Sistemas de Informacao
d) Modelagem Organizacional
e) Engenharia de Requisitos de Sistemas
f) Gerencia de Projetos
g) Qualidade de Software
h) Gerencia de Configuracao de Software
C.3.3) Projetar software para informatizacao de sistemas, determinando sua arquitetura,
garantindo sua qualidade tecnica e validando seu potencial de eficacia, eficiencia,
efetividade e sustentabilidade.
Conteudo Classificacao (Criar):
a) Engenharia de Requisitos
b) Logica
c) Programacao de Computadores
d) Fundamentos de Linguagens de Programacao
e) Sistemas Operacionais
f) Seguranca em Sistemas de Informacao
g) Arquitetura de Software
h) Arquitetura como servico
i) Infraestrutura de TI
j) Estrutura de Dados
l) Banco de Dados
m) Projeto de Software
n) Interacao Humano-Computador
o) Verificacao e Validacao de Software
126
p) Gerencia de Projetos
q) Qualidade de Software
s) Gerencia de Configuracao de Software
C.3.4) Construir software para informatizacao de sistemas avaliando sua qualidade tecnica,
testando o seu funcionamento, e validando seu atendimento as necessidades de eficacia,
eficiencia, efetividade e sustentabilidade desses sistemas.
Conteudo Classificacao (Criar):
a) Logica
b) Programacao de Computadores
c) Fundamentos de Linguagens de Programacao
d) Algoritmos e Complexidade
e) Estruturas de Dados
f) Banco de Dados
g) Interacao Humano-Computador
h) Projeto de Software
i) Projeto de Aquisicao de Software
j) Gerencia de Projetos
k) Qualidade de Software
l) Gerencia de Configuracao de Software
m) Verificacao e Validacao de Software
n) Teste de Software
C.3.5) Implantar software para informatizacao de sistemas, avaliando o impacto de seu
uso.
Conteudo Classificacao (Aplicar):
a) Interacao humano-computador
b) Verificacao e Validacao de Software
c) Qualidade de Software
C.3.6) Manter software, corrigindo falhas, adaptandoo ao seu contexto, identificando e
implementando melhorias, migrando softwares legados e retirando software.
127
Conteudo Classificacao (Aplicar):
a) Manutencao de software
b) Avaliar Manutencao de software Engenharia de Requisitos
c) Projeto de Software
d) Gerencia de Projetos
e) Qualidade de Software
f) Gerencia de Configuracao de Software
g) Verificacao e Validacao de Software
C.3.7) Gerenciar projetos de producao de software para informatizar sistemas aplicando
processos, tecnicas e ferramentas de engenharia de software.
Conteudo Classificacao (Aplicar):
a) Engenharia de Requisitos
b) Projeto de Software
c) Construcao de Software
d) Teste de Software
e) Manutencao de Software
f) Gerencia de Projetos
g) Gerencia de Aquisicao de Software
h) Qualidade de Software
i) Gerencia de Configuracao de Software
B.4 Eixo de formacao : Engenharia de dados e informacao
B.4.1 Competencia Geral esperada para o eixo:
Competencia geral esperada para o eixo: Gerenciar dados e informacao para as
organizacoes e sociedade, selecionando sistemas e tecnologias para implementacao de bases
de dados e de informacao, aplicando tecnicas para a especificacao de modelos conceituais,
logicos e fısicos de dados e informacao, implementando estruturas e mecanismos de
armazenamento, busca, recuperacao e mineracao nas bases de dados e avaliando tecnicas
e ferramentas de inteligencia de negocios.
128
B.4.2 Competencias derivadas:
C.4.1) Representar contextos do mundo real na forma de conjuntos, reconhecendo suas
instancias, analisando e estabelecendo relacionamentos entre conjuntos e definindo funcoes
e relacoes aplicaveis a estes conjuntos.
Conteudo Classificacao (Criar):
a) Matematica Discreta
b) Estruturas Algebricas
c) Modelagem Conceitual de Banco de Dados
d) Banco de Dados
C.4.2) Interpretar fenomenos estatısticos, empregando-os em outras areas do
conhecimento.
Conteudo Classificacao (Analisar):
a) Probabilidade e Estatıstica
b) Fundamentos de pesquisa operacional e suas aplicacoes em Sistemas de
Informacao.
C.4.3) Especificar modelos conceituais de banco de dados, analisando aspectos do mundo
real a serem tratados pelos sistemas de informacao e representandoos corretamente de
acordo com o metamodelo selecionado e integrando-os com as diretrizes de administracao
de dados da organizacao.
Conteudo Classificacao (Criar):
a) Engenharia de Requisitos
b) Modelagem Conceitual de Banco de Dados
c) Banco de Dados
d) Arquitetura da Informacao e da Tecnologia da Informacao
e) Gestao do Conhecimento
f) Arquitetura Empresarial
C.4.4) Conceber modelos logicos e fısicos de banco de dados, selecionando a utilizacao
de modelos fortemente estruturados, fracamente estruturados ou naoestruturados de
acordo com os propositos e necessidades do sistema de informacao, especificando
estruturas e mecanismos de armazenamento, busca e recuperacao dos dados e avaliando
129
a adequabilidade das solucoes adotadas para o sistema de banco de dados.
Conteudo Classificacao (Criar):
a) Banco de Dados
b) Estrutura de Dados
c) Projeto Logico de Banco de Dados
d) Recuperacao da Informacao
e) Projeto Fısico de Banco de Dados
f) Gerenciamento de Dados e Informacao
g) Programacao de Computadores
h) Mineracao de Dados
i) Data Warehouse
j) Verificacao e Validacao
k) Administracao de Banco de Dados
C.4.5) Gerenciar processos de prospeccao de informacoes com vistas ao suporte das
atividades taticasestrategicas das organizacoes, especificando bases de dados analıticas,
selecionando ferramentas e estrategias de inteligencia de negocios e mineracao de dados
para analise e visualizacao de informacoes.
Conteudo Classificacao (Criar):
a) Inteligencia de Negocios
b) Visualizacao da Informacao
c) Data Warehouse
d) Mineracao de Dados
e) Big Data
f) Internet das Coisas
g) Probabilidade e Estatıstica
h) Banco de Dados
i) Probabilidade e Estatısitica
j) Fundamentos de Inteligencia Artificial
130
B.5 Eixo de formacao : Infraestrutura para Sistemas de Informacao
B.5.1 Competencia Geral esperada para o eixo:
Competencia geral esperada para o eixo: Gerenciar a infraestrutura de tecnologia
da informacao e comunicacao para organizacoes e negocios, selecionando elementos de
hardware, software e de conectividade adequados as necessidades de seus sistemas,
estabelecendo servicos e processos de suporte aos sistemas de informacao e avaliando
o desempenho destes componentes de infraestrutura.
B.5.2 Competencias derivadas:
C.5.1) Avaliar computadores e demais componentes de hardware, examinando a
funcionalidade, adequabilidade e escalabilidade destes equipamentos para a organizacao.
Conteudo Classificacao (Avaliar):
a) Continuidade de negocios
b) Infraestrutura de Tecnologia da Informacao
c) Arquitetura de computadores
d) Arquitetura de Tecnologia da Informacao
e) Aquisicao de servicos e tecnologias de TI
f) Sistemas Distribuıdos
g) Internet das Coisas
C.5.2) Avaliar a arquitetura fısica e logica das redes de comunicacao e de computadores
para organizacao, utilizando conceitos dos modelos de referencia, analisando a operacao
e desempenho de seus componentes, aplicando os conceitos de alta disponibilidade e
balanceamento de carga, e utilizando maquinas virtuais e softwares de gerenciamento.
Conteudo Classificacao (Avaliar):
a) Sistemas Distribuıdos
b) Redes de Computadores
c) Administracao de Redes
d) Arquitetura de Tecnologia da Informacao
e) Modelos de referencia de gestao de servicos
f) Computacao Movel, Ubıqua e Pervasiva
131
g) Computacao em grade
h) Computacao como servico (Virtualizacao, nuvem etc)
i) Analise de desempenho
C.5.3) Estabelecer mecanismos de protecao a integridade, confidencialidade e
disponibilidade da informacao, configurando ferramentas para atender o nıvel de protecao
solicitado.
Conteudo Classificacao (Aplicar):
a) Sistemas Distribuıdos
b) Redes de Computadores
c) Administracao de Redes
d) Arquitetura de Tecnologia da Informacao
e) Modelos de referencia de gestao de servicos
f) Computacao Movel, Ubıqua e Pervasiva
g) Computacao em grade
h) Computacao como servico (Virtualizacao, nuvem etc)
i) Analise de desempenho
C.5.4) Avaliar a adequabilidade e desempenho de Sistemas Operacionais, analisando a
configuracao e o funcionamento de seus servicos.
Conteudo Classificacao (Avaliar):
a) Sistemas Operacionais
b) Analise de desempenho
B.6 Eixo de formacao : Pesquisa, inovacao e empreendedorismo
B.6.1 Competencia Geral esperada para o eixo:
Competencia geral esperada para o eixo: Desenvolver negocios, produtos, servicos
ou processos inovadores por meio de sistemas de informacao, identificando problemas
e oportunidades em seu contexto de atuacao profissional e/ou social, planejando,
executando e gerenciando projetos de pesquisa, empreendedorismo e inovacao para estas
oportunidades e problemas, avaliando seu impacto economico, social e ambiental.
132
B.6.2 Competencias derivadas:
C.6.1) Desenvolver projetos de iniciacao cientıfica e tecnologica em sua area de atuacao,
identificando problemas, aplicando metodologias, tecnicas e instrumentos de investigacao
e propondo solucoes no ambito de sistemas de informacao e tecnologia da informacao.
Conteudo Classificacao (Criar):
a) Matematica Discreta
b) Metodologia cientıfica
c) Gerenciamento de projetos
d) Teoria e pratica da interdisciplinaridade e suas aplicacoes em Sistemas de
Informacao
e) Teorias Sociotecnicas em Sistemas de Informacao
f) Teoria Geral de Sistemas
g) Epistemologia, teoria e pratica em Sistemas de Informacao.
h) Fundamentos de Sistemas de Informacao
i) Etica em pesquisa
j) Probabilidade e estatıstica
k) Pesquisa e prospeccao de novas tecnologias e suas implicacoes para Sistemas de
Informacao
l) Metodos e tecnicas de coleta de dados
m) Metodos e tecnicas de analise de dados
n) Comunicacao tecnica e cientıfica
o) Metodos de analise e solucao de problemas
B.6.3 Competencias derivadas:
C.6.2) Empreender em sua area de atuacao, desenvolvendo solucoes em sistemas de
informacao, identificando oportunidades e demandas locais, nacionais e globais.
Conteudo Classificacao (Criar):
a) Inovacao e novas tecnologias aplicadas a sistemas de informacao das organizacoes
b) Impactos sociais e ambientais da tecnologia da informacao
133
c) Fundamentos de Administracao
d) Fundamentos de Economia
e) Gestao estrategica
f) Etica e legislacao
g) Empreendedorismo
h) Empreendedorismo na area de Sistemas de Informacao
i) Gerencia de projetos
j) Gestao de pessoas
k) Gestao de equipes
l) Engenharia economica
C.6.3) Inovar em sua area de atuacao, desenvolvendo solucoes em sistemas de informacao,
compreendendo os impactos tecnologicos, sociais, economicos e ambientais.
Conteudo Classificacao (Criar):
a) Inovacao e novas tecnologias aplicadas a sistemas de informacao em organizacoes
b) Impactos sociais da tecnologia da informacao
c) Gerencia de projetos
d) Gestao de negocios em sistemas de informacao
e) Gestao da qualidade
f) Administracao e negocios
g) Fundamentos de administracao
h) Fundamentos de economia
i) Gestao estrategica
j) Fundamentos de Marketing
k) Gestao de mudancas
l) Etica e legislacao
m) Empreendedorismo na area de Sistemas de Informacao
n) Engenharia economica
134
B.7 Eixo de formacao : Desenvolvimento pessoal e profissional
B.7.1 Competencia Geral esperada para o eixo:
Competencia geral esperada para o eixo: Atuar profissionalmente planejando
continuamente o seu desenvolvimento pessoal e profissional, contemplando os desafios
pessoais, profissionais e da sociedade de forma proativa e crıtica, agindo de acordo
com princıpios eticos profissionais que considerem o respeito aos direitos humanos, o
compromisso com a sustentabilidade e responsabilidade socioambiental.
B.7.2 Competencias derivadas:
C.7.1) Agir de acordo com princıpios eticos profissionais e os direitos humanos,
compreendendo os aspectos sociais, profissionais, legais, eticos, polıticos e humanısticos
em sua atuacao em sistemas de informacao.
Conteudo Classificacao (Aplicar):
a) Etica e legislacao
b) Computacao e sociedade
c) Filosofia
d) Meio ambiente
e) Psicologia aplicada a sistemas de informacao
f) Impactos sociais e ambientais da tecnologia da informacao
g) Educacao das relacoes etnico-raciais e para o ensino de historia e cultura
afro-brasileira, africana e indıgena
h) Educacao ambiental
i) Desenvolvimento sustentavel
j) Educacao em Direitos Humanos
C.7.2) Desenvolver comunicacao efetiva em sua atuacao em sistemas de informacao,
empregando tecnicas e ferramentas de comunicacao oral e escrita adequadas a
cada situacao e compreendendo as diferentes perspectivas de conhecimento de seus
interlocutores.
Conteudo Classificacao (Aplicar):
a) Praticas de comunicacao
135
b) Tratamento e armazenamento de informacao
c) Tecnicas de entrevista
d) Tecnicas de apresentacao
e) Conducao de reunioes
f) Tecnicas de negociacao
g) Leitura e producao textual
C.7.3) Desenvolver trabalho em equipe em sua atuacao em sistemas de informacao,
empregando tecnicas e ferramentas de compartilhamento de dados, informacoes e
conhecimento, bem como de comunicacao, negociacao, colaboracao e lideranca adequadas
a cada situacao e compreendendo as diferentes perspectivas de conhecimento de seus
interlocutores.
a) Relacoes humanas de trabalho
b) Dinamica e psicologia de grupo
c) Psicologia aplicada a sistemas de informacao
d) Tratamento e armazenamento de informacao
e) Praticas de comunicacao
f) Lideranca, delegacao e colaboracao
g) Conducao de reunioes
h) Tecnicas de negociacao
C.7.4) Desenvolver o compromisso pessoal com a sustentabilidade e a responsabilidade
social, empregando racionalmente os recursos disponıveis em sua atuacao em sistemas de
informacao, compreendendo os impactos tecnologicos, economicos, sociais e ambientais
das atividades humanas.
a) Etica e legislacao
b) Meio ambiente
c) Impactos sociais da tecnologia da informacao
d) Computacao e sociedade
e) Educacao das relacoes etnico-raciais e para o ensino de historia e cultura
afro-brasileira, africana e indıgena
f) Educacao ambiental
136
g) Desenvolvimento sustentavel
h) Educacao em Direitos Humanos
B.8 Relacao com as Diretrizes Curriculares Nacionais
Nesta secao sao correlacionadas as diretrizes curriculares nacionais, DCNs com as
Referencias de formacao em Sistemas de Informacao definidas pela SBC.
B.8.1 Competencias e habilidades gerais dos egressos dos Cursos deBacharelado e Licenciatura
DCN: 1. Identificar problemas que tenham solucao algorıtmica – RF-SI: C.3.3;
C.3.4
DCN: 2. Conhecer os limites da computacao – RF-SI: C.1.2; C.1.3; C.3.4; C.4.4;
C.5.1
DCN: 3. Resolver problemas usando ambientes de programacao – RF-SI: C.3.4;
C.4.3; C.4.4
DCN: 4. Tomar decisoes e inovar, com base no conhecimento do funcionamento e
das caracterısticas tecnicas de hardware e da infraestrutura de software dos sistemas de
computacao consciente dos aspectos eticos, legais e dos impactos ambientais decorrentes
– RF-SI: C.1.3; C.2.2; C.2.3; C.3.1; C.6.1; C.6.2, C.7.1; C.7.4
DCN: 5. Compreender e explicar as dimensoes quantitativas de um problema –
RF-SI: C.1.2; C.4.2; C.5.4
DCN: 6. Gerir a sua propria aprendizagem e desenvolvimento, incluindo a gestao
de tempo e competencias organizacionais – RF-SI: C.7.1; C.7.2; C.7.3; C.7.4
DCN: 7. Preparar e apresentar seus trabalhos e problemas tecnicos e suas solucoes
para audiencias diversas, em formatos apropriados (oral e escrito) – RF-SI: C.7.2
DCN: 8. Avaliar criticamente projetos de sistemas de computacao – RF-SI: C.2.4;
C.6.1; C.6.2
DCN: 9. Adequar-se rapidamente as mudancas tecnologicas e aos novos ambientes
de trabalho – RF-SI: C.6.1; C.6.2; C.7.1; C.7.2; C.7.3; C.7.4
DCN: 10. Ler textos tecnicos na lıngua inglesa – RF-SI: C.7.2
DCN: 11. Empreender e exercer lideranca, coordenacao e supervisao na sua area
de atuacao profissional – RF-SI: C.2.4; C.6.1; C.7.3
137
DCN: 12. Ser capaz de realizar trabalho cooperativo e entender a forca que dele
pode ser derivada – RF-SI: C.2.4; C.7.3
B.8.2 Competencias e habilidades dos egressos dos Cursos de Bachareladoem Sistemas de Informacao
DCN: 1. Selecionar, configurar e gerenciar tecnologias da Informacao nas
organizacoes – RF-SI: C.1.3; C.2.1; C.2.2; C.2.3; C.3.1; C.3.2; C.3.5; C.3.6; C.4.4. C.4.5;
C.5.1; C.5.2
DCN: 2. Atuar nas organizacoes publicas e privadas, para atingir os objetivos
organizacionais, usando as modernas tecnologias da informacao – RF-SI: C.1.1; C.2.1;
C.2.2; C.2.3; C.2.4; C.2.5; C.3.1; C.3.2; C.3.3; C.3.4; C.3.5; C.3.6; C.4.3; C.4.4; C.4.5;
C.5.1; C.5.2; C.5.3; C.5.4
DCN: 3. Identificar oportunidades de mudancas e projetar solucoes usando
tecnologias da informacao nas organizacoes – RF-SI: C.2.1; C.2.2; C.2.3; C.3.1; C.3.2;
C.3.3; C.3.4; C.4.3; C.4.5; C.5.1; C.5.2
DCN: 4. Comparar solucoes alternativas para demandas organizacionais, incluindo
a analise de risco e integracao das solucoes propostas – RF-SI: C.1.1; C.2.1; C.2.2; C.2.3;
C.3.1; C.4.3; C.4.5
DCN: 5. Gerenciar, manter e garantir a seguranca dos sistemas de informacao e
da infraestrutura de Tecnologia da Informacao de uma organizacao – RF-SI: C.2.5; C.3.5;
C.5.3
DCN: 6. Modelar e implementar solucoes de Tecnologia de Informacao em variados
domınios de aplicacao – RF-SI: C.1.1; C.3.2; C.3.3; C.3.4; C.4.3; C.4.4; C.4.5
DCN: 7. Aplicar metodos e tecnicas de negociacao – RF-SI: C.7.3
DCN: 8. Gerenciar equipes de trabalho no desenvolvimento e evolucao de Sistemas
de Informacao – RF-SI: C.2.4; C.2.5; C.3.1; C.3.2; C.3.3; C.3.4; C.3.7
DCN: 9. Aprender sobre novos processos de negocio – RF-SI: C.1.1; C.2.1; C.2.2;
C.2.3; C.4.5
DCN: 10. Representar os modelos mentais dos indivıduos e do coletivo na analise
de requisitos de um Sistema de Informacao – RF-SI: C.1.1; C.3.2; C.3.5; C.4.1; C.4.3
DCN: 11. Aplicar conceitos, metodos, tecnicas e ferramentas de gerenciamento de
projetos em sua area de atuacao – RF-SI: C.2.4; C.3.1; C.3.2; C.3.3; C.3.4; C.3.5; C.3.7
DCN: 12. Entender e projetar o papel de sistemas de informacao na gerencia de
risco e no controle organizacional – RF-SI: C.2.5; C.4.5
138
DCN: 13. Aprimorar experiencia das partes interessadas na interacao com a
organizacao incluindo aspectos de humano-computador – RF-SI: C.3.2
DCN: 14. Identificar e projetar solucoes de alto nıvel e opcoes de fornecimento
de servicos, realizando estudos de viabilidade com multiplos criterios de decisao – RF-SI:
C.2.1; C.2.2; C.2.3; C.3.1; C.3.2; C.3.3; C.3.4; C.5.1; C.5.2; C.5.4
DCN: 15. Fazer estudos de viabilidade financeira para projetos de tecnologia da
informacao – RF-SI: C.2.2; C.3.1; C.3.7
DCN: 16. Gerenciar o desempenho das aplicacoes e a escalabilidade dos sistemas
de informacao – RF-SI: C.2.3; C.2.5; C.3.6. C.5.1; C.5.4