Исторически проверка была забыта для добавления в компилятор. Когда он был обнаружен, я предлагаю сделать ошибку компиляции, но это оказалось предупреждением по причинам обратной совместимости. См. https://github.com/Microsoft/visualfsharp/pull/5192 и https://github.com/Microsoft/visualfsharp/pull/5610 для получения подробной информации.
Используйте sched_getcpu
для определения ЦП, на котором работает вызывающий поток. См. man getcpu
(системный вызов) и man sched_getcpu
(обертка библиотеки). Однако отметьте то, что это говорит:
информация, помещенная в CPU, как только гарантируют, будет текущей во время вызова: если привязка ЦП не была зафиксирована с помощью sched_setaffinity (2), ядро могло бы изменить ЦП в любое время. (Обычно этого не происходит, потому что планировщик пытается минимизировать перемещения между центральными процессорами для хранения кэшей горячими, но это возможно.) Вызывающая сторона должна быть готова обработать ситуацию, когда CPU и узлом больше не является текущий ЦП и узел.
Необходимо сделать что-то как:
Теперь Вы можете CPUID снова каждый раз, когда Вы должны и поиск, какое ядро Вы идете.
, Но я запросил бы, почему необходимо сделать это; обычно Вы хотите взять на себя управление через sched_setaffinity вместо того, чтобы узнать, какое ядро Вы идете (и даже это - довольно редкая вещь хотеть/нуждаться). (Вот почему я не знаю решающую деталь того, что выйти из CPUID точно, извините!)
Обновление: Просто ставший известный о sched_getcpu от ответа litb здесь. Намного лучше! (мой Debian/etch libc слишком стар, чтобы иметь его хотя).
Я не знаю ни о чем для получения текущего базового идентификатора. С миграцией задачи/процесса уровня ядра Вам не гарантировали бы это, это останется постоянным в течение любого отрезка времени, если Вы не работали в некоторой форме режима реального времени.
, Если Вы хотите быть на определенном ядре, можно поместить использование что sched_setaffinity()
функция или эти taskset
команда для запуска программы. Я полагаю, что им нужны поднятые разрешения на работу, все же. В Вашей программе Вы могли затем работать sched_getaffinity()
для наблюдения маски, которая была установлена ранее, и используйте это, поскольку лучшее предполагает ядро, на котором Вы выполняетесь.