Itanium là bộ xử lý 64 bit đầu tiên của Intel được xuất xưởng đúng 10 năm trước để cạnh tranh với nền tảng RISC đang thống trị thị trường máy chủ doanh nghiệp thời kỳ đó. Hợp tác cùng HP đưa ra thị trường dòng CPU dùng cho máy chủ trung và lớn. Với tham vọng lật đổ nền tảng RISC đồng thời nắm gọn thị trường vi xử lý, itanium được coi như một huyền thoại của intel. 10 năm phát triển từ itanium tới itanium-2 với nhiều cải tiến vượt bậc, và cũng vô vàn khó khăn.
34 trang |
Chia sẻ: vietpd | Lượt xem: 1509 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Vi xử lý intel itanium 9000, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÁO CÁO BÀI TẬP LỚN
KỸ THUẬT VI XỬ LÝ
ĐỀ TÀI
VI XỬ LÝ INTEL ITANIUM 9000
NHÓM THỨ : 12
LỚP: D09CN1
HỌC KỲ: HỌC KỲ 1 NĂM HỌC 2011-2012
Thành viên:
Nguyễn Sơn Tùng – CEO
Nguyễn Mạnh Tuấn – Giám đốc kỹ thuật
Nguyễn Mạnh Tưởng – Giám đốc công nghệ
Lê Văn Việt – Giám đốc tập lệnh
Vongsakda
Mục lục
Giới thiệu ...................................................................................................................2
Giới thiệu chung
Các thông số chính
Lịch sử
Kiến trúc ...................................................................................................................7
Sơ đồ chung
Các thành phần và thông số chính
Kiến trúc tập lệnh
Đặc tính – Công nghệ ...........................................................................................17
Công nghệ thuật toán song song
Công nghệ siêu phân luồng
Chức năng đa phương tiện
Thanh ghi cải tiến tập tin
Floating-Point ứng dụng kỹ thuật chuyên sâu
Modulo theo dự kiến vòng lặp Pipelines
Những cải tiến về nhánh
Độ trễ bộ nhớ giảm
Tổng kết – Đánh giá hiệu năng ...............................................................................28
Nguồn – Trích dẫn ........................................................................................................30
Giới thiệu
Giới thiệu chung
Itanium là bộ xử lý 64 bit đầu tiên của Intel được xuất xưởng đúng 10 năm trước để cạnh tranh với nền tảng RISC đang thống trị thị trường máy chủ doanh nghiệp thời kỳ đó. Hợp tác cùng HP đưa ra thị trường dòng CPU dùng cho máy chủ trung và lớn. Với tham vọng lật đổ nền tảng RISC đồng thời nắm gọn thị trường vi xử lý, itanium được coi như một huyền thoại của intel. 10 năm phát triển từ itanium tới itanium-2 với nhiều cải tiến vượt bậc, và cũng vô vàn khó khăn.
Itanium 2 là bộ xử lý thứ 2 thuộc dòng Itanium, các máy chủ và máy trạm chạy Itanium 2 có tốc độ nhanh gấp 2 lần những hệ thống chạy Itanium hiện hành. Bộ xử lý Itanium 2 hỗ trợ giao dịch khối lượng lớn, tính toán phức tạp. Điểm đáng lưu ý là các chip Itanium 2 đều xử lý ứng dụng 64 bit.
Itanium 2 9000 series là dòng vi xử lý được Intel Itanium phát triển dưới codename Monecito, đưa ra vào ngày 18 tháng 7 năm 2006. Vi xử lý Monecito, dựa trên công nghệ 90nm, có
xung nhịp 1,6 GHz tốc độ FSB 667 MHz với bộ nhớ đệm 3 MB. EPIC cải thiện thông lượng lệnh song song. Với công nghệ EPIC, bộ xử lý bớt đi được gánh nặng phải nhận dạng các cơ hội xử lý song song giúp Itanium 2 đạt mức băng thông xử lý dữ liệu 6G/s.
Các thông số chính
Codename: Monecito
Process: 90nm
Clock: 1.4 – 1.6 GHz
L2 Cache: 256 kB + 1 MB
L3 Cache: 6-25 MB
Bus: 400/533 MHz
Cores: 2
Watts/device: 104
Support: Virtualization, Multithread, no HW IA-32
Lịch sử
Vào cuối những năm 90, HP nhận định rằng máy tính sử dụng RIC đã đạt đến giới hạn xử lý 1 lệnh/1 chu kỳ và đã phát triển một mới kiến trúc được gọi là toán lệnh song song (EPIC), cho phép các vi xử lý thực thi nhiều hơn một lệnh trong một chu kỳ đồng hồ.
HP và Intel đã trở thành đối tác vào năm 1994 và phát triển kiến trúc IA-64. Intel nỗ lực phát triển IA-64 với hi vọng các bộ vi xử lý của hãng sẽ được sử dụng bởi phần lớn các hãng sản xuất máy tính lớn. HP và Intel đã khởi xướng một cuộc thay đổi lớn, trước tiên là việc cung cấp sản phẩm đầu tiên có tên mã là Merced, vào năm 1998. Intel công bố tên chính thức của bộ vi xử lý Itanium vào 04 tháng 10 năm 1998.
Bộ vi xử lý Itanium thời kỳ đầu: 2001-2002
Itanium đã được phát hành vào tháng Sáu năm 2001, nó đã không hiệu quả hơn RISC và CISC. Chỉ có một vài nghìn sản phẩm được bán, do sản lượng kém, hiệu suất tương đối thấp, và chi phí cao. Tuy nhiên, các máy này rất hữu ích cho việc phát triển Itanium 2 - bộ vi xử lý sau đó. IBM đã cho ra đời một siêu máy tính dựa trên xử lý này.
Itanium 2: 2002-hiện tại
Itanium 2 được phát hành vào năm 2002, và chủ yếu hướng tới thị trường máy chủ. Itanium 2 ban đầu có tên mã là McKinley. McKinley sử dụng công nghệ 180 nm, nhưng nó ít xảy ra vấn đề về hiệu suất hơn Itanium đời đầu.
Năm 2003, AMD đã phát hành Opteron, sử dụng kiến trúc x86-64. Opteron được chấp nhận nhanh chóng trong thị trường máy chủ doanh nghiệp bởi vì nó cung cấp một bản nâng cấp dễ dàng từ x86. Intel phản ứng bằng cách sử dụng x86-64 trong bộ vi xử lý Xeon được phát hành năm 2004. Intel phát hành một thành viên mới trong họ Itanium 2, được đặt tên Madison, vào năm 2003. Madison sử dụng công nghệ 130 nm và là cơ sở của tất cả các vi xử lý Itaniums sau này, cho đến khi Montecito được phát hành trong tháng sáu năm 2006.
Các dòng vi xử lý Itanium đã cho thấy những tiến bộ vượt bậc về hiệu năng. Merced đã là một bằng chứng về mặt khái niệm. McKinley đã cải thiện rất nhiều về phân cấp bộ nhớ và giúp Itanium trở nên khá cạnh tranh trên thị trường. Madison, với sự chuyển đổi sang công nghệ 130nm, được cung cấp đủ không gian cache để vượt qua các điểm tắc nghẽn cơ bản trong quá trình thực thi chính. Monecito, với công nghệ 90nm, cho phép sự thực thi của công nghệ lõi kép và cải tiến chủ yếu trong công năng mỗi watt.Monvale thêm 3 tính năng: core-level lockstep, demand-based switching và front-side bus frequency of up to 667MHz.
Kiến trúc
Sơ đồ chung
• Dual-Core:
Theo Intel, với kiến trúc dual-core, Monecito có hiệu năng gấp đôi phiên bản trước nó, vi xử lý Itanium 2 một lõi, và giảm thiểu tiêu thụ điện năng tới 20%. Ngoài ra, nó còn có khả năng xử lý đa luồng ( 2 luồng mỗi lõi), hệ thống cache mở rộng (12 MB một lõi) và hỗ trợ silicon cho ảo hoá. Bộ vi xử lý Intel Itanium hai lõi 64-bit trên một bộ xử lý có đến 24 MB bộ nhớ cache L3 có độ trễ thấp, cung cấp băng thông rộng cho cả hai lõi. Bộ nhớ cache cao, cùng với Hyper-Threading (HT), tính năng cung cấp tăng gấp hai lần hiệu suất của bộ xử lý lõi kép so với các dòng trước đó.
Dual Core là gì và tại sao sử dụng Dual Core với Monecito ?
Dual-core ( Lõi kép) là một kiến trúc mà một CPU với 2 nhân xử lý hoàn chỉnh trong một vi xử lý. Hai nhân này, cache của chúng và các bộ điều khiển cache đều được tích hợp vào cùng một IC. Chúng đều có thể được coi là 2 vi xử lý mà làm việc cùng nhau nhằm giúp mỗi bên trong quá trình xử lý và thi hành.
Có nhiều điểm phân biệt giữa Dual-core và Dual-core CPU. Dual-core là khái niệm dùng để chỉ 2 nhân riêng biệt mà được đặt cùng nhau trong một chip. Còn Dual-processor là khái niệm để chỉ việc sử dụng 2 vi xử lý, không nhất thiết trên cùng một chip, thậm chí có thể không cùng trên 1 mainboard.
Có nhiều lý do giải thích việc dual-core đang phổ biến hiện nay, thực tế là khá thành công. Một số người nói nó là sự san bằng đường cong của clock speed mà đã buộc AMD và Intel phải chịu thua trước công nghệ này. Rào chắn clock speed đã bị đánh bại bởi hai người khổng lồ trong lĩnh vực microprocessor và họ đã chọn một lộ trình thay thế cho hiệu năng tiên tiến hơn, để “ thật hài long với việc ra những sản phẩm mới.”
Vấn đề với việc đẩy clock speed lên rất cao là nhiệt năng toả ra. Xung nhịp đồng hồ cao dẫn đến nhiệt năng toả ra lớn, điều này gây ra vô số ảnh hưởng xấu. Nguồn nhiệt năng này phát ra do sự tiêu hao của nguồn điện. Vận hành một vi xử lý tại một xung nhịp cao yêu cầu một lượng khổng lồ điện năng chạy quanh các vi mạch, làm chúng dễ bị ảnh hưởng gây nhiễu. Từ lúc những mạch kẻ trên vi xử lý được đặt trong khoảng cách cực nhỏ, sự rò rỉ điện từ mạch kẻ này sang mạch khác có thể huỷ hoại toàn bộ dữ liệu trên mạch kẻ đó. Những dữ liệu bị huỷ hoại này là nguyên nhân gây ra các lỗi.
Một vi xử lý lõi kép là sự kết hợp của vi xử lý 1 lõi và hệ thống 2 nhân. “Một vi xử lý lõi kép sẽ không nhanh gấp đôi vi xử lý 1 nhân hay ngang hệ thống 2 nhân.” Hiệu năng của lõi kép sẽ nằm giữa 2 hệ thống đó, nhưng nó chắc chắn tốt hơn là vi xử lý 1 nhân. Khi có tới 2 hệ thống ống lệnh thì 2 lệnh hoàn toàn được xử lý song song. Ngoài ra, 2 cache của 2 vi xử lý cho phép xử lsy nhiều dữ liệu hơn trên mạch nhằm đẩy tốc độ truy cập. Vấn đề duy nhất là 2 vi xử lý phải chia sẻ cùng một hệ thống bus và bộ nhớ, đây cũng chính là 1 trong nhiều trở ngại của vi xử lý lõi kép.
Kết luận, công nghệ lõi kép cung cấp hiệu năng lớn hơn nhiều so với vi xử lý 1 nhân. Nó mang lại nhiều lợi ích, đặc biệt với những người mong muốn vận hành nhiều công việc 1 lúc. Vi xử lý lõi kép mang lại cho các nhà sản xuất một cách không quá đắt để đưa ra những sản phẩm có năng suất cao.
Sơ đồ khối
Các thành phần và thông số chính
So sánh giữa Monecito và Madison
Madison
Monecito
Công Nghệ
130nm
90nm
Số lượng nhân
1
2
Tần số đồng hồ
1600MHz
1600MHz
Số đơn vị INT
6
6
Số đơn vị MM
6
6
Số đơn vị FP
2(*,+)
2(*,+)
Số đơn vị ADDR
2L+2S or 4L
2L+2S or 4L
Cache L1
16/16KB
16/16KB
Cache L2
256KB
1MB/256KB
Cache L3
9MB
24MB ngay trên mạch kẻ
Hệ thống BUS
-Tần số
-Độ rộng
6.4GB/s
- 400MHz
- 128 bit
8.5GB/s
- 533MHz
- 128 bit
Là vi xử lý đầu tiên chứa tới 1.72 tỷ transistor
• Phần cứng rộng, song song cho năng suất cao:Itanium chứa 128 thanh ghi tổng quát và 128 thanh ghi số thực dấu phẩy động luân phiên hỗ trợ. Ngoài ra, một công cụ ngăn xếp được sử dụng để cải tiến quản lý việc xử lý tài nguyên. Một tính năng được giới thiệu trong Itanium 2 là sự hỗ trợ của việc suy đoán giúp cải thiện hiệu suất xử lý.
• Bus hệ thống băng thông cao:Bộ xử lý sử dụng băng thông 8,53 GB/s. Nó có một bus dữ liệu 128-bit (64 bit dành riêng cho mỗi lõi). Nó cũng cung cấp 50-bit địa chỉ vật lý và 64-bit địa chỉ ảo.
• Tính năng hỗ trợ các môi trường nền tảng linh hoạt:Một lớp thực hiện IA-32 là có sẵn trong Itanium 2 để hỗ trợ cho các ứng dụng trên IA-32.
• Thông số kỹ thuật sơ đồ chân:Intel Itanium 2 có 611 chân được sử dụng cho đầu vào, đầu ra, hoặc cả hai đầu vào ra.
Cấu trúc bộ nhớBộ nhớ cache của Itanium 2 có 3 cấp độ. Bộ nhớ cache L1 có dung lượng 16KB dành cho tập lệnh và dữ liệu. Bộ nhớ cache L2 có dung lượng 256KB dành cho cả tập lệnh và dữ liệu. L3 khoảng từ 1,5 MB đến 24MB. Bus Itanium 2, có khả năng mở rộng cổng, có khả năng thay đổi 2x128 bit trên mỗi nhịp đồng hồ lên 533 MHz (chuyển tải 17,056 GB / s).
L1l
L1D
L2
L3
Size
16K
16K
256K
1.5/3/6M/9M on die
Line size
64B
64B
128B
128B
Ways
4
4
8
12
Replacement
LRU
NRU
NRU
NRU
Latency (Load to use)
I-Fetch:1
INT:1
INT:5
INT: 6
12/13
Write Policy
-
WT (RA)
WB(WA +RA)
WB (WA)
Bandwith
R: 32GBs
R: 16GBs
W:16GBs
R:32GBs
W:32GBs
R:32GBs
W:32GBs
Kiến trúc tập lệnh
Itanium là dòng chip tiên phong của intel trong nền tảng IA-64 Kiến trúc IA-64 giới thiệu một sự khởi đầu mới quan trọng của kỹ thuật siêu vô hướng - kỹ thuật xử lý lệnh song song . Itanium 9000 được tích hợp các tập các tập lệnh MMX, SSE, SSE2 tăng cường khả năng xử lý về số học hình ảnh đa phương tiện.
Tập lệnh MMX:
Mục đích chính của MMX là nâng cao hiệu quả xử lý các lệnh lặp về âm thanh, hình ảnh và đồ họa. Máy đạt được điều này phần nào do một dòng lệnh đơn có thể xử lý đồng thời một số mục dữ liệu. Công nghệ MMX bao gồm 8 thanh ghi từ MM0 đến MM7, tích hợp 4 kiểu dữ liệu kiểu bye kiểu word, kiểu doubleword và quadword, và các tập lệnh MMX.
Các tập lệnh MMX bao gồm các nhóm lệnh cơ bản
Lệnh truyền dữ liệu
Lệnh số học
Lệnh so sánh
Lệnh chuyển đổi
Lệnh logic
Bão hòa số học và chế độ bao quanh
MMX hỗ trợ khả năng tinh toán số học mới được gọi là chế độ bão hòa số học. Có nghĩa là kết quả của phép tính được đặt trong một phạm vi giới hạn giữa giá trị tối đa và giá trị tối thiểu. Ví dụ với một phép tính khi kết quả trả về vượt quá giá trị kiểu bye khai báo ban đầu nó sẽ được mặc định về 127 với giá trị lớn hơn 127 hoặc -128 với kết quả nhỏ hơn 128. Xét về tính toán nó có vẻ không được phù hợp cho lắm tuy vậy nó lại có ứng dựng quan trọng xử lí lân cận ví dụ xử lí ảnh tính toán báo hòa làm một vật giữ nguyên màu sắc trắng hoặc đen mà không cho phép đảo ngược.
Nhóm lệnh truyền dữ liệu với khả năng truyền các khối lệnh 32bit 64bit
Nhóm lệnh số học với các phép tính cộng trừ nhân chia
Nhóm lệnh so sánh so sánh bằng so sánh lớn hơn
Nhóm lệnh chuyển đổi với khả năng chuyển đổi các kiểu dữ liệu bye, word, doubleword....
Nhóm lệnh logic AND OR NOT.
Tập lệnh SSE :
Trong máy tính, Stream SIMD Extensions (SSE) là một tập lệnh SIMD mở rộng cho kiến trúc x86, được thiết kế bởi Intel và giới thiệu nắm 1999 trong dòng vi xử lý Pentium III như một câu trả lời cho 3DNow! của AMD (đã ra mắt một năm trước đó). SSE chứa 70 tập lệnh mới, phần lớn trong số đó làm việc trên độ chính xác đơn dữ liệu dấu chấm động. Tập lệnh SIMD có thể tăng đáng kể hiệu suất khi các thao tác tương tự được thực hiện trên nhiều đối tượng dữ liệu. Ứng dụng điển hình là xử lý tín hiệu số và xử lý đồ hoạ.
Nỗ lực đầu tiên của IA-32 SIMD của Intel là tập lệnh MMX. MMX gặp 2 vấn đề chính là tát sử dụng các thanh ghi dấu chấm động hiện có khiến CPU không thể hoạt động trên cả dấu chấm động và dữ liệu SIMD cùng lúc, và MMX cũng chỉ làm việc với số nguyên. Dấu chấm động của tập lệnh SSE hoạt động trên một thanh ghi mới độc lập (thanh ghi XMM), và thêm vào một vài tập lệnh với số nguyên làm việc với các thanh ghi MMX.
SSE sau đó được Intel mở rộng thành SSE2, SSE3, SSSE3 và SSE4. Vì nó hỗ trợ các phép toán với dấu chấm động, nên được áp dụng rộng rãi hơn MMX và dần trở nên phổ biến. Việc bố sung các hỗ trợ số nguyên trong SSE2 khiến MMX trở nên dư thừa, mặc dù hiệu suất hoạt động có thể tăng lên trong một số trường hợp sử dụng MMX song song với các hoạt động SSE.
SSE ban đầu thêm vào tám thanh ghi 128-bit mới, từ XMM0 đến XMM7. AMD64 mở rộng từ AMD (ban đầu được gọi là x86-64) đã bổ sung thêm 8 thanh ghi XMM8 đến XMM15. Và phần mở rộng được nhân đôi trong kiến trúc Intel 64. Ngoài ra còn có một thanh ghi kiểm soát/ trạng thái 32-bit mới, MXCSR. Các thanh ghi XMM8 đến XMM15 chỉ có thể truy cập trong chế độ điều hành 64-bit
SSE chỉ sử dụng một kiểu dữ liệu đơn cho các thanh ghi XMM:
Bốn số 32-bit chấm động độ chính xác đơn .
SSE2 sau đó mở rộng việc sử dụng của các thanh ghi XMM bao gồm:
Hai số 64-bit chấm động độ chính xác đôi, hoặc
Hai số nguyên 64-bit, hoặc
Bốn số nguyên 32-bit, hoặc
Tám số nguyên ngắn 16-bit, hoặc
Mười sáu số nguyên kiểu byte 8-bit, hoặc kí tự.
Bởi các thanh ghi 128-bit này bổ sung chương trình trạng thái mà hệ điều hành phải bảo quản trên nhiệm vụ chuyển mạch, chúng bị vô hiệu hoá theo mặc định cho đến khi hệ thống cho phép chúng hoạt động. Điềy này có nghĩa là hệ điều hành phải biết sử dụng tập lệnh FXSAVE và FXRSTOR, đó là cặp tập lệnh mở rộng có thể lưu trữ tất cả các thanh ghi x86 và SSE cùng một lúc. Sự hỗ trợ này đã nhanh chóng được bổ sung cho tất cả các hệ điều hành IA-32.
CPU đầu tiên hỗ trợ SSE, Pentium III, chia sẻ các tài nguyên thực hiện giữa SSE và FPU (Floating-Point Unit). Trong khi một ứng dụng biên dịch có thể xen kẽ các tập lệnh FPU và SSE cạnh nhau, sẽ không có vấn đề với Pentium III với mộp tập lênh FPU và SSE trong cùng một chu kì đồng hồ. Sự hạn chế này làm giảm hiệu quả của các hệ thống pipeline, nhưng các thanh ghi XMM riêng biệt cho phép SIMD và các thao tác chấm động vô hướng được trộn lẫn mà không thực hiện hit từ MMX cho phép / chuyển đổi chế độ dấu chấm động.
SSE bao gồm tập lệnh hướng và dấu chấm động có hướng.
Tập lệnh dấu chấm động:
+ Chuyển dữ liệu Ô nhớ đến Thanh ghi / Thanh ghi đến Ô nhớ / Thanh ghi đến Thanh ghi.
Vô hướng: MOVSS
Đóng gói: MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
+ Số học.
Vô hướng: ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
Đóng gói: ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
+ So sánh.
Vô hướng: CMPSS, COMISS, UCOMISS
Đóng gói: CMPPS
+ Dữ liệu ngẫu nhiên và giải nén.
Đóng gói: SHUFPS, UNPCKHPS, UNPCKLPS
+ Chuyển đổi kiểu dữ liệu.
Vô hướng: CVTSI2SS, CVTSS2SI, CVTTSS2SI
Đóng gói: CVTPI2PS, CVTPS2PI, CVTTPS2PI
+ Bit hoạt động logic.
Đóng gói: ANDPS, ORPS, XORPS, ANDNPS
Tập lệnh với số nguyên:
SSE bao gồm tập lệnh hướng và dấu chấm động có hướng.
+ Số học.
PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
+ Chuyển dữ liệu.
PEXTRW, PINSRW
+ Khác.
PMOVMSKB, PSHUFW
Các tập lệnh khác:
SSE bao gồm tập lệnh hướng và dấu chấm động có hướng.
+ Quản lý MXCSR.
LDMXCSR, STMXCSR
+ Cache và quản lý bộ nhớ.
MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
Các vấn đề về phần mềm và phần cứng.
Với tất cả các phần mở rộng của tập lệnh x86, với BIOS, hệ điều hành và lập trình ứng dụng để kiểm tra và phát hiện sự tồn tại và hoạt động thích hợp.
Intel và AMD cung cấp ứng dụng để phát hiện những phần mở rộng mà CPU của bạn hỗ trợ.
CPUID opcode là một bộ vi xử lý bổ sung tập lệnh (tên của nó bắt nguồn từ CPU Identification) cho kiến trúc x86. Nó được giới thiệu bởi Intel năm 1993 khi giới thiệu Pentium và các bộ vi xử lý 486 SL-Enhanced.
Người sử dụng hấp thụ các phần mở rộng của x86 bị chậm cơ bản do MMX và SSE (trong một số trường hợp) không được hỗ trợ bởi các ứng dụng khoảng 10 năm sau khi các phần mở rộng đã trở thành phổ biến. Tính toán phân tán đã tăng tốc việc sử dụng các phần mở rộng trong cộng đồng khoa học và nhiều ứng dụng khoa học từ chối chạy – trừ khi CPU hỗ trợ SSE2 hay SSE3.
Việc sử dụng nhiều phiên bản của một ứng dụng để đối phó với nhiều thiết lập khác nhau của phần mở rộng có sẵn là cách đơn giản nhất xung quanh vấn đề tối ưu hoá phần mở rộng x86. Thư viện phần mềm và một số ứng dụng đã bắt đầu hỗ trợ các kiểu mở rộng ám chỉ rằng sử dụng đầy đủ các tập lệnh x86 có sẵn có thể trở nên phổ biến khoảng 5 – 15 năm sau khi các tập lệnh ban đầu được giới thiệu.
Tập lệnh SSE2
SSE2, Streaming SIMD Extensions 2, là một trong những tập lệnh nằm trong Intel SIMD (Single Instruction, Multiple Data) lần đầu được giới thiệu bởi Intel với phiên bản ban đầu của Pentium 4 vào năm 2001. Nó được mở rộng từ tập lệnh SSE trước đó, được dự định để thay thế đầy đủ tập lệnh MMX . Intel mở rộng SSE2 để tạo ra SSE3 vào năm 2004. SSE2 bổ sung thêm 144 lệnh mới so với SSE (chỉ với 70 lệnh). Đối thủ sản xuất chip AMD đã bổ sung tập lệnh trong vi xử lý Opteron và Athlon 64 (AMD64 64-bit) vào SSE2.
Những thay đổi
SSE2 mở rộng tập lệnh MMX để hoạt động trên thanh ghi XMM, cho phép người sử dụng hoàn toàn tránh khỏi việc các thanh ghi MMX 64-bit bị chồng trong các thanh ghi stack dấu chậm đọng chính thức IA-32. Điều này cho phép trộn phần nguyên SIMD với cơ cấu điểm nổi vô hướng mà không có chế độ chuyển đổi giữa MMX và x87. Tuy nhiên, điều này là over-shadowed giá trị của việc có thể thực hiện các hoạt động MMX trên các thanh ghi SSE lớn hơn.
Những sự bổ sung khác trong SSE2 bao gồm một bộ các lệnh điều khiển bộ nhớ cache nhằm mục đích chủ yếu để giảm thiểu cache pollution khi xử lý dòng thông tin vô hạn định, và một sự bổ sung phức tạp của các lệnh chuyển đổi định dạng số.
Sự khác biệt giữa x87 FPU và SSE2
Tập lệnh FPU (x87) thường lưu trữ kết quả trung gian với độ chính xác 80 bit. Khi các thuật toán của FPU được chuyển sang SSE2, kết hợp một số biểu thức toán học hoặc các bộ dữ liệu đầu vào có thể dẫn đến sai lệch số đo lường: Điều này quan trọng trong tính toán khoa học, nếu kết quả tính toán phải được so sánh với kết quả tạo ra từ một kiến trúc máy tính khác.
Tùy thuộc vào trình biên dịch hay là thông dịch viên được sử dụng , kết quả trung gian khác nhau của một biểu thức toán học nhất định hoặc thuật toán chứa vòng lặp có thể cần phải được tạm thời lưu lại, và nạp lại sau. SSE2 làm việc với độ chính xác 32 hoặc 64 bit (4 hoặc 8 byte) trong khi tập lệnh x87 thông thường cho kết quả trong 80-bit trong các thanh ghi 80-bit của nó (10 byte).. Tất cả 80 bit kết quả của x87 có thể được lưu trữ trong bộ nhớ, nhưng vẫn thường làm tròn đến 64 hoặc 32 bit cho khả năng tương thích với các loại dữ liệu dấu chấm động phổ biến nhất. Tùy thuộc vào độ chính xác khi làm tròn, kết quả có thể khác nhau. Sự khác biệt tương tự có thể thấy khi so sánh kết quả từ độ chính xác 32 hoặc 64-bit mã SSE2 với kết quả tương ứng với độ chính xác 32, 64, hoặc 80-bit mã x87 . Đoạn mã Fortran sau đây được biên dịch với G95 như một ví dụ, giá trị chính xác của số thứ ba và cuối cùng được in ra là 0.
Sự