Запуск 8 потоков на 8-ядерном процессоре не делает загрузку процессора 100%

Я учусь использовать многопоточность на простом примере с кейгеном.
Я реализовал алгоритм совпадения хэш-ключей, который увеличивает один из ключей и сравнивает его с оригиналом, и он должен останавливаться после совпадения двух хэш-ключей. Поэтому мне нужно перебрать 0xffffffffff различных хеш-ключей, чтобы найти совпадение.
Я прочитал несколько msdn по этой теме и решил запустить 8 потоков одинакового соответствия для цикла, начиная с thread_number_offset и увеличивая каждую итерацию на number_of_threads.
Вот стартовый код:

struct Args{
Args(char* in_CT, Chunk* in_chunk, int in_thread_id, int in_stride) :
stride{in_stride},
input_CT{ in_CT },
chunk{ in_chunk },
thread_id{ in_thread_id }{}
Chunk* chunk;
char* input_CT;
int thread_id;
int stride;
};
void Match(void *args){
Args *a = (Args*)args;
a->chunk->MatchCTMP(a->input_CT,a->thread_id,a->stride);
}

for (unsigned int i = 0; i < threads_num; ++i){
CTTable[i] = new char[0x100];
ArgsTable[i] = new Args(CTTable[i], &in_chunk, i, threads_num);
_beginthread(ThreadFunc, 0, ArgsTable[i]);
}

вот функция с циклом for:

void Chunk::MatchCTMP(char* in_dest_CT,int in_thread_id, int in_stride){
unsigned int i = in_thread_id;
unsigned int i_end = MAX - i;
for (; i < i_end; i += in_stride){
hash[0] = i & 0xff;
...
...HashFunction(in_dest_CT);//CT is Compare Table
...CompareFunction(in_dest_CT, in_source_CT);

}
}

Все хорошо, но загрузка процессора в окне диспетчера задач не превышает 10-15 процентов;
Также не все ядра действительно загружены. Ядра 0,2,4,6 заняты, а 1,3,5,7.
Я думал, что постоянная итерация на максимальном количестве ядер процессора должна немедленно загружать процессор при полной загрузке.
Почему это происходит? Это намного сложнее, чем я?

-1

Решение

Хорошо, у меня есть такая конструкция после отключения которой у меня 100% загрузка процессора:

WaitForSingleObject(mutex, INFINITE);
std::cout << buffer;
ReleaseMutex(mutex);

где buffer был буфером символов [256] Так что это была какая-то проблема синхронизации, которую я собираюсь копать дальше

0

Другие решения