Intel telah menerbitkan ISPC 1.26 (Penyusun Program SPMD Tersirat), yang direka untuk memasang kod C dengan sambungan pengaturcaraan selari SPMD (Program Tunggal, Berbilang Data), yang membenarkan pelaksanaan selari beberapa contoh program yang sama dengan set data input yang berbeza. Kod projek ditulis dalam C++ dan diedarkan di bawah lesen BSD. Menyokong kerja pada Linux, Windows, macOS dan FreeBSD.
Program C dengan sambungan SPMD disusun untuk pelaksanaan pada unit pengiraan SIMD yang disediakan oleh CPU dan GPU, yang membolehkan anda menggunakan mekanisme vektorisasi SIMD tanpa pengoptimuman peringkat rendah dan penggunaan eksplisit arahan SIMD dalam kod. Untuk menulis fungsi boleh selari, sintaks dan simpulan bahasa yang biasa digunakan dalam bahasa C - Fungsi SPMD berinteraksi secara langsung dengan fungsi dan struktur yang ditulis dalam C/C++. Penyahpepijat sedia ada boleh digunakan untuk nyahpepijat atur cara.
ISPC menggunakan infrastruktur LLVM sebagai bahagian belakang untuk penjanaan dan pengoptimuman kod. Arahan vektor x86 (SSE2, SSE4, AVX, AVX2, AVX512) dan ARM (NEON) disokong, serta memunggah pengiraan ke bahagian GPU (Intel Gen9 dan Xe). Pada seni bina dengan blok vektor SSE memproses 4 elemen pada satu masa, penggunaan ISPC memungkinkan untuk mencapai pecutan pelaksanaan program sebanyak 3 kali atau lebih, dan pada seni bina dengan blok vektor AVX memproses 8 elemen pada satu masa, pecutan boleh mencapai 5- 6 kali. Selain itu, sebagai tambahan kepada saiz blok vektor, penskalaan juga dipastikan dengan pelaksanaan pada teras pemproses yang berbeza.
Inovasi utama ditambah dalam versi ISPC 1.26:
- Sokongan yang lebih baik untuk seni bina ARM:
- Gelagat bendera "--arch=arm" telah diubah, yang kini dikaitkan dengan seni bina ARMv8 (32-bit), bukan ARMv7 (untuk ARMv8 dalam mod 64-bit, bendera "--arch=aarch64" masih harus digunakan).
- Sokongan untuk pemproses ARMv7 Cortex-a9 dan Cortex-a15 telah dihentikan.
- Menambah sokongan untuk pemproses Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, serta pemproses Apple ARM baharu.
- Menambahkan sasaran binaan baharu: neon-i16x16 dan neon-i8x32.
- Menambah sokongan untuk operasi berdasarkan ARM SDOT dan arahan vektor UDOT.
- Pengoptimuman telah dilakukan, prestasi untuk ARMv8 telah meningkat sebanyak 13% secara purata.
- Jenis sasaran binaan baharu telah ditambah - "generik", yang membolehkan pengoptimuman seni bina dalaman pengkompil dan memudahkan penambahan sasaran binaan baharu. Idea ini adalah untuk menyokong sasaran asas untuk keupayaan perkakasan tertentu, selain daripada sasaran dengan pengoptimuman tertentu boleh dibina dengan mudah. Sokongan untuk seni bina ARM telah ditukar kepada menggunakan sasaran generik.
- Penjana kod telah melaraskan gelung dan pelancaran fungsinya untuk mengurangkan saiz kod yang terhasil dalam mod pengoptimuman "-O1". Penjanaan kod yang dipertingkatkan untuk fungsi terbina dalam count_leading_zeros dan count_trailing_zeros, serta apabila mengembalikan struktur daripada fungsi dan apabila menyimpan atau memuatkan data dengan jenis int8/int16.
- Sokongan yang diperluaskan untuk intrinsik LLVM, didayakan dengan menentukan bendera "--enable-llvm-intrinsics".
- Rantaian alat LLVM dikemas kini kepada versi 18.1.8 dengan tampung. Ditambah makro untuk mengesan versi LLVM yang digunakan dalam ISPC.
- Dibenarkan untuk menggunakan atribut "__attribute__((deprecated))" pada fungsi untuk mencetak amaran apabila fungsi dipanggil.
- Sasaran binaan dialih keluar avx512knl-x16 (KNL).
- Menambahkan pilihan "--darwin-version-min" untuk menentukan versi minimum yang disokong platform sasaran untuk macOS dan iOS.
Sumber: opennet.ru
