Pracuję nad moim rozwiązaniem problemu Cult of the Bound Variable.Jak przyspieszyć klonowanie tablic w C#?
Częściowo problem polega na tym, że zaimplementowałeś tłumacza do "pradawnej" Uniwersalnej Maszyny. Zaimplementowałem wtyczkę do opisywanej maszyny, a teraz używam programu testowego, który uczelnia udostępniła w celu przetestowania go.
Moja implementacja C# tego interpretera to slow!
Uruchomiłem program w profilu ANTS, aby zobaczyć, gdzie znajduje się spowolnienie i widzę, że ponad 96% mojego czasu zajmuje operacja "Wczytaj program".
specification tego operatora jest następujący:
#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.
Oto mój kod dla tego operatora:
case 12: // Load Program
_platters[0] = (UInt32[])_platters[(int)_registers[B]].Clone();
_finger = _registers[C];
break;
Kod źródłowy do mojego całego "uniwersalna maszyna" tłumacz jest here.
Co mogę zrobić, aby przyspieszyć działanie? Istnieją inne implementacje tego interpretera napisane w C, które kończą cały benchmark znacznie szybciej.
Czy możesz podać typy _platterów i innych członków? Wypróbuj Array.Copy, Buffer.BlockCopy lub wskaźniki. –
@lukas, podałem link do strony github, która zawiera całą klasę. Ale _platters jest listą. –
mmcdole
Więc, z ciekawości, jaki był wzrost prędkości przy użyciu zaakceptowanej odpowiedzi? Twoje pytanie stałoby się bardziej cenne dla innych użytkowników SO. – sehe