最新帖子

页: 1 [2] 3 4 ... 10
11
答复: 这等于说,要测试: (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步的传输。所以如果是这种情况,可以考虑再减掉这个编码的时间,从第一步里。
(但是国产的摄像头很多用的海思芯片,编码真心渣渣,也许转码一次降低的传输量对应的时间,反而更加合算,但是具体如何,得测试,现在只是猜测)

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

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

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

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

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

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

你是想说每个线程要维持一个隐式的当前设备编号状态么?直接开N个线程,每个线程永恒的对应1个卡不就得了。
16
CUDA / Re: CUDA里如何多GPU独立工作?
« 最后发表 作者 hzhiyuan 九月 13, 2021, 05:21:34 pm »
(1) 请不要看老的资料: 首先cudaMalloc*()是线程间安全的,kernel的launch也是线程间安全的,没必要用锁来保护一段cudaMalloc或者启动kernel的代码。
(2) 我没看懂你的第二句话。多张卡上的多个流同样可以独立执行的。也不需要特殊的锁之类的保护某个片段。
(3) 可以。手册有,请看手册。
嗯,关于(3)已经查看了资料,可以用;
关于(1),我纠结的是操作系统在调度主线线程时,对应的CUDA上下文是不是能自动的切换,测试过了,是会自动切换。
Mark下:
执行需要的功能前,cudaSetDevice()就行,不用担心在这个过程后,被其他线程设置使用另一个设备而破坏。
17
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) 可以。手册有,请看手册。
18
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]给给建议
19
CUDA / Re: 请问GPU中是如何利用cache访问显存,以及cache命中率如何计算
« 最后发表 作者 LibAndLab 九月 07, 2021, 06:33:42 pm »
有内置的__ldcs(p), __ldcg(p), __ldcs(p)之类的函数的。具体含义可以看PTX中的对应版本的cache控制解释:(附图中)
嗯嗯感谢回答,我去看一下
20
CUDA / Re: 请问GPU中是如何利用cache访问显存,以及cache命中率如何计算
« 最后发表 作者 屠戮人神 九月 07, 2021, 02:29:48 pm »
嗯,我觉得这个L1cache命中率应该是有办法推理出来的,因为这个值在这两次实验中比较有规律,如果我有新的发现会在本贴中发表,另外我想确认的是:
2080Ti默认开始L1cache,L1cache是可以缓存global memory,线程取数是会首先取访问L1cache然后miss后访问L2cache,会不会直接访问L2cache呢?对于何时用到L1cache何时用到L2cache我目前还是有点不太理解,如果了解以后又该如何在编写核函数时有效利用Cache提高性能,有没有一些技巧呢?

有内置的__ldcs(p), __ldcg(p), __ldcs(p)之类的函数的。具体含义可以看PTX中的对应版本的cache控制解释:(附图中)
页: 1 [2] 3 4 ... 10