Você está na página 1de 55

Computação Paralela

& Otimização
Vetorização e Multithreading

Igor José F. Freitas


igor.freitas@intel.com
Principais pontos abordados
Introdução ao Coprocessador Intel® Xeon® Phi™

Vetorização de código (Atom® ao Xeon® Phi™ )

Multithreading
– OpenMP

2
Agenda

Introdução
Coprocessador Xeon® Phi™
Multithreading em Memória Compartilhada
Vetorização
Conclusões
Dúvidas

3
Introdução
Necessidade de maior poder computacional em diversos
setores
– Indústria & Universidades
• Previsão do tempo, clima
• Imagens médicas
• Óleo & Gás
• Bioinformática
• Simulações em diversas áreas
– Aeronáutica, automobilística, mecânica, financeira, telecomunicações, etc.

– Aplicações mais rápidas que consomem menos energia


• Usuários de Smpartphones, Ultrabooks e Tablets não toleram
aplicativos “famintos” por bateria
• Otimizar o código leva ao uso ótimo da CPU, portanto, gastando
menos recursos do dispositivo
4
Introdução
Como ganhar desempenho ?
– Utilizar 100% a capacidade do seu processador !

Processadores Multi-core e
Many-core Multithreading

Unidade de Processamento
Vetorial Vetorização

5
Introdução
SIMD Instruction Processor

AVX-512 Intel® Xeon Phi™ Prodruct Family


CORE-AVX2 4th Generation Intel® Core™ Processors
CORE-AVX-I 3rd Generation Intel® Core™ i7 Processors ; 3rd Generation Intel® Core™ i5 Processors
AVX 2nd Generation Intel® Core™ i7 Processors ; 2nd Generation Intel® Core™ i5 Processors ; 2nd
Generation Intel® Core™ i3 Processors ; Intel® Xeon® Processor E5 Family ;Intel® Xeon® Processor E3
Family
SSE4.2 Previous Generation Intel® Core™ i7 Processors ; Previous Generation Intel® Core™ i5 Processors ;
Previous Generation Intel® Core™ i3 Processors ; Intel® Xeon® 55XX series ; Intel® Xeon® 56XX series
Intel® Xeon® 75XX series ; Intel® Xeon® Processor E7 Family
ATOM_SSE4.2 Intel® Atom™ processors that support Intel® SSE4.2 instructions.
SSE4.1 Intel® Xeon® 74XX series ; Quad-Core Intel® Xeon 54XX, 33XX series ; Dual-Core Intel® Xeon 52XX,
31XX series ; Intel® Core™ 2 Extreme 9XXX series ; Intel® Core™ 2 Quad 9XXX series ; Intel® Core™ 2
Duo 8XXX series ; Intel® Core™ 2 Duo E7200
SSSE3 Quad-Core Intel® Xeon® 73XX, 53XX, 32XX series ; Dual-Core Intel® Xeon® 72XX, 53XX, 51XX, 30XX
series ; Intel® Core™ 2 Extreme 7XXX, 6XXX series ; Intel® Core™ 2 Quad 6XXX series ; Intel® Core™ 2
Duo 7XXX (except E7200), 6XXX, 5XXX, 4XXX series ; Intel® Core™ 2 Solo 2XXX series ; Intel® Pentium®
dual-core processor E2XXX, T23XX series
ATOM_SSSE3 Intel® Atom™ processors
SSE3 Dual-Core Intel® Xeon® 70XX, 71XX, 50XX Series ; Dual-Core Intel® Xeon® processor (ULV and LV) 1.66,
2.0, 2.16 ; Dual-Core Intel® Xeon® 2.8 ; Intel® Xeon® processors with SSE3 instruction set support
Intel® Core™ Duo ; Intel® Core™ Solo ; Intel® Pentium® dual-core processor T21XX, T20XX series ;
Intel® Pentium® processor Extreme Edition ; Intel® Pentium® D ; Intel® Pentium® 4 processors with
SSE3 instruction set support
SSE2 Intel® Xeon® processors ; Intel® Pentium® 4 processors ; Intel® Pentium® M
IA32 Intel® Pentium® III Processor ; Intel® Pentium® II Processor ; Intel® Pentium® Processor
6
Introdução
Processamento Vetorial
– Instruções SIMD

Histórico das instruções SIMD – Processadores Intel®

7
Introdução

