|
Floating and fixed point arithmetic in FPGA |
|
|
|
Aug 30 2009, 17:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079

|
Цитата(DmitryR @ Aug 30 2009, 20:50)  А зачем вам, скажите, литература? На opencores есть готовые реализации, скачайте и изучите. Реализации уже скачал - изучаю. Просто хочется рассмотреть не только конкретный практический подход, но и теоритическую часть. Алгоритмы, оптимизацию, рассчеты, сравнительный анализ и т.д.
--------------------
|
|
|
|
|
Aug 30 2009, 17:49
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(des333 @ Aug 30 2009, 17:56)  Подскажите, кто знает, литературу по сабжу. А то, все что пока удалось найти, это основные мат. сведения + простые показательные примеры. Интересует более подробный, доскональный и глубокий анализ данной темы. Не верю, что нет серьезных изданий по сабжу. Не буду утверждать, что нижеперечисленные книги являются образцом досконального анализа и уж тем более, что они обладают необходимой глубиной, но тем не менее, наверно их все-таки стоит полистать: 1. Арифметика цифровых машин (М.А.Карцев) 2. Основы машинной арифметики (А.М.Шауман) 3. Arithmetic and Logic in Computer Systems (Mi Lu) 4. SYNTHESIS OF ARITHMETIC CIRCUITS: FPGA, ASIC, and Embedded Systems Все книги легко ищутся в сети, а для более глубокого изучения всегда есть гугл, ключевых фраз для поиска, после прочтения вышеперечисленного, должно хватить с избытком
|
|
|
|
|
Aug 31 2009, 06:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079

|
Цитата(des00 @ Aug 31 2009, 07:07)  раскажите для повышения образованности, а какую теорию и алгоритмы вы имели в виду ? правила всех арифметических операций однозначно вытекают из определения форматов чисел. Неужели эта область настолько простая, что не затронута ни в какой литературе? Лично я предпологал, что у этих задач, как и у всех других, имеются разные подходы и способы решения. Может быть, я не прав. Просто я про обычные счетчики видел больше информации, чем про вычесления с плавающей запятой. Цитата(des00 @ Aug 31 2009, 07:07)  И какой именно сравнительный анализ вы имели в виду? Сравнивать что лучше плавучка или фиксированная точка в общем смысле? но на этот вопрос можно дать однозначный ответ %) Если Вас не затруднит, дайте И скажите, в каких областях тогда используется оставшийся, явно худший в общем смысле, вариант?
--------------------
|
|
|
|
|
Aug 31 2009, 07:07
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(des333 @ Aug 31 2009, 01:00)  Неужели эта область настолько простая, что не затронута ни в какой литературе? фиксированная точка специальной областью не является, ее арифметика выводиться на бумажке минут за 5. Если выводить нет желания то вот статья фиксированная запятаякак видно с точки зрения вычислений, ничем не отличается от целочисленой арифметики. плавающая точка это много сложнее, из простого анализа формата числа видны требования к реализации арифиметики. Цитата Просто я про обычные счетчики видел больше информации, чем про вычесления с плавающей запятой. насколько я знаю, на это есть отдельный стандарт, в нем все написано как и что делать с плавающей запятой. На счетчики такого стандарта нет %) Цитата Если Вас не затруднит, дайте И скажите, в каких областях тогда используется оставшийся, явно худший в общем смысле, вариант? Это же очевидно, по затратам ресурса плавающая точка на порядки опережает фиксированную, по требуемой производительности тоже (если не брать случай линейного конвейера). Вот из вики Цитата Преимущество использования представления чисел в формате с плавающей запятой над представлением в формате с фиксированной запятой (и целыми числами) состоит в том, что можно использовать существенно больший диапазон значений при неизменной относительной точности. Например, в форме с фиксированной запятой число, занимающее 8 разрядов в целой части и 2 разряда после запятой, может быть представлено в виде 123456,78; 8765,43; 123,00 и так далее. В свою очередь, в формате с плавающей запятой (в тех же 8 разрядах) можно записать числа 1,2345678; 1234567,8; 0,000012345678; 12345678000000000 и так далее.
--------------------
|
|
|
|
|
Aug 31 2009, 15:34
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Я бы не стал так огульно хаять плавающую точку  Хотя бы только потому, что если абстрагироваться от конкретного IEEE-шного формата (и не использовать его во внутреннем представлении, а носить на шинах все в распакованном виде), то не так уж и много аппаратуры надо наворотить рядом - для умножителя/делителя нужно сделать рядом вычисление суммы/разностей порядков плюс некоторые костыли для нормализации, а для суммы/разности - такой себе barrel-shift'ер, управляемый разностью порядков для приведения мантисс к одному порядку. Опять же, если есть уверенность, что не будет всяких машинных нулей и бесконечностей, можно убрать логику обработки крайних случаев. Я это к тому, что если очень надо, то можно и реализовать плавающую запятую. Конечно, если вообще хочется IEEE-формата, тогда да - там железа надо наворотить некисло.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 31 2009, 16:05
|

