You are on page 1of 6

4.

11: Các quan điểm lịch sử và tài liệu tham khảo:


Phần này mô tả sự phát triển lịch sử của các phương pháp tiếp cận nhiều vấn
đề, bắt đầu với nhiều vấn đề tĩnh và tiến tới công việc gần đây nhất dẫn đến IA-64.
Tương tự, chúng ta xem xét lịch sử lâu đời của công nghệ trình biên dịch trong lĩnh
vực này.

Sự phát triển của các bộ xử lý đa vấn đề


Hầu hết các bộ xử lý đa vấn đề ban đầu đều tuân theo cách tiếp cận thiết kế
LIW hoặc VLIW. Charlesworth [1981] báo cáo về Hệ thống dấu chấm động AP-
120B, một trong những bộ xử lý lệnh rộng đầu tiên chứa nhiều thao tác trên mỗi lệnh.
Floating Point Systems đã áp dụng khái niệm tổng hợp phần mềm trong cả trình biên
dịch và thư viện hợp ngữ viết tay để sử dụng bộ xử lý một cách hiệu quả. Vì bộ xử lý
là một bộ xử lý gắn liền, nên có thể bỏ qua nhiều khó khăn khi triển khai nhiều vấn đề
trong các bộ xử lý đa năng, ví dụ, bộ nhớ ảo và xử lý ngoại lệ.
Bộ xử lý Stanford MIPS có khả năng thực hiện hai hoạt động trong một lệnh
duy nhất, mặc dù khả năng này đã bị loại bỏ trong các biến thể thương mại của kiến
trúc, chủ yếu vì lý do hiệu suất. Cùng với các đồng nghiệp của mình tại Yale, Fisher
[1983] đã đề xuất tạo ra một bộ xử lý có lệnh rất rộng (512 bit), và đặt tên cho loại bộ
xử lý này là VLIW. Mã được tạo cho bộ xử lý bằng cách sử dụng lập lịch theo dõi, mà
Fisher [1981] đã phát triển ban đầu để tạo vi mã ngang. Việc thực hiện lập lịch theo
dõi cho bộ xử lý Yale được mô tả bởi Fisher et al. [1984] và bởi Ellis [1986]. Bộ xử lý
Đa luồng (Colwell và cộng sự [1987]) dựa trên các khái niệm được phát triển tại Yale,
mặc dù nhiều cải tiến quan trọng đã được thực hiện để tăng tính thực tiễn của phương
pháp. Trong số này có một bộ đệm lưu trữ có thể kiểm soát được cung cấp hỗ trợ cho
một hình thức đầu cơ. Mặc dù hơn 100 bộ vi xử lý Multiflow đã được bán, nhưng
nhiều vấn đề, bao gồm khó khăn khi giới thiệu bộ hướng dẫn mới từ một công ty nhỏ
và sự cạnh tranh cung cấp từ các bộ vi xử lý RISC thương mại đã làm thay đổi tính
kinh tế trong thị trường máy tính mini, dẫn đến sự thất bại của Multiflow như một
công ty.
Cùng khoảng thời gian với Multiflow, Cydrome được thành lập để xây dựng bộ
xử lý VLIWstyle (Rau và cộng sự [1989]), cũng không thành công về mặt thương
mại. Dehnert, Hsu, và Bratt [1989] giải thích kiến trúc và hiệu suất của Cydrome
Cydra 5, một bộ xử lý với từ hướng dẫn rộng cung cấp khả năng đổi tên thanh ghi
động và hỗ trợ bổ sung cho đường dẫn phần mềm. Cydra 5 là sự pha trộn độc đáo giữa
phần cứng và phần mềm, bao gồm các lệnh có điều kiện và xoay thanh ghi, nhằm mục
đích trích xuất ILP. Cydrome dựa vào nhiều phần cứng hơn bộ xử lý Đa luồng và đạt
được hiệu suất cạnh tranh chủ yếu dựa trên mã kiểu vectơ. Cuối cùng, Cydrome gặp
phải vấn đề tương tự như Multiflow và không phải là một thành công thương mại. Cả
Multiflow và Cydrome, mặc dù không thành công với tư cách là các thực thể thương
mại, nhưng đã sản sinh ra một số người có nhiều kinh nghiệm trong việc khai thác ILP
cũng như công nghệ trình biên dịch tiên tiến; nhiều người trong số đó đã tiếp tục kết
hợp kinh nghiệm của họ và các phần của công nghệ vào các bộ vi xử lý mới hơn.
Fisher và Rau [1993] đã biên tập một bộ sưu tập toàn diện các bài báo về phần cứng
và phần mềm của hai bộ vi xử lý quan trọng này.
Rau cũng đã phát triển một kỹ thuật lập lịch có tên là lập lịch đa vòng, là cơ sở
cho hầu hết các kế hoạch tổng hợp phần mềm (Rau, Glaeser và Picard [1982]). Công
trình của Rau được xây dựng dựa trên công trình trước đó của Davidson và các đồng
nghiệp của ông về việc thiết kế các bộ lập lịch phần cứng tối ưu cho bộ vi xử lý
pipelined. Các bộ vi xử lý LIW cũ khác bao gồm Apollo DN 10000 và Intel i860, cả
hai đều có thể tạo ra hai phép toán FP và số nguyên.
Một trong những cách tiếp cận thú vị được sử dụng trong các bộ xử lý VLIW
đời đầu, chẳng hạn như AP-120B và i860, là ý tưởng về một tổ chức đường ống yêu
cầu các hoạt động phải được “đẩy qua” một đơn vị chức năng và kết quả được ghi lại
ở cuối đường ống dẫn. Trong các bộ xử lý như vậy, các hoạt động chỉ tiến lên khi một
hoạt động khác đẩy chúng từ phía sau (theo trình tự). Hơn nữa, một lệnh chỉ định đích
cho một lệnh được phát hành trước đó sẽ được đẩy ra khỏi đường ống khi thao tác mới
này được đẩy vào. Cách tiếp cận như vậy có ưu điểm là nó không chỉ định đích kết
quả khi một thao tác phát hành lần đầu mà chỉ khi thanh ghi kết quả thực sự được viết.
Sự tách biệt này giúp loại bỏ sự cần thiết phải phát hiện các mối nguy hiểm WAW và
WAR trong phần cứng. Điểm bất lợi là nó làm tăng kích thước mã vì có thể cần các
thao tác không cần thiết để đẩy kết quả ra ngoài khi có sự phụ thuộc vào một thao tác
vẫn đang trong quá trình xử lý và không cần thao tác nào khác thuộc loại đó ngay lập
tức. Thay vì cách tiếp cận "push-and-catch" được sử dụng trong hai bộ xử lý này, hầu
hết các nhà thiết kế đã chọn sử dụngđường ống tự rútchỉ định đích đến trong chỉ thị
phát hành và trong đó một chỉ thị đã phát hành sẽ hoàn thành mà không cần thực hiện
thêm hành động nào. Những lợi thế về mật độ mã và sự đơn giản hóa trong quá trình
tạo mã dường như vượt trội hơn những lợi thế của cấu trúc khác thường hơn.

