Я заинтересован в том, чтобы на моем настольном компьютере / ноутбуке выполнялась довольно тяжелая обработка (не такая уж и плохая, для этого требуется кластер, но нужна хорошая домашняя машина). Мой вопрос заключается в том, сколько потоков нужно создать, чтобы выполнить работу максимально быстро (предположим, что приложение распределяет рабочую нагрузку с минимальными накладными расходами).

Я бы обычно создавал один поток на процессор, но мне было интересно, означает ли возможность гиперпоточности в Core i5/i7, что я должен фактически создавать два потока на процессор (то есть один поток на виртуальный процессор). Кто-нибудь знает?

* Очевидно, разумным ответом было бы попробовать и посмотреть. Поскольку это занимает около 12 часов, я предпочел бы сделать это правильно с первого раза, но я с радостью опубликую результаты, если у меня будет возможность запустить его в обоих направлениях.

2 ответа2

1

Это открытый вопрос, который требует дорогостоящего тестирования. Я лично видел, как это происходит в обоих направлениях. Если вы действительно не испортили свою многопоточность, разница составит около +-10%, поэтому стоит попробовать оба варианта. Даже если это займет много времени.

Во многих кластерах высокопроизводительных вычислений, созданных из компонентов Intel, HT отключена. Это не зря, так как эти коды имеют тенденцию насыщать аппаратное обеспечение и, следовательно, их производительность очень сильно зависит от насыщения доступа к памяти - что будет хуже в случае HT, поскольку потоки компилируются, включаются и выключаются. См. Http://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/ .

Но если ваш код не очень хорошо настроен, вы можете не увидеть почти такое же повышение производительности, см. Http://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/.

Похоже, что для однопроцессорных вычислений отключение гиперпоточности может увеличить часть программного обеспечения на 1%, а также значительно повредить другое программное обеспечение. Возможно на ~ 10%.

Это означает, что, если в ваших тестах не указано иное, вы должны создать 1 поток на каждое гиперпоточное / реальное ядро на настольном компьютере.

0

Я полностью говорю об опыте свертывания F @ H, сказав, что лучше всего использовать один поток на ядро (будь то виртуальный или физический).

Говоря об этом, было бы неплохо оставить одно ядро свободным для работы с фоновыми процессами и общими компьютерными задачами, поскольку даже небольшое использование может поставить задачу на колени.

Посмотрите на сродство процессора, если вы хотите отслеживать, где все работает. Как правило, назначать физические ядра первых (то есть: даже нумерации), то сердечники HyperThread.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .