novikovfb 0 Posted May 12 · Report post 3 minutes ago, whale said: Я в таких тонкостях разобраться не смогу, надо кого нить кто на этом собаку съел ) не надо обижать собак. Еще раз: есть обработка, она выполняется в одном потоке (данные взяли, обработали, записали). Винда оценивает загрузку процессора по отношению к полной загрузке всех ядер, т.е. на 4-ядерном процессоре этот один поток, ничего не ожидая и работая в полную силу, может загрузить процессор только на четверть. В Вашем случае никто не мешает разделить всю картинку на количество частей (полос), соответствующих количеству доступных физических ядер процессора и провести осреднение по каждой из частей параллельно, а потом сшить эти части. Кроме этого, выполнять для каждой строки 3 раза ScanLine нет смысла, достаточно это сделать только первый раз, а дальше при переходе к следующей строке переносить значения указателей. И, возможно, функция ScanLine написана не очень оптимально и ее можно как-то переписать для конкретного случая. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
whale 0 Posted May 12 (edited) · Report post 1 hour ago, novikovfb said: не надо обижать собак. Еще раз: есть обработка, она выполняется в одном потоке (данные взяли, обработали, записали). Винда оценивает загрузку процессора по отношению к полной загрузке всех ядер, т.е. на 4-ядерном процессоре этот один поток, ничего не ожидая и работая в полную силу, может загрузить процессор только на четверть. Смысла уже нет, проблемма решилась предложением к155lа3, дешево и сердито ) Scanline вообще исключилась из обработки в циклах. Теперь основные тормоза уже на строках типа lpDDSPrimary->Blt(&wr, lpDDSBack02, &sr, DDBLT_WAIT, 0); но тут уже вряд ли можно ускорить потоками. Edited May 12 by whale Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...