138
PONTIF ´ ICIA UNIVERSIDADE CAT ´ OLICA DE MINAS GERAIS ProgramadeP´os-Gradua¸c˜ ao em Inform´ atica Lucas Henrique Silva Valentim INTRODU ¸ C ˜ AO DE PROGRAMA¸ C ˜ AO PARALELA HETEROG ˆ ENEA EM OPENCL PARA ALUNOS DE SISTEMAS DE INFORMA ¸ C ˜ AO Belo Horizonte 2019

Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 2: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 3: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 4: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 5: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 6: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 7: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

“A educacao tem raızes amargas, mas os seus

frutos sao doces.”

Aristoteles

Page 8: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 9: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 10: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 11: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

FIGURA 24 – Multiplicador de vetor simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

FIGURA 25 – Ordenacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

FIGURA 26 – Planning and Budgeting Cloud Services - Rule Creator . . . . . . . . . . . . 73

Page 12: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 13: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 14: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 15: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

NUST National University of Sciences and Technology

SDK Software development kit

Page 16: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 17: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 18: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 19: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 20: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 21: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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;

Page 22: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 23: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 24: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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).

Page 25: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 26: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 27: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 28: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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).

Page 29: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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).

Page 30: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 31: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 32: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 33: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 34: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 35: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 36: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 37: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 38: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 39: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

39

Figura 14 – Mapeamento da funcao Kernel com WorkGroup

Fonte: Proprio Autor

Page 40: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

40

Page 41: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 42: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 43: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 44: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

44

Page 45: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 46: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 47: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 48: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 49: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 50: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

50

Page 51: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 52: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 53: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 54: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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)

Page 55: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 56: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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:

Page 57: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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:

Page 58: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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:

Page 59: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 60: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

60

Page 61: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 62: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 63: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 64: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 65: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 66: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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%.

Page 67: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 68: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 69: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 70: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

70

Figura 25 – Ordenacao

Fonte: Proprio Autor

Page 71: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 72: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 73: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 74: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 75: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 76: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 77: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 78: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 79: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 ;

Page 80: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 81: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 ( ) ,

Page 82: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 83: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 84: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 }

Page 85: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 ;

Page 86: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 87: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 88: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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,

Page 89: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 ;

Page 90: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 91: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 }

Page 92: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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++) {

Page 93: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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,

Page 94: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 }

Page 95: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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 }

Page 96: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

96

Page 97: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 98: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 99: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 100: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 101: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 102: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 103: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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++

Page 104: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 105: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 106: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 107: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 108: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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?

Page 109: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 110: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 111: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 112: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 113: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

113

?

1 - Sim

2 - Nao

Page 114: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

114

Page 115: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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)

Page 116: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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)

Page 117: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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)

Page 118: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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)

Page 119: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 120: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 121: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 122: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 123: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 124: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 125: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 126: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 127: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 128: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 129: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 130: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 131: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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.

Page 132: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 133: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 134: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 135: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 136: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 137: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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

Page 138: Lucas Henrique Silva Valentim...Valentim, Lucas Henrique Silva V155i Introdução de programação paralela heterogênea em OPENCL para alunos de sistemas de informação / Lucas Henrique

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