Программно определять количество физических процессоров / ядер или, если гиперпоточность активна в Windows, Mac и Linux - PullRequest
41 голосов
/ 25 мая 2010

У меня есть многопоточное приложение c ++, которое работает на Windows, Mac и нескольких версиях Linux.

Короче говоря: для того, чтобы он работал с максимальной эффективностью, я должен иметь возможность создавать отдельный поток для каждого физического процессора / ядра. Создание большего количества потоков, чем существует физических процессоров / ядер, значительно снижает производительность моей программы. Я уже могу правильно определить количество логических процессоров / ядер на всех трех этих платформах. Чтобы иметь возможность правильно определять количество физических процессоров / ядер, я должен определить, поддерживается ли гипертрединг И активен ли он.

Поэтому мой вопрос заключается в том, существует ли способ определить, поддерживается ли ГИПЕРТРИПРОДАЖА И РАЗРЕШЕНО? Если да, то как именно.

Ответы [ 11 ]

0 голосов
/ 25 мая 2010

Я не знаю, что все три предоставляют информацию одинаково, но если вы можете с уверенностью предположить, что ядро ​​NT будет сообщать информацию об устройстве в соответствии со стандартом POSIX (который NT предположительно поддерживает), то вы могли бы работать от этого стандарта.

Однако различия в управлении устройствами часто упоминаются как один из камней преткновения для кроссплатформенной разработки. В лучшем случае я бы реализовал это как три нити логики, я бы не стал писать один кусок кода для равномерной обработки всех платформ.

Хорошо, все, что предполагает C ++. Я полагаю, что для ASM вы будете работать только на процессорах x86 или amd64? Вам все равно понадобятся два пути ветвления, по одному для каждой архитектуры, и вам нужно будет тестировать Intel отдельно от AMD (IIRC), но в целом вы просто проверяете CPUID. Это то, что вы пытаетесь найти? CPUID от ASM на процессорах семейства Intel / AMD?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...