none
Как вывести контейнер данных array_view RRS feed

  • Вопрос

  • Столкнулся с проблеммой вывода данных на экран, При работе с данными на CPU для вывода изображения использую SetDIBitsToDevice в качестве картинки передаю массив int, потом понадобилась скорость в вычислениях для этого использовал parallel_for_each соответсвенно создаю array_view<int,T> после завершения данной функции мне нужно вывести мои данные на экран для этого использую метод .syncronize() и передаю в SetDIBitsToDevice массив которым я создавал контейнер array_view, дело в том что все работает правильно но вот скорость подводит, если не использовать метод .syncronize() по тестам скорость достивает 0.001 (выполнения функции\с, другими словами 1000 кадров\с)  но после использования .syncronize() т.е я копиркю данные из GPU в CPU у меня скорость падает очень значительно и по тестам это уже 0.02(50 кадров\с). Может есть какието другие методы вывода контейнера array_view или другие методы копирования???
    2 сентября 2018 г. 12:53

Ответы

  • Здравствуйте.

    Без вызова synchronize() невозможно гарантировать корректность данных в выходном массиве. Оптимизация копирования может быть такая:

    1. Не передавать выходной массив на GPU вызовом для него array_view::discard_data() перед запуском параллельной обработки.

    2. Использовать для замеров скорости сборку Release (а не Debug).


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа provokator2018 3 сентября 2018 г. 19:45
    3 сентября 2018 г. 12:05
  • спасибо огромное за ответ,а то в этой теме вроде знаю не мало и не много, а оказывается со средой плохо знаком 2-ой пункт помог, я просто запустил программу в Release и все работает бысто
    3 сентября 2018 г. 19:45

Все ответы

  • Здравствуйте.

    Без вызова synchronize() невозможно гарантировать корректность данных в выходном массиве. Оптимизация копирования может быть такая:

    1. Не передавать выходной массив на GPU вызовом для него array_view::discard_data() перед запуском параллельной обработки.

    2. Использовать для замеров скорости сборку Release (а не Debug).


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа provokator2018 3 сентября 2018 г. 19:45
    3 сентября 2018 г. 12:05
  • спасибо огромное за ответ,а то в этой теме вроде знаю не мало и не много, а оказывается со средой плохо знаком 2-ой пункт помог, я просто запустил программу в Release и все работает бысто
    3 сентября 2018 г. 19:45