标签: gpu

使用3D加速的图形渲染

我们为巨大的数据集生成图表.我们说的是每秒4096个样本,每个图表10分钟.一个简单的计算可​​以得到每行图4096*60*10 = 2457600个样本.每个样本都是双(8字节)精度FP.此外,我们在一个屏幕上渲染多个线图,最多约一百个.这使我们在一个屏幕上渲染大约25M个样本.使用常识和简单的技巧,我们可以使用CPU在2D画布上绘制此代码来获得此代码.Performant,即渲染时间低于一分钟.由于这是科学数据,我们不能省略任何样本.说真的,这不是一个选择.甚至不要开始考虑它.

当然,我们希望使用所有可用技术来改善渲染时间.多核,预渲染,缓存都非常有趣,但不要削减它.我们希望使用这些数据集进行30FPS渲染,最低为60FPS.我们现在这是一个雄心勃勃的目标.

卸载图形渲染的一种自然方法是使用系统的GPU.GPU可用于处理大型数据集并对其进行并行处理.一些简单的HelloWorld测试向我们展示了使用GPU时渲染速度的白天和黑夜的差异.

现在的问题是:GPU API,如OpenGL,DirectX和XNA都是为3D场景而制作的.因此,使用它们来渲染2D线图是可能的,但并不理想.在我们开发的概念证明中,我们遇到了我们需要将2D世界转换为3D世界.Suddnely我们必须使用和XYZ坐标系统与多边形,顶点和更多的善良.从发展的角度来看,这远非理想.代码变得难以理解,维护是一场噩梦,更多问题沸腾了.

你对3D的建议或想法是什么?这是实现转换两个系统(2D坐标与3D坐标和实体)的唯一方法吗?或者有更简洁的方法来实现这一目标吗?

- 为什么在一个像素上渲染多个样本是有用的? 因为它更好地代表了数据集.假设在一个像素上,您有值2,5和8.由于一些样本省略算法,只绘制了5.该行只会变为5,而不会变为8,因此数据会失真.您也可以争论相反,但事实是第一个参数对我们使用的数据集起作用.这正是我们不能省略样本的原因.

.net 3d gpu linegraph

8
推荐指数
3
解决办法
2948
查看次数

JIT编译器是否可以在幕后使用GPU进行某些操作?

如果我理解的任何部分是错误的,请随意纠正我.

我的理解是GPU提供普通CPU提供的指令子集,但执行速度要快得多.

我知道有很多方法可以将GPU周期用于非图形用途,但似乎(理论上)一种Just In Time编译的语言可以检测到合适GPU的存在并将一些工作卸载到GPU后面没有代码更改.

我的理解天真吗?它只是一个问题,它真的很复杂,还没有完成它?

theory jit gpu compilation

8
推荐指数
1
解决办法
669
查看次数

用于GPU的OpenCL FFT库?

是否有可用于使用OpenCL在GPU上运行的通用FFT库?据我所知,Apple二次OpenCL FFT的示例代码是唯一可用的代码吗?

对于非二次幂变换大小,是否存在任何此类库?如果没有,修改Apple OpenCL样本有多容易或多困难?

我正在研究具有非二次幂变换大小的图像处理应用程序,我将不得不做一大堆FFT,一个批量FFT.

gpu gpgpu fft opencl gpu-programming

8
推荐指数
1
解决办法
5661
查看次数

如何使用合并内存访问

我有'N'个线程同时在设备上执行,它们需要从全局内存中浮动M*N. 访问全局内存合并的正确方法是什么?在这件事情上,共享内存如何帮助?

gpu coalesce shared-memory

8
推荐指数
1
解决办法
4185
查看次数

MATLAB并行计算工具箱 - Parallization与GPU?

我正在和一些他们希望加速的MATLAB代码合作.他们目前正在尝试将所有这些代码转换为CUDA,以使其在CPU上运行.我认为使用MATLAB的并行计算工具箱加快速度,并在具有MATLAB的分布式计算工具箱的集群上运行它会更快,允许我在几个不同的工作节点上运行它.现在,作为并行计算工具箱的一部分,您可以使用GPUArray之类的东西.但是,我很困惑这是如何工作的.使用像parfor(并行化)和gpuarray(gpu编程)这样的东西是否相互兼容?我可以同时使用吗?可以在不同的工作节点(并行化)之间拆分某些东西,同时还可以使用每个工作者可用的任何GPU吗?

他们认为仍然值得探索将所有matlab代码转换为cuda代码以在具有多个GPU的机器上运行所花费的时间......但我认为正确的方法是使用已经内置在MATLAB中的功能.

任何帮助,建议,方向将非常感谢!

谢谢!

parallel-processing matlab gpu

8
推荐指数
2
解决办法
6418
查看次数

MPI + GPU:如何混合这两种技术

我的程序非常适合MPI.每个CPU都有自己的,特定的(复杂的)作业,产生一个double,然后我使用a MPI_Reduce来乘以每个CPU的结果.