Участник

Группа: Свой
Сообщений: 62
Регистрация: 2-04-09
Из: Москва
Пользователь №: 47 059

|
Цитата(Rst7 @ Aug 31 2009, 19:34)  Я бы не стал так огульно хаять плавающую точку  Хотя бы только потому, что если абстрагироваться от конкретного IEEE-шного формата (и не использовать его во внутреннем представлении, а носить на шинах все в распакованном виде), то не так уж и много аппаратуры надо наворотить рядом По ощущениям, разные крутые GPU (там где много вычислителей с плавающей точкой) так и делают, снаружи оно поддерживает все стандарты, а внутри злые и очень продуманные алгоритмы (VLIW, или вообще что-то свое). Но для этого нужно как минимум вникнуть во все детали и хорошо во всем разбираться. Цитата(Гвоздик @ Aug 31 2009, 19:00)  Некоторое время назад я тоже столкнулся с задачей вычисления алгоритма с дробными числами на ПЛИСине. По моим практическим наблюдениям опенкоресные и закрытые от копирования умножители, сумматоры и делители чисел с плавающей запятой работали слишком медленно, чтобы их можно было серьезно применять. Решением оказалось применение Матлаба в связке с зайлинксовским "AccelEDA". Все исходные данные и результат автоматически приводились Матлабом к целым числам соотвествующей разрядности. Точность вычислений терялась, но в пределах ТЗ. Зато написать все и отмоделировать можно очень быстро. ИМХО, только как вариант "вставил и забыл", что-то "расширяемое" так сделать не получится. Хотя, посмотреть на то, как будет считать матлаб, интересно (а может даже пригодится)
|
|
|
|
|
Aug 31 2009, 16:25
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Но для этого нужно как минимум вникнуть во все детали и хорошо во всем разбираться. Не могу сказать, что уж очень там с "деталями" сложно. Хотя, опять же... Ну вот допустим, простейшие вещи - умножение и деление с плавающей запятой. Умножение: Вроде все хорошо, допустим, числа нормализованы и всегда есть единичный старший бит. Тогда, по результатам умножения для нормализации надо проверить старший бит произведения, и, если он равен 0, то сдвинуть результат влево с увеличением результирующего порядка на 1. Типа перенос учесть в сумматоре порядков. Деление: а тут таких простых результатов не получается - количество нулей в частном может быть произвольным. Т.к. выполнять после деления поиск первой единицы в частном и сдвиг результата до нормализованного очень уж тоскливо, есть смысл вкрутить автонормализацию в само деление. Допустим, если деление выполняется в столбик, то наличие каждого ведущего нулевого бита в частном должно приводить к уменьшению величины порядка результата на единичку. Как только встречается 1, то деление продолжается обычным образом. Вроде и не очень страшно... но следующей стадией должна быть замена деления в столбик на более производительный метод, а там уже (возможно) не так просто будет решить вопрос с нормализацией малой кровью.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 31 2009, 17:34
|

Участник

Группа: Свой
Сообщений: 62
Регистрация: 2-04-09
Из: Москва
Пользователь №: 47 059

