Можно ли настроить сервер с многоядерным процессором, чтобы операционная система могла видеть все ядра как один ЦП и позволять процессору работать как один ЦП?
Многие современные серверы представляют собой многоядерные процессоры. Могут ли все ядра ЦП сообщать ОС как 1 ЦП? Это было бы удобно для запуска приложений, предназначенных для одного процессора.
Вы спрашиваете
«Могу ли я запустить однопоточное приложение на многоядерной машине и в полной мере использовать все возможности всех ядер?»
Ответ - нет
Однопоточное приложение может работать только на одном ядре и никогда не сможет использовать больше ресурсов, чем может предоставить одно ядро.
Вы хотите сказать, что с четырехъядерным процессором с частотой 3 ГГц вы хотите, чтобы ОС воспринимала его как одноядерный процессор с частотой 12 ГГц? Если это так, то нет, вы не можете этого сделать.
Если приложение специально не написано, чтобы требовать доступа к CPU0 (а я даже не уверен, возможно ли это), это не имеет значения.
В оборудовании Toms есть утилита для привязки приложения к определенному процессору при запуске. Я не пробовал, так что принимайте это как хотите. Это можно найти Вот
насколько я понимаю, вы хотите преобразовать двухъядерный процессор в один, который был бы [с точки зрения однопоточного приложения] вдвое быстрее, чем каждое из ядер. к сожалению, это невозможно. Наиболее близкой к этому является идея, реализованная в процессоре Intel i7, который может грамотно разогнать одно из ядер, если они видят, что оно в основном загружено, а другие ядра простаивают.
Если приложение может использовать только один процессор, оно все равно будет. Неважно, сколько их присутствует.
ОС будет видеть все включенные процессоры, но должна иметь возможность, например, разделять ядро и сокет (например, соответствие SQL Server). Но нет, вы не можете сделать так, чтобы 4 ядра отображались как одно для ОС, о которой я знаю.
В зависимости от BIOS вы можете отключить все ядра, кроме одного, но вы потеряете большую часть производительности. Вы также можете настроить программы для работы на одном ядре.
Создание виртуальной машины с одним ядром также может стать решением.
Что касается использования виртуальных машин для решения этой проблемы: суть в том, чтобы использовать столько одноядерных виртуальных машин, сколько физических ядер в системе. Затем запустите по одному экземпляру приложения на каждой виртуальной машине. Это фактически приведет к тому, что каждый отдельный экземпляр будет работать немного медленнее, чем если бы он был запущен сам по себе в ОС хоста; однако это позволит гораздо больше распараллелить рабочую нагрузку.
Все это предполагает, что ваша среда и код позволяют использовать несколько экземпляров этого приложения и что вы можете разбить рабочую нагрузку на части для экземпляров.
Конечно, Лучший способ сделать это - переписать приложение, чтобы оно было многопоточным; однако во многих случаях это может оказаться непрактичным с точки зрения человеко-часов разработчика.
AMD ОБРАТНАЯ ГИПЕРНИТЬ!
http://www.theinquirer.net/inquirer/news/1005560/amd-socket-am2-has-a-secret-weapon
(Спойлер: его не существует.)
Как было задано в комментарии OP, как насчет запуска ОС и приложения на виртуальной машине? Будет ли это по сути то же самое, что подделать единственный более быстрый процессор?
Короче нет. Виртуализация может работать быстро, только если она может выполнять инструкции ОС и приложений на ЦП изначально. Теоретически можно было бы переписать входящие инструкции, чтобы лучше использовать несколько процессоров, но это, скорее всего, не помогло бы во всех, кроме очень простых задач. Откуда вы знаете, что вы не выполняете инструкции по отправке данных, но вычисления с этими данными еще не завершены?
Это одна из причин, по которой приложения должны быть написаны и скомпилированы специально для многопоточной работы.
Как сказал Сейдж, если вы хотите видеть один большой процессор вместо нескольких ядер, тогда нет. По крайней мере, я не знаю.
Однако в Linux вы можете временно отключить ядро следующим образом:
echo 0 >> /sys/devices/system/cpu/cpu1/online
Однако ваша производительность пострадает, потому что теперь все, что работает в системе, будет работать на любых оставшихся ядрах.
Я вот именно об этом и думал. Я думаю, что этого можно было бы достичь на текущих многоядерных процессорах, если бы виртуальная машина использовала эмулируемый процессор, который мог бы синхронно распределять свою разрядность по всем физическим процессорам. Например, вы можете сделать так, чтобы 8-ядерный 16-поточный чип 3 ГГц отображался в ОС и программах, работающих в виртуальной машине, как 4-ядерный 8-поточный чип 6 ГГц или 2-ядерный 4-поточный чип 12 ГГц. Я не знаю такой виртуальной машины, но вполне возможно, что это можно сделать (очевидно, с некоторым уменьшением IPC от физического процессора).
Что касается микросхемы, предназначенной для этого, их нет, но если конструкция допускает физическое соединение разрядной ширины, соединяющей ядра, чтобы принимать инструкции по всей ширине за цикл, то вы могли бы сделать это без использования виртуальной машины и меньшего попал на IPC.
Очень удивлен, что ни одна компания, занимающаяся аппаратным или программным обеспечением, вроде VM Ware, Intel или AMD, не пыталась выяснить, как это сделать, учитывая текущее положение дел на рынке процессоров. Представьте, что вам не нужно выбирать между быстрым игровым процессором или гигантским многоядерным процессором со всеми этими дополнительными линиями PCIe ... вы могли бы просто изменить режим процессора, когда вы используете программу, которая не использует много потоков процессора. Тогда это снимает давление со стороны разработчиков, если ЦП может это делать, необходимость в многопоточности приложения меньше. Виртуальные машины уже могут выглядеть как больше ядер, чем ваш физический процессор при высоких налогах на IPC, нам нужно что-то, что может сделать наоборот, производительность многих программ все равно значительно улучшится, если вы сможете делать то, что просят в этом потоке.
Несколько лет назад у AMD было программное обеспечение Core Control, которое объединяло ядра для увеличения тактовой частоты. Пользователь был ограничен в комбинациях ядер, я использовал свои 6 ядер при слиянии двух ядер и смог получить до 4,2 тактовой частоты по сравнению с базовыми 3,2.
Хорошо ... давайте представим, что мы очень богаты и выпускаем новейший лучший процессор на момент написания этой статьи. Intel I9 7880X с 18 ядрами. Как связать все эти ядра с одним процессором? Быстрый ответ: вы не можете.
Лучший способ объяснить это - ваш процессор - это комната с 18 людьми внутри. Их нельзя объединить в 1 человека. Программист программного обеспечения должен настроить программу для использования большего количества ядер. Большинство программ используют только 1 ядро. Таким образом, проблема будет в том, что ядро будет выполнять по одной задаче за раз.
Некоторые программы знают, какими будут следующие задачи, поэтому они назначают больше ядер для выполнения большего количества функций, но, насколько мне известно, и на момент написания этого поста большинство программ MAINSTREAM использует 4 ядра. Есть несколько специальных программ, которые будут использовать весь ваш процессор.