ตามคู่มือสำหรับนักพัฒนาซอฟต์แวร์สถาปัตยกรรมIntel® 64 และ IA-32 เล่ม 1: สถาปัตยกรรมพื้นฐานบท "การเขียนโปรแกรมด้วย Intel Streaming SIMD Extensions (Intel SSE)":
การแคชข้อมูลชั่วคราวกับข้อมูลที่ไม่ใช่ชั่วคราว
ข้อมูลที่อ้างอิงโดยโปรแกรมอาจเป็นข้อมูลชั่วคราว (ข้อมูลจะถูกใช้อีกครั้ง) หรือไม่ใช่ชั่วคราว (ข้อมูลจะถูกอ้างอิงเพียงครั้งเดียวและจะไม่ถูกนำมาใช้ซ้ำในอนาคตอันใกล้) ตัวอย่างเช่นรหัสโปรแกรมโดยทั่วไปมักเป็นแบบชั่วคราวในขณะที่ข้อมูลมัลติมีเดียเช่นรายการที่แสดงในแอปพลิเคชันกราฟิก 3 มิติมักไม่เป็นแบบชั่วคราว เพื่อให้สามารถใช้แคชของโปรเซสเซอร์ได้อย่างมีประสิทธิภาพโดยทั่วไปควรแคชข้อมูลชั่วคราวและไม่แคชข้อมูลที่ไม่ใช่ชั่วคราว การโอเวอร์โหลดแคชของโปรเซสเซอร์ด้วยข้อมูลที่ไม่ใช่ชั่วคราวบางครั้งเรียกว่า "การทำให้แคชเป็นมลพิษ" คำแนะนำในการควบคุมความสามารถในการแคช SSE และ SSE2 ช่วยให้โปรแกรมสามารถเขียนข้อมูลที่ไม่ใช่ชั่วคราวไปยังหน่วยความจำในลักษณะที่ลดมลพิษของแคช
คำอธิบายเกี่ยวกับโหลดที่ไม่ใช่ชั่วคราวและคำแนะนำในการจัดเก็บ ที่มา: คู่มือสำหรับนักพัฒนาซอฟต์แวร์สถาปัตยกรรม Intel 64 และ IA-32 เล่ม 2: การอ้างอิงชุดคำสั่ง
โหลด (MOVNTDQA - โหลดคำใบ้คำแนะนำสองคำที่ไม่ใช่ชั่วคราว)
โหลดคำสี่คำคู่จากตัวถูกดำเนินการต้นทาง (ตัวถูกดำเนินการที่สอง) ไปยังตัวถูกดำเนินการปลายทาง (ตัวถูกดำเนินการตัวแรก) โดยใช้คำใบ้ที่ไม่ใช่ชั่วคราวหากแหล่งหน่วยความจำเป็นประเภทหน่วยความจำ WC (การเขียนรวม) [... ]
[... ] โปรเซสเซอร์ไม่อ่านข้อมูลในลำดับชั้นของแคชและไม่ดึงข้อมูลแคชที่เกี่ยวข้องจากหน่วยความจำไปยังลำดับชั้นของแคช
โปรดทราบว่าตามที่ Peter Cordes แสดงความคิดเห็นจะไม่มีประโยชน์กับหน่วยความจำ WB (การเขียนกลับ) ปกติในโปรเซสเซอร์ปัจจุบันเนื่องจากคำใบ้ NT ถูกละเว้น (อาจเป็นเพราะไม่มีตัวตั้งค่าล่วงหน้า HW ที่รับรู้ NT) และใช้ความหมายของโหลดที่สั่งซื้ออย่างเข้มงวดเต็มรูปแบบ . prefetchnta
สามารถใช้เป็นภาระลดมลพิษจากหน่วยความจำ WB
ร้านค้า (MOVNTDQ - จัดเก็บจำนวนเต็มโดยใช้คำแนะนำที่ไม่ใช่ชั่วคราว)
ย้ายจำนวนเต็มที่บรรจุในตัวถูกดำเนินการต้นทาง (ตัวถูกดำเนินการที่สอง) ไปยังตัวถูกดำเนินการปลายทาง (ตัวถูกดำเนินการตัวแรก) โดยใช้คำใบ้ที่ไม่ใช่ชั่วคราวเพื่อป้องกันการแคชข้อมูลระหว่างการเขียนไปยังหน่วยความจำ
[... ] โปรเซสเซอร์ไม่ได้เขียนข้อมูลลงในลำดับชั้นของแคชและไม่ดึงบรรทัดแคชที่เกี่ยวข้องจากหน่วยความจำไปยังลำดับชั้นของแคช
การใช้คำศัพท์ที่กำหนดไว้ใน นโยบายและประสิทธิภาพการเขียนแคชจึงถือได้ว่าเป็นการเขียนรอบ ๆ (ไม่เขียนจัดสรรไม่ดึงข้อมูลเมื่อเขียนพลาด)
สุดท้ายมันอาจจะเป็นที่น่าสนใจในการตรวจสอบบันทึกจอห์น McAlpin เกี่ยวกับร้านค้าที่ไม่ได้ชั่วขณะ
MOVNTDQA xmmi, m128
เป็นโหลด NT ในขณะที่คำแนะนำ NT อื่น ๆ ทั้งหมดเป็นร้านค้ายกเว้นprefetchnta
. คำตอบที่ยอมรับในที่นี้ดูเหมือนจะเป็นการพูดถึงร้านค้าเท่านั้น นี่คือสิ่งที่ฉันสามารถเปิดใช้งานเกี่ยวกับโหลด NTได้ TL: DR: หวังว่า CPU จะมีประโยชน์กับคำใบ้ NT เพื่อลดมลภาวะของแคชให้น้อยที่สุด แต่จะไม่แทนที่ความหมายของหน่วยความจำ WB "ปกติ" ดังนั้นพวกเขาจึงต้องใช้แคช