Tôi đang làm việc với giải pháp của mình cho vấn đề Cult of the Bound Variable.Làm cách nào để tăng tốc nhân bản mảng trong C#?
Một phần của sự cố khi bạn triển khai phiên dịch cho Máy phổ quát "cổ đại". Tôi đã thực hiện một intepreter cho máy họ mô tả và bây giờ tôi đang chạy một chương trình chuẩn mà trường đại học cung cấp để kiểm tra nó.
Việc triển khai C# của tôi cho người phiên dịch này là chậm!
Tôi đã kích hoạt chương trình trong trình thu thập ANTS để xem sự chậm lại và tôi có thể thấy rằng trên 96% thời gian của tôi được thực hiện bởi hoạt động "Tải chương trình".
Các specification của toán tử này như sau:
#12. Load Program.
The array identified by the B register is duplicated
and the duplicate shall replace the '0' array,
regardless of size. The execution finger is placed
to indicate the platter of this array that is
described by the offset given in C, where the value
0 denotes the first platter, 1 the second, et
cetera.
The '0' array shall be the most sublime choice for
loading, and shall be handled with the utmost
velocity.
Đây là mã của tôi cho toán tử này:
case 12: // Load Program
_platters[0] = (UInt32[])_platters[(int)_registers[B]].Clone();
_finger = _registers[C];
break;
Mã nguồn cho toàn bộ "Universal Machine" của tôi thông dịch viên là here.
Tôi có thể làm gì để làm điều này nhanh hơn? Có những triển khai khác của thông dịch viên này được viết bằng C, hoàn thành toàn bộ điểm chuẩn nhanh hơn đáng kể.
Bạn có thể cung cấp các loại cho _platters và các thành viên khác không? Hãy thử Array.Copy, Buffer.BlockCopy hoặc con trỏ. –
@ lukas, tôi đã cung cấp liên kết tới trang github có cả lớp trong đó. Nhưng _platters là một Danh sách. –
mmcdole
Vì vậy, ngoài sự tò mò, tốc độ đạt được bằng cách sử dụng câu trả lời được chấp nhận là gì? Câu hỏi của bạn sẽ trở nên có giá trị hơn đối với những người dùng SO khác – sehe