У меня есть менеджер по неупорядоченному хранению памяти, который делит "кучу" в различные сегменты на основе количества процессоров в системе. Память может только быть выделена на разделе, который идет с процессором в настоящее время рабочего потока. Это поможет позволить различным процессорам продолжать работать, даже если два различных захотят выделить память одновременно, по крайней мере, я верю.
Я нашел функцию GetCurrentProcessorNumber()
для Windows, но это только работает над Windows Vista и позже. Существует ли метод, который работает над Windows XP?
Кроме того, это может быть сделано с pthreads в системе POSIX?
Для XP быстрый поиск в Google показал следующее: https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Это поможет?
Из вывода man sched_getcpu
:
NAME
sched_getcpu - determine CPU on which the calling thread is running
SYNOPSIS
#define _GNU_SOURCE
#include <utmpx.h>
int sched_getcpu(void);
DESCRIPTION
sched_getcpu() returns the number of the CPU
on which the calling thread is currently executing.
RETURN VALUE
On success, sched_getcpu() returns a non-negative CPU number.
On error, -1 is returned and errno is set to indicate the error.
SEE ALSO
getcpu(2)
К сожалению, это специфично для Linux. Я сомневаюсь, что есть переносной способ сделать это.
Мне этот дизайн плохо пахнет. Похоже, вы делаете предположение, что поток будет оставаться связанным с конкретным процессором. Это не гарантируется. Да, поток обычно может оставаться на одном ЦП, но это не обязательно, и в конечном итоге ваша программа будет иметь поток, который переключает ЦП. Это может происходить не часто, но рано или поздно это произойдет. Если ваш дизайн не учитывает это, то вы, скорее всего, в конечном итоге столкнетесь с какой-то трудно отслеживаемой ошибкой.
Позвольте мне задать вопрос: что произойдет, если память будет выделена на одном процессоре и освобождена на другом? Как ваша куча с этим справится?