|
Цитата(Rst7 @ Aug 31 2009, 20:25)  Не могу сказать, что уж очень там с "деталями" сложно.
Вроде и не очень страшно... но следующей стадией должна быть замена деления в столбик на более производительный метод, а там уже (возможно) не так просто будет решить вопрос с нормализацией малой кровью. Сорри, я по старой доброй институтской памяти... Цитата(Rst7 @ Aug 31 2009, 20:25)  Вроде и не очень страшно... но следующей стадией должна быть замена деления в столбик на более производительный метод, а там уже (возможно) не так просто будет решить вопрос с нормализацией малой кровью. А как, например, косинус считают с плавающей точкой? Через ряды? (Я не про синус нуля, пи и прочее из школьных учебников). То есть я понимаю, что можно через "сложение" все сделать. Акцент на производительность (как это не в теории делается)? Или опять все сводится к реализации умножения/деления + конвейер? Дополнение: наткнулся на интересную статейку чувствую, что в разных современных GPU таких уловок масса. Наткнулся на нее здесь, значит "в лоб" даже сопроцессор не считает. Сорри за глупый вопрос, математику подзабыл, а до каких пор надо складывать, когда считаем синус, понимаю, что все вычисления приближенные, или в этом IEEE какраз это и описано?
|
|
|
|
|
Sep 1 2009, 03:46
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Гвоздик @ Aug 31 2009, 10:00)  Некоторое время назад я тоже столкнулся с задачей вычисления алгоритма с дробными числами на ПЛИСине. По моим практическим наблюдениям опенкоресные и закрытые от копирования умножители, сумматоры и делители чисел с плавающей запятой работали слишком медленно, чтобы их можно было серьезно применять. Решением оказалось применение Матлаба в связке с зайлинксовским "AccelEDA". Все исходные данные и результат автоматически приводились Матлабом к целым числам соотвествующей разрядности. Точность вычислений терялась, но в пределах ТЗ. Зато написать все и отмоделировать можно очень быстро. по сути вы ушли в вычисления с фиксированной запятой, возможно с разным весом точки, делается в ручную на раз без всякого матлаба. Цитата(Rst7 @ Aug 31 2009, 10:34)  Я бы не стал так огульно хаять плавающую точку  дык ее никто и не хает, но согласитесь что реализация плавающей точки весит больше чем фиксированной/целочисленной ? Цитата(zverek @ Aug 31 2009, 11:05)  По ощущениям, разные крутые GPU (там где много вычислителей с плавающей точкой) так и делают, снаружи оно поддерживает все стандарты, а внутри злые и очень продуманные алгоритмы (VLIW, или вообще что-то свое). последнее что я читал про GPU подводило к мысли что современные GPU как раз ушли с фиксированной точки на плавающую и все вычисления внутри строятся как раз на ней. Цитата(zverek @ Aug 31 2009, 12:34)  А как, например, косинус считают с плавающей точкой? Через ряды? (Я не про синус нуля, пи и прочее из школьных учебников). То есть я понимаю, что можно через "сложение" все сделать. Акцент на производительность (как это не в теории делается)? Или опять все сводится к реализации умножения/деления + конвейер? Дополнение: наткнулся на интересную статейку чувствую, что в разных современных GPU таких уловок масса. Наткнулся на нее здесь, значит "в лоб" даже сопроцессор не считает. ну это был достаточно старый сопроцессор, с современными GPU не сравнить. А алгоритм расчета синуса зависит от требуемой вам точности.
--------------------
|
|
|
|
|
Sep 1 2009, 03:56
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(des333 @ Aug 30 2009, 20:34)  Алгоритмы, оптимизацию, рассчеты, сравнительный анализ и т.д. Простой пример. Астрономы, когда считают расстояния до звезд, часто считают то синус (x) = x. И работает! Расстояние до какой-то там звезды, у черта на куличках такое, что диаметр орбиты нашего глобуса такой что плакать хочется. От этого углы крохотные, а вблизи нуля, синус это просто палка под углом в 45 градусов. А в функциях что дает TI, синус вообще имеет период 65535, и амплитуду 32768 и тоже работает. И методов расчета его в ТИ предлагает три: через ряд (ну очень не длинный), через таблицу (ну очень не большую) и кажись через таблицу с интерполированием. И тоже работает! Асинхронные и синхронные двигатели + всякие УПСы, прекрасно работают на таком урезанном синусе. А астрономам не подходит: диаметр орбиты нашего глобуса, делёное на расстояние до какой-то там звезды стабильно дает 0, для почти всех звезд. Про GPU. Не от хорошей жизни там FPU. Делается это все для того чтобы игрушки быстро бегали. А игрушки как пишут - быстрей-быстрей, дешевле-дешевле. Кто будет тратить время на оптимизации, фиксированную точку итд. Это так, на пальцах.
|
|
|
|
|
Sep 1 2009, 04:12
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Methane @ Aug 31 2009, 22:04)  Я не соглашусь. Сравните умножение какогонить урезанного эмулятора плавающей точки, где под float пару байт отведено и умножение с фиксированной точкой типа 64.64. Все хорошо на своем месте. задачи конечно бывают разные, но на 64-х битном проце с умножителем 64х64 не вижу никаких проблем. На фпга для моих задач(модемная связь), максимум что потребовалось это ss10.24(36 бит). И то, это было взято с большим запасом Цитата А на кремнии собрать несколько качественных FPU и запхать их в FPGA? ИМХО не имеет смысла, это как идея, которая витала у хилых %) аппаратные элементы видео декодеров на фпга, даешь h.264 за 2 доллара (на спартан 3), которая быстра загнулась. Подобное (FPU) нужно небольшому количеству людей, а место на кристале будет занимать много (ведь надо делать честный IEEE, а не в тапки с...ь). ЗЫ. кстати разумное применение плавающей точки есть у альтеры в FFT корке, они называют это блочной плавающей точкой. Подробно не разбирался, но как я понял данный вид арифметики позволяет использовать разумный ресурс на реализацию, при нормальной производительности
--------------------
|
|
|
|
|
Sep 1 2009, 04:32
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(des00 @ Sep 1 2009, 07:12)  задачи конечно бывают разные, но на 64-х битном проце с умножителем 64х64 не вижу никаких проблем. Я и на 8 битовом проблем не нахожу.  Цитата ИМХО не имеет смысла, это как идея, которая витала у хилых %) аппаратные элементы видео декодеров на фпга, даешь h.264 за 2 доллара (на спартан 3), которая быстра загнулась. Подобное (FPU) нужно небольшому количеству людей, а место на кристале будет занимать много (ведь надо делать честный IEEE, а не в тапки с...ь). Не понял, это идея корейцев была? Вопли "h.264" в FPGA c их стороны шли? Цитата ЗЫ. кстати разумное применение плавающей точки есть у альтеры в FFT корке, они называют это блочной плавающей точкой. Подробно не разбирался, но как я понял данный вид арифметики позволяет использовать разумный ресурс на реализацию, при нормальной производительности То ихних маркетологов увольнять нада. Они могли эту самую блочную плавающую точку и в FIR фильтрах применять и вообще везде подряд. Работы на пол часа, толку ноль, зато кричать "мы круче ксилинкса" можно на всех сайтах типа edn.
|
|
|
|
|
Sep 1 2009, 04:42
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Methane @ Aug 31 2009, 22:32)  Я и на 8 битовом проблем не нахожу.  у нас разный взгляд на проблему %) Цитата Не понял, это идея корейцев была? Вопли "h.264" в FPGA c их стороны шли? мне ее озвучивал начальник, после встречи с манагерами хилых в америке, хотели аппаратный CABAC/CAVLC, Deblock и ME в фпга класса спартан3е  Потом как я понял к нему микроба, ДДР2, интерфейсы и вуаля транскодер почти за 2 бакса %) Цитата То ихних маркетологов увольнять нада. Они могли эту самую блочную плавающую точку и в FIR фильтрах применять и вообще везде подряд. Работы на пол часа, толку ноль, зато кричать "мы круче ксилинкса" можно на всех сайтах типа edn. вам виднее, я подробно не разбирался что они там предлагают
--------------------
|
|
|
|
|
Sep 1 2009, 10:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079

|
Цитата(Methane @ Sep 1 2009, 07:43)  Вы хотите сравнить сферического коня в вакууме. Для этого идеально подходит плавающая точка. А еще лучше вообще символьные преобразования. Да я ничего сравнивать не хотел Хотел просто нарыть литературу. Цитата(Methane @ Sep 1 2009, 07:56)  ....
Это так, на пальцах. Так вот мне, как раз, нужно не на пальцах, а много-много сложной теории.
Сообщение отредактировал des333 - Sep 1 2009, 10:55
--------------------
|
|
|
|
|
Sep 1 2009, 17:56
|

Участник

Группа: Свой
Сообщений: 62
Регистрация: 2-04-09
Из: Москва
Пользователь №: 47 059

|
А нет ли какого-то математического САПРа, который покажет разные способы вычисления, например, синуса в зависимости от того, что мы хотим получить (погрешность, точность, и т.д.)? Имел дело только с Matlab'ом, но мельком (очень не понравился его суконный язык, ощущение такое, что работаешь с БолшойЭВМ и перфокартами и он вот вот обзовет тебя нехорошим словом) и с Mathemati'кой (строил графики). Интересно посмотреть, как он будет считать. Цитата(des00 @ Sep 1 2009, 07:46)  А алгоритм расчета синуса зависит от требуемой вам точности. А какая там, у них, в FPU/GPU? Неужели про это нет книг и разбирать приходится на "живых" примерах. Так не охото идти в "Библиотеку имени Ленина" за книгой 1964 года "Вычислительная математика ЭВМ". У нас что с того времени книг не писали?
|
|
|
|
|
Sep 1 2009, 18:30
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(zverek @ Sep 1 2009, 20:56)  А нет ли какого-то математического САПРа, который покажет разные способы вычисления, например, синуса в зависимости от того, что мы хотим получить (погрешность, точность, и т.д.)? Имел дело только с Matlab'ом, но мельком (очень не понравился его суконный язык, ощущение такое, что работаешь с БолшойЭВМ и перфокартами и он вот вот обзовет тебя нехорошим словом) и с Mathemati'кой (строил графики). Интересно посмотреть, как он будет считать. Вот лучше матлаба я лично не знаю. Цитата А какая там, у них, в FPU/GPU? Неужели про это нет книг и разбирать приходится на "живых" примерах. Так не охото идти в "Библиотеку имени Ленина" за книгой 1964 года "Вычислительная математика ЭВМ". У нас что с того времени книг не писали? Есть. К примеру посмотрите в хелпе матлаба.
|
|
|
|
|
Sep 1 2009, 19:04
|