• O que é e ?
A
• Capacidade de realizar uma
operação matemática em dois ou + Scalar
- Uma Instrução
mais elementos ao mesmo tempo.
• Por que Vetorizar ? B - Uma Operação
Matemática
• Ganho substancial em performance !
C
for (i=0;i<=MAX;i++)
c[i]=a[i]+b[i];

a[i+7] a[i+6] a[i+5] a[i+4] a[i+3] a[i+2] a[i+1] a[i]


+ Vector
- Uma Instrução
b[i+7] b[i+6] b[i+5] b[i+4] b[i+3] b[i+2] b[i+1] b[i] - Oito operações
matemáticas1
c[i+7] c[i+6] c[i+5] c[i+4] c[i+3] c[i+2] c[i+1] c[i]
1. Número de operações por instrução varia de acordo com a instrução SIMD utilizada (tamanho da instrução e operando)

8
Introdução
Multithreading
– Número de cores/threads/processador era de
uma unidade até 2004
– Atualmente os processadores possuem cada vez
mais cores/threads
– Ferramentas que facilitam uso de multithreading
– Performance não é mais orientada a alta
frequência do processador

9
Introdução
Computação Paralela & Otimização
– Aplicada em:

• Clusters de Alto Desempenho (HPC)


– Xeon® & Xeon® Phi™

• Microservers (Avotom – Atom ™)


– Intel® Atom™ processor C2000 (Avotom )

• Desktops
– Intel ® Core ™

• Mobile (Smartphones & Tablets)


– Bay Trail ™, Clover Trail+ ™

10
Coprocessador Intel® Xeon® Phi™
Do Multi-core para Many-Core
Muitas threads e “largos” registradores vetorias

Coprocessador Intel® Xeon® Phi™™ (KNC chip) Bottom

Coprocessador Intel® Xeon® Phi™


(KNC chip) Servidor com 8 Coprocessadores Intel® Xeon® Phi™
11
(passive-cooling solution)
Coprocessador Intel® Xeon® Phi™
Contectado ao slot PCI-e
57+ cores por die
VPU / Core de 64-bits e registradores de 512-bit
Cada Core possuie 4 hardware threads
Processamento “In order”
L2 de 512KB/Core fully coherent (Least Recently
Used) 31MB para todos os cores
L1 de 32KB

12
Coprocessador Intel® Xeon® Phi™
Portabilidade do código
– Xeon® Phi™ é x86
– Aplicações existentes C/C++, Fortran pode ser
portadas para Xeon® Phi™
– Xeon® e Xeon® Phi™ suportamo mesmo modelo
de paralelismo
– Possuem as mesmas Ferramentas de
desenvolvimento e execução

13
Coprocessador Intel® Xeon® Phi™
Ferramentas
– Compiladores: Intel® C/C++ e Intel® Fortran
– Otimização: Intel® VTune Amplifier XE e Intel®
Trace Analyzer and Collector (ITAC)
– Bibliotecas matemáticas: Intel® Math Kernel
Library (MKL)
– Bibliotecas de execução paralela: Intel® MPI e
Intel® OpenMP

14
Arquitetura Xeon® Phi™

Integração com o Host


– Perspectiva do Desenvolvedor:
• Cada Xeon® Phi™ é um “nó” Linux
• Acessível via SSH (Secure Shell Protocol)
• Suporte a NFS (Network File Sharing Protocol)
– MPSS – MIC Plataform Software Stack
• Drivers , Daemons, Comand Line e
Ferramentas Gráficas
• Boot, Load Linux, Enable node
15
Coprocessador Intel® Xeon® Phi™

• Computação Heterogênea

Xeon® Multi-Core MIC – Many Core Centric


Centric

Offload Many-Core
Multi-Core
Symmetric Hosted
Hosted Aplicações com
Load Aplicações
Aplicações Seriais etapas
Balance Massivamente
e Paralelas paralelas Paralelas

16
Arquitetura Xeon® Phi™
MIC Plataform Software Stack

Linux/Windows Host Intel® Xeon® Phi™ Coprocessor

SSH Session
Offload SSH Offload
Aplication Native
Aplication
Aplication

System Level Code System Level Code


Coprocessor
MPSS Communication and app-
launching support

PCI-e Bus PCI-e Bus


Windows/ Linux uOS
Linux OS

17
Multithreading em Memória
Compartilhada

18
Multithreading em Memória Compartilhada

Memória compartilhada
 Todos os processos compartilham um único espaço
de memória

 Comunicação através de escrita e leitura de


variáveis compartilhadas

 SMPs – Symmetric Multiprocessors


 Fácil programação
 Overhead na comunicação entre processador
