发新话题
打印

[CELL编程] cell上进程虚拟内存跨4G的问题

cell上进程虚拟内存跨4G的问题

最近在解决一些DMA操作中虚拟内存跨4G的问题,在这里随便说说。
因为cell blade是一款支持64位操作系统的机器,所以你的程序可以使用64位编译器来生成相应的binary code。这种情况下,一个进程可以使用的内存就超出了4G,也就是说DMA的时候,主存的地址高位就可能发生变化。
当你需要获取的一段数据刚好跨过了4G界限的时候,你就需要将你的一次DMA操作分为两个DMA操作,分别指明起始地址的高位,下面这个函数不会自动考虑这个高位发生变化的情况,如果作为一次DMA调用,会出现bus error的错误提示信息。
参考这个函数:spu_mfcdma64(ls, mfc_ea2h(ea), mfc_ea2l(ea), size, tag,((tid<<24)|(rid<<16)|MFC_GET_CMD))
我的签名!

TOP

昨天用64bit编译器编译的程序,中间有个函数没有考虑情况cross 4G的问题,结果出现segmentation fault,生成一个4G的core文件。check了一天才发现是这个问题,当你的程序占用太多内存后出现segmentation fault或者bus error的时候,就要考虑是否是这个问题在作怪
我的签名!

TOP

发新话题