但我重复了很多次(> 100,000次).因此,我想到GPU会大大加快速度.

我已经谷歌了,但找不到任何具体的东西.你如何将MPI与GPU混合?有没有办法让程序查询和验证"哦,这个等级是GPU,所有其他都是CPU"? 有推荐的教程还是什么?

重要的是,我不想要或不需要全套GPU.我真的只需要很多CPU,然后单个GPU来加速常用MPI_Reduce操作.

这是我正在谈论的示意图:

假设我有500个CPU.每个CPU以某种方式产生,比如50 double秒.我需要将所有这些250,00加double在一起.然后我重复10,000到100万次.如果我可以拥有一个GPU(除500个CPU之外),这可能非常有效.double对于所有~100万个"状态",每个CPU将计算其50 秒.然后,所有500个CPU都会将它们发送double到GPU.然后GPU将为250 double万个"状态"中的每个状态乘以250,000 秒,产生100万个doubles.
这些数字并不准确.计算确实非常大.我只是想传达一般问题.

gpu hpc mpi

8
推荐指数
1
解决办法
5669
查看次数

我可以在intel iris上运行Cuda或opencl吗?

我有一个Macbook pro 2014年中期的intel iris和intel核心i5处理器16GB的RAM.我正在计划学习一些光线追踪的3D.但是,我不确定,如果我的笔记本电脑可以在没有任何nvidia硬件的情况下快速渲染.

所以,我很感激,如果有人能告诉我是否可以使用Cuda,那么请您以非常简单的方式教我如何在影响后启用OpenCL.我正在寻找初学者的任何教程,以学习如何创建或构建OpenCL?

xcode gpu opencl

8
推荐指数
1
解决办法
2万
查看次数

限制CUDA中的寄存器使用:__ launch_bounds__ vs maxrregcount

来自NVIDIA CUDA C编程指南:

可以使用maxrregcount编译器选项控制寄存器使用,也可以按启动边界中的描述启动边界.

从我的理解(并纠正我,如果我错了),虽然-maxrregcount限制整个.cu文件可能使用的寄存器数量,__launch_bounds__限定符定义maxThreadsPerBlockminBlocksPerMultiprocessor每个__global__内核.这两个完成相同的任务,但有两种不同的方式.

我的用法要求我40每个线程都有寄存器以最大化性能.因此,我可以使用-maxrregcount 40.我也可以40通过使用强制寄存器,__launch_bounds__(256, 6)但这会导致加载和存储寄存器溢出.

导致这些寄存器泄漏的两者之间有什么区别?

cuda gpu nvidia nvcc

8
推荐指数
1
解决办法
5093
查看次数

如何将报告_tensor_allocations_upon_oom添加到Keras中的RunOptions

我正在尝试使用Keras在GPU上训练神经网络并且我得到"资源耗尽:分配张量时的OOM"错误.它试图分配的特定张量不是很大,所以我假设一些先前的张量消耗了几乎所有的VRAM.错误消息附带一个提示,表明:

提示:如果要在OOM发生时查看已分配的张量列表,请将report_tensor_allocations_upon_oom添加到RunOptions以获取当前分配信息.

这听起来不错,但我该怎么做?RunOptions似乎是一个Tensorflow的东西,我能找到的小文档将它与"会话"联系起来.我正在使用Keras,所以Tensorflow隐藏在一个抽象层下,其会话在另一层下面.

如何挖掘所有内容以设置此选项以使其生效?

python gpu keras tensorflow

8
推荐指数
1
解决办法
8212
查看次数

TensorFlow 中 CPU 到 GPU 的数据传输速度慢吗?

我已经使用 TensorFlow 测试了 CPU 到 GPU 的数据传输吞吐量,它似乎明显低于 PyTorch。对于大张量,速度要慢 2 倍到 5 倍。在 TF 中,我达到了 25MB 张量的最大速度(~4 GB/s),并且随着张量大小的增加,速度下降到 2 GB/s。PyTorch 数据传输速度随着张量大小而增长,并在 9 GB/s(25MB 张量)时饱和。该行为在 RTX 2080ti 和 GTX 1080ti 以及 TF 2.4 和 2.6 上是一致的。

难道我做错了什么?有什么方法可以匹配 PyTorch 的数据吞吐量吗?我不仅仅是想隐藏延迟,例如使用异步队列,而且我想获得完整的数据带宽。

TF 中批量 256x256x3 图像的结果(平均超过 100 次传输):

code: tf.cast(x, dtype=tf.float32)[0, 0]
Batch size 1; Batch time 0.0005; BPS 1851.8; FPS 1851.8; MB/S 364.1
Batch size 2; Batch time 0.0004; BPS 2223.5; FPS 4447.1; MB/S 874.3
Batch size 4; Batch time 0.0006; BPS 1555.2; FPS …
Run Code Online (Sandbox Code Playgroud)

python performance gpu pci-e tensorflow

8
推荐指数
1
解决办法
1541
查看次数