[第二期有问必答]关于ZeroCopy内存的一些问题

各位专家好!

我的问题是这样的,我声明了一块内存cudaHostAlloc((void **)&buf,flen,cudaHostAllocWriteCombined|cudaHostAllocMapped);
这时候,用fread可以将文件读入buf吧?用cudaHostGetDevicePointer(&bufDevice,buf,0);应该可以取到buf在显存中的地址并赋给bufDevice吧?

如果前面这些有错,请指出,如果没有的话,那问题是,能否像操作host的buf一样,对bufDevice做加减操作呢?比如想取第二个数,能否直接写bufDevice+1呢?
另外,如果上述假设成立,能否认为bufDevice的数值在host和在Device是相同的?也就是说,做这样的应用是否正确:在host端,用idxArry[i]=bufDevice+k;//k是个不越界的整数。idxArry是char型的数组,即char idxArry[len]。然后把idxArry用cudaMemcpy复制到显存中,并在kernel函数中使用数组中的元素指向内存中的值?

另外,有个基础问题想确认一下,是不是host端不能直接对cudaMalloc的数赋值,而必须通过cudaMemcpy?

最后一个问题:(昨天风辰说过,想问问内部消息:))emu模式应该是多线程的吧?现在多核CPU非常普遍了,是否emu模式下可以占满CPU核心,也就是说从一定程度上模拟出乱序执行的效果?

乱七八糟问了这么多,给您添麻烦了。谢谢!

[ 本帖最后由 图腾部落 于 2010-6-12 11:02 编辑 ]