Julia: Pertimbangkan untuk menambahkan `VecTuple{N,T}` untuk menampung N `VecElements{T}`s

Dibuat pada 14 Mar 2017  ·  3Komentar  ·  Sumber: JuliaLang/julia

Saya mengetahui keberadaan SIMD.jl. Namun, saya percaya pembuatan kode dasar vektor SIMD harus didukung dengan cara yang lebih mudah di basis Julia itu sendiri, dan menyembunyikan beberapa detail di tuple pembungkus daripada hanya dengan tipe yang mendasarinya.

Jadi proposal saya adalah mendefinisikan beberapa jenis VecTuple{N,T} yang pada dasarnya akan setara dengan NTuple{N, VecElement{T}} . Perbedaannya adalah bahwa properti codegen VecElement akan diterapkan secara implisit jika diperlukan, tetapi terikat pada Tuple daripada elemen. Dengan cara ini, mengakses elemen individu dari Tuple tidak perlu melalui konversi tambahan T <-> VecElement{T} . Saat ini mengakses satu elemen dari NTuple{N, VecElement{T}} membutuhkan x[i].value bukan hanya x[i] .

Juga, persyaratan untuk ukuran tipe total dan keselarasan, atau tipe fundamental mana (ukuran bit 8 hingga 64) yang diizinkan sama sekali, akan diikat ke tupel khusus. Lihat juga #20961.

Saya tidak menyarankan untuk menambahkan semua kemungkinan operasi pada vektor SIMD ke basis Julia. Tentu terlalu banyak (pikirkan tentang shuffle, transposing, atau inversing). Ini semua masih bisa diserahkan ke paket khusus untuk saat ini, hanya mengubah jenis bagaimana properti codegen LLVM yang paling mendasar ditautkan ke tuple.

( VecTuple tentu saja hanya pengganti nama yang sesuai untuk masalah ini.)

simd speculative types and dispatch

Komentar yang paling membantu

Satu ide tentang bagaimana melanjutkan adalah membuat paket baru yang menjelaskan apa yang menurut Anda harus masuk ke basis. Sebut saja misalnya SIMDBase . Kami kemudian dapat menargetkan ulang SIMD ke paket itu, yang akan -- jika asumsi Anda benar -- menyederhanakan SIMD . Setelah orang setuju tentang fungsionalitas yang disediakan oleh SIMDBase , itu bisa dipindahkan ke Base.

Misalnya, saya tidak keberatan jika beberapa panggilan LLVM tingkat rendah dapat ditangani di tempat lain.

Semua 3 komentar

Hanya sebagai pengingat bagi orang lain, kami tidak memiliki VecTuple karena Tuple tidak didefinisikan sebagai jenis vektor abstrak, jadi berbicara tentang tupel vektor merupakan hal yang bertentangan.

Satu ide tentang bagaimana melanjutkan adalah membuat paket baru yang menjelaskan apa yang menurut Anda harus masuk ke basis. Sebut saja misalnya SIMDBase . Kami kemudian dapat menargetkan ulang SIMD ke paket itu, yang akan -- jika asumsi Anda benar -- menyederhanakan SIMD . Setelah orang setuju tentang fungsionalitas yang disediakan oleh SIMDBase , itu bisa dipindahkan ke Base.

Misalnya, saya tidak keberatan jika beberapa panggilan LLVM tingkat rendah dapat ditangani di tempat lain.

Untuk referensi, tipe intrinsik SIMD juga dibahas panjang lebar di sini: #2299

Saya akan mencoba untuk datang dengan beberapa konsep yang layak... mungkin butuh sedikit.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat