อ่าน 4 นาที
เอสเอสอี4
SSE4 ( Streaming SIMD Extensions 4 ) เป็น ชุดคำสั่ง SIMD CPU ที่ใช้ใน สถาปัตยกรรมไมโคร Intel Core และ AMD K10 (K8L) มีการประกาศเมื่อวันที่ 27 กันยายน 2549 ในงาน Intel Developer...
เอสเอสอี4
SSE4 ( Streaming SIMD Extensions 4 ) เป็นชุดคำสั่งSIMD CPU ที่ใช้ใน สถาปัตยกรรมไมโคร Intel CoreและAMD K10 (K8L)มีการประกาศเมื่อวันที่ 27 กันยายน 2549 ในงานIntel Developer Forum ฤดูใบไม้ร่วงปี 2549 โดยมีรายละเอียดที่ไม่ชัดเจนในเอกสารไวท์เปเปอร์ [ 1 ] รายละเอียดที่แม่นยำยิ่งขึ้นเกี่ยวกับคำสั่ง 47 คำสั่งมีให้ใช้งานในงาน Intel Developer Forum ฤดูใบไม้ผลิปี 2550 ที่ปักกิ่งในการนำเสนอ[ 2 ] SSE4 ได้ขยาย ชุดคำสั่ง SSE3ซึ่งเปิดตัวเมื่อต้นปี 2547 ซอฟต์แวร์ทั้งหมดที่ใช้คำสั่ง SIMD ของ Intel รุ่นก่อนหน้า (เช่น SSE3) สามารถใช้งานร่วมกับไมโครโปรเซสเซอร์รุ่นใหม่ที่รองรับคำสั่ง SSE4 ได้ ซอฟต์แวร์ที่มีอยู่ทั้งหมดจะยังคงทำงานได้อย่างถูกต้องโดยไม่ต้องแก้ไขบนไมโครโปรเซสเซอร์ที่รวม SSE4 ไว้ด้วย รวมถึงในกรณีที่มีแอปพลิเคชันที่มีอยู่และแอปพลิเคชันใหม่ที่รวม SSE4 ไว้ด้วย[ 3 ]
เช่นเดียวกับชุดคำสั่ง SIMD ของ CPU รุ่นก่อนหน้าอื่นๆ SSE4 รองรับรีจิสเตอร์ได้สูงสุด 16 ตัว แต่ละตัวกว้าง 128 บิต ซึ่งสามารถโหลดจำนวนเต็ม 32 บิตได้สี่ตัว จำนวนจุดลอยตัวความแม่นยำเดี่ยว 32 บิตได้สี่ตัว หรือจำนวนจุดลอยตัวความแม่นยำคู่ 64 บิตได้สองตัว[ 1 ]การดำเนินการ SIMD เช่น การบวก/คูณเวกเตอร์แบบองค์ประกอบต่อองค์ประกอบ และการบวก/คูณเวกเตอร์แบบสเกลาร์ จะประมวลผลข้อมูลหลายไบต์ในคำสั่ง CPU เดียว การดำเนินการแบบขนานนี้ทำให้ประสิทธิภาพเพิ่มขึ้นอย่างเห็นได้ชัด SSE4.2 ได้แนะนำการดำเนินการสตริง SIMD ใหม่ รวมถึงคำสั่งสำหรับเปรียบเทียบส่วนย่อยของสตริงสองส่วนที่มีความยาวสูงสุด 16 ไบต์ต่อส่วน[ 1 ] SSE4.2 เป็นชุดย่อยของ SSE4 และได้รับการเผยแพร่หลังจาก SSE4 เผยแพร่ครั้งแรกไม่กี่ปี
ชุดย่อย SSE4
ชุดคำสั่ง Intel SSE4 ประกอบด้วยคำสั่ง 54 คำสั่ง ชุดย่อยที่ประกอบด้วยคำสั่ง 47 คำสั่ง ซึ่งในเอกสารของ Intel บางฉบับ เรียกว่า SSE4.1 นั้นมีให้ใช้งานในสถาปัตยกรรม Penrynนอกจากนี้SSE4.2ซึ่งเป็นชุดย่อยที่สองที่ประกอบด้วยคำสั่งที่เหลืออีกเจ็ดคำสั่ง มีให้ใช้งานครั้งแรกในCore i7ที่ใช้สถาปัตยกรรมNehalem Intel ระบุว่าข้อเสนอแนะจากนักพัฒนาซอฟต์แวร์มีบทบาทสำคัญในการพัฒนาชุดคำสั่งนี้
เริ่มจากโปรเซสเซอร์ที่ใช้สถาปัตยกรรมBarcelona นั้น AMDได้แนะนำ ชุดคำสั่ง SSE4aซึ่งประกอบด้วยคำสั่ง SSE4 สี่คำสั่งและคำสั่ง SSE ใหม่สี่คำสั่ง คำสั่งเหล่านี้ไม่มีอยู่ในโปรเซสเซอร์ของ Intel ที่รองรับ SSE4.1 และโปรเซสเซอร์ของ AMD เพิ่งเริ่มรองรับ SSE4.1 และ SSE4.2 ของ Intel (ชุดคำสั่ง SSE4 เต็มรูปแบบ) ใน โปรเซสเซอร์ FX ที่ใช้สถาปัตยกรรม Bulldozerเท่านั้น ด้วย SSE4a คุณสมบัติ misaligned SSE ก็ได้รับการแนะนำเช่นกัน ซึ่งหมายความว่าคำสั่งโหลดที่ไม่ตรงแนวจะเร็วเท่ากับเวอร์ชันที่ตรงแนวบนแอดเดรสที่ตรงแนว นอกจากนี้ยังอนุญาตให้ปิดใช้งานการตรวจสอบการตรงแนวในการดำเนินการ SSE ที่ไม่ใช่การโหลดที่เข้าถึงหน่วยความจำ[ 4 ] ต่อมา Intel ได้แนะนำการปรับปรุงความเร็วที่คล้ายกันสำหรับ unaligned SSE ในโปรเซสเซอร์ Nehalem ของพวกเขา แต่ไม่ได้แนะนำการ เข้าถึงที่ไม่ตรงแนวโดยคำสั่ง SSE ที่ไม่ใช่การโหลดจนกระทั่งAVX [ 5 ]
ความสับสนเรื่องชื่อ
สิ่งที่ปัจจุบันรู้จักกันในชื่อSSSE3 (Supplemental Streaming SIMD Extensions 3) ซึ่งเปิดตัวใน ตระกูลโปรเซสเซอร์ Intel Core 2นั้น เดิมทีสื่อบางแห่งเรียกมันว่า SSE4 จนกระทั่ง Intel คิดค้นชื่อ SSSE3 ขึ้นมา ภายในบริษัทเรียกมันว่า Merom New Instructions ซึ่งเดิมที Intel ไม่ได้วางแผนที่จะตั้งชื่อเฉพาะให้กับมัน ซึ่งถูกวิพากษ์วิจารณ์โดยนักข่าวบางคน[ 6 ]ในที่สุด Intel ก็ได้ชี้แจงความสับสนและสงวนชื่อ SSE4 ไว้สำหรับส่วนขยายชุดคำสั่งถัดไปของพวกเขา[ 7 ]
Intel ใช้คำทางการตลาดว่าHD Boostเพื่ออ้างถึง SSE4 [ 8 ]
คำแนะนำใหม่
แตกต่างจาก SSE รุ่นก่อนๆ ทั้งหมด SSE4 มีคำสั่งที่ดำเนินการต่างๆ ที่ไม่ได้จำเพาะเจาะจงกับแอปพลิเคชันมัลติมีเดีย โดยมีคำสั่งจำนวนหนึ่งที่การทำงานถูกกำหนดโดยฟิลด์ค่าคงที่ และชุดคำสั่งที่ใช้ XMM0 เป็นตัวถูกดำเนินการที่สามโดยปริยาย
คำสั่งเหล่านี้หลายคำสั่งสามารถทำงานได้ด้วยกลไกการสลับข้อมูลแบบรอบเดียวใน Penryn (การดำเนินการสลับข้อมูลจะจัดเรียงไบต์ใหม่ภายในรีจิสเตอร์)
เอสเอสอี4.1
คำสั่งเหล่านี้ถูกนำมาใช้กับสถาปัตยกรรมไมโคร Penryn ซึ่งเป็นการลด ขนาดสถาปัตยกรรมไมโคร Coreของ Intel ลงเหลือ 45 นาโนเมตรการสนับสนุนจะแสดงผ่านแฟล็ก CPUID.01H:ECX.SSE41[Bit 19]
| คำแนะนำ | คำอธิบาย |
|---|---|
MPSADBW | คำนวณผลรวมออฟเซ็ตของความแตกต่างสัมบูรณ์แปดค่า โดย คำนวณทีละสี่ค่า (เช่น |x 0 −y 0 |+| x 1 −y 1 | +|x 2 −y 2 |+|x 3 −y 3 |, |x 0 −y 1 | + |x 1 −y 2 |+|x 2 −y 3 |+|x 3 −y 4 |, ..., |x 0 −y 7 |+|x 1 −y 8 |+|x 2 −y 9 |+|x 3 −y 10 |); การดำเนินการนี้มีความสำคัญสำหรับตัวแปลงสัญญาณHD บางตัว และช่วยให้สามารถคำนวณความแตกต่างของบล็อกขนาด 8x8 ได้ในน้อยกว่าเจ็ดรอบการทำงาน[ 9 ]บิตหนึ่งของตัวถูกดำเนินการทันทีสามบิตจะระบุว่าควรใช้ y 0 .. y 10หรือ y 4 .. y 14จากตัวถูกดำเนินการปลายทาง ส่วนอีกสองบิตจะระบุว่าควรใช้ x 0 ..x 3 , x 4 ..x 7 , x 8 ..x 11หรือ x 12 ..x 15จากแหล่งที่มา |
PHMINPOSUW | กำหนดค่าเวิร์ด 16 บิตที่ไม่มีเครื่องหมายตัวล่างสุดของปลายทางให้เท่ากับค่าเวิร์ด 16 บิตที่ไม่มีเครื่องหมายที่เล็กที่สุดในแหล่งที่มา และกำหนดค่าเวิร์ดถัดไปจากล่างสุดให้เท่ากับดัชนีของเวิร์ดนั้นในแหล่งที่มา |
PMULDQ | การคูณแบบแพ็ค 32 บิตแบบมีเครื่องหมาย "long" คือการคูณจำนวนเต็มแบบแพ็คสองจำนวน (ลำดับที่ 1 และ 3) จากสี่จำนวน ซึ่งจะได้ผลลัพธ์แบบแพ็ค 64 บิตสองชุด |
PMULLD | การคูณแบบแพ็ค 32 บิตแบบมีเครื่องหมาย "ต่ำ" คือการคูณชุดจำนวนเต็มแบบแพ็คสี่ชุด ซึ่งจะได้ผลลัพธ์แบบแพ็ค 32 บิตสี่ชุด |
DPPS,DPPD | ผลคูณดอทสำหรับข้อมูล AOS (Array of Structs) ฟังก์ชันนี้รับตัวถูกดำเนินการแบบทันทีซึ่งประกอบด้วยบิตสี่บิต (หรือสองบิตสำหรับ DPPD) เพื่อเลือกรายการในข้อมูลนำเข้าที่จะคูณและสะสม และอีกสี่บิต (หรือสองบิตสำหรับ DPPD) เพื่อเลือกว่าจะใส่ค่า 0 หรือผลคูณดอทลงในฟิลด์ที่เหมาะสมของผลลัพธ์ |
BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB,PBLENDW | การคัดลอกองค์ประกอบแบบมีเงื่อนไขในตำแหน่งหนึ่งไปยังอีกตำแหน่งหนึ่ง โดยอิงตามบิตในตัวถูกดำเนินการแบบทันที (สำหรับรูปแบบที่ไม่ใช่ V) และอิงตามบิตในรีจิสเตอร์ XMM0 (สำหรับรูปแบบ V) |
PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINSD,PMAXSD | ค่าต่ำสุด/สูงสุดที่บรรจุไว้สำหรับประเภทตัวดำเนินการจำนวนเต็มที่แตกต่างกัน |
ROUNDPS, ROUNDSS, ROUNDPD,ROUNDSD | ปัดเศษค่าในรีจิสเตอร์จุดลอยตัวให้เป็นจำนวนเต็ม โดยใช้โหมดการปัดเศษ 4 โหมดใดโหมดหนึ่งที่ระบุโดยตัวถูกดำเนินการแบบคงที่ |
INSERTPS, PINSRB, PINSRD/ PINSRQ, EXTRACTPS, PEXTRB,PEXTRD/PEXTRQ | คำสั่ง INSERTPS และ PINSR อ่านค่า 8, 16 หรือ 32 บิตจากรีจิสเตอร์หรือตำแหน่งหน่วยความจำ x86 และแทรกค่าดังกล่าวลงในฟิลด์ในรีจิสเตอร์ปลายทางที่กำหนดโดยตัวถูกดำเนินการแบบคงที่ ส่วนคำสั่ง EXTRACTPS และ PEXTR อ่านค่าจากฟิลด์ในรีจิสเตอร์ต้นทางและแทรกค่าดังกล่าวลงในรีจิสเตอร์หรือตำแหน่งหน่วยความจำ x86 ตัวอย่างเช่น PEXTRD eax, [xmm0], 1; EXTRACTPS [addr+4*eax], xmm1, 1 จะเก็บค่าฟิลด์แรกของ xmm1 ลงในแอดเดรสที่กำหนดโดยฟิลด์แรกของ xmm0 |
PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ,PMOVZXDQ | ป้ายแพ็ค/ส่วนขยายศูนย์สำหรับประเภทที่กว้างขึ้น |
PTEST | คำสั่ง นี้คล้ายคลึงกับTESTคำสั่งก่อนหน้าตรงที่มันตั้งค่าแฟล็ก Zให้เป็นผลลัพธ์ของการดำเนินการ AND ระหว่างตัวถูกดำเนินการ: ZF จะถูกตั้งค่าหาก DEST AND SRC เท่ากับ 0 นอกจากนี้ยังตั้งค่าแฟล็ก C หาก (NOT DEST) AND SRC เท่ากับศูนย์ นี่เทียบเท่ากับการตั้งค่าแฟล็ก Z หากไม่มีบิตใด ๆ ที่ถูกมาสก์โดย SRC ถูกตั้งค่า และจะตั้งค่าแฟล็ก C หากบิตทั้งหมดที่ถูกมาสก์โดย SRC ถูกตั้งค่า |
PCMPEQQ | เปรียบเทียบความเท่าเทียมกันของควอดเวิร์ด (64 บิต) |
PACKUSDW | แปลงค่า DWORD ที่มีเครื่องหมายเป็นค่า WORD ที่ไม่มีเครื่องหมาย พร้อมค่าความอิ่มตัว |
MOVNTDQA | การอ่านข้อมูลจากพื้นที่หน่วยความจำแบบรวมการเขียนไปยังรีจิสเตอร์ SSE อย่างมีประสิทธิภาพ มีประโยชน์สำหรับการดึงผลลัพธ์จากอุปกรณ์ต่อพ่วงที่เชื่อมต่อกับบัสหน่วยความจำ |
เอสเอสอี4.2
SSE4.2 เพิ่ม STTNI (String and Text New Instructions) [ 10 ]ซึ่งเป็นคำสั่งใหม่หลายคำสั่งที่ทำการค้นหาและเปรียบเทียบอักขระบนตัวถูกดำเนินการสองตัวขนาด 16 ไบต์ในแต่ละครั้ง คำสั่งเหล่านี้ได้รับการออกแบบ (รวมถึงสิ่งอื่นๆ) เพื่อเร่งความเร็วในการแยกวิเคราะห์เอกสารXML [ 11 ] นอกจากนี้ยังเพิ่มCRC32คำสั่งในการคำนวณการตรวจสอบความซ้ำซ้อนแบบวนรอบตามที่ใช้ในโปรโตคอลการถ่ายโอนข้อมูลบางอย่าง คำสั่งเหล่านี้ถูกนำไปใช้ครั้งแรกใน ผลิตภัณฑ์ Intel Core i7ที่ใช้สถาปัตยกรรมNehalemและทำให้ชุดคำสั่ง SSE4 สมบูรณ์ ในทางกลับกัน AMD ได้เพิ่มการสนับสนุนเป็นครั้งแรกโดยเริ่มจากสถาปัตยกรรมไมโคร Bulldozer Windows 7ของ Microsoft เป็นระบบปฏิบัติการแรกที่ใช้ SSE4.2 เนื่องจากมีการระบุการสนับสนุนผ่านแฟล็ก CPUID.01H:ECX.SSE42[Bit 20]
Windows 11 24H2ต้องการให้ CPU รองรับ SSE4.2 มิฉะนั้นเคอร์เนลของ Windows จะไม่สามารถบูตได้[ 12 ]
| คำแนะนำ | คำอธิบาย |
|---|---|
CRC32 | สะสม ค่า CRC-32Cโดยใช้พหุนาม 0x11EDC6F41 (หรือ 0x1EDC6F41 หากไม่มีบิตลำดับสูง) [ 13 ] [ 14 ] |
PCMPESTRI | เปรียบเทียบสตริงที่มีความยาวที่ระบุอย่างชัดเจนและส่งคืนดัชนี |
PCMPESTRM | เปรียบเทียบสตริงที่มีความยาวที่ระบุอย่างชัดเจนและส่งคืนมาสก์ |
PCMPISTRI | เปรียบเทียบสตริงที่มีความยาวโดยปริยายแบบแพ็ค และส่งคืนดัชนี |
PCMPISTRM | เปรียบเทียบสตริงความยาวโดยปริยายที่บรรจุแล้ว ส่งคืนค่ามาสก์ |
PCMPGTQ | เปรียบเทียบข้อมูล 64 บิตที่ลงนามและบรรจุแล้ว สำหรับมากกว่า |
POPCNTและLZCNT
คำสั่งเหล่านี้ทำงานกับรีจิสเตอร์จำนวนเต็มแทนที่จะเป็นรีจิสเตอร์ SSE เนื่องจากไม่ใช่คำสั่ง SIMD แต่ปรากฏพร้อมกัน และถึงแม้ว่า AMD จะเป็นผู้แนะนำคำสั่งเหล่านี้พร้อมกับชุดคำสั่ง SSE4a แต่ก็ถือว่าเป็นส่วนขยายแยกต่างหากที่มีบิต CPUID เฉพาะของตนเองเพื่อระบุการรองรับ Intel POPCNTเริ่มใช้งานตั้งแต่ สถาปัตยกรรมไมโคร NehalemและLZCNTเริ่มใช้งานตั้งแต่ สถาปัตยกรรมไมโคร Haswellส่วน AMD ใช้งานทั้งสองแบบ เริ่มตั้งแต่สถาปัตยกรรม ไมโคร Barcelona
AMD เรียกชุดคำสั่งนี้ว่าการจัดการบิตขั้นสูง (Advanced Bit Manipulation หรือ ABM )
การเข้ารหัสLZCNTใช้เส้นทางการเข้ารหัสเดียวกับการเข้ารหัสของBSRคำสั่ง (bit scan reverse) ซึ่งส่งผลให้เกิดปัญหาเมื่อLZCNTเรียกใช้บนซีพียูบางรุ่นที่ไม่รองรับ เช่น ซีพียู Intel รุ่นก่อน Haswell อาจทำให้BSRการทำงานผิดพลาดแทนที่จะเกิด ข้อผิด พลาดคำสั่งไม่ถูกต้องนี่เป็นปัญหาเนื่องจากค่าผลลัพธ์ของLZCNTและBSRแตกต่างกัน
สามารถนับเลขศูนย์ต่อท้ายได้โดยใช้คำสั่งBSF(bit scan forward) หรือTZCNTคำสั่งอื่นๆ
Windows 11 24H2ต้องการให้ CPU รองรับPOPCNTมิฉะนั้นเคอร์เนลของ Windows จะไม่สามารถบูตได้[ 15 ]
| คำแนะนำ | คำอธิบาย |
|---|---|
POPCNT | จำนวนประชากร (นับจำนวนบิตที่ตั้งค่าเป็น 1) การสนับสนุนจะระบุผ่านแฟล็ก CPUID.01H:ECX.POPCNT[Bit 23] [ 16 ] |
LZCNT | จำนวนศูนย์นำหน้าการสนับสนุนจะระบุผ่านแฟล็ก CPUID.80000001H:ECX.ABM[Bit 5] [ 17 ] |
เอสเอสอี4เอ
กลุ่มคำสั่ง SSE4a ได้รับการแนะนำในสถาปัตยกรรมไมโคร Barcelona ของ AMD คำสั่งเหล่านี้ไม่มีในโปรเซสเซอร์ Intel การสนับสนุนจะระบุไว้ผ่านแฟล็ก CPUID.80000001H:ECX.SSE4A[Bit 6] [ 17 ]
| คำแนะนำ | คำอธิบาย |
|---|---|
EXTRQ/INSERTQ | คำแนะนำการเปลี่ยนหน้ากากแบบรวม[ 18 ] |
MOVNTSD/MOVNTSS | คำแนะนำการจัดเก็บสตรีมมิ่งแบบสเกลาร์[ 19 ] |
ดูเพิ่มเติม
ลิงก์ภายนอก
- เอกสารอ้างอิงการเขียนโปรแกรม SSE4โดย Intel
- เครื่องคำนวณ PCMPSTR สำหรับคำสั่งสตริง SSE 4.2ที่เก็บถาวรไว้ที่Ghostarchive.orgเมื่อวันที่ 10 พฤษภาคม 2022
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เอสเอสอี4
SSE4 ( Streaming SIMD Extensions 4 ) เป็น ชุดคำสั่ง SIMD CPU ที่ใช้ใน สถาปัตยกรรมไมโคร Intel Core และ AMD K10 (K8L) มีการประกาศเมื่อวันที่ 27 กันยายน 2549 ในงาน Intel Developer...
ชุดย่อย SSE4
ชุดคำสั่ง Intel SSE4 ประกอบด้วยคำสั่ง 54 คำสั่ง ชุดย่อยที่ประกอบด้วยคำสั่ง 47 คำสั่ง ซึ่งในเอกสารของ Intel บางฉบับ เรียกว่า SSE4.1 นั้นมีให้ใช้งานในสถาปัตยกรรม Penryn นอกจากนี้ SSE4.
ความสับสนเรื่องชื่อ
สิ่งที่ปัจจุบันรู้จักกันในชื่อ SSSE3 (Supplemental Streaming SIMD Extensions 3) ซึ่งเปิดตัวใน ตระกูลโปรเซสเซอร์ Intel Core 2 นั้น เดิมทีสื่อบางแห่งเรียกมันว่า SSE4 จนกระทั่ง Intel คิดค้นชื่อ SSSE3 ขึ้นมา ภายในบริษัทเรียกมันว่า Merom New Instructions...
คำแนะนำใหม่
แตกต่างจาก SSE รุ่นก่อนๆ ทั้งหมด SSE4 มีคำสั่งที่ดำเนินการต่างๆ ที่ไม่ได้จำเพาะเจาะจงกับแอปพลิเคชันมัลติมีเดีย โดยมีคำสั่งจำนวนหนึ่งที่การทำงานถูกกำหนดโดยฟิลด์ค่าคงที่ และชุดคำสั่งที่ใช้ XMM0 เป็นตัวถูกดำเนินการที่สามโดยปริยาย