主存显存间的拷贝问题

[复制链接]
查看11 | 回复9 | 2010-3-1 11:08:29 | 显示全部楼层 |阅读模式
我用CUDA做中文搜索,但是对文件搜索中文时如何将文本文件从主存拷贝到显存?有特定的函数用吗?还是要将文件打开一点点将内容拷贝到显存?
[ 本帖最后由 qiushiyong 于 2011-4-7 19:27 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
为什么没人回答我的问题啊?急死我了。。。
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
原帖由 qiushiyong 于 2011-4-6 09:49 发表
我用CUDA做中文搜索,但是对文件搜索中文时如何将文本文件从主存拷贝到内存?有特定的函数用吗?还是要将文件打开一点点将内容拷贝到显存?

除了您可以打开后一点点的读取复制到global, 您还可以使用MapViewOfFile(windows下)或者mmap(*BSD下),以便将打开的文件对应的内容映射到内存。
然后楼主您就可以一次性memcpy到global了。这样可以大大简化逻辑并一定程度的提高执行效率。
当然,楼主您需要注意,在32的系统下要受到可用进程内存和地址空间的限制,举例说一般在32位windows下您可映射的一个最大内容文件要小于2GB或者3GB。
在64位系统下您无需担忧此问题。
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
谢谢你,帮助很大,还要问你一下,是如何将文件一次性memcpy到global的?用cudaMemcpy这个函数吗?我只会拷贝非文件的数据像数组这类的,该如何用它拷贝整个文件啊?
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
原帖由 qiushiyong 于 2011-4-7 19:21 发表
谢谢你,帮助很大,还要问你一下,是如何将文件一次性memcpy到global的?用cudaMemcpy这个函数吗?我只会拷贝非文件的数据像数组这类的,该如何用它拷贝整个文件啊?

如果你看了楼上的回复,那么你就应该知道,你通过使用MapViewOfFile或者mmap可以得到一个指针,这个指针指向的内存区域就是你所映射的文件的内容. 接下来,你就应该直接使用cudaMemcpy了。
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
那个传输速度好像不够快,他大数据的话,应该用pined memory
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
谢谢
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
原帖由 yyfn风辰 于 2011-4-8 21:58 发表
那个传输速度好像不够快,他大数据的话,应该用pined memory

呵呵。版大。正因为他的数据量很大导致一部分一部分的读取很麻烦。所以楼主他才想问有没有一次性的。大数据量很难使用page-locked memory的。
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
我一直觉得如果特别大的话,GPU干着活有点累得慌……
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
谢谢你,帮助很大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行