|
Фришный мультипроцессор в ПЛИС, есть ли такой? |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
Mar 6 2011, 22:00
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Не встречал. Считаю, что из трех понятий - ПЛИС, плавающая_точка и производительность- одно лишнее. В некоторых специальных случаях, бывают исключения. Но чтобы победить конкурентов по цене, потреблению или производительности, нужна хитрая задача, 81-битные или 129-ти битные числа, а еще лучше, 21-битные. Ну и т.п. случаи, когда руками оптимизированный конвейер плотно руками же утрамбован в аккуратный квадратик, который размножен на всю микросхему.
Потому и не кусают (С)
|
|
|
|
|
Mar 7 2011, 12:41
|
Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 3-09-10
Пользователь №: 59 274

|
Цитата(vadimuzzz @ Mar 7 2011, 02:46)  opensparc t1, t2? О, похоже на то что нужно, спасибо! Буду изучать.
|
|
|
|
|
Mar 7 2011, 15:42
|
Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 3-09-10
Пользователь №: 59 274

|
Ух, если честно, OpenSPARC меня немного напугал. Очень уж там много всего и тулзы совершенно незнакомые используются...документация просто гигантская. Я такое наверное не потяну, буду искать чего-нибудь попроще.  Да и 50Mhz на Virtex5 как-то не очень впечатляют.
Сообщение отредактировал FROL_256 - Mar 7 2011, 15:44
|
|
|
|
|
Mar 7 2011, 17:38
|
Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 3-09-10
Пользователь №: 59 274

|
Ну вообще то что я делаю с FPGA - это больше академический интерес. Я хотел бы включить это в свой диссер. Хочу сделать процессор для рейтрейсинга) Суть идеи в том, что можно было бы большую часть функциональности реализовать программно, а то, что занимает много времени - аппаратно, в виде отдельных юнитов. Вообще я думаю что так можно было бы ускорять не только рейтрейсинг. Для начала я хочу приделать к процессору юнит, который будет считать аппаратно пересечение луча и треугольника - то есть в среднем за один такт. И посмотреть насколько эффективно можно ускорить таким образом работу алгоритма. Мультипроцессор с эффективными операциями FPU мне нужен потому что помимо подсчета пересечений остальные вычисления тоже довольно тяжелые. Если процессор держит на себе скажем 16 потоков одновременно то даже если длинна конвейера 16, то никаих хазардов не будет и перформанс будет 100 MFlops на 100Mhz именно из-за того, что нет зависимостей по данным. Если я буду использовать Nios 2 то во-первых, производительность окажется совсем на нуле, а во-вторых мое сравнение будет не совсем верным. Чтобы процессор не простаивал во время подсчета пересечений мне нужно как можно больше потоков на него повесить. Просто одно поточный CPU это не совсем не то что мне нужно. Я хотел бы показать, насколько можно поднять перформанс в трассировке лучей, добавив спец. фукнц. юниты. То есть я буду сравнивать производительность просто мультипроцессора без этого юнита и с ним. Но вообще чем больше времени я на это трачу тем больше понимаю, что затея не очень удачная. Собственно я пока-что делаю свой мультипроцессор, но замучался) Подумал, что может лучше поискать на стороне.
|
|
|
|
|
Mar 7 2011, 19:04
|
Знающий
   
Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827

|
>Но вообще чем больше времени я на это трачу тем больше понимаю, что затея не очень удачная. >Собственно я пока-что делаю свой мультипроцессор, но замучался) Подумал, что может лучше поискать на стороне
Нормальная, нормальная затея.
Будем считать, что чистая производительность синтезируемых в микросхеме FPU вам подходит. Пусть этих FPU 100-200 шт.
Оборачиваем каждый FPU триггерами и блоками памяти для подачи данных и снятия результата. Это будет процессор. Считаем, что процессор будет специализированным и что "программу" можно реализовать аппаратно. Соединяем процессоры древовидной или кольцевой шиной, возможно, с переходом на пониженную частоту. Получаем мультипроцессор, что-то вроде GPU. С мультипроцессорами работаем из корневого узла шины
Дополнительные компоненты процессора и шины должны быть на уровне 10-20% от ресурсов FPU. Иначе перформанс вряд ли получится впечатляющим.
|
|
|
|
|
Mar 7 2011, 19:36
|
Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 3-09-10
Пользователь №: 59 274

|
Цитата(jojo @ Mar 7 2011, 22:04)  >Но вообще чем больше времени я на это трачу тем больше понимаю, что затея не очень удачная. >Собственно я пока-что делаю свой мультипроцессор, но замучался) Подумал, что может лучше поискать на стороне
Нормальная, нормальная затея.
Будем считать, что чистая производительность синтезируемых в микросхеме FPU вам подходит. Пусть этих FPU 100-200 шт.
Оборачиваем каждый FPU триггерами и блоками памяти для подачи данных и снятия результата. Это будет процессор. Считаем, что процессор будет специализированным и что "программу" можно реализовать аппаратно. Соединяем процессоры древовидной или кольцевой шиной, возможно, с переходом на пониженную частоту. Получаем мультипроцессор, что-то вроде GPU. С мультипроцессорами работаем из корневого узла шины
Дополнительные компоненты процессора и шины должны быть на уровне 10-20% от ресурсов FPU. Иначе перформанс вряд ли получится впечатляющим. Ну это в идеале наверное, да. Я так далеко не смотрю пока)
|
|
|
|
|
Mar 8 2011, 01:35
|

