Leka 1 25 мая, 2009 Опубликовано 25 мая, 2009 · Жалоба Вы для Lattice PAR делали? Или оценка по какому-нить Precision? Если PAR не делали, то эту оценку надо выкинуть на свалку. PAR после Synplify (не Synplify-Pro), все настройки по умолчанию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 25 мая, 2009 Опубликовано 25 мая, 2009 · Жалоба PAR после Synplify (не Synplify-Pro), все настройки по умолчанию. Тогда сорри. Просто сам когда-то проходил, что без PAR (isplever) оценки синтезаторов слишком оптимистичны, у синплифи еще более менее, а у Precision просто неадекватны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 10 июня, 2009 Опубликовано 10 июня, 2009 (изменено) · Жалоба Написал компилятор и упростил ядро - при большом регистровом файле на памяти развитая система адресации оказалась неэффективной. Новое ядро заметно меньше, и немного быстрее. В железе пока не пробовал, тестирую в функциональном эмуляторе - скорость эмуляции ~2 МГц тактовой, можно и большие/сложные программы гонять. N-ферзей компилируется в ~100 слов (код + данные без учета 80 слов, занимаемых массивами), исполняется без ошибок (в эмуляторе). :) module queens N, N2, count, poss, place, val, pos, pos1, i, j arow:20, aleft:20, aright:20, aposs:20 begin for N:=1 to 16 count := 0 j := 1 for i := 1 to N j := j * 2 end val := j - 1 pos := 1 arow[1] := 0 aleft[1] := 0 aright[1] := 0 j := val N2 := N / 2 for i := 1 to N2 j := j / 2 end aposs[1] := j poss := aposs[1] while pos <> 0 if poss <> 0 place := poss & - poss poss := poss & ~ place if pos == 1 and poss == 0 and N & 1 <> 0 count := count * 2 end if pos <> N pos1 := pos + 1 aposs[pos] := poss arow[pos1] := arow[pos] | place aleft[pos1] := (aleft[pos] | place) * 2 aright[pos1] := (aright[pos] | place) / 2 poss := ~ (arow[pos1] | aleft[pos1] | aright[pos1]) & val pos := pos1 else count := count + 1 end else pos := pos - 1 poss := aposs[pos] end end if (N & 1) == 0 count := count * 2 end out := count //вывод результата в порт end end ~Исходник на Си: http://electronix.ru/forum/index.php?showt...st&p=516828 Изменено 20 июня, 2009 пользователем Omen_13 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 10 июня, 2009 Опубликовано 10 июня, 2009 · Жалоба Посмотрел такты - при N=13 (ответ 73712) код выполняется за ~200 млн. тактов, те за ~2 сек на Спартане3(~100МГц). Аналогичный код на Delphi(консоль) ~2ГГц x86(AMD) считает за ~0,04 сек, те в 50 раз быстрее(хотя тактовая больше в ~200 раз). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 10 июня, 2009 Опубликовано 10 июня, 2009 · Жалоба хотя тактовая больше в ~200 раз Sorry, в ~20 раз (2ГГц vs 100МГц). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 15 июня, 2009 Опубликовано 15 июня, 2009 (изменено) · Жалоба Хотелось-бы посмотреть результаты компиляции(размер кода, листинг, если есть, и такты) для NIOS-2, MicroBlaze(EDK не установлен),и др софт-процессоров, для сравнения. Исходники N-ферзей можно отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828 На Си давно уже не пишу, не хотелось-бы только для сравнения ставить, разбираться... А Паскаля для софт-процессоров нет. Изменено 15 июня, 2009 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 15 июня, 2009 Опубликовано 15 июня, 2009 (изменено) · Жалоба Посмотрел такты - при N=13 (ответ 73712) код выполняется за ~200 млн. тактов, те за ~2 сек на Спартане3(~100МГц). Аналогичный код на Delphi(консоль) ~2ГГц x86(AMD) считает за ~0,04 сек, те в 50 раз быстрее(хотя тактовая больше в ~200 раз). На BF537-600 при N=13 код выполняется за ~213 млн. тактов, те за ~0,36 сек (CPU_CLOCK = 600МГц). Исходники N-ферзей отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828 Изменено 15 июня, 2009 пользователем blackfin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 15 июня, 2009 Опубликовано 15 июня, 2009 · Жалоба Любопытно, для N-ферзей пока получается ~одинаковое количество тактов для двух архитектур: 1) BF: 1 такт на инструкцию, и 8 32-разрядных(или 16 16-разрядных) РОН + адресные, индексные, и др специальные регистры. Если не путаю. 2)моя текущая: 2..3 такта на инструкцию: 3 такта на load/store(a:=b, b:=a), 2 такта на все остальные, и 1К 32-разрядных РОН. В среднем для задач с массивами ~2.5 такта/инструкция, те ~40 MIPS для 100 МГц тактовой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба Мысли вслух... a[ i ] - фактически ((a)+(i)), поэтому a[ i ] эквивалентно i[ a ] (в безтиповом языке), a a[ i ][ j ][ k ] эквивалентно k[ j[ i[ a ] ] ]. Т.е. многомерный массив - частный случай одномерного. Кроме того, k[ j[ i[ a ] ] ] требует меньше инструкций и тактов, чем a[i*n+j*m+k]. На BF537-600 при N=13 код выполняется за ~213 млн. тактов, те за ~0,36 сек (CPU_CLOCK = 600МГц). Исходники N-ферзей отсюда: http://electronix.ru/forum/index.php?showt...mp;#entry516828 Наверно, надо подправить типы, чтобы не было операций приведения типов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться