Итак проблема такова:
Есть программа которая часто (и это её основная задача) обсчитывает большие массимы данных (двумерные таблицы) размером N штук. Для каждой таблицы выполняестя N^4 рассчетов по одинаковому алгоритму (арифметика с плавающей точкой: сложение, вычитания, деления, умножения, корни редко тригонометрия). Очеаидно все реализуемо на С/С++ но, дело в том что човременные компилерры недоросли до интелекта! Когда я в цикле вызываю функцию расчета для каждого шага компилятор неспособен правильно объединять соседнии шаги цикла и бызывать функцию над упакованными данными используя SIMD, если данные это не массив... Ну и потому для SIMD (который позволяет сократить количество шагов в 2 для double и в 4 для float раз) приходится программировать ручками - использрвать intristic. Для интело это что-то типа _mm_бла-бла-бла.
Собственно вопрос:
А что лучше - писать на С/С++ используя intristic или закодировать четверку расчетных функций на ассемблере и вызываьб их из кода высокого уровня?
1) Про С/С++ используя intristic я теряю межплатформенную переносимость так как интристики имеют полную ассоциатиыную связь в ассембелрными мнемониками конкрентой архитектуры (вернее они привязаны к архитектуре так наприпер на Itanium нет SSSE3 и соответствующие интристики незаработают) + проблемы с переносом между компиляторами (возможны ибо у gcc кое что расходится с интеловских хэндбуком в котором похоже просто лаг хотя) И главное я не в полне уверен в том какой код генерит компилятор. Для gcc встроенных функций __builtin_... гораздо меньше интристиков которые через них реализованы, так что жесткой гарантии в том что конкретный интристик породит конкретный код увы нет... Программирование на интристиках почти равно программированию на ассемблере тока что синтаксис длиннее...
2) Так на ассемблере пропадает проблема с переносом между компиляторами, и логика программирования та же что с интристиками, только вот тут есть точная гарантия какой код пишется и что он делает.
Так что лучше (с точки зрения оптимизации, простоты и удобства)?
Похожие темы
- Форум Assembler (2012)
- Форум Assembler (2019)
- Форум assembler (2003)
- Форум Assembler рекурсия (2020)
- Форум Assembler messages (2016)
- Форум assembler: wtf? (2016)
- Форум GNU Assembly (2021)
- Форум [жж]assembler (2009)
- Форум x86 assembler (2008)
- Форум Изучение Assembler (2009)