МедвеД Инженер I
   
Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951

|
Цитата(FROL_256 @ Mar 8 2011, 06:16)  Ух-ты здорово, жалко только что верилог) там же на опенкорах и опенриск есть, но он тоже на верилоге и 1 ядро. но зато есть всё остальное гцц4.5.1, ждб и фпу.
--------------------
Cogito ergo sum
|
|
|
|
|
Mar 8 2011, 04:53
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(FROL_256 @ Mar 7 2011, 23:38)  Если я буду использовать Nios 2 то во-первых, производительность окажется совсем на нуле это не совсем так, у него есть механизм Custom Instruction. если к этому добавить самописный FPU с поддержкой SIMD (а можно и несколько), то производительность можно получить очень даже ничего. я не знаком с рейтрейсингом, приведу другой пример. допустим при обработке сигнала активно используется FFT. можно пойти по пути создания монстра а-ля спарк, а реализацию оставить программной. а можно прикрутить к ниосу корку FFT с подходящей оберткой, DMA и т.п. думаю, понятно, кто кого уделает.
|
|
|
|
|
Mar 8 2011, 17:13
|
Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 3-09-10
Пользователь №: 59 274

|
Цитата как пример, можно сделать аппаратный блок для юнит-теста и прикрутить к нему Custom Instruction (в терминах ниоса). за 1 такт смысла нет делать, надо конвейеризовать. я так понимаю, этих пересечений вагон и тележку надо посчитать? Я имел ввиду, что в среднем за один такт будет считаться. То есть если юнит загружен работой, то по нему треугольники будут проходить со скоростью один треугольник в клок. Я думал так сделать сначала, но плохо то, что у ниоса с плавающей точкой ахтунг. Помимо пересечений есть вообще говоря и другие вычисления. Если в результате окажется, что боттлнек просто напросто в том, что ниос неуспевает посчитать шейдинг, я получу немного не те числа при сравнении. Можно конечно еще считать шейдинг и проч. вещи. с фиксированной точкой...возможно вы правы и начать стоит именно с этого. Цитата(cioma @ Mar 8 2011, 18:41)  Если применение ПЛИС не принципиально, то может Вам все это дело реализовать на CUDA? Это уже давно есть  Интерес сделать аппаратное решение. Цитата(blackfin @ Mar 8 2011, 08:08)  Тут уже искали? => TMS320C6678. Боюсь DSP мне не подойдет, но все-равно спасибо.
Сообщение отредактировал FROL_256 - Mar 8 2011, 17:05
|
|
|
|
|
Mar 9 2011, 20:55
|
Знающий
   
Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827

|
>Остается открытым вопрос о производительности FPU при наличии всего одного потока. >Ну вот допустим у нас 10 стадий в конвейере FPU (В альтеровской либе 12 вообще). Это ж будет латентность 10 клоков при любой зависимости. >Но вообще наверное можно попробовать забить на это и действительно сделать на ниосе. У вас получается действительно всего один поток и требуется готовность результата FPU через такт? Задержка готовых FPU бывает от 2...4 до 24...48 тактов. http://www.eecg.toronto.edu/~myrto/gpuarch-ispass2010.pdf
|
|
|
|
|
Mar 9 2011, 21:22
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
По моему скромному мнению, сосредотачиваться только на арифметических операциях бессмысленно - выйдет равноудаленный от пупа вселенной конь в вакууме, ну ровно как "математики" пытаются оптимизацию софта делать, когда не хотят даже слышать как компьютер устроен. Чем кормить-то будете свой конвейер? Верно, из памяти брать, а она во многих не топовых FPGA (что альтера, что зайлингс) отстает от DSP блоков. Пытаться чего-то достичь в производительности, сопоставимого хоть в чем-то с процессорами общего назначения, как мне кажется, можно только на максимальных тактовых частотах и эффективном использовании всех ресурсов - даже если денег немеряно, чтобы навтыкать на плату дюжину чипов по 5-8 килобаксов, то интерконнект между ними все убьет.
В общем, как ни выкручивайся, а все равно нужно изучить и архитектуру FPGA и задачу, урезать разрядность до необходимого минимума (block floating point, например), оптимизировать задачу в целом, наложить оптимально на архитектуру, profit. Как промежуточный вариант - сделать под эту самую задачу мега-оптимальный дизайн, но как бы программируемый. То есть, он полностью заточен под текущую задачу (ray tracing), но без ущерба для производительности для нее этот конвейер можно применить для чего-то еще с какой получится эффективностью. Если это не сделать, то лучше не тратить время на ерунду, сразу писать про коня в вакууме отчет или диссерт, или что там у вас, и даже не отвлекаться на реальность.
|
|
|
|
|
Mar 9 2011, 22:22
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Опасаюсь, что процессор тут из-за желания использовать готовый код трассировщика, а производительность получить не выкидыванием лишних операций (например, не 80 бит, а 24; не универсальная плавающая точка, а фиксированная и т.п.), а использованием FPGA как эдакий ковёр, под который весь мусор заметается. "а тут у нас программируемая логика, на которой делается конвейер и процессор..." Ничего не выйдет. В доступную микросхему влезет половина конвейера и будет работать на 50 MHz. Будет грустно. А если всё это как следует пропустить через голову, сделать аккуратную специализированную реализацию, которая на максимальных тактовых использует и память, и DSP-блоки и внешнюю память и шину к чему-оно-там-подключено, то будет все просто летать, но нафиг никому через полтора-три года не нужное. Будет грустно.
|
|
|
|
|
Mar 10 2011, 11:51
|
Гуру
     
Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640

