በኢንቴል ለሲ ቋንቋ ከኤስፒኤምዲ ቅጥያዎች ጋር የሰራው ISPC 1.26 ማጠናከሪያ መልቀቅ

ኢንቴል የአይኤስፒሲ 1.26 (የተዘዋዋሪ SPMD Program Compiler) አሳትሟል፣ ሲ ኮድ ከSPMD (ነጠላ ፕሮግራም፣ ባለብዙ ዳታ) ትይዩ የፕሮግራሚንግ ማራዘሚያዎች ጋር ለመገጣጠም የተነደፈ ሲሆን ይህም በርካታ የአንድ ፕሮግራም አጋጣሚዎችን ከተለያዩ የግብአት ውሂብ ስብስቦች ጋር በትይዩ እንዲፈፀም ያስችላል። የፕሮጀክት ኮድ በC++ ተጽፎ በ BSD ፍቃድ ተሰራጭቷል። ድጋፎች በሊኑክስ፣ ዊንዶውስ፣ ማክሮስ እና ፍሪቢኤስዲ ላይ ይሰራሉ።

የ SPMD ቅጥያ ያላቸው ሲ ፕሮግራሞች በሲፒዩ እና ጂፒዩ በተሰጡት የሲምዲ ስሌት አሃዶች ላይ እንዲፈፀሙ የተጠናቀሩ ሲሆን ይህም የሲምዲ ቬክተርራይዜሽን ስልቶችን ያለዝቅተኛ ደረጃ ማመቻቸት እና የሲምዲ መመሪያዎችን በኮዱ ውስጥ በግልፅ መጠቀም ያስችላል። ትይዩ የሆኑ ተግባራትን ለመጻፍ፣ የC ቋንቋ የታወቁ አገባብ እና ፈሊጦች ጥቅም ላይ ይውላሉ - የ SPMD ተግባራት በC/C++ ከተፃፉ ተግባራት እና አወቃቀሮች ጋር በቀጥታ ይገናኛሉ። ፕሮግራሞችን ለማረም ነባር አራሚዎች መጠቀም ይችላሉ።

ISPC የኤልኤልቪኤም መሠረተ ልማትን ለኮድ ማመንጨት እና ማመቻቸት እንደ መደገፊያ ይጠቀማል። x86 (SSE2, SSE4, AVX, AVX2, AVX512) እና ARM (NEON) የቬክተር መመሪያዎች ይደገፋሉ, እንዲሁም ስሌቶችን ወደ ጂፒዩ ጎን (ኢንቴል Gen9 እና Xe) በማውረድ ላይ ይገኛሉ. በ SSE ቬክተር ብሎኮች በአንድ ጊዜ 4 ኤለመንቶችን በማቀነባበር ላይ ባሉ አርክቴክቸርዎች ላይ ISPC አጠቃቀም የፕሮግራም አፈፃፀምን በ 3 ወይም ከዚያ በላይ ጊዜ ማሳካት ያስችላል ፣ እና በ AVX ቬክተር ብሎኮች 8 ኤለመንቶችን በአንድ ጊዜ በማቀነባበር ላይ ፣ ማጣደፍ 5-6 ይደርሳል ። XNUMX ጊዜ. ከዚህም በላይ ከቬክተር ማገጃው መጠን በተጨማሪ, ማመጣጠን በተለያዩ ፕሮሰሰር ኮሮች ላይ በመተግበርም ይረጋገጣል.

በISPC ስሪት 1.26 ውስጥ የታከሉ ቁልፍ ፈጠራዎች፡-

  • ለ ARM አርክቴክቸር የተሻሻለ ድጋፍ፡-
    • የ"--arch=arm" ባንዲራ ባህሪ ተለውጧል፣ እሱም አሁን ከ ARMv8 (32-bit) ስነ-ህንፃ ጋር የተያያዘ እንጂ ARMv7 አይደለም (ለ ARMv8 በ64-ቢት ሁነታ፣ የ"--arch=arch64" ባንዲራ አሁንም ጥቅም ላይ መዋል አለበት)።
    • የ ARMv7 Cortex-a9 እና Cortex-a15 ፕሮሰሰሮች ድጋፍ ተቋርጧል።
    • ለ Cortex-a55፣ Cortex-a78፣ Cortex-a510፣ Cortex-a520 ፕሮሰሰሮች እና እንዲሁም ለአዲሱ የአፕል ARM ፕሮሰሰሮች ድጋፍ ታክሏል።
    • የታከሉ አዲስ የግንባታ ኢላማዎች፡- ኒዮን-i16x16 እና ኒዮን-i8x32።
    • በ ARM SDOT እና በ UDOT የቬክተር መመሪያዎች ላይ ለተመሠረቱ ስራዎች ድጋፍ ታክሏል።
    • ማመቻቸት ተካሂዷል፣ የ ARMv8 አፈጻጸም በአማካይ በ13% ጨምሯል።
  • አዲስ ዓይነት የግንባታ ዒላማዎች ተጨምረዋል - "አጠቃላይ"፣ ይህም የአቀናባሪውን ውስጣዊ አርክቴክቸር ማመቻቸት እና አዳዲስ የግንባታ ኢላማዎችን መጨመርን ቀላል ማድረግ ያስችላል። ሃሳቡ ለተወሰኑ የሃርድዌር ችሎታዎች የመሠረት ኢላማዎችን መደገፍ ነው, በላዩ ላይ የተወሰኑ ማመቻቸት ያላቸው ኢላማዎች በቀላሉ ሊገነቡ ይችላሉ. የ ARM አርክቴክቸር ድጋፍ ወደ አጠቃላይ ኢላማዎች ተለውጧል።
  • የኮድ ጀነሬተር በ"-O1" ማሻሻያ ሁነታ የተገኘውን ኮድ መጠን ለመቀነስ ዑደቱን እና ተግባሩን መፍታት ተስተካክሏል። አብሮገነብ ለሆኑ ተግባራት የተሻሻለ ኮድ ማመንጨት count_leading_zeros እና count_trailing_zeros፣ እንዲሁም አወቃቀሮችን ከተግባሮች ሲመለሱ እና መረጃ ሲቆጥቡ ወይም ሲጫኑ በ int8/int16 አይነቶች።
  • ለኤልኤልቪኤም ኢንትሪንሲክስ የተዘረጋ ድጋፍ፣ የ"--enable-llvm-intrinsics" ባንዲራ በመግለጽ የነቃ።
  • LLVM የመሳሪያ ሰንሰለት ወደ ስሪት 18.1.8 ከፕላቶች ጋር ተዘምኗል። በISPC ውስጥ ጥቅም ላይ የዋለውን LLVM ስሪት ለማወቅ ማክሮ ታክሏል።
  • ተግባሩ በሚጠራበት ጊዜ ማስጠንቀቂያ ለማተም የ"__ባህሪ __((የተቋረጠ))" ባህሪን ተግባራዊ ለማድረግ ተፈቅዷል።
  • የተወገደ የግንባታ ኢላማ avx512knl-x16 (KNL)።
  • ለ macOS እና iOS የታለመውን መድረክ ዝቅተኛውን የሚደገፈውን ስሪት ለመግለጽ "--darwin-version-min" አማራጭ ታክሏል።

ምንጭ: opennet.ru

አስተያየት ያክሉ