Julia: Considere adicionar um `VecTuple {N, T}` para conter N `VecElements {T}` s

Criado em 14 mar. 2017  ·  3Comentários  ·  Fonte: JuliaLang/julia

Estou ciente da existência de SIMD.jl. No entanto, acredito que a geração de código fundamental de vetores SIMD deve ser suportada de uma maneira mais fácil na própria base Julia e ocultar alguns dos detalhes na tupla envolvente, em vez de simplesmente pelo tipo subjacente.

Portanto, minha proposta seria definir algum tipo VecTuple{N,T} que seria essencialmente equivalente ao NTuple{N, VecElement{T}} atual. A diferença seria que as propriedades VecElement codegen seriam aplicadas implicitamente se necessário, mas vinculadas à tupla e não ao elemento. Dessa forma, o acesso a elementos individuais da tupla não precisaria passar por uma conversão adicional T <-> VecElement{T} . Atualmente, o acesso a um único elemento de NTuple{N, VecElement{T}} requer x[i].value vez de simplesmente x[i] .

Além disso, os requisitos para tamanho total de tipo e alinhamento, ou quais tipos fundamentais (bits de 8 a 64) são permitidos, seriam vinculados à tupla especializada. Consulte também # 20961.

Não estou sugerindo adicionar todas as operações possíveis em vetores SIMD à base de Julia. Certamente há muitos (pense em embaralhar, transpor ou inverter). Isso ainda poderia ser deixado para pacotes especializados por enquanto, apenas mudando o tipo de como a propriedade codegen do LLVM mais fundamental é vinculada à tupla.

( VecTuple é, obviamente, apenas um espaço reservado para qualquer nome de convienient sobre o assunto.)

simd speculative types and dispatch

Comentários muito úteis

Uma ideia de como proceder seria criar um novo pacote que descreva o que você acha que deve ser inserido na base. Chame-o por exemplo SIMDBase . Podemos então redirecionar SIMD para aquele pacote, o que - se sua suposição estiver correta - simplificará SIMD . Assim que as pessoas concordarem sobre a funcionalidade fornecida por SIMDBase , ela pode ser movida para o Base.

Por exemplo, eu não me importaria se algumas das contorções de chamada do LLVM de baixo nível pudessem ser tratadas em outro lugar.

Todos 3 comentários

Apenas como um lembrete para os outros, não temos VecTuple, já que Tuple não é definido como um tipo de vetor abstrato, então é um conflito parcial de termos falar sobre uma tupla vetorizada.

Uma ideia de como proceder seria criar um novo pacote que descreva o que você acha que deve ser inserido na base. Chame-o por exemplo SIMDBase . Podemos então redirecionar SIMD para aquele pacote, o que - se sua suposição estiver correta - simplificará SIMD . Assim que as pessoas concordarem sobre a funcionalidade fornecida por SIMDBase , ela pode ser movida para o Base.

Por exemplo, eu não me importaria se algumas das contorções de chamada do LLVM de baixo nível pudessem ser tratadas em outro lugar.

Para referência, os tipos intrínsecos SIMD também são discutidos detalhadamente aqui: # 2299

Vou tentar chegar a algum conceito viável ... pode demorar um pouco.

Esta página foi útil?
0 / 5 - 0 avaliações