The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Qt. Запуск потоков на отдельных ядрах процессора"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (GUI, XWindow, Qt, GTK)
Изначальное сообщение [ Отслеживать ]

"Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от goodfornothing email(ok) on 15-Янв-12, 21:49 
Здравствуйте!

Пишу кое-какую софтину на Qt.
В приложении работают несколько потоков. Для повышения быстродействия
хочу запускать их на разных ядрах процессора, но не знаю как. Хотелось
бы решить проблему средствами Qt.
Если кто решал подобную задачу, подскажите, пожалуйста!

Заранее спасибо!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Qt. Запуск потоков на отдельных ядрах процессора"  +1 +/
Сообщение от gfh1gfh1 (ok) on 16-Янв-12, 02:26 
Распределением ресурсов занимается ядро системы/планировщик задач.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от goodfornothing email(ok) on 16-Янв-12, 14:02 
> Распределением ресурсов занимается ядро системы/планировщик задач.

То есть, задача на уровне пользователя не решается???

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от gfh1gfh1 (ok) on 16-Янв-12, 14:56 
> То есть, задача на уровне пользователя не решается???

Решается, но тут уже системное программирование не на Qt.
Я  не пойму смысл вопроса. Если приложение написано многопоточным, то оно и так будет исполнятся на разных ядрах/процессорах. На каких именно - зависит уже от системы.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от goodfornothing email(ok) on 16-Янв-12, 15:26 
>> То есть, задача на уровне пользователя не решается???
> Решается, но тут уже системное программирование не на Qt.
> Я  не пойму смысл вопроса. Если приложение написано многопоточным, то оно
> и так будет исполнятся на разных ядрах/процессорах. На каких именно -
> зависит уже от системы.

Не очень-то оптимистичный ответ)
Поискал в нете, нашел некий класс QtConcurrent:

"Программы, написанные с помощью QtConcurrent, автоматически приводят количество используемых потоков в соответствие с доступным количеством процессорных ядер. Это означает, что приложения написанные сегодня, будут продолжать масштабироваться при развертывании на многоядерных системах в будущем."

Кто-нибудь использовал эту штуку?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от primus on 20-Янв-12, 17:50 
>[оверквотинг удален]
>> Я  не пойму смысл вопроса. Если приложение написано многопоточным, то оно
>> и так будет исполнятся на разных ядрах/процессорах. На каких именно -
>> зависит уже от системы.
> Не очень-то оптимистичный ответ)
> Поискал в нете, нашел некий класс QtConcurrent:
> "Программы, написанные с помощью QtConcurrent, автоматически приводят количество используемых
> потоков в соответствие с доступным количеством процессорных ядер. Это означает, что
> приложения написанные сегодня, будут продолжать масштабироваться при развертывании на
> многоядерных системах в будущем."
> Кто-нибудь использовал эту штуку?

Есть в Qt класс QThread
Наследуете от него класс, выполняющий Вашу, требующую распараллеливания функцию (со всякими там QMutex-ами и т.д., если надо).
Потом порождаете QThread::idealThreadCount() Ваших потоков и start()-уете их.
Получается оптимальная загрузка процессоров при мультиплатформенном решении и без системного программирования.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от goodfornothing email(ok) on 20-Янв-12, 18:16 
> Есть в Qt класс QThread
> Наследуете от него класс, выполняющий Вашу, требующую распараллеливания функцию (со всякими
> там QMutex-ами и т.д., если надо).
> Потом порождаете QThread::idealThreadCount() Ваших потоков и start()-уете их.
> Получается оптимальная загрузка процессоров при мультиплатформенном решении и без системного
> программирования.

"порождаете QThread::idealThreadCount() Ваших потоков и start()-уете их". Хотелось бы, чтобы я определял, сколько мне запустить потоков в приложении, а не функция idealThreadCount() =) Предположим, эта функция возвращает информацию о количестве потоков, которые можно параллельно запускать на имеющемся железе. Берем проц с 2 ядрами. По идее, функция вернет значение "2". А если в моей проге 3 потока и обязательным условием является то, что определенные 2 потока должны работать на разных ядрах? Получается, что 3 потока будут случайным образом раскиданы по 2 ядрам и те потоки, которые должны выполняться на разных ядрах, будут выполняться на одном ядре. Это не есть хорошо(

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от primus on 20-Янв-12, 19:34 
>[оверквотинг удален]
> "порождаете QThread::idealThreadCount() Ваших потоков и start()-уете их". Хотелось бы,
> чтобы я определял, сколько мне запустить потоков в приложении, а не
> функция idealThreadCount() =) Предположим, эта функция возвращает информацию о количестве
> потоков, которые можно параллельно запускать на имеющемся железе. Берем проц с
> 2 ядрами. По идее, функция вернет значение "2". А если в
> моей проге 3 потока и обязательным условием является то, что определенные
> 2 потока должны работать на разных ядрах? Получается, что 3 потока
> будут случайным образом раскиданы по 2 ядрам и те потоки, которые
> должны выполняться на разных ядрах, будут выполняться на одном ядре. Это
> не есть хорошо(

По любому, 3 потока будут случайным образом (нет, не случайным, это зависит от планировщика! слышим с галерки) раскиданы по двум ядрам. СтартанИте не QThread::idealThreadCount(), а Ваше количество потоков. А в Вашем случае, надо наверное использовать не Qt, и решение будет сильно платформенно зависимым и слишком "системным", чтобы опред-е потоки запускать на опред-х ядрах.


Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от goodfornothing email(ok) on 22-Янв-12, 17:14 
>[оверквотинг удален]
>> моей проге 3 потока и обязательным условием является то, что определенные
>> 2 потока должны работать на разных ядрах? Получается, что 3 потока
>> будут случайным образом раскиданы по 2 ядрам и те потоки, которые
>> должны выполняться на разных ядрах, будут выполняться на одном ядре. Это
>> не есть хорошо(
> По любому, 3 потока будут случайным образом (нет, не случайным, это зависит
> от планировщика! слышим с галерки) раскиданы по двум ядрам. СтартанИте не
> QThread::idealThreadCount(), а Ваше количество потоков. А в Вашем случае, надо наверное
> использовать не Qt, и решение будет сильно платформенно зависимым и слишком
> "системным", чтобы опред-е потоки запускать на опред-х ядрах.

"нет, не случайным, это зависит от планировщика!". С точки зрения программы, это процесс случайный, ведь я не могу управлять планировщиком. Каким образом будет действовать планировщик при запуске процесса, я не знаю, поэтому для меня это случайный процесс

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

6. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от goodfornothing email(ok) on 20-Янв-12, 17:56 
> Я  не пойму смысл вопроса. Если приложение написано многопоточным, то оно
> и так будет исполнятся на разных ядрах/процессорах. На каких именно -
> зависит уже от системы.

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

10. "Qt. Запуск потоков на отдельных ядрах процессора"  +/
Сообщение от fork (??) on 05-Фев-12, 02:06 
>На процессоре с несколькими ядрами каждое новое ядро загружается вычислениями при условии, >что ресурсы другого ядра полностью задействованы.
> Если я не
> ошибаюсь...)

Ошибаетесь )  

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру