ఇంటెల్ ISPC 1.26 (ఇంప్లిసిట్ SPMD ప్రోగ్రామ్ కంపైలర్)ను ప్రచురించింది, ఇది SPMD (సింగిల్ ప్రోగ్రామ్, మల్టిపుల్ డేటా) సమాంతర ప్రోగ్రామింగ్ ఎక్స్టెన్షన్లతో C కోడ్ని అసెంబుల్ చేయడానికి రూపొందించబడింది, ఇది ఒకే ప్రోగ్రామ్లోని వివిధ సెట్ల ఇన్పుట్ డేటాతో అనేక సందర్భాలను సమాంతరంగా అమలు చేయడానికి అనుమతిస్తుంది. ప్రాజెక్ట్ కోడ్ C++లో వ్రాయబడింది మరియు BSD లైసెన్స్ క్రింద పంపిణీ చేయబడింది. Linux, Windows, macOS మరియు FreeBSDలో పని చేయడానికి మద్దతు ఇస్తుంది.
SPMD పొడిగింపులతో కూడిన C ప్రోగ్రామ్లు CPU మరియు GPU ద్వారా అందించబడిన SIMD కంప్యూటేషనల్ యూనిట్లపై అమలు కోసం సంకలనం చేయబడ్డాయి, ఇది కోడ్లో తక్కువ-స్థాయి ఆప్టిమైజేషన్లు మరియు SIMD సూచనలను స్పష్టంగా ఉపయోగించకుండా SIMD వెక్టరైజేషన్ మెకానిజమ్లను ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది. సమాంతరీకరించదగిన ఫంక్షన్లను వ్రాయడానికి, సి భాష యొక్క సుపరిచితమైన సింటాక్స్ మరియు ఇడియమ్లు ఉపయోగించబడతాయి - SPMD ఫంక్షన్లు నేరుగా C/C++లో వ్రాసిన విధులు మరియు నిర్మాణాలతో పరస్పర చర్య చేస్తాయి. ప్రోగ్రామ్లను డీబగ్ చేయడానికి ఇప్పటికే ఉన్న డీబగ్గర్లను ఉపయోగించవచ్చు.
ISPC LLVM ఇన్ఫ్రాస్ట్రక్చర్ను కోడ్ ఉత్పత్తి మరియు ఆప్టిమైజేషన్ కోసం బ్యాకెండ్గా ఉపయోగిస్తుంది. x86 (SSE2, SSE4, AVX, AVX2, AVX512) మరియు ARM (NEON) వెక్టార్ సూచనలకు మద్దతు ఉంది, అలాగే GPU వైపు (Intel Gen9 మరియు Xe) లెక్కలను ఆఫ్లోడ్ చేస్తుంది. ఒకేసారి 4 మూలకాలను ప్రాసెస్ చేసే SSE వెక్టార్ బ్లాక్లతో కూడిన ఆర్కిటెక్చర్లపై, ISPCని ఉపయోగించడం వల్ల ప్రోగ్రామ్ ఎగ్జిక్యూషన్ యాక్సిలరేషన్ను 3 లేదా అంతకంటే ఎక్కువ సార్లు సాధించడం సాధ్యపడుతుంది మరియు AVX వెక్టర్ బ్లాక్లతో ఒకేసారి 8 ఎలిమెంట్లను ప్రాసెస్ చేసే ఆర్కిటెక్చర్లపై, త్వరణం 5-కి చేరుకుంటుంది. 6 సార్లు. అంతేకాకుండా, వెక్టార్ బ్లాక్ యొక్క పరిమాణంతో పాటు, వివిధ ప్రాసెసర్ కోర్లపై అమలు చేయడం ద్వారా స్కేలింగ్ కూడా నిర్ధారిస్తుంది.
ISPC వెర్షన్ 1.26లో జోడించిన కీలక ఆవిష్కరణలు:
- ARM ఆర్కిటెక్చర్కు మెరుగైన మద్దతు:
- "--arch=arm" ఫ్లాగ్ యొక్క ప్రవర్తన మార్చబడింది, ఇది ఇప్పుడు ARMv8 తో కాకుండా ARMv32 (7-bit) ఆర్కిటెక్చర్తో అనుబంధించబడింది (8-bit మోడ్లోని ARMv64 కోసం, "--arch=aarch64" ఫ్లాగ్ను ఇప్పటికీ ఉపయోగించాలి).
- ARMv7 Cortex-a9 మరియు Cortex-a15 ప్రాసెసర్లకు మద్దతు నిలిపివేయబడింది.
- Cortex-a55, Cortex-a78, Cortex-a510, Cortex-a520 ప్రాసెసర్లకు, అలాగే కొత్త Apple ARM ప్రాసెసర్లకు మద్దతు జోడించబడింది.
- కొత్త నిర్మాణ లక్ష్యాలు జోడించబడ్డాయి: నియాన్-i16x16 మరియు నియాన్-i8x32.
- ARM SDOT మరియు UDOT వెక్టర్ సూచనల ఆధారంగా కార్యకలాపాలకు మద్దతు జోడించబడింది.
- ఆప్టిమైజేషన్ జరిగింది, ARMv8 పనితీరు సగటున 13% పెరిగింది.
- కొత్త రకం బిల్డ్ టార్గెట్లు జోడించబడ్డాయి - "జెనరిక్", ఇది కంపైలర్ యొక్క అంతర్గత నిర్మాణాన్ని ఆప్టిమైజ్ చేయడానికి మరియు కొత్త బిల్డ్ టార్గెట్ల జోడింపును సులభతరం చేయడానికి అనుమతిస్తుంది. నిర్దిష్ట హార్డ్వేర్ సామర్థ్యాల కోసం బేస్ లక్ష్యాలకు మద్దతు ఇవ్వడమే దీని ఆలోచన, దానిపై నిర్దిష్ట ఆప్టిమైజేషన్లతో లక్ష్యాలను సులభంగా నిర్మించవచ్చు. ARM ఆర్కిటెక్చర్కు మద్దతు సాధారణ లక్ష్యాలను ఉపయోగించడంలోకి మార్చబడింది.
- "-O1" ఆప్టిమైజేషన్ మోడ్లో ఫలిత కోడ్ పరిమాణాన్ని తగ్గించడానికి కోడ్ జనరేటర్ దాని లూప్ మరియు ఫంక్షన్ అన్రోలింగ్ను సర్దుబాటు చేసింది. అంతర్నిర్మిత ఫంక్షన్లు count_leading_zeros మరియు count_trailing_zeros కోసం మెరుగైన కోడ్ జనరేషన్, అలాగే ఫంక్షన్ల నుండి నిర్మాణాలను తిరిగి ఇచ్చేటప్పుడు మరియు int8/int16 రకాలతో డేటాను సేవ్ చేసేటప్పుడు లేదా లోడ్ చేసేటప్పుడు.
- "--enable-llvm-intrinsics" ఫ్లాగ్ను పేర్కొనడం ద్వారా ప్రారంభించబడిన LLVM అంతర్గతాలకు విస్తరించిన మద్దతు.
- LLVM టూల్చెయిన్ ప్యాచ్లతో వెర్షన్ 18.1.8కి నవీకరించబడింది. ISPC లో ఉపయోగించిన LLVM వెర్షన్ను గుర్తించడానికి మాక్రో జోడించబడింది.
- ఫంక్షన్ పిలువబడినప్పుడు హెచ్చరికను ముద్రించడానికి "__attribute__((నిలిపివేయబడింది))" లక్షణాన్ని ఫంక్షన్లకు వర్తింపజేయడానికి అనుమతించబడింది.
- బిల్డ్ టార్గెట్ avx512knl-x16 (KNL) తీసివేయబడింది.
- macOS మరియు iOS కోసం లక్ష్య ప్లాట్ఫారమ్ యొక్క కనీస మద్దతు ఉన్న వెర్షన్ను పేర్కొనడానికి "--darwin-version-min" ఎంపిక జోడించబడింది.
మూలం: opennet.ru