e memória

19
Multithreading em Memória Compartilhada

 Difícil de escalar, pois quanto mais


processadores, mais overhead de comunicação

CPU[0] CPU[1] CPU[2]

I/O System

RAM

20
Multithreading em Memória Compartilhada

Facilidade de Uso

Threading

Intel® Math Kernel Library MPI

Intel® Threading Building Blocks


Intel® Cilk™ Plus

OpenMP

Pthreads

Ajuste Fino
21
Multithreading em Memória Compartilhada
OpenMP Fortran 2008 Intel® TBB Intel® Cilk Plus
Site openmp.org fortranwiki.org opentbb.org cilkplus.org

Lançamento 1997 2010 2006 2010

Linguagens Fortan, C, C++ Fortran C++ C/C++

Extensão de
Diretivas do Extensão da linguagem para Extensão da linguagem
linguagem para
Descrição Compilador (pragmas), adicionar paralelismo via para
adicionar paralelismo
runtime library templates multithreading/vetorização
via
Keywords, atributos e
Método Pragmas Keywords Templates
pragmas
Especificação aberta
Especificação By OpenMP ISO/IEC 1539-1:2010 Open Source iniciado pela Intel®
iniciada pela Intel®
Loops paralelos,
vetorização, array
Loops paralelos, tasks, Programação Loops paralelos e algoritmos,
Funcionalidades notations, elemental
locks paralela alocação de memória
functions, compatível com
TBB
Independente de compilador,
uso em vários tipos de Garantia de performance
Funcionalidades Amplamente adotada DO CONCURRENT, aplicações, alocação de em loadbalance,
Únicas pela comunidade HPC Coarrays memória, suporte a outros vetorização, array notations
modelos de programação e elemental functions
paralela
22
Multithreading em Memória Compartilhada
OpenMP

API Padrão para memória compartilhada


Consiste em:
– Diretivas/Pragmas

– Runtime Library
• omp_set_num_threads(n)
– Variáveis de Ambiente
• OMP_NUM_THREADS
Importante:
– Uma Thread OpenMP para cada Core (ideal)
• Permite mais de uma thread/core

23
Multithreading em Memória Compartilhada
OpenMP

Execução de um programa OpenMP


Master Thread

#pragma omp parallel

Thread pool Thread 1 Thread 2 Thread n-1 Thread n

#pragma omp for


Cada thread espera as outras
terminarem o trabalho – “wait state”

24
Master Thread
Multithreading em Memória Compartilhada
OpenMP

Paralelizando um Loop

1. double res[200]; int i;


2. #pragma omp parallel for
3. for (i=0;i< 200; i++) {
4. res[i] = foo();
5. }

Thread 1 Thread 2 Thread N


res[0] = foo(); res[4] = foo(); res[MAX-3] = foo();
res[1] = foo(); res[5] = foo(); ... res[MAX-2] = foo();
res[2] = foo(); res[6] = foo(); res[MAX-1] = foo();
res[3] = foo(); res[7] = foo(); res[MAX] = foo();

25
Multithreading em Memória Compartilhada
OpenMP

Scheduling mode
– static :
• Distribui tasks entre as threads antes do início do loop .
Menor overhead de comunicação, porém pode perder
performance no load-balance
– dynamic:
• Distribui parte da carga no início, e durante o loop as tasks
são distribuídas de acordo com a disponibilidade
– guided:
• Similar ao “dynamic”, porém a granularidade aumenta
assim que a carga de processamento diminui. Pode resultar
melhor load-balance

26
Multithreading em Memória Compartilhada
OpenMP

Scheduling mode
– Quanto maior o tamanho do bloco, menor
overhead, porém pior loadbalance
– Quanto menor o tamanho do bloco, maior
overhead, porém melhor loadbalance
Especificando modo “dynamic” e bloco com tamanho 4

#pragma omp parallel for schedule(dynamic, 4)


// ...

– Ponto de partida para tamanho do bloco:


• > 1, menor que Num. Loops/Parallel Threads

27
Multithreading em Memória Compartilhada
OpenMP

Reduction / Schedule

