При попытке выяснить, попадает ли внутренний цикл моего кода в барьер аппаратного дизайна или непонимание с моей стороны барьера. Там немного больше к этому, но самый простой вопрос, который я могу придумать, чтобы ответить следующим образом:Какова максимальная теоретическая скорость за счет SSE для простого двоичного вычитания?
Если у меня есть следующий код:
float px[32768],py[32768],pz[32768];
float xref, yref, zref, deltax, deltay, deltaz;
initialize_with_random(px);
initialize_with_random(py);
initialize_with_random(pz);
for(i=0;i<32768-1;i++) {
xref=px[i];
yref=py[i];
zref=pz[i];
for(j=0;j<32768-1;j++ {
deltx=xref-px[j];
delty=yref-py[j];
deltz=zref-pz[j];
} }
Какой максимальной теоретической скорости до я был бы способный видеть, перейдя к инструкциям SSE в ситуации, когда у меня есть полный контроль над кодом (сборка, внутренняя обработка, что угодно), но не контроль над средой выполнения, отличной от архитектуры (т.е. это многопользовательская среда, поэтому я ничего не могу сделать как ядро ОС назначает время для моего конкретного процесса).
Прямо сейчас я вижу ускорение 3x с моим кодом, когда я бы подумал, что использование SSE даст мне гораздо больше векторной глубины, чем указывает скорость 3 раза (предположительно, 3-кратная скорость говорит мне, что у меня есть максимальная теоретическая пропускная способность 4 раза). (Я пробовал такие вещи, как позволить deltx/delty/deltz быть массивами в случае, если компилятор не был достаточно умен, чтобы автоматически продвигать их, но я все еще вижу только 3-кратное ускорение.) Я использую компилятор Intel C с соответствующие флаги компилятора для векторизации, но, по-видимому, не имеют встроенных понятий.
глупый вопрос, но удаляет ли «-1» из условий для чего-либо? (ваш цикл работает от 0 до 32766 вместо 32767) – Hasturkun
Нет, это произвольное число.В текущем производственном коде это число будет переменной в любом случае. (Это означает, что в конечном итоге мне придется вручную развернуть цикл в регистры размером с регистром, которые, как я полагаю, и обрабатывать терминал с дополнительной логикой.) – 2009-09-23 16:31:20