Видео карта ATI 6750.
Хотя это не принципиально.
Первые видео карты умели выводить текстурированные треугольники. Правильное текстурированные требует деления. А деление выполнялось несколько тактов. Поэтому для ускорения применяют интерполяцию, короче одинаковые пиксели группируются в блоки по 16 пикселей.
Отсюда появились MMX который развился в SSE, а тот в AVL.
На видео картах это вылилось, в то что над 4 соседними пикселями выполняется одна операция. А так как в пикселе 4 канала RGBA, и операции однородные то и группируют данные в блок по 16 и выполняют 1 операцию.
Затем для спец эффектов NVIDIA предложила комбинировать операции. В последствие эта технология была переименовала в шейдеры.
Технологически это решалась в виде
Код:
+---+ +---+ +---+
->|op1|->|op2|->|op3|->результат
+---+ +---+ +---+
Поток или конвеер. Идея не новая.
Отсюда взялась потоковая обработка.
У Intеl к этому времени уже давно была своя технология. Они могли исполнять параллельно несколько команд, за счёт переупорядывачивания. Архитектурно это провал. Так как более чем 4-6 команд они не могут исполнять.
В отличие от архитектуры видео карты где такой поток спокойно наращивается. Сейчас 16 или 32.
Но у Intel есть плюс в них первоначально были заложены условные переходы и циклы. Виде карта на это не была рассчитана. Она могла выполнить достаточно сложную формулу много раз.
Циклы и условные переходы приходилось выполнять при помощи центрального процессора.
Следующий шаг был создание ядер. Intel пошла простому она взяла свой процессор и продублировало. Получила что может исполнять много разных потоков. Проблема ядер это синхронизация. Причем не только аппаратных но и программных. Разделить код по ядрам значительно труднее. Эффективность проявляется при достаточно больших циклах.
А вот в видеокартах ядра потребовались именно для эффективной реализации условных переходов. Но проблемы синхронизации остались.
Ядро - это группа вычислителей которая может работать независимо от других.
Наращивать число ядер физически можно.
Но у intel будут проблемы при конструирования компилятора. У них процессор не выполняет команды заданное число тактов, умудрились они это как-то сделать. Так что им долго надо будет всё тестировать. А вот видео карта выполняет команды заданное число тактов.
При разработки компилятора лучше физические ядра сгруппировать и использовать как расширение пакета данных одной инструкцией (ак MMX). Т.е регистры разных ядер использовать как один большой регистр.
А вообще говорят что LLVM для CUDA сделали. Вот SIMD оптимизацию доделают так хана интернетовскому компилятору.
Цитата:
Аж чаем поперхнулся.
А я за русские термины.
PS. Голова болит, болею.