1. void SumColumns(const int m, const int n, long* M, long* s, char*


method){
2. for (int i = 0; i < m; i++) {
3. long sum = 0;
4. // Distribui cada linha entre as threads
5. // reduction para somar todas as colunas
6. #pragma omp parallel for schedule(guided)
reduction(+: sum)
7. for (int j = 0; j < n; j++)
8. sum += M[i*n+j];

9. s[i] = sum;
10. }

28
Task Parallelism em Memória Compartilhada
OpenMP

Performance – OpenMP Scheduling modes - Jacobi solver

29
Vetorização
Como Vetorizar ?

– Cinco possíveis abordagens:

• Bibliotecas matemáticas
– Ex.: Intel® Math Kernel Library (MKL)
• Auto vetorização
– Trabalho a cargo do Compilador
• Diretivas/Pragmas
– SIMD
– IVDEP
– VECTOR E NOVECTOR
– Intel® Intrinsics
• Array Notation – Cilk Plus
– Notação vetorial na linguagem de programação explicitando a
vetorização
• Elemental Functions – Cilk Plus
– Vetorizar código existente mantendo sua modularidade

30
Vetorização
Como Vetorizar ?

Facilidade de Uso

Vectors
Intel® Math Kernel Library

Auto vectorization

Array Notation: Intel® Cilk™ Plus

Semi-auto vectorization:
#pragma (vector, ivdep, simd)

C/C++ Vector Classes


(F32vec16, F64vec8)

Ajuste Fino
31
Vetorização
Auto Vetorização

Ajudando o compilador a vetorizar


– Evitar “loop unrolling” manual pois:
• Atrela otimização a arquitetura de hardware (Vector Processor Unit)

• Prejudica a leitura do código

src1 src1 src1 src1


[0] [1] [2] [3]

*
src2

acc1 acc2 acc3 acc4 acc

32
Vetorização
Auto Vetorização

Unrolling Loop
1. double acc1 = 0, accu2 = 0, acc3 = 0, acc4 =0;
2. for (i=0; i<NUM; i+=4) {
3. acc1 = src1[i+0] * src2 + acc1;
4. acc2 = src1[i+1] * src2 + acc1;
5. acc3 = src1[i+2] * src2 + acc1;
6. acc4 = src1[i+3] * src2 + acc1;
7. }
8. accu = acc1 + acc2 + acc3 + acc4;

Forma simplificada
double acc = 0;
for (i=0; i<NUM; i+=4) {
accu = src1[i]*src2 + accu;
}
33
Vetorização
Auto Vetorização

Requisitos para um loop ser vetorizado


• Em loops encadeados, o loop mais interno será vetorizado

• Deve conter apenas blocos básicos, ex.: uma única linha de código sem condições
(if statements) ou saltos (go to)

• Quantidade de iterações do loop deve ser conhecida antes de sua execução,


mesmo que em tempo de execução

• Sem dependências entre os elementos a serem calculados

• GAP – Guided Autoparallelization (Intel® Compiler “-guide” ) pode ajudar

Loop Não Vetorizável – Dependência sobre a[i-1]


for (i=1; i<MAX; i++) {
d[i] = e[i] – a[i-1];
a[i] = b[i] + c[i];
}
34
Vetorização
Intel® C++ Intrinsic

O que é Intel® C++ Intrinsic ?


– Provê acesso a ISA (Instruction Set Architecture)
através de código C/C++ ao invés de código
Assembly
– Ganho de performance próximo a códigos Assembly
com a facilidade de C/C++
– Vetorização – Extensões SIMD (Simple Instructions
Multiple Data)

35
Vetorização
Intel® C++ Intrinsic

SSE Intrinsics

MIC Intrinsics
36
Vetorização
Diretivas & Parâmetros do Compilador

– Nem mesmo o mais fantástico compilador consegue


vetorizar automaticamente o código
– Ponteiros em C/C++ dificultam a vetorização
• Dois ponteiros podem apontar para o mesmo endereço de
memória

– Diretivas SIMD:
• Permissão ao compilador vetorizar
• Responsabilidade da vetorização é do programador

37
Vetorização
Diretivas & Parâmetros do Compilador

Diretivas:

#pragma simd [clause[ [,] clause] ... ] : guia o compilador para


casos onde a auto-vetorização não é possível
Atributos padrão:

VECTORLENGTH N : tamanho do vetor (2, 4, 8 ou 16)

VECTORLENGTHFOR (data-type) : tamanho_vetor/sizeof(type)


PRIVATE (VAR1[, VAR2]...) : variável privada para cada iteração do loop
FIRSTPRIVATE (VAR1[, VAR2]...) : broadcast do valor inicial a todas as outras instâncias para cada iteração
LASTPRIVATE (VAR1[, VAR2]...) : broadcast do valor final a todas as outras instâncias
LINEAR (var1:step [, var2:step2]...) : incrementa número de steps para cada variável em um loop, unit-stride
vector
REDUCTION (oper:var1[, var2]...) : Aplica operação de redução (+, *, -, AND, OR, EQV, NEQV) nas variáveis
indicadas
ASSERT : Direciona o compilador a produzir um erro ou um warning quando a vetorização falha

38
Vetorização
Diretivas & Parâmetros do Compilador

Alinhamento de dados

#pragma vector aligned | unaligned : comunica ao compilador que os dados


estão alinhados

__assume_aligned keyword : elimita checagem se os dados estão alinhados,


porém e´specífico para cada vetor

__attribute__((aligned(64)) ou __mm_malloc() / __mm__free() : alocação


estática e dinâmica de dados alinhados

-opt-assume-safe-padding : completa os vetores com bytes extras para que


fiquem múltiplos do tamanho da cache. Evita “loop sobressalente”

39
Vetorização
Diretivas & Parâmetros do Compilador

Removendo “Pointer Aliasing”


#pragma ivdep : Ignora dependências de variáveis

“restrict” ou “-restrict (argumento de linha de


comando) : similar a “ivdep” , informa que determinada
variável não possui restrições/dependências

“Streaming Store”
#pragma vector nontemporal | temporal ou “-opt-
streaming-store always” : uso ótimo do cache em casos de write-only
onde os dados não precisam ser armazenados na cache, e sim diretamente na
memória. Usar “vector aligned” antes.

40
Vetorização
Diretivas & Parâmetros do Compilador

#pragma loop count : Informa ao compilador o número de loops . Útil para


melhores predições de vetorização

-vec-report[n] : relatório do que foi e do que pode ser vetorizado . “n” determina
o nível de detalhes

-guide : GAP – Guided Auto-parallelization . Sugestões de como vetorizar os loops

-O[n] : Nível de otimização O2 (default) já inclui auto-vetorização

-x[code] : Otimiza as instruções de acordo com a arquitetura do processador. Ex.: -


xAVX , -xSSE2

#pragma novector : Instrui o compilador a não vetorizar. Útil em loops com


muitas condições (ifs)

#pragma vector always : força vetorização automática independente da


heurística do compilador

41
Vetorização
Elemental Functions

Possibilita chamar versão vetorizada da


função escalar

Excelente em casos onde as funções estão


implementadas em biblioteca de terceiros

42
Vetorização
Elemental Functions

Lib X
float my_simple_add(float x1,
float x2){
return x1 + x2;
}

Elemental Function
__attribute__(vector) float my_simple_add(float x1, float x2);

// ...em outro arquivo de código


#pragma simd
for (int i=0; i < N, ++i) {
output[i] = my_simple_add(inputa[i], inputb[i]);
}

Ou
my_simple_add(inputa[:], inputb[:]);
43
Vetorização
Array Notation

Extensões C++ Intel® Cilk Plus para


operações com vetores

Indica paralelismo para vetorização


automática

44
Vetorização
Array Notation

A[:] += B[:]; // todo o vetor é computado

A[0:16] += B[32:16]; // A(0 até 15) + B(32 até 47)

A[0:16:2] += B[32:16:4] // A(0, 2, 4, ...30) + B(32, 36, 38, ...


92)

Compatibilidade com compiladores não-Intel


#ifdef __INTEL_COMPILER
A[:] += B[:];
#else
for (int i=0; i<16; i++)
A[i] += B[i];
#endif

45
Vetorização
Exemplos

Diretivas SIMD
Adição de vetores – C/C++
1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX];
2.#pragma simd
3.for (i=0; i<MAX; i++)
4. c[i] = a[i]+b[i];

