Các máy tính có thực sự sử dụng các add-lookahead không?


12

Có rất nhiều chi tiết về các bộ bổ sung lookahead như Kogge-Stone, Lander-Fischer, v.v. trong các khóa học CS đại học. Chúng được mô tả là "phổ biến trong ngành". Tuy nhiên, tôi không thể tìm thấy bất kỳ bằng chứng nào (ngoài khả năng chuỗi mang Manchester) từ thời gian gần đây rằng chúng thực sự được sử dụng ở bất cứ đâu cụ thể. Một tìm kiếm Google chỉ trả về các trang tạp chí và nghiên cứu học thuật. Nhiều nhất, các triển khai giả thuyết được đưa ra.

Câu hỏi của tôi là, có bất kỳ địa điểm cụ thể / thực hiện bổ sung carry-lookahead được sử dụng? Hay chúng không liên quan đến thế giới thực?


1
Thời gian chu kỳ của bộ xử lý hiệu suất cao và độ trễ chu kỳ đơn của chúng chắc chắn chỉ ra rằng chúng không sử dụng ripple-carry (nhưng điều này sẽ cho phép chọn carry). Ngay cả đối với quy trình 22nm của Intel, việc gợn qua 64 bit trong khoảng dưới 300 giây có thể là không thể.
Paul A. Clayton

@ PaulA.Clayton Tôi nhận được ấn tượng từ việc xem qua một vài biểu dữ liệu mà các bộ cộng giống như bộ chọn hoặc bộ giải mã được sử dụng.
qwr

Câu trả lời:


16

Đây là một câu hỏi đơn giản với một câu trả lời rất phức tạp.

Trước hết, một số nền tảng.

Thiết kế VLSI trong thế giới thực là một lĩnh vực cực kỳ kỹ thuật với sự cân bằng liên tục thay đổi. Thời gian mà một mạch mất để tính toán một câu trả lời hiếm khi là yếu tố quan trọng duy nhất. Ngoài ra còn có sức mạnh và diện tích vật lý, cộng với một loạt các yếu tố cho thấy các mạch bạn thiết kế thực sự là tương tự (ví dụ điện trở dây, điện dung ký sinh). Tất cả những thứ này đều quan trọng trong một mạch thực và có thể ảnh hưởng đến thiết kế nào được chọn.

Thứ hai, bạn phải xem xét toàn bộ vòng đời của một dự án. Một bộ cộng thích hợp cho việc thực hiện VLSI có thể không phù hợp với việc thực hiện đồ họa. Nếu thiết kế sẽ trải qua giai đoạn được thử nghiệm trên một đồ họa ... bạn sẽ có được hình ảnh.

Thứ ba, không phải mọi trình cộng đều được thực hiện như nhau. Trên một CPU thông thường, có rất nhiều bộ bổ sung treo xung quanh làm các nhiệm vụ khác nhau; có thể có một số ALU nguyên, một bộ cộng mantissa dấu phẩy động, một bộ cộng có tính toán địa chỉ, một bộ cộng tính toán các mục tiêu nhánh, v.v. Đó là không tính các bộ cộng mang theo mà bạn tìm thấy trong các đơn vị nhân hiện đại. Mỗi cái có những đặc thù và ràng buộc riêng.

Ví dụ, tính toán mục tiêu chi nhánh thường bao gồm việc thêm một hằng số nhỏ vào một từ đầy đủ, điều này gợi ý một thiết kế bộ cộng khác với một từ bổ sung hai từ đầy đủ với nhau. Tương tự, bổ sung dấu phẩy động đòi hỏi một bước làm tròn sau bổ sung có thể mất ít hơn một chu kỳ, vì vậy không có lý do gì bạn không thể đánh cắp phần còn lại của chu kỳ để kết thúc phép cộng.

Cuối cùng, và có lẽ là quan trọng nhất, những người chơi lớn (ví dụ Intel, AMD, NVIDIA) khá kín tiếng về các chi tiết triển khai cấp thấp vì những lý do rõ ràng, trừ khi họ nghĩ rằng họ có thể lấy giấy và / hoặc bằng sáng chế ra khỏi nó. Ngay cả sau đó, bạn thường không thể chắc chắn những gì họ thực sự đã làm mà không có kỹ thuật đảo ngược.

Phải nói rằng, có một vài điều chúng ta biết.

Điều quan trọng bạn cần nhận ra là các phương thức mang theo đang xây dựng các khối và không nhất thiết phải là các phương thức trong chính chúng. Một sự tương tự có thể theo thứ tự ở đây.

Nếu bạn nghĩ về các lớp thuật toán, có lẽ bạn đã học được một loạt các thuật toán sắp xếp như sắp xếp nhanh, sắp xếp hợp nhất, sắp xếp chèn, v.v. Trong thế giới thực, nếu sắp xếp là một nút cổ chai hiệu năng, bất kỳ kỹ sư tử tế nào cũng sẽ nghĩ đây là những khối xây dựng nguyên thủy mà từ đó có thể xây dựng một loại "thực".

Ví dụ, thuật toán sắp xếp từ thư viện chuẩn GNU C ++ sử dụng sắp xếp nhanh, sử dụng sắp xếp chèn khi các khoảng thời gian đủ nhỏ. Tuy nhiên, nếu sau một vài lần vượt qua, có vẻ như phân vùng sắp xếp nhanh đã ảnh hưởng đến hành vi bệnh lý, nó sẽ rơi trở lại sắp xếp đống. Đó là ba thuật toán sắp xếp khác nhau để tạo ra một loại sức mạnh công nghiệp.

