Существует множество моделей, которые вы можете использовать. Но я думаю, что наиболее недавно используемая модель для таких задач обучения последовательности, это двунаправленные RNN (например, двунаправленный LSTM), вы можете получить подсказку из здесь
Но имейте в виду, двунаправленные RNNs очень дорогой в обучении. В зависимости от вашей проблемы, я настоятельно рекомендую использовать предварительно подготовленную модель. Удачи!
Установите linux + старый gcc на виртуальную машину.
У вас есть источники для этого пользовательского компилятора? Если вы можете восстановить базовый уровень 2.6.0 (и это должно быть относительно просто), то diff и patch должны восстановить ваш набор изменений.
Что я тогда рекомендовал бы, так это использовать этот набор изменений для создания новой версии со скоростью до дата gcc. И затем положить его под контроль конфигурации.
Извините, не хочу кричать. Просто я говорил то же самое в течение 30 лет.
Я наткнулся на этот и подумал о вашей проблеме. Может быть, вы можете найти способ поиграть с двоичным файлом, чтобы перевести его в формат ELF? Или, может быть, это не имеет значения, но игра с objdump может предоставить вам больше информации.
Можете ли вы взглянуть на карту памяти процесса?
Можете ли вы поставить
исполняемый файл gcc-2.6.0
? Это может быть что-то вроде чтения / proc / $$ / maps
и запутывания, когда выходные данные изменяются незначительными способами. Подобная проблема была недавно замечена между 2.6.28 и 2.6.29.
Если это так, вы можете взломать /usr/src/linux/fs/proc/task_mmu.c
или около того, чтобы восстановить старый вывод, или настроить некоторые $ LD_PRELOAD
для подделки gcc
в чтение другого файла.
Поскольку вы упомянули brk
...
CONFIG_COMPAT_BRK
делает значение по умолчанию kernel.randomize_va_space = 1
вместо 2
, но это все равно рандомизирует все, кроме кучи ( brk
).
Не могли бы вы просто создать образ диска, который можно будет переустановить, если система умрет? или сделать ВМ?
Итак, я кое-что решил ... это не полное решение, но оно преодолевает первоначальную проблему, с которой я столкнулся с устаревшим gcc.
Установка точек останова на каждый вызов libc в .plt (таблица привязки процедур). Я вижу, что malloc (в libc.so.5) вызывает getenv (), чтобы получить:
MALLOC_TRIM_THRESHOLD_ MALLOC_TOP_PAD_ MALLOC_MMAP_THRESHOLD_ MALLOC_MMAP_MAX_ MALLOC_CHECK_
Поэтому я искал их в Интернете и нашел этот который посоветовал
setenv MALLOC_TOP_PAD_ 536870912
тогда унаследованный gcc РАБОТАЕТ !!!!
Но не дома бесплатно, до сбоя он добрался до ссылки в сборке, поэтому что-то еще происходит с устаревшим nld :-( Он сообщает:
Virtual memory exceeded in `new'
В /etc/sysctl.conf У меня есть:
kernel.randomize_va_space=0 vm.legacy_va_layout=1
Он все еще работает так же, если
kernel.randomize_va_space=1 vm.legacy_va_layout=0
, но не если
kernel.randomize_va_space=2
Было предложено использовать «ldd» для просмотра зависимостей разделяемой библиотеки: унаследованный gcc требует только libc5, но унаследованный nld также нуждается в libg ++. so.27, libstdc ++. so.27, libm.so. а как насчет libc5-compat?
Так что, как я уже сказал, еще не свободен домой ... станьте ближе. Я, вероятно, опубликую новый вопрос о проблеме nld.
Редактировать :
Я первоначально собирался воздержаться от «Принимать» этот ответ, поскольку у меня все еще есть проблема с соответствующим унаследованным компоновщиком, но чтобы хотя бы получить некоторую окончательность по этому вопросу, я переосмысливаю эту позицию.
Благодарю вас:
Edit
Ниже приведены последние сведения, которые я изучил, и теперь я приму решение VM, поскольку я не мог полностью решить это любым другим способом (по крайней мере, в отведенное для этого время).
Более новые ядра имеют флаг сборки CONFIG_COMPAT_BRK, позволяющий использовать libc5, поэтому предположительно сборка нового ядра с этим флагом решит проблему (и, глядя через ядро src, похоже, что будет, но я не уверен так как я не следовал всем путям). Есть также другой документированный способ разрешить использование libc5 во время выполнения (а не во время сборки ядра): sudo sysctl -w kernel.randomize_va_space = 0. Это, однако, делает randomize_va_space = 0. Это, однако, делает randomize_va_space = 0. Это, однако, делает не выполнить всю работу, и некоторые (большинство?) приложения libc5 все равно сломаются, например, наш старый компилятор и компоновщик. По-видимому, это связано с различием в предположениях о выравнивании между новым и старым ядрами. Я исправил двоичный файл компоновщика, чтобы заставить его думать, что он имеет больший раздел bss, чтобы приблизить конец bss к границе страницы, и это работает на более новом ядре, когда sysctl var kernel.randomize_va_space = 0. Это НЕ является удовлетворительным решением для меня, так как я слепо исправляю критический двоичный исполняемый файл, и хотя запуск исправленного компоновщика на более новом ядре дал немного идентичный вывод исходному компоновщику, запущенному на более старом ядре, это не доказывает, что некоторые другие входные данные компоновщика (т.е. мы меняем связанную программу) также будут давать идентичные результаты.