اینتل ISPC 1.31 (کامپایلر برنامه ضمنی SPMD) را منتشر کرده است که برای کامپایل کد C با افزونههای برنامهنویسی موازی SPMD (برنامه واحد، دادههای چندگانه) طراحی شده است، که اجرای موازی چندین نمونه از یک برنامه واحد را با مجموعههای مختلف دادههای ورودی امکانپذیر میکند. کد پروژه با زبان C++ نوشته شده و تحت مجوز BSD توزیع شده است. این کد از ... پشتیبانی میکند. Linux, Windows, macOS و فریبیاسدی.
برنامه های 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:
- پشتیبانی آزمایشی برای معماری PowerPC 64 بیتی little-endian (ppc64le) اضافه شده است. هدف ساخت پیشفرض، POWER ISA 2.7 (POWER8+) با VSX (Vector Scalar Extensions) است.
- اهداف ساخت جدید avx10.2nvl-x4، avx10.2nvl-x8، avx10.2nvl-x16، avx10.2nvl-x32 و avx10.2nvl-x64 اضافه شده است که پشتیبانی از مجموعه دستورالعملهای توسعهیافته AVX10.2 (افزونههای برداری پیشرفته) و APX (افزونههای عملکرد پیشرفته) را برای پردازندههای مبتنی بر ریزمعماری Intel Nova Lake پیادهسازی میکنند.
- دیسپچر، گزینههای هدف مونتاژ با پشتیبانی از AMX (avx512spr، avx512gnr، avx10.2dmr) را تنها با پشتیبانی واقعی از افزونههای AMX (افزونههای پیشرفته ماتریکس) در سیستم عامل و CPU ارائه میدهد.
- گزینه "--opt=disable-apx" اضافه شد تا به صورت انتخابی ویژگیهای x86 APX (مانند pr، ndd، push2pop2، ppx، ccmp، cf، nf، zu و jmpabs) که به طور پیشفرض روی اهداف ساخت با قابلیت APX مانند avx10.2dmr و avx10.2nvl فعال هستند را غیرفعال کند.
- حالتهای متعادل و تهاجمی برای بهینهسازی محاسبات ریاضی اضافه شده است که از طریق گزینه "--opt=fast-math" فعال میشوند و نسبت به حالت بهینهسازی پیشفرض، تهاجمیتر هستند.
- توابع ریاضی جدیدی به کتابخانه استاندارد اضافه شدهاند:
erf، erfc (توابع خطای گاوسی)، expm1 (محاسبه دقیق "exp(x)-1")، log1p ("log(1+x)")، sinh، cosh و tanh (سینوس، کسینوس و تانژانت هیپربولیک). دقت و عملکرد توابع asin، acos، atan و log بهبود یافته است. - بهبود قابل توجه عملکرد درهمسازیهای ۳۲ بیتی برای هدف اسمبلی avx2-i32x16 و محاسبات popcnt برای اهداف avx2-i8x32، avx512skx-x32 و avx512skx-x64.
- زنجیره ابزار LLVM به شاخه توسعه ۲۳ بهروزرسانی شده است.
منبع: opennet.ru