Công nghệ biên dịch và phần cứng hỗ trợ lập lịch trình
Phân tích sự phụ thuộc và song song mức vòng lặp được phát triển chủ yếu bởi
D. Kuck và các đồng nghiệp của ông tại Đại học Illinois vào những năm 1970. Họ
cũng đặt ra thuật ngữ thường được sử dụng làchống phụ thuộcvàphụ thuộc đầu ravà
phát triển một số bài kiểm tra phụ thuộc tiêu chuẩn, bao gồm các bài kiểm tra GCD và
Banerjee. Thử nghiệm thứ hai được đặt theo tên của Uptal Banerjee và có nhiều
hương vị khác nhau. Công việc gần đây về phân tích sự phụ thuộc đã tập trung vào
việc sử dụng nhiều phép thử chính xác kết thúc bằng một thuật toán gọi là Fourier-
Motzkin, là một thuật toán lập trình tuyến tính. D. Maydan và W. Pugh đều chỉ ra rằng
trình tự của các thử nghiệm chính xác là một giải pháp thực tế.
Trong lĩnh vực khám phá và lập lịch ILP, phần lớn công việc ban đầu được kết
nối với sự phát triển của các bộ xử lý VLIW, được mô tả trước đó. Lam [1988] đã
phát triển các thuật toán cho phần mềm và đánh giá việc sử dụng chúng trên Warp,
một bộ xử lý văn bản hướng dẫn rộng được thiết kế cho các ứng dụng có mục đích đặc
biệt. Weiss và JE Smith [1987] so sánh phần mềm pipelining với việc giải nén vòng
lặp như là các kỹ thuật lập lịch trình mã trên một bộ xử lý pipelined. Rau [1994] đã
phát triển lập lịch modulo để giải quyết các vấn đề của vòng lặp đường ống phần mềm
và đồng thời xử lý việc cấp phát thanh ghi.
Hỗ trợ lập lịch mã đầu cơ đã được khám phá trong nhiều ngữ cảnh khác nhau,
bao gồm một số bộ xử lý cung cấp một chế độ trong đó các ngoại lệ bị bỏ qua, cho
phép lập lịch tải tích cực hơn (ví dụ: bộ xử lý MIPS TFP, xem [Hsu 1994].). Một số
nhóm đã khám phá các ý tưởng để hỗ trợ phần cứng tích cực hơn cho việc lập lịch mã
đầu cơ. Ví dụ, Smith, Horowitz và Lam [1992] đã tạo ra một khái niệm gọi là tăng
cường chứa một cơ sở phần cứng để hỗ trợ đầu cơ nhưng cung cấp một cơ chế kiểm
tra và phục hồi, tương tự như trong IA-64 và Crusoe. Ý tưởng lập lịch trình cho lính
canh, cũng tương tự như phương pháp suy đoán và kiểm tra được sử dụng trong cả
kiến trúc Crusoe và IA-64, được phát triển bởi các nhà nghiên cứu tại Phòng thí
nghiệm U. of Illinois và HP (xem [Mahlke et al. 1992] ).
Vào đầu những năm 1990, Wen-Mei Hwu và các đồng nghiệp của ông tại Đại
học Illinois đã phát triển một khung trình biên dịch, được gọi là IMPACT ( [Chang, et
al. 1991]), để khám phá sự tương tác giữa kiến trúc nhiều vấn đề và công nghệ trình
biên dịch. Dự án này đã dẫn đến một số ý tưởng quan trọng, bao gồm: lập lịch siêu
khối (xem [Hwu và cộng sự 1993]), sử dụng rộng rãi cấu hình để hướng dẫn nhiều
cách tối ưu hóa khác nhau (ví dụ: nội tuyến thủ tục) và sử dụng một bộ đệm đặc biệt
(tương tự vào ALAT hoặc bộ đệm lưu trữ được chương trình kiểm soát) để phát hiện
xung đột bộ nhớ hỗ trợ biên dịch (xem [Gallagher, et. 1994]). Họ cũng khám phá sự
cân bằng hiệu suất giữa hỗ trợ một phần và hỗ trợ toàn bộ cho dự đoán trong [Mahlke,
et. al. 1995].
Các bộ xử lý RISC ban đầu đều có các nhánh bị trễ, một sơ đồ lấy cảm hứng từ
lập trình vi mô và một số nghiên cứu về dự đoán nhánh theo thời gian biên dịch được
lấy cảm hứng từ các cơ chế nhánh bị trễ. McFarling và Hennessy [1986] đã thực hiện
một so sánh định lượng của một loạt các sơ đồ dự đoán nhánh thời gian biên dịch và
thời gian chạy. Fisher và Freudenberger [1992] đã đánh giá một loạt các sơ đồ dự
đoán nhánh thời gian biên dịch bằng cách sử dụng thước đo khoảng cách giữa các lần
xác định sai.