Array Notation Cilk Plus


Adição de vetores – C/C++ - Dados alinhados
1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX];
2.c[i:MAX] = a[i:MAX]+b[i:MAX];
46
Vetorização
Exemplos

Array Notation Cilk Plus


Adição de vetores – C/C++ - Dados alinhados

1.__declspec(align(16)) float a[MAX], b[MAX], c[MAX];


2.__declspec(vector(uniform(B,C), linear(i:1)))
3.float foo(float* B, float *C, int i){
4. return B[i]+C[i];
5.}
6....
7.for (i=0; i<MAX; i++) {
8. a[i] = foo(b,c,i);
9.}

47
Conclusões

Fatos
– Há muita computacional na indústria e nas
universidades
– No mundo desktop e mobile há muito espaço
para otimizações
– Existem ferramentas que facilitam a
programação paralela
– Multithreading e Vetorização são suportados
pelos processadores atuais

48
Conclusões

Técnicas de Otimização
– Multithreading
• Explorar multiplos cores por processador, múltiplas
threads por core
• Já passou da fase de tendência, hoje é realidade !
– Vetorização
• Outra forma de paralelismo “data paralelism”
• Processamento Vetorial disponível em smpartphones,
ultrabooks e servidores

49
Links Importantes
Intel®® Xeon® Phi™™ COPROCESSOR DEVELOPER SITE

