1) Нет
Если приложение использует, например, в математике библиотеки Intel и скомпилировано с правильными переключателями, процедуры, такие как FFT, будут во время выполнения будут выделены в отдельные потоки соответствующих количество ядер в машине. Исходный код остается «однопоточным», но библиотека создает и уничтожает потоки за спиной.
Аналогичным образом некоторые компиляторы (например, Intel icc, компилятор Sun's C) могут превращать некоторые циклы в отдельные потоки, каждый из которых выполняет роль итераций. Снова исходный код выглядит однопоточным, но компилятор генерирует многопоточный код от вашего имени. Это немного похоже на автоматическое применение OpenMP к исходному коду.
Операционные системы не могут догадываться, что приложение будет делать, поэтому они не могут вмешиваться в это. Библиотеки и компиляторы знают, что должно произойти, чтобы они могли.
Библиотеки и трюки компилятора, подобные этому, были разработаны таким образом, чтобы программисты могли извлекать более высокую производительность из «единого» потока кода. Intel начала добавлять подобные функции в свою библиотеку математики примерно в то же самое время, когда они начали направлять на многоядерные процессоры. Идея заключалась в том, чтобы создать (с точки зрения программиста) впечатление лучшего «одного» потока производительности, в то время как скорость фактически была доставлена несколькими ядрами. Аналогично Sun, когда они начали делать многопроцессорные компьютеры.
И все, кто более или менее отказывается от существенных улучшений производительности одного ядра, это единственный путь вперед.
2) Да. Как еще он это сделает?
1. № 2. Да ........ –
Я не понимаю, почему этот вопрос получил 4 upvotes? 4 человека с одинаковой домашней работой? –
Поверьте мне, приятель. Не домашнее задание. – KhaledWas