|
а почему пропустили Цитата(xor.kruger @ Mar 8 2011, 10:55)  http://www.gaisler.com/ - LEON3. Имеется в наличии FPU, "многоядерность", и прочие вкусности. На Spartan3A, при частоте генератора 125 МГц, частота ядра составляла более 40 МГц. имхо, запрос прямо идеально соответствует ЛЕОНу а мультипотоковость палка о трех концах - все равно все потоки будут стоять на ожидании выборок из памяти, и тут прироста не будет для конвеерных задач надо либо совсем конвеерный проц делать типа siliconhive, либо не выдумывать лишнего но как программировать конвеерные процы, насколько я знаю, человечество еще не разобралось я пользовал станцию с хардварным ультраспарком (который аналог опенспарка) - вобщем-то весьма тормозная штуковина, несмотря на мультисредовость
|
|
|
|
|
Mar 10 2011, 13:12
|
Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 3-09-10
Пользователь №: 59 274

|
Цитата У вас получается действительно всего один поток и требуется готовность результата FPU через такт? Почему один? У меня потоков столько сколько пикселей на экране. Я думаю их группами по 16 выполнять. В том то вся и идея, что какова бы ни была задержка, если потоков много, я могу латентность скрыть. Длинна конвейера 16? => 16 потоков. 30? => 32 потока. 48? => значит будет 48 потоков. нужно просто поочередно команды из разных потоков брать. То ест такой гипер-трединг очень высокой степени как бы. Цитата По моему скромному мнению, сосредотачиваться только на арифметических операциях бессмысленно - выйдет равноудаленный от пупа вселенной конь в вакууме, ну ровно как "математики" пытаются оптимизацию софта делать, когда не хотят даже слышать как компьютер устроен. Асболютно согласен. Это не вся работа, но надо с чего-то начать. Пока что я думаю сделать прототип а не промышленную железку. Это моя инициатива а не чья-то еще, так что отчет мне писать не для кого. Цитата Согласен со Shtirlits, если аппаратно только вычисление какого-нибудь рейтрейсинга или еще делать - прирост в производительности скоее всего получите незаметный, постоянно процессор дергать на загрузку конвеера... По моему смысл есть аппаратно задачу решать глобальнее, с использованием DMA, например на входе - картинка, на выходе - результаты рейтрейсинга для всей картинки, без участия процессора, тогда и конвеер не простаивает, и процессор не занят Такие работы есть, просто повторять их не имеет большого смысла. Цитата Опасаюсь, что процессор тут из-за желания использовать готовый код трассировщика, а производительность получить не выкидыванием лишних операций (например, не 80 бит, а 24; не универсальная плавающая точка, а фиксированная и т.п.), а использованием FPGA как эдакий ковёр, под который весь мусор заметается. "а тут у нас программируемая логика, на которой делается конвейер и процессор..." Ну почти, но не совсем. Дело в том, что ускорители рейтрейсинга уже давно есть. И есть статьи по тому как их делали. Я хочу сделать не просто железку которая считает пресечения, а сделать программируемый процессор. Такое решение на котором в теории можно было бы ускорить обычный C++ код, добавив к нему всего-лишь небольшой юнит описанный на VHDL. Ну насчет LEON-а я думал. Я еще раз хочу подчеркнуть, что не мультиядерность мне нужна а многопоточность. Это немного разные вещи. Потоки стоять не будут. Поскольку хочу сделать только прототип, то все данные я положу в память на чипе. Ничего грузить извне я не собираюсь, это должен быть только прототип. Но вобщем я попробую наверное на обычном проце сделать, типа LEON или Nois 2. А там посмотрим. Спасибо еще раз всем за ценные замечания!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|