- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CUDA 缓冲区访问问题:我注册了一个 OpenGL 缓冲区以将其与 CUDA 一起使用,cudaGraphicsGLRegisterBuffer() 没有返回错误(即 cudasucess),但是当我想将我的 PBO 与 cudaGraphicsMapResources() 映射时,我得到“cudaErrorMapBufferObjectFailed”。
这是我的代码(经过简化但包含相关部分):
在.h文件中
GLuint bufferID;
struct cudaGraphicsResource* PBO_CUDA_Widget;
在.cpp 文件中
void HDR_GLWidget::initializeGL()
{
cutilSafeCall(cudaGLSetGLDevice(cutGetMaxGflopsDeviceId()));
// create pixel buffer object
glGenBuffersARB(1, &bufferID);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, bufferID);
glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, width * height * 4, NULL, GL_STREAM_DRAW_ARB);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
cudaError_t error_test = cudaGraphicsGLRegisterBuffer(&PBO_CUDA_Widget, bufferID, cudaGraphicsMapFlagsWriteDiscard); //no cuda error here
}
void HDR_GLWidget::uploadBuffer
{
cudaError_t error_test = cudaGraphicsMapResources(1, &PBO_CUDA_Widget, 0); //crash here
[...]
}
这是我得到的错误:
First-chance exception at 0x000007fefd47bccd in IHM_Qt_TM_cuda.exe: Microsoft C++ exception: cudaError_enum at memory location 0x073ff200..
我在 x64 机器上使用 Windows 7,GTX580 上的 CUDA 4.2。
编辑:这里是修改后的代码
在.h文件中
cudaGraphicsResource* PBO_CUDA_Widget;
GLuint bufferID;
在.cpp 文件中
void HDR_GLWidget::initializeGL()
{
cutilSafeCall(cudaGLSetGLDevice(cutGetMaxGflopsDeviceId()));
GLenum err = glewInit();
glGenBuffers(1, &bufferID);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, bufferID);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, width * height * 4, NULL, GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
cutilSafeCall(cudaMalloc((void**) PBO_CUDA_Widget, width * height * sizeof(uchar4)));
cudaError_t error_reg = cudaGraphicsGLRegisterBuffer((cudaGraphicsResource **)PBO_CUDA_Widget, bufferID, cudaGraphicsMapFlagsWriteDiscard);
}
void HDR_GLWidget::uploadBuffer()
{
cudaError_t error_map = cudaGraphicsMapResources(1, (cudaGraphicsResource_t*)PBO_CUDA_Widget, 0); //error here
[...]
cudaError_t flag_unmap = cudaGraphicsUnmapResources(1, (cudaGraphicsResource_t*)PBO_CUDA_Widget, 0);
}
最佳答案
cudaGraphisMapResources 将指针作为第二个参数。不是指向指针的指针。您的 PBO_CUDA_Widget
变量已经是一个指针。调用应该是(不带地址,即省略“&”):
cudaError_t error_test = cudaGraphicsMapResources(1, PBO_CUDA_Widget, 0);
在启动访问资源的 CUDA 内核之前,请记住从 OpenGL 解除 PBO 的绑定(bind)。
顺便说一句:自 OpenGL-1.5 以来,OpenGL 缓冲区对象一直是核心 OpenGL 的一部分。任何支持 CUDA 的 GPU 也比 OpenGL-2 支持得更好 => 不要使用 ARB
后缀。
这是我的一个项目中经过实际测试的代码。从技术上讲,它分布在几个函数中,变量名称略有不同。但将其合并为一个函数时,它的工作方式完全相同。
void example(void)
{
GLuint pbo_ID;
size_t pbo_size = ...;
// note the type, there's no '*' and it's initialized to 0
cudaGraphicsResource_t cgr = 0;
glGenBuffers(1, &pbo_ID);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo_ID);
glBufferData(GL_PIXEL_UNPACK_BUFFER, pbo_size, NULL, GL_DYNAMIC_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
cudaGraphicsGLRegisterBuffer(&cgr, pbo_ID, cudaGraphicsRegisterFlagsWriteDiscard);
cudaGraphicsMapResources(1, &cgr, 0);
void *ptr;
size_t mapped_size;
cudaGraphicsResourceGetMappedPointer(
&ptr, &mapped_size, cgr);
cudaArray_t array;
cudaGraphicsSubResourceGetMappedArray(
&array,
cgr,
0, 0 );
call_CUDA_kernel();
cudaGraphicsUnmapResources(1, &cgr, 0);
}
现在,我将 cudaGrapicsResource
作为您要 malloc 的指针是什么意思。那么这样:
cudaGraphicsResource_t *p_cuda_gr_resources =
malloc(count * sizeof cudaGraphicsResource_t);
/* do some stuff */
free(p_cuda_gr_resources);
如果您有一大堆资源,这很有用,资源的数量不是预先确定的。不过在通常情况下,您不需要动态分配。
关于c++ - 错误映射 PBO cudaGraphicsResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347193/
请看一下我的代码。 int main () { Program* allcommand = new Program; allcommand->addCommand("add", new
因此,当我遇到调试断言时,我正在编写代码。现在我很想知道为什么这段代码不起作用: for(Model::MeshMap::iterator it = obj1->GetMeshes().begin()
这是我上一个问题的延续 Group, Sum byType then get diff using Java streams . 按照建议,我应该作为单独的线程发布,而不是更新原始线程。 因此,通过我
我正在实现一些非常适合 map 的代码。但是,我要迭代的列表中有大量对象,所以我的问题是哪种方法是解决此问题的最佳方法: var stuff = $.map(listOfMyObjects, some
我正在尝试创建一个包含不同类的成员函数指针的映射。成员函数都具有相同的签名。为了做到这一点,我所有的类都继承了一个 Object 类,它只有默认构造函数、虚拟析构函数和一个虚拟 ToString()
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: how do you make a heterogeneous boost::map? 有可能在 C++ 中
我有一个 Mysql 查询,请检查以下内容: SELECT `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID` , `tbl
抱歉,这可能是一个基本问题。 JNA直接映射和接口(interface)映射有什么区别? 我的解释是否正确: 直接映射 : 直接使用库对象(如 Java 中的静态 main) 接口(interface
在 Twitter's Scala school collections section ,它们显示了一个带有偏函数作为值的 Map: // timesTwo() was defined earlie
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
据我了解,从 scala stdlib 声明一个映射并没有将其专门用于原始类型。我要的不是付出装箱/拆箱的代价,而是同时拥有scala map 的接口(interface)。一个明显的选择是使用 tr
如何为这样的 JSON 响应创建对象映射,它只是一个整数数组: [ 565195, 565309, 565261, 565515, 565292, 565281, 566346, 5
是否可以为 DTO 对象创建映射然后查询它们 而不是域?如果不解释为什么? 如果我需要几个 dtos 怎么办? DTos 是只读的 ID 由 NH 自动生成 将来这些 dtos 将设置映射到链接的 d
我有一个返回的函数(常规代码) [words: "one two", row: 23, col: 45] 在 Scala 中,我将上面更改为 Scala Map,但随后我被迫将其声明为 Map[Str
我有一组与 Vanilla 磅蛋糕烘焙相关的数据(200 行),具有 27 个特征,如下所示。标签caketaste是衡量烤蛋糕的好坏程度,由 bad(0) 定义, neutral(1) , good
我有试图映射到新代码的遗留代码。 OLD_PERSON pid sid name age NEW_PERSON pid sid fid age RESOLVE_PERSON pid fid statu
我有一个表,其中一个字段可以指向其他 3 个表之一中的外键,具体取决于鉴别器值是什么(Project、TimeKeep 或 CostCenter。通常这是用子类实现的,我想知道我有什么 注意子类名称与
我有一个类型 [ST s (Int, [Int])] 的绑定(bind)我正在尝试申请runST使用映射到每个元素,如下所示: name :: [ST s (Int, [Int])] --Of Cou
在我正在进行的项目中,我有以下实体:分析师、客户 和承包商。每个都继承自基类 User。 public abstract class User { public virtual int Id
我想知道是否可以在 Vim 中创建一个映射(对于普通模式),允许用户在映射执行之前输入。 我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望命令允许输入我正在搜索的内容,然后在输入时执行。
我是一名优秀的程序员,十分优秀!