Eu sou novo na ciência da computação e gostaria de saber se a meia precisão é suportada pela arquitetura moderna da mesma forma que a precisão simples ou dupla. Achei que a revisão de 2008 do padrão IEEE-754 introduziu precisões quádruplas e meias.

Comentários

  • Isso foi marcado como MATLAB, mas o MATLAB não ‘ t (ainda) suporta 16 bits ponto flutuante.
  • Veja esta pergunta de troca de pilha que contém algumas informações detalhadas sobre isso: stackoverflow.com/questions/49995594/…
  • Vale a pena esclarecer se você se refere apenas a CPUs, ou a ambas CPUs e GPUs.
  • Obrigado por seu comentário Max Barraclough. Não sabia que era possível alterar a precisão apenas nas unidades de processamento gráfico (GPUs); Achei que tinha que ser feito em ambos. Seu comentário é muito útil.

Resposta

Suporte Intel para IEEE float16 formato de armazenamento

Intel suporta IEEE meio como um tipo de armazenamento em processadores desde Ivy Bridge (2013). O tipo de armazenamento significa que você pode obter uma vantagem de capacidade de memória / cache / largura de banda, mas o cálculo é feito com precisão única após a conversão de e para o formato de meia precisão IEEE.

Suporte da Intel para BFloat16

A Intel anunciou suporte para BF16 no Cooper Lake and Sapphire Rapids.

Eu trabalho para a Intel. Estou citando fontes oficiais e não comentarei rumores, etc.

É bom estar curioso sobre os méritos relativos do IEEE FP16 vs BF16. Há muitas análises sobre esse tema, por exemplo, https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Suporte a hardware não Intel

O seguinte são informações sobre outros processadores. Verifique com os fornecedores conforme necessário.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf lista o seguinte suporte de hardware:

  • AMD – MI5, MI8, MI25
  • ARM – NEON VFP FP16 em V8.2-A
  • NVIDIA – Pascal e Volta

NVIDIA Ampere também tem suporte para FP16 ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Comentários

  • A primeira parte desta resposta é um pouco enganosa. Embora o Ivy Bridge tenha realmente introduzido suporte para F16C, e isso significa tecnicamente que flutuadores de meia precisão são ” suportados “, as únicas instruções fornecidos são aqueles para converter de e para flutuadores de meia-precisão. Nenhuma operação pode ser feita neles, de forma que dificilmente cumpre o requisito da pergunta: ” Eu estava me perguntando se a meia precisão é suportada pela arquitetura moderna da mesma forma que a precisão simples ou dupla é. ” É apenas um formato de armazenamento. Você ‘ está trocando ciclos de conversão de ALU por largura de banda / área de cobertura da memória.
  • Eu literalmente disse que é um tipo de armazenamento, todas as economias vêm de dados mais restritos e a computação feito com precisão única. Não é nem um pouco enganador. Eu disse que suporte estava presente, que é a metade do suporte possível.
  • Obrigado a todos. Na verdade, achei cada um desses comentários úteis. O motivo inicial para fazer a pergunta foi devido a ouvir outras pessoas discutindo sobre isso exatamente.
  • @AsadMehasi: também relacionado no Stack Overflow: Meia precisão aritmética de ponto flutuante em chips Intel – sim em GPUs integradas desde Skylake, mas nos núcleos IA apenas para conversão de / para float no armazenamento / carregamento. (Até o suporte do BFloat no próximo HW)

Resposta

Na minha opinião, não muito uniformemente. A aritmética de baixa precisão parece ter ganhado alguma força no aprendizado de máquina, mas há várias definições para o que as pessoas entendem por baixa precisão. Há a metade IEEE-754 (mantissa de 10 bits, expoente de 5 bits, sinal de 1 bit), mas também bfloat16 (mantissa de 7 bits, expoente de 8 bits, sinal de 1 bit) que favorece a faixa dinâmica sobre a precisão e uma variedade de outros formatos (TensorFloat de 19 bits da NVidia, fp24 da AMD, talvez mais?). A maior parte desse material está sendo executado em um hardware do tipo GPGPU para fins especiais.

Em contraste, float e double têm um significado geralmente aceito, como compatível com IEEE-754, representações de 32 bits (23/8/1) e 64 bits (52/11/1).

Comentários

  • Embora definitivamente fora do padrão, computação óptica efetivamente usa metade -precisão (ou menos) operações de ponto flutuante.

Resposta

A resposta aceita fornece uma visão geral. Adicionarei mais alguns detalhes sobre o suporte em processadores NVIDIA. O suporte que estou descrevendo aqui é 16 bits, compatível com IEEE 754, suporte aritmético de ponto flutuante, incluindo adição, multiplicação, multiplicação-adição e conversões de / para outros formatos .

Maxwell (por volta de 2015)

O mais antigo IEEE 754 Suporte a FP16 (“binary16” ou “meia precisão”) veio em dispositivos cc (capacidade de computação) 5.3 que estavam na geração Maxwell, mas essa capacidade de computação foi implementada apenas em o processador Tegra TX1 (SoC, por exemplo, Jetson).

Pascal (por volta de 2016)

Pascal Os membros da família têm “taxa total” (cc 6.0, 6.2 ) ou “taxa baixa” (cc 6.1) taxa de transferência FP16. cc6.2 foi novamente um produto da família Tegra, TX2. cc 6.0 e 6.1 encontraram uso em uma variedade de processadores em várias famílias de produtos, como GeForce, Quadro e Tesla. “taxa total” aqui se refere a uma taxa que é equivalente a duas vezes a taxa IEEE 754 FP32 (“binário32” ou “precisão única”) para o processador em questão, quando as operações foram feitas usando um tipo de dados half2 (duas meias quantidades tratadas em o mesmo registro e instrução).

Volta, Turing (2017, 2018)

Volta e Turing membros da família (cc 7.x) apoiam FP16 em ” taxa total “e, além disso, use o formato nas operações do TensorCore .

Ampère (maio de 2020)

O recentemente anunciado GPU A100 de arquitetura Ampere também oferece suporte a FP16 de maneira semelhante a Volta e Turing, e introduz capacidade adicional para um tipo de dados TF32 , que é um formato em que a mantissa tem o mesmo tamanho (número de bits) como uma mantissa FP16, e t O expoente é do mesmo tamanho que um expoente FP32. A capacidade Bfloat16 também foi anunciada em Ampère.

Além do processador de arquitetura Ampere anunciado recentemente, suporte e taxas de transferência para operações de ponto flutuante de 16 bits (e outras operações) em recursos de computação (incluindo arquiteturas) podem ser encontradas na tabela 3 do guia de programação CUDA . As taxas de transferência são por clock, por multiprocessador, portanto, precisam ser dimensionadas de acordo com o tipo de GPU e as especificações. Essas taxas de transferência não são para operações do TensorCore, e as taxas de transferência de pico geralmente são aplicáveis apenas ao processar em half2 tipos de dados (duas meias quantidades agrupadas em uma única palavra de 32 bits).

Resposta

Você pode descobrir se o seu hardware suporta meia precisão via:

$ lscpu | grep Flags | grep f16c Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req md_clear flush_l1d 

O f16c a instrução está documentada aqui .

Comentários

  • Observe que o C em F16C significa Conversão; ele apenas ajuda com largura de banda de memória / pegada de cache, não com taxa de transferência SIMD ALU. Você tem que converter para float para fazer qualquer matemática, então o número de elementos por vetor SIMD para operações FMA não ‘ t melhorado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *