ใน vc.net จะทำได้เลย
แต่ vc6 ต้องไปหา update มาลง เว้นแต่เขียน assembly
Include file
SSE xmmintrin.h
SSE2 emmintrin.h
แต่ emmintrin.h จะ include xmmintrin.h อีกที
เพราะฉะนั้น แค่ emmintrin.h ไฟล์เดียวก็พอ
การประมวลผล เป็นการมองข้อมูลว่าเป็นจำนวนเชิง vector
สมมุติว่า การคำนวน float n รอบ เมื่อ ใช้ sse สามารถคำนวน ได้ 4 ตัวใน 1 รอบ เพราะฉะนั้น รอบการทำงานจะเหลือ เพียง n/4 รอบ เพราะเป็นทำงาน 128 bit
Data type
INTEGER FLOAT[4] DOUBLE[2]
__m128i __m128 ___m128d
ตัวอย่างนะครับ
ในการใช้ฟังก์ชัน จะขึ้นต้นด้วย _mmCode:float a[4]={1,2,3,4}; __m128 *b=(__m128 *)a; double a[2]={1,2} __m128d *b=(__m128d *)a; *b={1,3};
และจะมีคำลงท้ายต่อไปนี้
-pi# MMX (64-bit) vector containing packed #-bit integers
-pu# MMX (64-bit) vector containing packed #-bit unsigned integers
-epi# XMM (128-bit) vector containing packed #-bit integers
-epu# XMM (128-bit) vector containing packed #-bit unsigned integers
-ps XMM (128-bit) vector containing packed single precision floating point values
-ss XMM (128-bit) vector containing one single precision floating point value
-pd XMM (128-bit) vector containing packed double precision floating point values
-sd XMM (128-bit) vector containing one double precision floating point value
-si64 MMX (64-bit) vector containing a single 64-bit int
-si128 XMM (128-bit) vector
จากที่ผมทดสอบมา พบว่า sd จะทำงานเร็วกว่า pd เล็กน้อย
การเขียนโปรแกรม จะต้องดูโหมดการคอมไพล์ แนะนำว่า ให้ใช้ Release mode เพราะจะได้ความเร็วที่สูงกว่า
สำหรับรายชื่อฟังก์ชันนั้น สามารถเปิดดูได้จาก ไฟล์ include ได้เลย
ตัวอย่างการนำข้อมูลมาใส่ใน array
[code]float a[4]={1,2,3,4};
__m128 *b=a;
//do any thing
union c{


Reply With Quote
