Rilis kompiler ISPC 1.26 yang dikembangkan oleh Intel untuk bahasa C dengan ekstensi SPMD

Intel telah menerbitkan ISPC 1.26 (Kompiler Program SPMD Implisit), yang dirancang untuk merakit kode C dengan ekstensi pemrograman paralel SPMD (Program Tunggal, Banyak Data), yang memungkinkan eksekusi paralel beberapa contoh program yang sama dengan kumpulan data masukan yang berbeda. Kode proyek ditulis dalam C++ dan didistribusikan di bawah lisensi BSD. Mendukung pekerjaan di Linux, Windows, macOS dan FreeBSD.

Program C dengan ekstensi SPMD dikompilasi untuk dieksekusi pada unit komputasi SIMD yang disediakan oleh CPU dan GPU, yang memungkinkan mekanisme vektorisasi SIMD digunakan tanpa optimasi tingkat rendah dan penggunaan instruksi SIMD secara eksplisit dalam kode. Untuk menulis fungsi yang dapat diparalelkan, sintaks dan idiom bahasa C yang sudah dikenal digunakan - fungsi SPMD berinteraksi langsung dengan fungsi dan struktur yang ditulis dalam C/C++. Debugger yang ada dapat digunakan untuk men-debug program.

ISPC menggunakan infrastruktur LLVM sebagai backend untuk pembuatan dan optimasi kode. Instruksi vektor x86 (SSE2, SSE4, AVX, AVX2, AVX512) dan ARM (NEON) didukung, serta memindahkan perhitungan ke sisi GPU (Intel Gen9 dan Xe). Pada arsitektur dengan blok vektor SSE yang memproses 4 elemen sekaligus, penggunaan ISPC memungkinkan untuk mencapai akselerasi eksekusi program sebanyak 3 kali atau lebih, dan pada arsitektur dengan blok vektor AVX yang memproses 8 elemen sekaligus, akselerasi dapat mencapai 5- 6 kali. Selain itu, selain ukuran blok vektor, penskalaan juga dipastikan dengan eksekusi pada inti prosesor yang berbeda.

Inovasi utama yang ditambahkan dalam ISPC versi 1.26:

  • Peningkatan dukungan untuk arsitektur ARM:
    • Perilaku tanda "--arch=arm" telah diubah, yang sekarang dikaitkan dengan arsitektur ARMv8 (32-bit), bukan ARMv7 (untuk ARMv8 dalam mode 64-bit, tanda "--arch=aarch64" seharusnya tetap digunakan).
    • Dukungan untuk prosesor ARMv7 Cortex-a9 dan Cortex-a15 telah dihentikan.
    • Dukungan tambahan untuk prosesor Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520, serta prosesor Apple ARM baru.
    • Menambahkan target build baru: neon-i16x16 dan neon-i8x32.
    • Dukungan tambahan untuk operasi berdasarkan instruksi vektor ARM SDOT dan UDOT.
    • Optimalisasi telah dilakukan, kinerja untuk ARMv8 meningkat rata-rata 13%.
  • Tipe baru target build telah ditambahkan - "generik", yang memungkinkan pengoptimalan arsitektur internal kompiler dan penyederhanaan penambahan target build baru. Idenya adalah untuk mendukung target dasar untuk kemampuan perangkat keras tertentu, yang selanjutnya target dengan pengoptimalan tertentu dapat dibangun dengan mudah. Dukungan untuk arsitektur ARM telah dialihkan ke penggunaan target generik.
  • Generator kode telah mengalami penyesuaian putaran dan fungsi untuk mengurangi ukuran kode yang dihasilkan dalam mode pengoptimalan "-O1". Peningkatan pembuatan kode untuk fungsi bawaan count_leading_zeros dan count_trailing_zeros, serta saat mengembalikan struktur dari fungsi dan saat menyimpan atau memuat data dengan tipe int8/int16.
  • Dukungan yang diperluas untuk intrinsik LLVM, diaktifkan dengan menentukan tanda "--enable-llvm-intrinsics".
  • Rantai alat LLVM diperbarui ke versi 18.1.8 dengan patch. Menambahkan makro untuk mendeteksi versi LLVM yang digunakan dalam ISPC.
  • Diizinkan untuk menerapkan atribut "__attribute__((deprecated))" ke fungsi untuk mencetak peringatan saat fungsi dipanggil.
  • Target pembuatan avx512knl-x16 (KNL) telah dihapus.
  • Menambahkan opsi "--darwin-version-min" untuk menentukan versi minimum yang didukung dari platform target untuk macOS dan iOS.

Sumber: opennet.ru

Tambah komentar