Russian Qt Forum
Января 17, 2025, 10:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: MMX регистры и метод Робертса  (Прочитано 12924 раз)
spectre71
Гость
« Ответ #15 : Мая 19, 2010, 19:19 »

Можешь сделать попроще, не должно сильно повлиять на производительность
Мне просто не нравятся эти abs, поэтому такое извращение.

Код:
                A = curbuf[i];
                B = curbuf[i+width+1];
                C = curbuf[i+width];
                D = curbuf[i+1];
                A = ((A>B)?A-B:B-A) + (C>D)?C-D:D-C;
                curbuf[i] = A;
                B = prevbuf[i];
                if(((A>B)?A-B:B-A)  > _sensitive) {sens[sens_count]=i, sens_count++;}
Записан
spectre71
Гость
« Ответ #16 : Мая 19, 2010, 19:22 »

Но нет увеличения производительности. Как я могу точно отмерить используемое проц.время? Я забыл как эта функция называется.

Нужно делать профилирование.
А ты уверен в том что это было слабое место, может основные потери не здесь! Вот и незаметно разницы.
Записан
alexis031182
Гость
« Ответ #17 : Мая 19, 2010, 19:25 »

Можешь сделать попроще, не должно сильно повлиять на производительность
Мне просто не нравятся эти abs, поэтому такое извращение.
...
Почему извращение? Наоборот твой (на ты) код более практичный. Смысл "гулять" по массиву через индексы, когда можно сделать простую инкрементацию?
Записан
alexis031182
Гость
« Ответ #18 : Мая 19, 2010, 19:28 »

Нужно делать профилирование.
А ты уверен в том что это было слабое место, может основные потери не здесь! Вот и незаметно разницы.
Нет, не уверен. Самое интересное, что при каждом новом запуске загрузка проца значительно отличается и "гуляет" то в плюс, то в минус. Я вот думаю, может я мьютексов где попало понапихал за зря?
Записан
spectre71
Гость
« Ответ #19 : Мая 19, 2010, 19:36 »

Нужно делать профилирование.
А ты уверен в том что это было слабое место, может основные потери не здесь! Вот и незаметно разницы.
Нет, не уверен. Самое интересное, что при каждом новом запуске загрузка проца значительно отличается и "гуляет" то в плюс, то в минус. Я вот думаю, может я мьютексов где попало понапихал за зря?

Мютексы ты точно напихал почем зря. Улыбающийся
Я не разбирался где у тебя многопоточность.
Что у тебя там раскидывается по потокам?
Записан
alexis031182
Гость
« Ответ #20 : Мая 19, 2010, 19:41 »

Мютексы ты точно напихал почем зря. Улыбающийся
Я не разбирался где у тебя многопоточность.
Что у тебя там раскидывается по потокам?
8 потоков на камеры + 8 на движение + 8 на запись; точнее потоки движения и записи взаимозаменяемы, то есть для каждой конкретной камеры работает либо движение, либо запись в файл. Итого: 16 одновременно работающих потоков для 8 камер. Перебор?
Записан
spectre71
Гость
« Ответ #21 : Мая 19, 2010, 19:48 »

Когда точно не нужно использовать mutex.
Когда абсолютно точно известно что в данный момент конкретные данные может использовать только один поток.
Код:
V4L2::V4L2(QString fname, int index, QObject *parent) : VidDevice(index, parent)
{
mutex.lock();
devState = UNACTIVE;
mutex.unlock();

Зачем Непонимающий
И вообще, ты уверен что его нужно защищать в других местах, что другой поток будет обращаться к данной переменной и некоторым другим подобным находящимся у тебя в "private:"
Записан
spectre71
Гость
« Ответ #22 : Мая 19, 2010, 19:54 »

Мютексы ты точно напихал почем зря. Улыбающийся
Я не разбирался где у тебя многопоточность.
Что у тебя там раскидывается по потокам?
8 потоков на камеры + 8 на движение + 8 на запись; точнее потоки движения и записи взаимозаменяемы, то есть для каждой конкретной камеры работает либо движение, либо запись в файл. Итого: 16 одновременно работающих потоков для 8 камер. Перебор?

Тебе для оптимизации нужен пока только 1 поток на движение (и возможно на камеру)
Предачу больших данных между потоками(если такое есть) нужно будет оптимизировать потом.
Не нужно засовывать под мютекс те перменные которые никогда не будут использоваться в другом потоке.

Записан
alexis031182
Гость
« Ответ #23 : Мая 19, 2010, 19:57 »

Когда точно не нужно использовать mutex.
Когда абсолютно точно известно что в данный момент конкретные данные может использовать только один поток.
...
Зачем Непонимающий
И вообще, ты уверен что его нужно защищать в других местах, что другой поток будет обращаться к данной переменной и некоторым другим подобным находящимся у тебя в "private:"
Теперь уверен, что нет. Это я исправлю. Но вот сейчас попробовал выкинуть все мьютексы, находящиеся непосредственно в самых критичных для скорости функциях и... получилось только хуже, загрузка обоих ядер на 100%.
Записан
alexis031182
Гость
« Ответ #24 : Мая 19, 2010, 19:59 »

Тебе для оптимизации нужен пока только 1 поток на движение (и возможно на камеру)
Предачу больших данных между потоками(если такое есть) нужно будет оптимизировать потом.
Не нужно засовывать под мютекс те перменные которые никогда не будут использоваться в другом потоке.
Сейчас организую однокамерную систему. Что-то не подумал об этом сразу.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.035 секунд. Запросов: 21.