ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
699699 Топик полностью
Ксения (15.09.2016 13:34 - 13:38, просмотров: 91) ответил LightElf на Ну как бы да, в графике матрицы 4x4 всего. Зато там оных процессоров эпичное количество
Именно так! Для преобразования координат (именно их!) достаточно умножать вектор на матрицу 4x4. К сожалению, люди близкие к электронике, но далекие от математики, не понимают, что умножение больших матриц не может быть сведено к умножению малых, а уж тем более таких, как 4x4. Таким образом, ускорение с использованием видеокарты достигается исключительно за счет распараллеливания работы по множеству ядер/потоков, благо что умножение матрицы на матрицы сводится к вычислению множества скалярных произведений (эквивалент многократного повторения DSP-операции "умножение с накоплением), которые могут вычисляться параллельно (независимо друг от друга). Между тем, GPU видеокарты считают в double64 не так быстро, как хотелось бы. Отчасти это потому, что для графики достаточно float32, а отчасти и потому, что память на видеокарте чаще всего адресуется 32-битными блоками, что вынуждает при чтении и записи в память чисел double64 обращаться к памяти дважды. Тогда как CPU современных компьютеров (типа Core i) 64-разрядные, а потому способны прочитать или записать double64 за один такт. Кроме того, в современных CPU практикуется использование "пакетных" операцией, когда float/double-операции производятся не с одним числом, а сразу с целой "линейкой". Именно таков принцип работы AVX. Причем обычный (AVX или AVX2) способен умножать 4 double64-числа за раз, а AVX512 - 8 таких чисел. Причем, на очереди стоит AVX1024. Для вычисления скалярных произведений это самое оно, т.к. естественным образом укладывается в тактику работы с векторами. Тогда как распараллеливание на потоки неестественно, поскольку требует разбиения каждой задачи на потоки, а затем синхронизацию этих потоков при приеме результата. Кроме того, в многопоточных системах с общей памятью производительность начинает определять скорость доступа к памяти (не только в отношении данных, но и кода!). Тогда как делать отдельный конвейер и кэш для каждого ядра накладно. А точнее, для ядер CPU на это идут, т.к. этих ядер не так уж и много, тогда как для 512 ядер GPU этого никто делать не станет.