Intel ได้เผยแพร่ ISPC 1.31 (Implicit SPMD Program Compiler) ซึ่งออกแบบมาเพื่อคอมไพล์โค้ดภาษา C ด้วยส่วนขยายการเขียนโปรแกรมแบบขนาน SPMD (Single Program, Multiple Data) ซึ่งช่วยให้สามารถประมวลผลแบบขนานได้หลายอินสแตนซ์ของโปรแกรมเดียวด้วยชุดข้อมูลอินพุตที่แตกต่างกัน โค้ดของโครงการเขียนด้วยภาษา C++ และเผยแพร่ภายใต้ใบอนุญาต BSD โดยรองรับการทำงานหลายแบบ Linux, Windows, macOS และ FreeBSD
โปรแกรม C ที่มีส่วนขยาย SPMD ได้รับการคอมไพล์เพื่อดำเนินการกับหน่วยประมวลผล SIMD ที่ CPU และ GPU จัดให้ ซึ่งช่วยให้คุณใช้กลไกการกำหนดเวกเตอร์ SIMD ได้โดยไม่ต้องเพิ่มประสิทธิภาพระดับต่ำ และใช้คำสั่ง SIMD อย่างชัดเจนในโค้ด ในการเขียนฟังก์ชันแบบขนาน จะใช้ไวยากรณ์และสำนวนที่คุ้นเคยของภาษา C - ฟังก์ชัน SPMD จะโต้ตอบโดยตรงกับฟังก์ชันและโครงสร้างที่เขียนด้วย C/C++ ดีบักเกอร์ที่มีอยู่สามารถใช้เพื่อดีบักโปรแกรมได้
ISPC ใช้โครงสร้างพื้นฐาน LLVM เป็นแบ็กเอนด์สำหรับการสร้างโค้ดและการเพิ่มประสิทธิภาพ รองรับคำสั่งเวกเตอร์ x86 (SSE2, SSE4, AVX, AVX2, AVX512) และ ARM (NEON) เช่นเดียวกับการคำนวณการถ่ายโอนไปยังฝั่ง GPU (Intel Gen9 และ Xe) บนสถาปัตยกรรมที่มีบล็อกเวกเตอร์ SSE ประมวลผล 4 องค์ประกอบในแต่ละครั้ง การใช้ ISPC ช่วยให้สามารถเร่งความเร็วในการทำงานของโปรแกรมได้ 3 ครั้งขึ้นไป และบนสถาปัตยกรรมที่มีบล็อกเวกเตอร์ AVX ประมวลผล 8 องค์ประกอบในแต่ละครั้ง ความเร่งอาจสูงถึง 5- 6 ครั้ง. ยิ่งไปกว่านั้น นอกเหนือจากขนาดของบล็อกเวกเตอร์แล้ว การปรับขนาดยังมั่นใจได้ด้วยการประมวลผลบนคอร์โปรเซสเซอร์ที่แตกต่างกัน
นวัตกรรมสำคัญที่เพิ่มเข้ามาใน ISPC เวอร์ชัน 1.31:
- Добавлена экспериментальная поддержка 64-разрядной little-endian архитектуры PowerPC (ppc64le). По умолчанию осуществляется сборка для POWER ISA 2.7 (POWER8+) с расширениями VSX (Vector Scalar Extension).
- Добавлены новые сборочные цели avx10.2nvl-x4, avx10.2nvl-x8, avx10.2nvl-x16, avx10.2nvl-x32 и avx10.2nvl-x64, реализующие поддержку расширенный наборов инструкций AVX10.2 (Advanced Vector Extensions) и APX (Advanced Performance Extensions) для процессоров на базе микроархитектуры Intel Nova Lake.
- В диспетчеризаторе обеспечен выбор вариантов сборочных целей с поддержкой AMX (avx512spr, avx512gnr, avx10.2dmr) только при реальной поддержке расширений AMX (Advanced Matrix Extensions) в операционной системе и CPU.
- Добавлена опция «—opt=disable-apx» для выборочного отключения отдельных возможностей x86 APX (egpr, ndd, push2pop2, ppx, ccmp, cf, nf, zu и jmpabs), которые по умолчанию включены в поддерживающих APX сборочных целях, таких как avx10.2dmr и avx10.2nvl.
- Добавлены сбалансированный («balanced») и агрессивный («aggressive») режимы оптимизации математических вычислений, включаемые через опцию «—opt=fast-math» и более агрессивные по сравнению с применяемым по умолчанию режимом оптимизации.
- В сандартную библиотеку добавлены новые математические функции:
erf, erfc (функции ошибок Гаусса), expm1 (точное вычисление «exp(x)-1»), log1p («log(1+x)»), sinh, cosh и tanh (гиперболические синус, косинус и тангенс). Повышена точность и производительность функций asin, acos, atan и log. - Значительно повышена производительность 32-битных операций перестановки (shuffles) для сборочной цели avx2-i32x16 и вычислений popcnt для целей avx2-i8x32, avx512skx-x32 и avx512skx-x64.
- Инструментарий LLVM обновлён до находящейся в разработке ветки 23.
ที่มา: opennet.ru