EPIC và Phát triển IA-64 (Bộ xử lý ngày nay)


Nguồn gốc của cách tiếp cận EPIC nằm ở những nỗ lực trước đó để xây dựng
các máy LIW và VLIW – đặc biệt là các máy tại Cydrome và Multiflow – và trong
một quá trình lâu dài của công việc biên dịch tiếp tục sau khi các công ty này thất bại
tại HP, Đại học Illinois và các nơi khác. Những hiểu biết sâu sắc có được từ công việc
đó đã khiến các nhà thiết kế tại HP đề xuất kiến trúc 64 bit kiểu VLIW để tiếp nối với
lưu trữ HP-PA RISC- kiến trúc. Intel đang tìm kiếm một kiến trúc mới để thay thế
kiến trúc x86 (bây giờ được gọi là IA-32) và cung cấp khả năng 64-bit. Năm 1995, họ
đã hợp tác để thiết kế một kiến trúc mới, IA-64, và xây dựng các bộ xử lý dựa trên nó.
Itanium là bộ xử lý đầu tiên như vậy.

Các tài liệu tham khảo


BALL, T. AND J.R. LARUS [1993]. “Branch prediction for free,” Proc.
SIGPLAN 1993 Conf. on Programming Language Design and Implementation, June,
300-313.
CHANG, P. P., MAHLKE, S. A., CHEN, W. Y., WARTER, N. J., AND W. W.
HWU [1991], “IMPACT: An architectural framework for multiple-instruction-issue
processors,” Proceedings of the 18th International Symposium on Computer Architecture
(May), pp. 266--275.
CHARLESWORTH, A. E. [1981]. “An approach to scientific array processing:
The architecture design of the AP-120B/FPS-164 family,” Computer 14:9 (September),
18–27.
COLWELL, R. P., R. P. NIX, J. J. O’DONNELL, D. B. PAPWORTH, AND P. K.
RODMAN [1987]. “A VLIW architecture for a trace scheduling compiler,” Proc. Second
Conf. on Architectural Support for Programming Languages and Operating Systems,
IEEE/ACM (March), Palo Alto, Calif., 180–192.
DEHNERT, J. C., P. Y.-T. HSU, AND J. P. BRATT [1989]. “Overlapped loop
support on the Cydra 5,” Proc. Third Conf. on Architectural Support for Programming
Languages and Operating Systems (April), IEEE/ACM, Boston, 26–39.
ELLIS, J. R. [1986]. Bulldog: A Compiler for VLIW Architectures, MIT Press,
Cambridge, Mass. FISHER, J. A. [1981]. “Trace scheduling: A technique for global
microcode compaction,” IEEE Trans. on Computers 30:7 (July), 478–490.
FISHER, J. A. [1983]. “Very long instruction word architectures and ELI-512,”
Proc. Tenth Symposium on Computer Architecture (June), Stockholm, 140–150.
FISHER, J. A., J. R. ELLIS, J. C. RUTTENBERG, AND A. NICOLAU [1984].
“Parallel processing: A smart compiler and a dumb processor,” Proc. SIGPLAN Conf. on
Compiler Construction (June), Palo Alto, Calif., 11–16.
FISHER, J. A. AND S. M. FREUDENBERGER [1992]. “Predicting conditional
branches from previous runs of a program,” Proc. Fifth Conf. on Architectural Support
for Programming Languages and Operating Systems, IEEE/ACM (October), Boston, 85-
95.
FISHER, J. A. AND B. R. RAU [1993]. Journal of Supercomputing (January),
Kluwer.
FOSTER, C. C. AND E. M. RISEMAN [1972]. “Percolation of code to enhance
parallel dispatching and execution,” IEEE Trans. on Computers C-21:12 (December),
1411–1415.
GALLAGHER, D.M., CHEN, W.Y., MAHLKE, S.A., GYLLENHAAL, J.C.,
AND W.W. HWU [1994]. “Dynamic memory disambiguation using the memory conflict
buffer.” Proc. Sixth International Conference on Architectural Support for Programming
Languages and Operating Systems (October), Santa Clara.
HOPKINS, M. [2000]. “A Critical Look at IA-64: Massive Resources, Massive
ILP, But Can It Deliver?” Microprocessor Report, Feb.
P.HSU [1994]. “Designing the TFP Microprocessor”, IEEE Micro, Vol.18 Nr.2
(April), pp 2333.
HWU, W. W., MAHLKE, S. A., CHEN, W. Y., CHANG, P. P., WARTER, N. J.,
BRINGMANN, R. A., OUELLETTE, R. O., HANK, R. E., KIYOHARA, T., HAAB, G.
E., HOLM, J. G., AND D. M. LAVERY [1993]. “The superblock: An effective technique
for VLIW and superscalar compilation.” Journal of Supercomputing, 7(1,2)
(March),:229--248.
LAM, M. [1988]. “Software pipelining: An effective scheduling technique for
VLIW processors,” SIGPLAN Conf. on Programming Language Design and
Implementation, ACM (June), Atlanta, Ga., 318–328.
MAHLKE, S. A., W. Y. CHEN, W.-M. HWU, B. R. RAU, AND M. S.
SCHLANSKER [1992]. “Sentinel scheduling for VLIW and superscalar processors,”
Proc. Fifth Conf. on Architectural Support for Programming Languages and Operating
Systems (October), Boston, IEEE/ACM, 238–247.
MAHLKE, S.A., HANK, R.E. MCCORMICK, J.E. AUGUST, D.I. AND
HWU.W.W. [1995]. “A Comparison of Full and Partial Predicated Execution Support for
ILP Processors.” Proceedings of the 22nd Annual International Symposium on Computer
Architecture (June), pages 138--149, Santa Margherita Ligure, Italy.,
MCFARLING, S. AND J. HENNESSY [1986]. “Reducing the cost of branches,”
Proc. 13th Symposium on Computer Architecture (June), Tokyo, 396–403.
NICOLAU, A. AND J. A. FISHER [1984]. “Measuring the parallelism available
for very long instruction word architectures,” IEEE Trans. on Computers C-33:11
(November), 968–976.
B. R. RAU [1994]. “Iterative Modulo Scheduling: An Algorithm For Software
Pipelining Loops.” Proc. 27th Annual International Symposium on Microarchitecture
(November), pages 63--74,San Jose, CA.
RAU, B. R., C. D. GLAESER, AND R. L. PICARD [1982]. “Efficient code
generation for horizontal architectures: Compiler techniques and architectural support,”
Proc. Ninth Symposium on Computer Architecture (April), 131–139.
RAU, B. R., D. W. L. YEN, W. YEN, AND R. A. TOWLE [1989]. “The Cydra 5
departmental supercomputer: Design philosophies, decisions, and trade-offs,” IEEE
Computers 22:1 (January), 12–34.
RISEMAN, E. M. AND C. C. FOSTER [1972]. “Percolation of code to enhance
parallel dispatching and execution,” IEEE Trans. on Computers C-21:12 (December),
1411–1415.
THORLIN, J. F. [1967]. “Code generation for PIE (parallel instruction execution)
computers,” Proc. Spring Joint Computer Conf. 27.
WILSON, R.P. AND MONICA S. LAM [1995]. “Efficient Context-Sensitive
Pointer Analysis for C Programs,” Proc. ACM SIGPLAN'95 Conference on
Programming Language Design and Implementation, La Jolla, CA, June , pp. 1-12.

You might also like