Questions tagged «gpgpu»

1
为什么在OpenCL中禁止递归?
我想使用OpenCL加速渲染光线跟踪图像,但是我注意到Wikipedia页面声称Open CL中禁止递归。这是真的?由于我在光线跟踪时大量使用递归,因此需要大量的重新设计才能从速度上受益。阻止递归的基本限制是什么?有什么办法解决吗?

1
同步连续的OpenGL Compute Shader调用
我有几个需要按一定顺序执行的计算着色器,它们的输出取决于以前的输入。理想情况下,我永远不需要在客户端复制缓冲区并在GPU上完成所有工作。 考虑一下,我有两个计算着色器已编译并链接为program_one和program_two。假设我还有一个GL_SHADER_STORAGE_BUFFER包含由写入program_one和读取的数据的program_two。我可以简单地执行以下操作: glUseProgram(program_one); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); glUseProgram(program_two); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); 是否可以保证第一个计算着色器的所有调用将在第二个计算着色器的任何调用之前完成(以避免读写之间的数据争用buffer)?如果没有,如何同步它们?

1
我的GPU正在等待什么?
我正在编写一个与我的AMD Radeon HD 7800系列GPU一起使用的OpenCL程序。根据AMD的OpenCL编程指南,这一代GPU具有两个可以异步操作的硬件队列。 5.5.6命令队列 对于Southern Islands及更高版本,设备至少支持两个硬件计算队列。这样一来,应用程序就可以通过两个用于异步提交和可能执行的命令队列来提高小型调度的吞吐量。硬件计算队列按以下顺序选择:第一个队列=偶数OCL命令队列,第二个队列=奇数OCL队列。 为此,我创建了两个单独的OpenCL命令队列,以将数据提供给GPU。大致来说,在主机线程上运行的程序如下所示: static const int kNumQueues = 2; cl_command_queue default_queue; cl_command_queue work_queue[kNumQueues]; static const int N = 256; cl_mem gl_buffers[N]; cl_event finish_events[N]; clEnqueueAcquireGLObjects(default_queue, gl_buffers, N); int queue_idx = 0; for (int i = 0; i < N; ++i) { cl_command_queue queue = work_queue[queue_idx]; cl_mem …
11 gpgpu  opencl 

1
OpenGL镶嵌中的每个顶点计算
我尝试使用硬件镶嵌来实现基于位置的布料模拟。这意味着我只想将控制四边形上载到图形卡,然后使用镶嵌和几何着色在布料中创建节点。 这个想法遵循本文: David Huynh,“使用硬件镶嵌细分的布料模拟”(2011年)。论文。罗彻斯特理工学院 http://scholarworks.rit.edu/theses/265/ 我知道如何使用镶嵌来创建模拟点。我不知道如何将计算出的信息存储到帧缓冲区中。 几何图形以及镶嵌评估着色器具有每个顶点计算所需的信息。但是它们可以直接写入帧缓冲区吗? 我知道的片段着色器可以写入帧缓冲区,但是我的信息将被插值,并且我不再知道在哪个位置写入什么内容。

1
在GPU上使用查找表时的最佳内存访问?
我正在为单身汉的项目探索GPU上的等值面算法(特别是仅关注二进制输入/输出体素数据,而不是实值字段)。因此,我有一个良好的旧行军多维数据集的CPU实现,并在OpenFrameworks中运行,现在处于尝试将其移植到GLSL计算着色器的阶段,并在下潜之前考虑了陷阱。我只写了vert和frag着色器在此之前,这对我来说都是全新的。 我的第一个问题是如何有效地在工作组中的数十个或数百个线程中使用查找表?我了解GPU可以为不同的任务提供不同类型的内存,但不能完全确定每个GPU的工作方式或使用哪种类型。 Paul Bourke的经典copypasta表是256 * 16的数组,因此,如果使用标量字节类型,则可以将其打包为4kb纹理或SSBO。 问题是,如何阻止不同的线程相互跳闸?每个工作组中的许多多维数据集都可能具有相同的配置,因此尝试同时访问缓冲区中的相同位置。有解决方法或优化来解决吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.