Я работаю над своим решением проблемы Культ связанной переменной .
Часть проблемы заключается в том, чтобы вы реализовали интерпретатор для «Древняя» Универсальная Машина. Я реализовал интерпретатор для машины, которую они описывают, и теперь я запускаю программу тестирования, предоставленную университетом для ее тестирования.
Моя реализация этого интерпретатора на C # медленная !
Я запустил свою программу в профилировщике ANTS, чтобы увидеть, где происходит замедление, и я вижу, что более 96% моего времени занимает операция «Загрузить программу».
Спецификация этого оператора выглядит следующим образом:
#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.
Вот мой код для этого оператора:
case 12: // Load Program
_platters[0] = (UInt32[])_platters[(int)_registers[B]].Clone();
_finger = _registers[C];
break;
Исходный код всего моего интерпретатора «Универсальной машины» находится здесь .
Что я могу сделать, чтобы это ускорить? Существуют и другие реализации этого интерпретатора, написанные на C, которые значительно быстрее выполняют весь тест.