Điều tương tự cũng đúng với các mạch cộng. Được biết, ví dụ, đơn vị số nguyên Pentium 4 đã sử dụng bộ cộng Han-Carlson, là sự pha trộn của Kogge-Stone và Brent-Kung. (Han-Carlson đặc biệt thú vị, bởi vì đó là một "điểm ngọt" trong sự đánh đổi giữa độ trễ lan truyền và vùng chết cũng khá hiệu quả về năng lượng.) Nó thường trả tiền để sử dụng kết hợp nhiều phương pháp.

Các trình bổ sung mang theo "thuần túy" vẫn còn rất nhiều tiêu chuẩn trong các mạch tổng hợp (ví dụ: nếu bạn cung cấp toán tử Verilog "+" cho Cadence hoặc Synopsys), khi nói đến thiết kế thủ công, các CPU cao cấp hiện đại có siêu âm hiện đại của chúng các công cụ thực thi theo thứ tự dường như đang chuyển sang một thiết kế hơi khác cho các đơn vị nguyên của chúng.

Các bộ cộng đầu cơ là các mạch có độ trễ lan truyền cực thấp, nhưng chỉ hoạt động chính xác trong một số thời gian (95% thời gian là điển hình) và có thể nói với rất ít logic liệu bộ cộng đầu cơ có trả về kết quả chính xác hay không. Vì vậy, ý tưởng là thực hiện một phép cộng đầu cơ và một nửa phép cộng mang theo song song, trong một chu kỳ. Nếu bộ cộng đầu cơ trả về câu trả lời đúng, hướng dẫn được thực hiện. Nếu không, hãy trì hoãn đường ống và thực hiện nửa còn lại của phép cộng chính xác.

Vì bạn biết rằng đường dẫn chậm sẽ mất hai chu kỳ, các nhà thiết kế có thể sử dụng phương pháp tiết kiệm năng lượng và không gian hơn ngay cả khi nó quá chậm để sử dụng chung.


6

Có, nhiều máy tính sử dụng bộ cộng mang theo. Tôi đã thiết kế ngược một số bộ vi xử lý cũ và tôi có thể đưa ra một số ví dụ.

ALU trên Intel 8008 (bộ xử lý 8 bit đầu tiên của họ) bao gồm một mạch mang theo lớn mang theo được thực hiện với logic động. Mạch này chiếm không gian chết nhiều như chính ALU. Cái nhìn mang theo được hiển thị trên biểu dữ liệu 8008 , hình 3. Tôi chưa thấy bất kỳ bộ xử lý nào khác của thập niên 1970 với cái nhìn mang theo cho ALU, vì vậy 8008 hơi khác thường về vấn đề này.

6502 sử dụng giao diện mang theo nguyên thủy cho bộ tăng bộ đếm chương trình (PC). Nó phát hiện nếu có một carry từ byte thấp hơn của PC và sử dụng điều này để tăng byte trên. Điều này làm giảm gợn mang từ 16 bit đến 8 bit. ALU của 6502 sử dụng gợn sóng mang, mặc dù logic mang được đảo ngược cho các bit xen kẽ, giúp cắt biến tần ra khỏi đường dẫn và làm cho nó nhanh hơn một chút.

Z-80 có bộ tăng / giảm 16 bit được sử dụng để cập nhật PC, hướng dẫn inc / dec và bộ đếm vòng lặp. Nó sử dụng cấu trúc bỏ qua mang nên mang được tính cho các nhóm hai bit. Ngoài ra, nó sử dụng một số look-lookahead để tạo carry từ các bit 0-7, 7-11 và 12-14. Mang khác được tính toán với gợn mang ( chi tiết ). Thật đáng ngạc nhiên, ALU của Z-80 là 4 bit, do đó, mỗi hoạt động 8 bit thực hiện hai lần đi qua ALU.

8085, mặt khác, sử dụng gợn mang cho bộ tăng / giảm 16 bit của nó. Nhưng giống như 6502, nó có một chút tăng tốc bằng cách đảo ngược logic mang theo trong các bit xen kẽ.

Các ARM-1 có một ALU 32-bit không có carry-lookahead, chỉ cần mang theo gợn. Nó cũng sử dụng thủ thuật đảo ngược việc mang theo các bit xen kẽ.

Trong thế giới máy tính mini, nhiều bộ xử lý được chế tạo từ chip ALU 74181 4 bit nổi tiếng, có giao diện bên trong mang theo. Ví dụ bao gồm Data General Nova, Xerox Alto, VAX-11/780 và TI-990. (Xem còn danh sách Wikipedia .) Một số các carry gợn đã qua sử dụng giữa mỗi con chip 4-bit và một số sử dụng chip lookahead 74.182 carry cho lookahead đầy đủ.

Tóm lại, các bộ vi xử lý khác nhau sử dụng nhiều kỹ thuật mang khác nhau tùy thuộc vào mục tiêu hiệu suất của chúng và hoạt động nào trên con đường quan trọng. ALU có thể sử dụng thiết bị mang theo đầy đủ (như 8008) hoặc thậm chí có thể có kích thước bằng một nửa (như Z-80). Bộ tăng có thể là một vấn đề về hiệu năng vì nó thường là 16 bit trong bộ xử lý 8 bit, dẫn đến độ trễ gợn gấp đôi. Bộ tăng có thể có gợn mang (8085), một mang theo (6502) hoặc một số giai đoạn mang theo (Z-80).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.