Julia: Considere agregar un `VecTuple {N, T}` para contener N `VecElements {T}` s

Creado en 14 mar. 2017  ·  3Comentarios  ·  Fuente: JuliaLang/julia

Soy consciente de la existencia de SIMD.jl. Sin embargo, creo que la generación de código fundamental de los vectores SIMD debería ser compatible de una manera más fácil en la propia base de Julia y ocultar algunos de los detalles en la tupla de envoltura en lugar de simplemente por el tipo subyacente.

Por lo tanto, mi propuesta sería definir algún tipo VecTuple{N,T} que esencialmente sería equivalente al actual NTuple{N, VecElement{T}} . La diferencia sería que las propiedades de codegen VecElement aplicarían implícitamente si fuera necesario, pero ligadas a la tupla en lugar del elemento. De esta manera, acceder a elementos individuales de la tupla no necesitaría pasar por una conversión adicional T <-> VecElement{T} . Actualmente, acceder a un solo elemento de un NTuple{N, VecElement{T}} requiere x[i].value lugar de simplemente x[i] .

Además, los requisitos para el tamaño y la alineación de tipo total, o qué tipos fundamentales (tamaños de bits de 8 a 64) están permitidos, estarían vinculados a la tupla especializada. Vea también # 20961.

No estoy sugiriendo agregar todas las operaciones posibles en los vectores SIMD a la base de Julia. Ciertamente hay demasiados (piense en barajar, transponer o invertir). Todo esto aún podría dejarse en paquetes especializados por el momento, simplemente cambiando el tipo de cómo la propiedad de codegen LLVM más fundamental está vinculada a la tupla.

( VecTuple es, por supuesto, solo un marcador de posición para cualquier nombre conveniente al respecto).

simd speculative types and dispatch

Comentario más útil

Una idea de cómo proceder sería crear un nuevo paquete que describa lo que cree que debería ir a la base. Llámelo, por ejemplo, SIMDBase . Luego podemos redirigir SIMD a ese paquete, lo que, si su suposición es correcta, simplificaría SIMD . Una vez que la gente esté de acuerdo con la funcionalidad proporcionada por SIMDBase , podría trasladarse a Base.

Por ejemplo, no me importaría si algunas de las contorsiones de llamadas LLVM de bajo nivel pudieran manejarse en otro lugar.

Todos 3 comentarios

Solo como un recordatorio para los demás, no tenemos VecTuple ya que Tuple no se define como un tipo de vector abstracto, por lo que es un choque parcial de términos hablar de una tupla vectorizada.

Una idea de cómo proceder sería crear un nuevo paquete que describa lo que cree que debería ir a la base. Llámelo, por ejemplo, SIMDBase . Luego podemos redirigir SIMD a ese paquete, lo que, si su suposición es correcta, simplificaría SIMD . Una vez que la gente esté de acuerdo con la funcionalidad proporcionada por SIMDBase , podría trasladarse a Base.

Por ejemplo, no me importaría si algunas de las contorsiones de llamadas LLVM de bajo nivel pudieran manejarse en otro lugar.

Como referencia, los tipos intrínsecos de SIMD también se analizan en detalle aquí: # 2299

Intentaré pensar en algún concepto factible ... puede que tarde un poco.

¿Fue útil esta página
0 / 5 - 0 calificaciones