САБЖ Есть 2х ядерный атлон Есть 2 массива данных Есть одна программа (читай один процесс) для сортировки Хочу выиграть в производительности Создаю 2 потока, внутри которых процедуры сортировки - каждый поток сортирует свой массив смотрю в диспетчере задач - проц загружен только на 50% т.е. лопатит лишь одно ядро Если создать удаленный поток в другом процессе - тогда 100% загрузка - работают оба ядра видать вопрос: почему из одного процесса не получается подключить к делу оба ядра? Что я делаю не так? Треды создаю обычным CreateThread()
не процессору а OS, Magnum попробуй поставь задержку перед выполнением второго потока, возмоможно Ось увидит что первое ядро загружено и создаст поток на втором. ps: это предпложение =)
Magnum Смотри функции SetProcessAffinityMask SetThreadAffinityMask но сначала глянь в диспетчере задач на каких ядрах может выполняться программа.
Magnum И еще, наверное, нужно поставить потокам сответсвующий приоритет, чтобы процессор все свое время отдал именно им.
а кикаие значения она принимает, в msdn написано только dwThreadAffinityMask [in] The affinity mask for the thread. и где эту маску брать?
По GetProcessAffinityMask определяешь доступные для процесса номера процессоров и потом одному потоку назначаешь один номер, другому другой
2FED В Ремарках написано же: Нитевая Сродство-Маска есть битовый вектор, в котором каждый бит представляет процессор, на котором данная нить может бежать. Нитевая Сродство-Маска должна быть подмножеством Сродство-Маски процесса, к которому относится эта нить. 0x00000001 <- Только на первом процессоре 0x00000002 <- Только на втором процессоре 0x00000003 <- Только на первом и втором процессорах