Я работаю с некоторым кодом для обработки чисел, который по своей природе интенсивно использует операции с плавающей запятой и просто медленный. Это исследовательский код, поэтому он может быть адаптирован к одной архитектуре и работает на ядре Core 2 Quad. Насколько я понимаю, для архитектуры Pentium 4 / Netburst Intel резко сократила FPU x87 и приняла дизайн, более ориентированный на SSE2. Это привело к ужасной производительности кода x87. Однако архитектура Core 2 более тесно связана с архитектурой P6, чем Netburst.
Мой компилятор вообще не нацелен на SSE, AFAIK, и я понимаю, что очень немногие компиляторы делают это хорошо. Кроме того, я использую язык D, который является довольно передовым, поэтому для него просто не так много компиляторов. Однако я не хочу переключать языки как из-за инерции моего существующего кода, так и потому, что, несмотря на его незрелость, мне очень нравится D.
Есть ли в архитектуре Core 2 урезанный FPU x87? Если да, то как лучше всего обойти это?
Я бы проголосовал за комментарий, если бы мог :)


Обратитесь к профилировщику - существует слишком много факторов, таких как промахи в кэше и задержка доступа к памяти, чтобы можно было приписать плохую производительность конкретным функциям процессора. Если вы хотите узнать, что происходит быстро, реализуйте тот же алгоритм, используя несколько разных методов, и профилируйте его.
Я также рекомендовал бы взглянуть на библиотеку liboil, которая позволяет оптимизировать использование SSE без написания сборки; Однако я не знаю, как он интегрируется с D.
D поддерживает C ABI, поэтому, если это библиотека C, ее можно будет использовать.
Однако мне бы не хотелось, чтобы там были накладные расходы на вызов функций C.
Кажется, у меня где-то в ящике есть старый 80387-16. Дайте мне знать, если вы хотите его купить. :)