10

Psyco 文档说:

仅供参考,Psyco 根本不适用于任何 64 位系统。这个事实值得再次注意,现在最新的 Mac OS/X 10.6 “Snow Leopart”带有一个默认的 Python,它在 64 位机器上是 64 位的。在 OS/X 10.6 上使用 Psyco 的唯一方法是在 32 位模式下重新编译自定义 Python。

通常,仅当代码为指针类型假定一定大小以及其他类似的小(ish)问题时,将程序从 32 位移植到 64 位才是真正的问题。考虑到 Psyco 并不是一大堆代码(~32K 行 C + ~8K 行 Python),它有多难呢?有没有人试过这个并撞墙?我还没有真正有机会好好看看 Psyco 的资源,所以如果我在浪费时间研究这个,我真的很感激......

4

4 回答 4

4

Psyco 开发人员之一 Christian Tismer 似乎也不同意“这有多难”的假设(引自此处):

需要来x86-64吗?为什么!说真的,我很想这样做,但这比任何人预期的都要困难得多。由于 psyco 的编写方式,将其从 32-bitterness 中删除实际上需要重写一半。32 位假设无处不在。如果内存模型都是 64 位,那将是直截了当的。但没有英特尔平台这么简单。这么久了,感谢所有的鱼——克里斯

哼。如果不是更多的话,至少要花 3 或 4 个月的全职工作才能做到这一点。我怀疑我能否获得赞助。

如果您想了解更多详细信息(可能需要 Psyco 的内部知识),我想您可以随时尝试在其中一个 psyco 邮件列表中询问...

于 2010-03-03T19:51:02.483 回答
3

由于 psyco 是一个编译器,它需要了解底层的汇编语言才能生成有用的代码。这意味着它需要了解 8 个新寄存器、64 位代码的新操作码等。

此外,要与现有代码互操作,它需要使用与 64 位代码相同的调用约定。AMD-64 调用约定与旧的快速调用约定类似,其中一些参数在寄存器中传递(在 64 位情况下,rcx,rdx,r8,r9 用于指针,Xmm0-Xmm3 用于浮点),其余为推到堆栈上的溢出空间。与 x86 不同,这个额外的空间通常为所有可能的调用分配一次。IA64 约定和汇编语言是不同的。

所以简而言之,我认为这可能不像听起来那么简单。

于 2010-03-03T19:39:07.867 回答
3

Psyco 假设 sizeof(int) == sizeof(void*) 到处都是。这比写下 64 位调用约定和汇编程序要困难得多。在旁注中,pypy 现在支持 64 位 jit。

干杯,菲亚尔

于 2010-09-17T18:40:45.573 回答
1

+1 表示“......这有多难?”。

看看这里:http ://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

所有的 ASM 都必须被移植,并且到处都有关于底层处理器的假设。

我认为可以公平地说,如果移植起来很简单(或者不太困难),那么它已经完成了。

于 2010-03-03T19:43:59.160 回答