2012-01-13 17 views
15

Sự khác nhau giữa hai dòng sau là gì?_mm_load_ps so với _mm_load_pd và v.v.

__m128 x = _mm_load_ps((float *) ptr); 
__m128 y = _mm_load_pd((double *)ptr); 

Nói cách khác, tại sao có rất nhiều khác nhau _mm_load_xyz hướng dẫn, thay vì một generic __m128 _mm_load(const void *)?

+3

Kiểu trả về cho '_mm_load_pd' là' __m128d', không phải '__m128' –

+0

@PaulR: Điều đó .... làm cho mọi ý nghĩa trên thế giới. Tôi hoàn toàn không nhận ra điều đó. Cảm ơn đã chỉ ra điều đó. :) – Mehrdad

Trả lời

13

Có nội tại khác nhau vì chúng tương ứng với các hướng dẫn khác nhau. Có các hướng dẫn tải khác nhau vì Intel muốn duy trì sự tự do thiết kế bộ xử lý mà các vectơ chính xác kép được hỗ trợ bởi một tệp đăng ký vật lý khác với các vectơ đơn hoặc vectơ nguyên hoặc sử dụng các đơn vị thực thi khác nhau. Bất kỳ điều nào trong số này có thể thêm độ trễ bổ sung nếu không có cách nào để chỉ định dữ liệu đó sẽ được tải vào tệp đăng ký thích hợp hoặc mạng chuyển tiếp.

Một cách để suy nghĩ về nó là các hướng dẫn khác nhau thực hiện "cùng một điều", nhưng cung cấp thêm gợi ý cho bộ xử lý cho biết cách dữ liệu đang được tải sẽ được hướng dẫn trong tương lai sử dụng. Điều này có thể giúp bộ vi xử lý đảm bảo rằng dữ liệu ở đúng nơi sẽ được sử dụng hiệu quả nhất có thể, hoặc nó có thể bị bộ xử lý bỏ qua.

Lưu ý rằng đây không chỉ là giả thuyết. Có tồn tại các bộ vi xử lý sử dụng tải vectơ nguyên (MOVDQA) để tải dữ liệu được tiêu thụ bởi thao tác dấu phẩy động đòi hỏi nhiều thời gian hơn việc sử dụng tải trọng dấu phẩy để lấy dữ liệu cho phép toán dấu phẩy động (và ngược lại) . Xem Sổ tay Tối ưu hóa Intel hoặc ghi chú của Agner Fog để biết thêm chi tiết về chủ đề này. Sử dụng tải phù hợp với cách bạn sẽ sử dụng dữ liệu để tránh nguy cơ các mối nguy hiểm hiệu suất như vậy trong tương lai.

+0

Rất tiếc, không sao, tôi đã sai - kiểu trả về khác nhau. Điều đó hoàn toàn có ý nghĩa. :) +1 Cảm ơn rất nhiều. – Mehrdad

+0

@Mehrdad Điều này liên quan đến cùng một tên miền xáo trộn tôi đã đề cập trong câu hỏi SSE của bạn từ ngày hôm qua. – Mysticial

3

_mm_load_ps tải 4 đơn chính xác điểm nổi giá trị

_mm_load_pd tải 2 đôi chính xác dấu chấm động đánh giá cao

Những làm những việc khác nhau, vì vậy tôi nghĩ rằng nó chỉ làm cho tinh thần để có chức năng khác nhau. Ngoài ra, trong C, không có quá tải.

+0

Giải thích tốt hơn so với tôi :) –

+0

Vì vậy, nó chỉ là một vấn đề ngữ nghĩa, không phải là một điều liên quan đến CPU? – Mehrdad

+0

@Mehrdad, tốt, vì chúng tôi đang làm việc với nội tại ở đây, các chức năng này có thể khác nhau trong việc triển khai, không cho phép khái quát hóa. –

Các vấn đề liên quan