最新帖子

页: [1] 2 3 ... 10
1
CUDA / Re: CUDA涉及的相关调度问题
« 最后发表 作者 sisiy 九月 23, 2021, 04:34:57 pm »
 
问题1:看MPS的手册和NV官方的CUDA手册,
问题2:看MPS手册和NV的官方手册(特别是driver api手册) 。
问题3:看NV官方手册。
问题4:看历代GTC和其他的分析文章。
问题5:看NV的CUDA手册,和profiler手册。
问题6:看NV的CUDA手册和PTX手册,
问题7: 看历代具体卡上的profiler的各种指标,和相应文档,

 


建议你买本CUDA编程的书籍:https://item.jd.com/13024122.html?cu=true&utm_source=c.duomai.com&utm_medium=tuiguang&utm_campaign=t_16282_176304306&utm_term=3c7011d14b494bb8963c7f72b643336c

这本是目前我们推荐CUDA学习用书,作者是比较靠谱的
2
CUDA / Re: CUDA涉及的相关调度问题
« 最后发表 作者 ytweiguang 九月 22, 2021, 07:34:43 pm »
https://zhuanlan.zhihu.com/p/266633373
这个可能回答您的问题
3
答复: 这等于说,要测试: (1)视频源编码延迟 + (2)移动/联动/电信等家的公网的传输延迟 + (3)接收端的解码延迟;
其中(2)和各地的网络情况有关,可能是这里面最大的一个延迟。而只有(1)和(3)是和我们的Jetson系列产品有关的。其中(1)进一步的分为视频源自身的延迟(USB摄像头/CSI摄像头/IP摄像头(RTSP的)),和硬件的nvenc的编码引入的延迟。而(3)基本只涉及NVDEC的硬件解码器自身的延迟。所以想回答这个问题,需要逐个测试这些。然后相加(在某种典型的硬件配置和运营商网络的案例下)才能得到。

根据其他客户之前的测试,RTSP的摄像头,也就是我们常说的IP摄像头,延迟非常严重,肉眼可见,挥动手就能看出来,估计几百ms。其他的两款摄像头应该都非常低,最低的应该是CSI的,但具体数值没有。所以问题就剩下了运营商网络的传输延迟,和NVENC/NVDEC的编码/解码延迟。

注意:RTSP的延迟高基本上是国产摄像头的问题。以及,考虑到RTSP内部已经编码过一次了(264或者265),如果不是为了减少传输量的话,也可以不经过NVENC的第一步,直接开始第2步的传输。所以如果是这种情况,可以考虑再减掉这个编码的时间,从第一步里。
(但是国产的摄像头很多用的海思芯片,编码真心渣渣,也许转码一次降低的传输量对应的时间,反而更加合算,但是具体如何,得测试,现在只是猜测)

4
你们测评过jetson系列“硬件编码推流-公网传输-解码”这个loop的时延么?
5
OpenCL / Re: clCreateBuffe很耗时吗
« 最后发表 作者 屠戮人神 九月 22, 2021, 01:47:36 pm »
有没有必要建立一个内存池类的东西 对clCreateBuffer和clReleaseMemObject 进行管理,有现成的模块吗,大家一般怎么处理?  多多指教 谢谢!

你好,作为规范的OpenCL并没有讨论clCreateBuffer是否耗时,这个得看具体实现。

例如某些AMD的实现可能在create的时候很快,但是在第一次访问或者Enqueue了Map/Read/Write之类的时候,在此时却比较慢(首次touch)。这个得看具体实现的。

此外,不建议频繁CreateBuffer和ReleaseMemObject的,如果真的需要这样做,我建议自行实现一个pool/heap(如果你感觉的那样)。

关于你的第三个问题,是否有现成的代码/库可以完成该设想,这个暂时不清楚。
6
OpenCL / clCreateBuffe很耗时吗
« 最后发表 作者 格致 九月 18, 2021, 10:36:33 am »
有没有必要建立一个内存池类的东西 对clCreateBuffer和clReleaseMemObject 进行管理,有现成的模块吗,大家一般怎么处理?  多多指教 谢谢!
7
CUDA / Re: CUDA里如何多GPU独立工作?
« 最后发表 作者 屠戮人神 九月 13, 2021, 07:01:19 pm »
嗯,关于(3)已经查看了资料,可以用;
关于(1),我纠结的是操作系统在调度主线线程时,对应的CUDA上下文是不是能自动的切换,测试过了,是会自动切换。
Mark下:
执行需要的功能前,cudaSetDevice()就行,不用担心在这个过程后,被其他线程设置使用另一个设备而破坏。

没太看懂你的意思?是我的中文水平下降了么。。。

你是想说每个线程要维持一个隐式的当前设备编号状态么?直接开N个线程,每个线程永恒的对应1个卡不就得了。
8
CUDA / Re: CUDA里如何多GPU独立工作?
« 最后发表 作者 hzhiyuan 九月 13, 2021, 05:21:34 pm »
(1) 请不要看老的资料: 首先cudaMalloc*()是线程间安全的,kernel的launch也是线程间安全的,没必要用锁来保护一段cudaMalloc或者启动kernel的代码。
(2) 我没看懂你的第二句话。多张卡上的多个流同样可以独立执行的。也不需要特殊的锁之类的保护某个片段。
(3) 可以。手册有,请看手册。
嗯,关于(3)已经查看了资料,可以用;
关于(1),我纠结的是操作系统在调度主线线程时,对应的CUDA上下文是不是能自动的切换,测试过了,是会自动切换。
Mark下:
执行需要的功能前,cudaSetDevice()就行,不用担心在这个过程后,被其他线程设置使用另一个设备而破坏。
9
CUDA / Re: CUDA里如何多GPU独立工作?
« 最后发表 作者 屠戮人神 九月 13, 2021, 02:19:21 pm »
需求是在使用不同的主机线程,可同时在不同的GPU执行完全不同的任务;
现在疑问的是:
1)cudaSetDevice虽然线程安全,但这样的每次执行显存分配,核函数前都设置下,还要在主机端加锁,防止多线程间弄串;
2)使用stream可以实现两线程独立的任务处理,但仅在相同显卡下有效,使用不同显卡依然要面临1)中cudaSetDevice的调用问题;
3)使用driver API,这样有了显式控制的上下文,整个操作就类似OpenCL了,但这样是不是过于复杂,能driver API和CUDA Runtime API混合调用吗?
求[名词6]给给建议

(1) 请不要看老的资料: 首先cudaMalloc*()是线程间安全的,kernel的launch也是线程间安全的,没必要用锁来保护一段cudaMalloc或者启动kernel的代码。
(2) 我没看懂你的第二句话。多张卡上的多个流同样可以独立执行的。也不需要特殊的锁之类的保护某个片段。
(3) 可以。手册有,请看手册。
10
CUDA / CUDA里如何多GPU独立工作?
« 最后发表 作者 hzhiyuan 九月 10, 2021, 11:03:19 am »
需求是在使用不同的主机线程,可同时在不同的GPU执行完全不同的任务;
现在疑问的是:
1)cudaSetDevice虽然线程安全,但这样的每次执行显存分配,核函数前都设置下,还要在主机端加锁,防止多线程间弄串;
2)使用stream可以实现两线程独立的任务处理,但仅在相同显卡下有效,使用不同显卡依然要面临1)中cudaSetDevice的调用问题;
3)使用driver API,这样有了显式控制的上下文,整个操作就类似OpenCL了,但这样是不是过于复杂,能driver API和CUDA Runtime API混合调用吗?
求[名词6]给给建议
页: [1] 2 3 ... 10