Каковы возможные подводные камни при переносе Psyco на 64-битную версию? - PullRequest
10 голосов
/ 03 марта 2010

Документы Psyco говорят:

Просто для справки, Psyco не работать на любых 64-битных системах вообще. Этот факт стоит отметить еще раз, теперь, когда последняя Mac OS / X 10.6 «Снежный барс» поставляется с дефолтом Python, который является 64-битным на 64-битном машины. Единственный способ использовать Psyco на OS / X 10.6 - перекомпиляция кастома Python в 32-битном режиме.

В общем случае перенос программ с 32-х на 64-х бит является действительно проблемой, только когда код принимает определенный размер для типа указателя и другие подобные небольшие (ish) проблемы. Учитывая, что Psyco не так уж много кода (~ 32K строк C + ~ 8K строк Python), насколько сложно это может быть? Кто-нибудь пробовал это и врезался в стену? У меня еще не было возможности хорошенько взглянуть на источники Psyco, поэтому я был бы очень признателен, зная, теряю ли я время на изучение этого ...

Ответы [ 4 ]

4 голосов
/ 03 марта 2010

Кристиан Тисмер, один из разработчиков Psyco, также, похоже, не согласен с предположением «насколько это может быть трудно» (цитата из здесь ):

Нужно прийти на x86-64? Почему так! Серьезно, я бы с удовольствием это сделал, но это будет гораздо сложнее, чем кто-нибудь мог бы ожидать. Из-за способа Психо написано, было бы действительно половина переписать, чтобы освободить его от его 32-Горечь. 32-битное предположение неявно везде. Это было бы прямо, если модель памяти было все 64 бит. Но нет платформы Intel это так просто так долго и спасибо для всей рыбы - Крис

и

гул. Для этого потребуется как минимум 3 или 4 месяца работы на полную ставку, если не больше. Я сомневаюсь, что смогу получить спонсорство за это.

Если вам нужны более подробные сведения (вероятно, необходимы глубокие познания в Psyco), я думаю, вы всегда можете попробовать задать вопрос в одном из списков рассылки psyco ...

3 голосов
/ 17 сентября 2010

Psyco предполагает, что sizeof (int) == sizeof (void *) немного повсюду. Это гораздо сложнее, чем просто записать 64-битные соглашения о вызовах и ассемблер. На sidenote, Pypy имеет поддержку 64-битного Jit в эти дни.

Ура, fijal

3 голосов
/ 03 марта 2010

Поскольку psyco - это компилятор, он должен знать базовый язык ассемблера, чтобы генерировать полезный код. Это означало бы, что он должен знать о 8 новых регистрах, новых кодах операций для 64-битного кода и т. Д.

Кроме того, для взаимодействия с существующим кодом необходимо будет использовать те же соглашения о вызовах, что и для 64-битного кода. Соглашение о вызовах AMD-64 аналогично старым соглашениям о быстрых вызовах тем, что некоторые параметры передаются в регистрах (в 64-битном случае rcx, rdx, r8, r9 для указателей и Xmm0-Xmm3 для плавающей запятой), а остальные толкнул на место разлива на стеке. В отличие от x86, это дополнительное пространство обычно выделяется один раз для всех возможных вызовов. Соглашения IA64 и язык ассемблера еще различны.

Короче говоря, я думаю, что это не так просто, как кажется.

1 голос
/ 03 марта 2010

+ 1 для «... как трудно это может быть?».

Взгляните сюда: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

Все это ASM должно быть перенесено, и повсюду существуют предположения о базовом процессоре.

Я думаю, что было бы справедливо сказать, что если бы это было тривиально для порта (или не слишком сложно), это уже было бы сделано.

...