<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: v4l2 cuda ускорение копирования кадра в память GPU</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html</link>
    <description>Всем привет,&lt;br&gt;&lt;br&gt;Пишу код на Ubuntu 14, Tegra 3, камера с разрешением 4224x3156, yuv422, 26Мб. Забираю кадр каждые 70мс, далее memcpy в pinned memory host, cudaMemcpy из pinned host в divice memory и далее обработка в GPU.&lt;br&gt;&lt;br&gt;Memcpy занимает 200мс. Это больше чем частота кадров. Как можно ускорить загрузку буфера кадра в память GPU?&lt;br&gt;&lt;br&gt;Можно ли использовать v4l2 IO_METHOD_USERPTR в качестве pinned memory, что бы не тратить время на memcpy.&lt;br&gt;&lt;br&gt;С уважением Виктор.&lt;br&gt;</description>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (fail)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#19</link>
    <pubDate>Fri, 08 Jul 2016 11:43:56 GMT</pubDate>
    <description>&amp;gt; Решилось с помощью V4L2_MEMORY_USERPTR.&lt;br&gt;&amp;gt; В найденном варианте v4l2 нашел почти похожий пример(http://www.friendlyarm.net/forum/topic/1006), &lt;br&gt;&amp;gt; как в стандартном примере, но пользовательский буфер выделяется не malloc, а &lt;br&gt;&amp;gt; memalign из malloc.h. Иначе Invalid argument error 22.&lt;br&gt;&lt;br&gt;мда, &lt;br&gt;насчет memory alignment - совсем из головы вылетело - хотя:&lt;br&gt;&lt;br&gt; - специализированные &#123;C,G&#125;PU &lt;br&gt; - прочая эмбедовка&lt;br&gt;&lt;br&gt; к этому фактору бывают очень чуствительны..&lt;br&gt;&lt;br&gt;...&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#18</link>
    <pubDate>Tue, 05 Jul 2016 20:53:09 GMT</pubDate>
    <description>Решилось с помощью V4L2_MEMORY_USERPTR.&lt;br&gt;&lt;br&gt;В найденном варианте v4l2 нашел почти похожий пример(http://www.friendlyarm.net/forum/topic/1006), как в стандартном примере, но пользовательский буфер выделяется не malloc, а memalign из malloc.h. Иначе Invalid argument error 22.&lt;br&gt;&lt;br&gt;Настраиваемся на IO_METHOD_USERPTR и в init_userp:&lt;br&gt;&lt;br&gt;        unsigned int page_size;&lt;br&gt;&lt;br&gt;        page_size = getpagesize ();&lt;br&gt;        buffer_size = (buffer_size + page_size - 1) &amp; ~(page_size - 1);&lt;br&gt;&lt;br&gt;..................&lt;br&gt;..................&lt;br&gt;&lt;br&gt;  for (n_buffers = 0; n_buffers &amp;lt; 4; ++n_buffers) &#123;&lt;br&gt;                buffers&#091;n_buffers&#093;.length = buffer_size;&lt;br&gt;                buffers&#091;n_buffers&#093;.start = memalign (/* boundary */page_size,buffer_size);&lt;br&gt;&lt;br&gt;                if (!buffers&#091;n_buffers&#093;.start) &#123;&lt;br&gt;          fprintf (stderr, &quot;Out of memory&#092;n&quot;);&lt;br&gt;                exit (EXIT_FAILURE);&lt;br&gt;    &#125;&lt;br&gt;        &#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;И далее работаем с буфером buf.m.userptr размера buf.length.&lt;br&gt;&lt;br&gt;Что в отличии от mmap буфера, позволяет быстро копировать данные кадра в pinn</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#17</link>
    <pubDate>Mon, 04 Jul 2016 20:28:48 GMT</pubDate>
    <description>Сделал тест:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;- memcpy from userspace pointer to userspace pointer is about 33ms per 26mb&lt;br&gt;- memcpy from userspace pointer to pinned pointer is about 33ms per 26mb&lt;br&gt;- memcpy from mmap v4l pointer to pinned is about 200ms per 26mb&lt;br&gt;&lt;br&gt;Mmap медленный. Интересно почему..&lt;br&gt;&lt;br&gt;Тут у человека такая же проблема: https://devtalk.nvidia.com/default/topic/948258/jetson-tk1/performance-of-v4l2_memory_mmap-buffer-memcpy/&lt;br&gt;</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#16</link>
    <pubDate>Sun, 03 Jul 2016 20:10:01 GMT</pubDate>
    <description>v4l2_memory_dmabuf не поддерживается.&lt;br&gt;&lt;br&gt;Только MMAP.&lt;br&gt;&lt;br&gt;Пока сделал параллельно. Укладываюсь в 70мс. Но позже надо будет в mp4 жать, надеюсь CUDA на себя все возьмет.&lt;br&gt;</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#15</link>
    <pubDate>Mon, 27 Jun 2016 19:21:32 GMT</pubDate>
    <description>Спасибо. Все ваши советы обязательно проверю. Не было времени пока.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (fail_)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#14</link>
    <pubDate>Mon, 27 Jun 2016 04:54:30 GMT</pubDate>
    <description>&amp;gt; По V4L2: &lt;br&gt;&lt;br&gt;https://devtalk.nvidia.com/default/topic/894783/jetson-tk1/v4l2_memory_userptr-not-working-with-soc-camera-/ &lt;br&gt;&amp;gt; IO_METHOD_USERPTR не поддерживается. Только MMAP.&lt;br&gt;&lt;br&gt;остаются: v4l2_memory_mmap &amp; v4l2_memory_dmabuf&lt;br&gt;может что-то из этого зафурычит..&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#13</link>
    <pubDate>Sun, 26 Jun 2016 22:46:27 GMT</pubDate>
    <description>По V4L2:&lt;br&gt;&lt;br&gt;https://devtalk.nvidia.com/default/topic/894783/jetson-tk1/v4l2_memory_userptr-not-working-with-soc-camera-/&lt;br&gt;&lt;br&gt;IO_METHOD_USERPTR не поддерживается. Только MMAP.&lt;br&gt;</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#12</link>
    <pubDate>Sun, 26 Jun 2016 21:11:57 GMT</pubDate>
    <description>Пробовал memcpy из простого буфера в простой:&lt;br&gt;&lt;br&gt;uchar * pIn&#123; new uchar&#091; size &#093;&#125;;&lt;br&gt;uchar * pOut&#123; new uchar&#091; size &#093;&#125;;&lt;br&gt;memcpy( pOut, pIn, size );&lt;br&gt;delete &#091;&#093; pIn;&lt;br&gt;delete &#091;&#093; pOut;&lt;br&gt;&lt;br&gt;Тоже около 200мс. &lt;br&gt;&lt;br&gt;Пока получается, что на Tegra TK1 4224х3156х2 байт копируются с такой скоростью.&lt;br&gt;Но это учитывая, то, что там драйвер камеры и подсистема V4L2 делает.&lt;br&gt;Буду разбираться. &lt;br&gt;&lt;br&gt;Сделал вариант с OpenMP, реально на 4 поделилось время:&lt;br&gt;&lt;br&gt;static void memcpy_openmp( uchar * pOut, const uchar * pIn, const int size ) &#123;&lt;br&gt;&lt;br&gt;    //omp_set_dynamic( 0 );&lt;br&gt;    omp_set_num_threads( 4 );&lt;br&gt;    //int blockSize&#123; 1666368 &#125;;&lt;br&gt;    int blockSize&#123; size / 4 &#125;;&lt;br&gt;    int th_id, nthreads;&lt;br&gt;    #pragma omp parallel for&lt;br&gt;        for( int i = 0; i &amp;lt; size / blockSize; i++ )&#123;&lt;br&gt;            int offset&#123; i * blockSize &#125;;&lt;br&gt;            memcpy( pOut + offset, pIn + offset, blockSize );&lt;br&gt;            th_id = omp_get_thread_num();&lt;br&gt;            nthreads = omp_get_num_threads();&lt;br&gt;            qDebug() &amp;lt;&amp;lt; th_id &amp;lt;&amp;lt; nthreads;&lt;br&gt;        &#125;&lt;br&gt;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Где-то 70-80м</description>
</item>

<item>
    <title>v4l2 cuda ускорение копирования кадра в память GPU (vsw)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/10107.html#11</link>
    <pubDate>Thu, 23 Jun 2016 19:42:22 GMT</pubDate>
    <description>Реально не знаю.&lt;br&gt;По вики много.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
