ICFPC2006,VM на C# имеет право на жизнь?
Ускорять, думаю, смысла нет. Есть смысл добавить дамп вывода при каждом запуске (помимо вывода на консоль). И ещё мб будет полезно нечто вроде хибернации - сохранение всех массивов и ip в файлик/загрузка из него.
UPD. Есть предложение обсуждать всё связанное с ICFPC в одном треде. Тогда будет понятно, кто, возможно, будет учавствовать.
UPD. Есть предложение обсуждать всё связанное с ICFPC в одном треде. Тогда будет понятно, кто, возможно, будет учавствовать.
> Есть смысл добавить дамп вывода при каждом запуске (помимо вывода на консоль). И ещё мб будет полезно нечто вроде хибернации - сохранение всех массивов и ip в файлик/загрузка из него.
первое уже сделал.
что надо добавить хибернацию согласен.
также нужна возможность в любой момент временно перенаправить вывод/ввод в другой файл/программу.
это позволит ту же самую задачу с hack-ом решать на любом внешнем языке, а не на встроенном basic-е.
первое уже сделал.
что надо добавить хибернацию согласен.
также нужна возможность в любой момент временно перенаправить вывод/ввод в другой файл/программу.
это позволит ту же самую задачу с hack-ом решать на любом внешнем языке, а не на встроенном basic-е.
Ускорять, думаю, смысла нет.в целом - да, если не брать операцию decrypt - работает довольно шустро.
А насколько шустро?
За сколько проходит sandmark?
За сколько проходит sandmark?
одна итерация - 4 секунды
Я подозреваю, что для вольного перенаправления в любой момент всё-таки нужен GUI.
> Я подозреваю, что для вольного перенаправления в любой момент всё-таки нужен GUI.
само собой, но это не сложно.
к этой же программе добавить в начале
само собой, но это не сложно.
к этой же программе добавить в начале
new Thread(delegate{Application.Run(new MainForm;}).Start;
Кажися, классическая оптимизация таких машин - переход от case к массиву укателей на функции.
> Кажися, классическая оптимизация таких машин - переход от case к массиву укателей на функции.
так такую оптимизацию и компилятор делает.
так такую оптимизацию и компилятор делает.
Ты не встречал случайно при написании UM такого результата sandmark? А то я ради забавы налабал быстренько на яве UM и видимо где-то ошибся и не вижу где
.
.
trying to Allocate array of size 0..
trying to Abandon size 0 allocation..
trying to Allocate size 11..
trying Array Index on allocated array..
trying Amendment of allocated array..
checking Amendment of allocated array..
trying Alloc(a,a) and amending it..
comparing multiple allocations..
pointer arithmetic..
check old allocation..
simple tests ok!
about to load program from some allocated array..
Index in 0-array fail
JIC, видимо оно на операторе 12 (Load Program) наепывается.
Index in 0-array failтекущую позицию работы после LoadProgram правильно меняешь?
да
в том числе, даже если происходит загрузка из 0-array-а (уже исполняемого массива)?
Я всегда меняю ip. И еще. Я вижу, что ты в случае загрузки из 0-массива не копируешь массив (такая маленькая оптимизация). Так вот у меня из за этого sandmark падал еще раньше, чем падает сейчас, с предупреждением, что я не выделяю новый массив. Пришлось случай с загрузкой из 0-массива обрабатывать так же как загрузку из любого другого массива, тупо копируя. Чудеса.
Я вижу, что ты в случае загрузки из 0-массива не копируешь массив (такая маленькая оптимизация).я вообще при загрузке никогда не копирую массивы, при загрузке только помечается, что массив используется в двух местах, соответственно если в 0 массив грузится нулевой же массив, то никакого размножения не происходит, что в коде и отражено.
код покажи
Да, точно. Я торможу, видел же что у тебя там COW. Кода-то нет практически. Вот для инструкции LoadProgram:
case 12:
long[] temp = arrays.get( (int) registers[b] );
final long[] newProgram = new long[temp.length];
System.arraycopy( temp, 0, newProgram, 0, temp.length );
arrays.set( 0, newProgram );
finger = (int)registers[c];
break;
проблема скорее всего где-то рядом, а не в самом LoadProgram, поэтому приведи лучше весь код
[телепатия] скорее всего ты ip плюсуешь в конце цикла, даже когда инструкцию LoadProgram обратываешь, а в этом случае ip менять не надо.
да, скорее всего так и есть
спасибо
спасибоА как в этой VM делаются условные переходы? Все через LoadProgram?
Например, если надо перейти куда-то по условию A<B?
Например, если надо перейти куда-то по условию A<B?
А как в этой VM делаются условные переходы? Все через LoadProgram?да, через LoadProgram
Или через самомодифицирующийся код!
> Или через самомодифицирующийся код!
и как ты представляешь себе переход через самомодифицирующийся код?
через самомодифицирующий код можно делать какие-то хитрые переходы на основе LoadProgram, но все равно все будет завязано именно на LoadProgram.
и как ты представляешь себе переход через самомодифицирующийся код?
через самомодифицирующий код можно делать какие-то хитрые переходы на основе LoadProgram, но все равно все будет завязано именно на LoadProgram.
В виду имелся, наверное, не переход, а выполнение разных команд при разных входных данных.
А это уже можно сделать.
А это уже можно сделать.
> В виду имелся, наверное, не переход, а выполнение разных команд при разных входных данных.
> А это уже можно сделать.
сделать можно, но зачем?... для того, чтобы выполнить разный код, это разный код надо где-то взять, т.е. откуда-то взять и поместить как следующие команду.
внимание вопрос, зачем заниматься таким перекопированием информации, если можно сразу перейти и выполнить этот код без перекопирования?
самомодификация удобна только в нескольких случаях:
1. самораспаковка кода
2. при отсуствии в оп-ах косвенной адресации
3. JIT-оптимизация
> А это уже можно сделать.
сделать можно, но зачем?... для того, чтобы выполнить разный код, это разный код надо где-то взять, т.е. откуда-то взять и поместить как следующие команду.
внимание вопрос, зачем заниматься таким перекопированием информации, если можно сразу перейти и выполнить этот код без перекопирования?
самомодификация удобна только в нескольких случаях:
1. самораспаковка кода
2. при отсуствии в оп-ах косвенной адресации
3. JIT-оптимизация
А я и не думаю, что ФиДжей это всерьез предложил.
Просто так можно. Но, разумеется, не нужно.
Просто так можно. Но, разумеется, не нужно.
Оставить комментарий
Dasar
есть вот такая VM, какие еще есть очевидные способы ее ускорить (под профайлером пока не смотрел)