Một vấn đề lớn cho tất cả các vấn đề rộng (ví dụ như Alpha, PA-RISC) hoặc siêu pipelined (Pentium 4) vi kiến trúc là phân nhánh. Nhiều nhánh có thể dự đoán khá tin cậy và dự đoán rẽ nhánh tốt phần cứng có thể xử lý những chi nhánh này, nhưng một số nhánh không thể dự đoán đáng tin cậy.Điều này có thể là một mất mát lớn về hiệu suất. Kiến trúc EPIC cung cấp một số kỹ thuật để giúp giảm tác động của việc không thể đoán trước nhánh.( Phần này mô tả kỹ thuật dự đoán nhánh đó là tùy chọn cho phần cứng. Vi xử lý Itanium và Itanium 2 thực hiện một tập hợp con của những kỹ thuật này. Phần này không có nghĩa là tất cả các kỹ thuật được thực hiện ở hai bộ xử lý Itanium hoặc các bộ vi xử lý Itanium 2.
8. Độ trễ bộ nhớ giảm (Memory Latency Reduction)
Sự dự đoán giúp loại bỏ các nhánh từ các đường dẫn thực thi quan trọng, nhưng sớm hay muộn chương trình vẫn cần phải nạp từ bộ nhớ. Các bộ nhớ cache cấp độ đầu tiên đánh vào bộ vi xử lý Itanium 2 có một độ trễ chỉ có 1 chu kỳ, nhưng mức độ 1/3 bộ nhớ cache hit có 12 chu kỳ, và bộ nhớ hệ thống có thể mất 100 hơn thế số chu kỳ. Một kiến trúc tốt, kiến trúc và trình biên dịch có thể giúp giảm độ trễ hiệu quả cho hoạt động bộ nhớ.
Lập kế hoạch mã xung quanh các hoạt động nạp bộ nhớ là khó khăn, bởi vì thời gian nạp trễ có thể sẽ mất nhiều thời gian và không thể đoán trước. Di chuyển nạp trước của các ngành và các đơn vị lưu trữ suy đoán có thể làm giảm hiệu quả thời gian trễ bộ nhớ, nhưng không an toàn (do lỗi trang có thể vi phạm lệnh hoặc nạp / lưu trữ) trên nhiều RISC kiến trúc. Kiến trúc EPIC cho phép tối ưu hóa hiệu suất được thực hiện một cách an toàn, hiệu quả và cung cấp một số kỹ thuật giảm độ trễ bộ nhớ khác. • Dự đoán điều khiển (Control Speculation): cho phép nạp được thực hiện sớm bằng cách thực hiện trước các nhánh mà không có phát hiện lỗi giả. Nếu dự đoán truy cập được thực hiện để một phần của bộ nhớ được trống, không hợp lệ, hoặc một người sử dụng không được phép truy cập, một kiến trúc thông thường sẽ yêu cầu một lỗi tốn kém để được thực hiện. Sử dụng một lệnh dự đoán nạp, vi xử lý Itanium trì hoãn một lỗi cho đến khi kết quả của hành động nạp được tiến hành. Một nạp ngắt dự đoán kết quả là một NAT trì hoãn mã thông báo cho các số nguyên, hoặc một NaTVal được mã hoá trong một toán hạng điểm nổi. Hầu hết các lệnh Itanium sẽ gọi một NAT đầu vào kết quả của nó, do đó cho phép một dự đoán mã trình tự để tiếp tục qua nhiều lệnh một cách chính xác và hiệu quả.
Kết quả của một hoạt động dự đoán phải được kiểm tra bởi một lệnh kiểm tra đặc biệt. Lệnh kiểm tra này có thể được thực hiện song song với việc sử dụng của kết quả dự đoán nó không có thời gian thực hiện báo lỗi.Khi một kết quả dự đoán được tìm thấy để có một mã thông báo NAT hoặc NaTVal, nhánh sẽ được thực hiện để phục hồi mã được cung cấp bởi trình biên dịch. Các hoạt động dự đoán sẽ được tái thực hiện và bất kỳ lỗi nào tồn tại sẽ được thực hiện bình thường.Nạp dự đoán có thể được kết hợp với sự suy đoán, nhưng các đơn vị lưu trữ không bao giờ thực hiện suy đoán.Một sử dụng quan trọng của kiểm soát dự đoán là vượt qua một danh sách liên kết trong khi đồng thời kiểm tra con trỏ NULL. Truy cập qua con trỏ NULL thường sẽ gây ra một lỗi, nhưng như là một dự đoán nạp, lỗi là chậm và không thực hiện nếu dữ liệu không bao giờ được sử dụng.
• Dự đoán dữ liệu (Data Speculation): cho phép nạp để nâng cao an toàn trước khi các đơn vị lưu trữ có thể thay đổi giá trị nạp.Trong ngôn ngữ lập trình hiện đại, nó được phổ biến để cho phép các chương trình sử dụng con trỏ với các loại dữ liệu. Đôi khi sử dụng con trỏ là khó khăn cho trình biên dịch để xác định nếu nạp và hoạt động lưu trữ đang tham chiếu tới cùng một vị trí bộ nhớ hay không.Để an toàn, một trình biên dịch cho một kiến trúc thông thường không được sắp xếp lại một nạp trên các vị trí lưu trữ.
Sử dụng một lệnh nạp cao cấp (ld.a), bộ vi xử lý Itanium có thể thay đổi nạp trước của các đơn vị lưu trữ, trong khi theo dõi sự toàn vẹn của dữ liệu được nạp cao cấp cho đến khi các dữ liệu được nạp được sử dụng. Nạp cao cấp hoạt động như một nạp bình thường ngoại trừ việc nó cũng duy trì một mục trong một nạp nâng cao on-chip “bảng nạp địa chỉ“- Advanced Load Address Table (ALAT) với thanh nạp ghi số, địa chỉ và kích thước. Bất kỳ đơn vị lưu trữ để địa chỉ đó từ nạp cao cấp và kiểm tra sau này sẽ mất hiệu lực nhập trong ALAT.
Khi kết quả của nạp cao cấp được sử dụng trong các mã, một lệnh kiểm tra (Ld.c hoặc chk.a) được ban hành cùng với việc sử dụng kết quả của nạp cao cấp. Các lệnh kiểm tra không có bất kỳ thực hiện có độ trễ. Lệnh kiểm tra truy vấn các cấu trúc ALAT để bảo đảm nạp cao cấp vẫn còn hiệu lực (tức là một đơn vị lưu trữ cùng một địa chỉ không được gặp giữa việc nạp cao cấp và sử dụng của nó). Nếu ALAT chỉ ra rằng các dữ liệu nạp đã được sửa đổi, sau đó nạp (và đôi khi code khác) là thực hiện một lần nữa, và giá trị cập nhật dữ liệu được nạp vào thanh ghi tập tin.
• Tìm và nạp trước dòng bộ nhớ cache(Explicit Cache Line Prefetching): là một cách khác để giảm độ trễ bộ nhớ hiệu quả. Tập lệnh Itanium cài đặt một dòng bộ nhớ cache lấy lệnh gợi ý nhằm dự đoán việc sử dụng dữ liệu bộ nhớ cache và mang lại một dòng bộ nhớ cache từ bộ nhớ với các đặc quyền cụ thể (chỉ đọc hoặc ghi), và nó có thể trực tiếp dòng bộ nhớ cache để một cấp bộ nhớ cache cụ thể.Có các phiên bản của lệnh này cho phép một lỗi (ví dụ, một lỗi trang) được thực hiện ngay lập tức hoặc bị trì hoãn cho đến khi bộ nhớ dòng cache là có thể sử dụng.
nhớ đệm cấu trúc đa cấp.Nếu một dòng bộ nhớ cache được phân loại là non-temporal (NTA), sau đó bộ nhớ cache có thể chọn để thay thế cho dòng bộ nhớ cache trước khi những công việc khác trong thời gian ngắn.Những gợi ý này có thể giúp ngăn ngừa quá nạp nhỏ hơn mức lưu trữ đầu tiên hoặc mức thứ hai với các dòng dữ liệu lớn được sử dụng một thời gian ngắn. Ngoài ra, chúng có thể được sử dụng hiệu quả để giảm độ trễ của một truy cập bộ nhớ bằng cách đưa dữ liệu vào cache trước khi chương trình có nhu cầu.