• Arquitetura, setup e recursos de


programação

• Treinamentos

• Estudos de caso

• Informações sobre as Ferramentas

• Suporte através da comunidade


(fóruns de discussão, artigos, etc.)

http://software.intel.com/mic-developer/

50
Links Importantes

Vetorização:

• http://software.intel.com/en-us/intel-vectorization-tools

Treinamentos:

• An Overview of Programming for Intel®® Xeon®® processors and Intel®® Xeon® Phi™™ coprocessors

• Intel®® Xeon® Phi™™ Coprocessor Developer’s Quick Start Guide

• http://software.intel.com/mic-developer

• The Training tab has Beginner and Advanced workshop videos, and links to past/future webinars

• The Tools & Downloads tab has a link to Intel® and Third Party Tools and Libraries

• This page has links to available beta and production for developers

51
Links Importantes
Ferramentas de Desenvolvimento Intel® para o
coprocessador Intel® Xeon® Phi™ coprocessor
Intel® Advisor XE 2013

Informações: software.intel.com/en-us/intel-advisor-xe
Video de demonstração: insidehpc.com/2012/11/30/demo-intel-advisor-xe-2013-transforms-code-for-intel-Xeon®-phi-at-sc12/
Intel® Parallel Studio XE

Informações: software.intel.com/en-us/intel-parallel-studio-xe
Video de demonstração: insidehpc.com/2012/11/28/video-intel-parallel-studio-xe-demo-at-sc12/
Intel® Cluster Studio XE

Informações: software.intel.com/en-us/intel-cluster-studio-xe

Video de demonstração: insidehpc.com/2012/11/29/intel-cluster-studio-xe-demo-at-sc12/


James Reinders on Exploiting Parallelism
in the new Intel®® Xeon® Phi™™ coprocessors

youtube.com/watch?v=g9ehO6duNuE&list=UUH5Rft7GYM8KZpxA-4Ohihg&index=9&feature=plcp

52
Nota sobre Otimização
Legal Disclaimer

• INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR
OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND
CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED
WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT.
• A "Mission Critical Application" is any application in which failure of the Intel Product could result, directly or indirectly, in personal injury or
death. SHOULD YOU PURCHASE OR USE INTEL'S PRODUCTS FOR ANY SUCH MISSION CRITICAL APPLICATION, YOU SHALL INDEMNIFY AND
HOLD INTEL AND ITS SUBSIDIARIES, SUBCONTRACTORS AND AFFILIATES, AND THE DIRECTORS, OFFICERS, AND EMPLOYEES OF EACH,
HARMLESS AGAINST ALL CLAIMS COSTS, DAMAGES, AND EXPENSES AND REASONABLE ATTORNEYS' FEES ARISING OUT OF, DIRECTLY OR
INDIRECTLY, ANY CLAIM OF PRODUCT LIABILITY, PERSONAL INJURY, OR DEATH ARISING IN ANY WAY OUT OF SUCH MISSION CRITICAL
APPLICATION, WHETHER OR NOT INTEL OR ITS SUBCONTRACTOR WAS NEGLIGENT IN THE DESIGN, MANUFACTURE, OR WARNING OF THE
INTEL PRODUCT OR ANY OF ITS PARTS.
• Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or
characteristics of any features or instructions marked "reserved" or "undefined". Intel reserves these for future definition and shall have no
responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change
without notice. Do not finalize a design with this information.
• The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from
published specifications. Current characterized errata are available on request.
• Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across
different processor families. Go to: http://www.intel.com/products/processor_number.
• Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.
• Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-
800-548-4725, or go to: http://www.intel.com/design/literature.htm
• Intel, Core, Atom, Pentium, Intel inside, Sponsors of Tomorrow, Pentium, 386, 486, DX2 and the Intel logo are trademarks of Intel Corporation in
the United States and other countries.

• *Other names and brands may be claimed as the property of others.


• Copyright ©2012 Intel Corporation.

Você também pode gostar