Цитата(Leka @ Apr 17 2012, 15:40)

.......
микрокоманды и операнды ассоциативно извлекаются по явно указанным в полях номерам, и исполняются.
В итоге "мультиклеточная" архитектура многократно проигрывает обычной, по тактам, объему кода, площади кристалла. Если я неправильно понял "мультиклеточную" архитектуру - объясните мне понятно. (По поводу клока - он есть, см "даташит").
1) по тактам я не понял почему
2) по обьёму кода, да но не многократно, я бы сказал 20-30%
3) площадь кристала, х.з. как сравнить. и я бы сравнивал 4 клеточный с 4-х ядрённым мипсом,
предлагаю разобраться как следует.
-----------------------
target: z=SUM[(ai+bi)*ci-(ai-bi)*di]
тоесть на С так
for(int z=0,i=0;i<10;i++)
z=z+(a[i]+b[i])*c[i] - (a[i]-b[i])*d[i])
triads:
1)sum_ab=a+b
2)sub_ab=a-b
3)mult_abc=1*c
4)mult_abd=2*d
5)sub34=3-4
6)target=target+sub34
Код
(tag_2, <=0) i
(tag_1, <=0) target
(tag0, read [a+tag_2])
(tag1, read [b+tag_2])
(tag2, read [c+tag_2])
(tag3, read [d+tag_2])
-- вероятно эти таг0-3 можно было бы заменить на некую команду (tags0,1,2,3 read [a+tag_2<<2]). х.з.
(tag4, tag0+tag1)
(tag5, tag0-tag1)
(tag6, tag2*tag4)
(tag7, tag3*tag5)
(tag8, tag6-tag7)
(tag_1, tag_1 + tag8)
(tag10, store tag_1 to target adr)
(tag_2, tag_2 +1)-
(tag_2, tag_2 EQU 10)
(tag11,jmpNZ tag_2, adr to tag0)
пояснения + упрощения
1)адреса команд не указаны, есть привязка к tag-у, тоесть это ассоциация как команды так и результата после выполнeния команды(для простоты tag это регистр

).
2)показаны только 1 стадия конвейра exec
3)все стадии конвейра - 1 такт
4)все данные в cache (cache hit rate=1)
в данном и невероятно простом примере видно что ускорение выполнения может быть не более чем в 4 раза и выводы:
1) стадия fetch должна быть сделана следующим образом(чтобы было "4х" ускорение):
- либо широкий порт инструкций в "4 раза шире"
- либо в "4 раза быстрее"
2)если каждая клетка это очень примитивный (одно лишь АЛУ) cpu, то автомат "дирижирующий" этим ансамблем видиться очень не простым.
3) и действительно в случае отказа 1 клетки, катастрофы не случится, пока есть хотя бы 1 работающая.
4) для случая 16 клеток ускорение расти не будет, будет тем же что и для 4-х клеток (для данного примера)
5) из п4 следует что для 16 клеток, возможно(?) выполение в параллель ещё какого то кода(справится ли fetch?)
6) тоесть данный алгоритм _не заточен_ для выполнения на 16 клетках, и следовательно нельзя говорить о "естественном" параллелизме
вообщем этот мультиклет что-то вроде systolic array cpu
http://web.cecs.pdx.edu/~mperkows/temp/May...-Processors.pdfз.ы. 4х - это конечно же фейк(л) ещё тот, попробуйте временную диаграмму нарисовать, так там и будет видно что закон амдала обойти не получится