Участник

Группа: Свой
Сообщений: 62
Регистрация: 2-04-09
Из: Москва
Пользователь №: 47 059

|
Цитата(Methane @ Sep 1 2009, 22:30)  Вот лучше матлаба я лично не знаю. Не, я его ни в коем случае не ругаю, просто описал первое впечатление  Спасибо, попробую.
|
|
|
|
|
Sep 1 2009, 19:30
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(zverek @ Sep 1 2009, 22:04)  Не, я его ни в коем случае не ругаю, просто описал первое впечатление  Спасибо, попробую.  Просто серьезно подойдите. Это все же язык программирования. Причем специфический. Это не x=x+1; Это гораздо более высокий уровень. x=0:0.001:pi*10; Просто создали вектор. От 0 до pi*10 c шагом 0.001 y=sin(x); сказали сделай вектор y члены которого будут синусами вектора х z=tan(x.^9); сделай вектор z, члены которого будут тангенсами в членов вектора x в девятой степени. plot3 (x,y,z); нарисуй все это (фигня получилась) А можно использовать и фурье и фильтры и вообще что угодно. Короче кол-во ДИКОГО ГЕМОРРОЯ, матлаб сокращает просто грандиозно, где есть хоть какие-то расчёты.
|
|
|
|
|
Sep 2 2009, 12:34
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(Самурай @ Aug 30 2009, 21:49)  Не буду утверждать, что нижеперечисленные книги являются образцом досконального анализа и уж тем более, что они обладают необходимой глубиной, но тем не менее, наверно их все-таки стоит полистать: 1. Арифметика цифровых машин (М.А.Карцев) 2. Основы машинной арифметики (А.М.Шауман) 3. Arithmetic and Logic in Computer Systems (Mi Lu) 4. SYNTHESIS OF ARITHMETIC CIRCUITS: FPGA, ASIC, and Embedded Systems Все книги легко ищутся в сети, а для более глубокого изучения всегда есть гугл, ключевых фраз для поиска, после прочтения вышеперечисленного, должно хватить с избытком  И еще одна книга в духе 3 и 4: Ergovac, Lang. Digital Arithmetic.
|
|
|
|
|
Sep 8 2009, 20:17
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Еще в тему. Мой студент на курсовом реализовал плавучку + и * практически в полном соответствии с IEEE-754, включая обработку субнормальных чисел и формирование всех флагов.
Результат для 32 бит в сравнении с Альтеровскими + и * для Cyclone III:
Altera: + : 183МГц, 11тактов, 950ЛЭ * : 181МГц, 5 тактов, 279ЛЭ
Свой: + и * выполнены как один модуль, использующий некоторые совместные части: 105МГц, 5 тактов, 1643ЛЭ.
Целью было понизить число тактов сумматора за счет частоты, подогнав частоту под реально достижимую в процессоре Nios II для используемой платформы.
Самые ресурсоемкие блоки - сдвигатели для денормализации и нормализации.
Из 5 тактов последние 3 - это нормализация, денормализация, округление результата с формированием флагов. Это цена полной поддержки формата IEEE-754.
|
|
|
|
|
Dec 9 2010, 15:56
|
Частый гость
 
Группа: Свой
Сообщений: 123
Регистрация: 7-08-06
Пользователь №: 19 372

|
Цитата(Maverick @ Sep 8 2009, 09:58)  Попытаюсь вставить свои пять копеек  У Xilinx есть CoreGenerator, который может сгенерировать готовый блок для работы с плавающей запятой по стандарту IEEE 754 Floating-point 3.0?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|