> SPE может выполнять за такт четыре операции накопления (умножения с последующим сложением) над 32-разрядными операндами, так что восемь SPE выполняют в такте 64 операции с плавающей точкой (одинарной точности). При тактовой частоте 4 ГГц суммарная производительность достигает 256 GFLOPS. Подчеркнем, SPE может выполнять и операции с плавающей точкой двойной точности в соответствии со стандартом IEEE754, но при этом его производительность уменьшается на порядок, что при тактовой частоте 4 ГГц соответствует 25 GFLOPS.
Afair ядро там независимое, просто к общей памяти доступа не имеет (работает только со своим кэшем), поэтому нужно использовать основное ядро (PPU) для подачи данных и общего выполнения основной части программы.
Отсутствие в SPU предсказания переходов является еще одной серьезной проблемой этого процессора – даже, пожалуй, еще более серьезной, чем высокопроизводительная, не очень удобная для сложных алгоритмов модель памяти. Вспомогательное ядро очень бодро «перемалывает» цифры, но лишь до тех пор, пока ему не встретится условный переход. Конвейер обработки команд у Cell очень длинный (21 такт). Поскольку при выборе ошибочного направления декодирования команд его нужно сбрасывать и заполнять заново, все два десятка тактов SPU не будет делать ничего полезного. Сходные проблемы были у Pentium 4, где длина конвейера 20 тактов (в 2-3 раза больше, чем у Pentium III, Core 2 или обычных процессоров архитектуры PowerPC). Это общий недостаток всех процессоров с длинным конвейером – они очень долго «втягиваются в работу» после ошибки в предсказании перехода. Однако если в Pentium 4 это отчасти компенсируется исключительно эффективным механизмом предсказания, который срабатывает в 90-95% случаев, то SPU тут похвастаться нечем, кроме не очень действенного механизма «подсказок», оставляемых компилятором или программистом в теле программы и указывающих предполагаемое направление будущего перехода.
Именно по этой причине IBM любит демонстрировать выдающиеся результаты Cell на не очень интеллектуальных задачах вроде перемножения матриц, где условных переходов нет, а циклы можно «развернуть». Большое количество проверок и переходов в коде многократно снижают производительность Cell.
В новых cell-ах должны были поднять скорость работы даблов до половины скорости работы float-ов, а так - да, каждый SPE может исполнять и векторные операции(128bit = 2 double = 4 float = 4 int = 8 short = 16 byte), на них будет самая большая скорострельность.
Братва я всё о том же: НАДО ПОГОВОРИТЬ С РАЗВИВАЮЩИМИ НАНОТЕХНОЛОГИИ В РОССИИ, ЧТО НУЖНО СДЕЛАТЬ ДЕШЕВУЮ МАМКУ ДЛЯ ПРОЦА IBM PowerXCell 8i С ПОДДЕРЖКОЙ ИНТЕРФЕЙСОВ ДЛЯ СТАНДАРТНОГО ЖЕЛЕЗА!!! Можно сообща с Китайцами...
Так и есть, SPU простые как фиг знает что, за счет этого и достигается очень высокая производительность на одних задачах, но это же делате его непригодным для других задач. Одно только явное управление памятью SPU чего стоит, зато решается проблема медленного и непредсказуемого доступа к памяти.
Не мне памяти в PS3 мало и проц там уже устарел, хочу новый IBM PowerXCell 8i, или новый PowerPC c частотой 5Hz! Если удастся в Китае клепать эти процы <200$ и мамку к нему <200$ то к x86 и венде пришёл бы пушистый зверёк с севера...
>Afair ядро там независимое, просто к общей памяти доступа не имеет
И даже доступ к памяти внешней имеет. Только код исполнять оттуда не может. Код - только из своей локальной памяти. Так что SPE - совершенно полноцнные ядра, если не заморачиваться вопросом исполнения кода из основной памяти. В конце концов, на x86 процессоры тоже не могут исполнять код прямо с блинов HDD, например :)
>Вспомогательное ядро очень бодро «перемалывает» цифры, но лишь до тех пор, пока ему не встретится условный переход.
Потому я и задавал вопрос, есть ли в системе команд SPE условные выполнения операций, как в ARM, например? Если есть, то это эффективный способ избегать условных переходов.
> есть ли в системе команд SPE условные выполнения операций, как в ARM, например?
Условное выполнение и в x86 имеется, начиная с Pentium Pro или даже обычного первопня, но сильно ли оно помогло Pentium-4? Что-то компиляторы не очень любят генерировать такой код.
>Условное выполнение и в x86 имеется, начиная с Pentium Pro
Гм. Ты ничего не путаешь? И какие же у этих команд опкоды и растактовки? Боюсь, что условное выполнение нормального формата в x86 не ввести, как минимум, лишних байта два на префикс, да лишний такт на анализ.
> И какие же у этих команд опкоды и растактовки?
Как минимум, а может только :-)))) команды серии CMOVcc
Смотри http://download.intel.com/design/processor/manuals/253666.pdf
The CMOVcc instructions check the state of one or more of the status
flags in the EFLAGS register (CF, OF, PF, SF, and ZF) and perform a
move operation if the flags are in a specified state (or condition). A
condition code (cc) is associated with each instruction to indicate
the condition being tested for. If the condition is not satisfied, a
move is not performed and execution continues with the instruction
following the CMOVcc instruction.
These instructions can move 16-bit, 32-bit or 64-bit values from
memory to a general-purpose register or from one general-purpose
register to another. Conditional moves of 8-bit register operands are
not supported.
The condition for each CMOVcc mnemonic is given in the description
column of the above table. The terms "less" and "greater" are used for
comparisons of signed integers and the terms "above" and "below" are
used for unsigned integers.
Because a particular state of the status flags can sometimes be
interpreted in two ways, two mnemonics are defined for some opcodes.
For example, the CMOVA (conditional move if above) instruction and the
CMOVNBE (conditional move if not below or equal) instruction are
alternate mnemonics for the opcode OF 47H.
The CMOVcc instructions were introduced in P6 family processors;
however, these instructions may not be supported by all IA-32
processors. Software can determine if the CMOVcc instructions are
supported by checking the processor's feature information with the
CPUID instruction (see "CPUID—CPU Identification" in this chapter).
Не только, сейчас глянул даташит подробнее, имеются и другие команды в SSE или каком там по номеру набору. Навроде DPPD, осуществляющей условное умножение двух операндов в зависимости от битовой маски третьего.