Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovИли код кривой, или распараллелить забыл. Аха, пожадничал. 128 процессов в вектор пихали.. Переделал. Поставил - не создавать процессов более чем число ядер CPU: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. Exec time : 39.6 seconds. Ща натяпаю каких-нить операторов присваивания, сравнения.. и можно приступать к сумматору, типа A+B=C :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 14:51 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Отдельный int на каждую десятичную цифру... Шикарно живёшь, суммирование просядет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 14:56 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValExec time : 39.6 seconds. У меня нет пяти гигабайт ОЗУ, поэтому я ограничился миллионом цифр. Код, абсолютно аналогичный твоему, только без распараллеливания и использования STL, отработал на атомном недобуке за 31мс. Т.е. если бы у меня было ОЗУ, то миллиард цифр был бы всосан за 31 секунду. К чему бы это?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 15:27 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОтдельный int на каждую десятичную цифру... Шикарно живёшь, суммирование просядет. Ну, в этом есть некоторое преимущество: сложение и умножение цифр одного разряда никогда не вылезут за пределы int-a. То есть, переполнения можно не ожидать. И есть предположение, что с флагами переноса будет проще. Как надо складывать/умножать/делить я пока не знаю. Зато как решить проблему с недостатком памяти - любой чайник знает. И я тоже. :) *схожу, пожалуй, за колбасятиной, потом чего-нибудь натяпаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 15:35 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Я дико извиняюсь, но не могу больше ржать, глядя на эти чудеса оптимизации. 1. Вы понимаете, что вот это вообще не работает, т.к нет завершающего нуля? Код: plaintext 1. 2. 2. Если хранить каждую десятичную цифру в отдельном элементе массива, то время парсинга миллиона цифр должно быть не больше нескольких миллисекунд (безо всяких потоков). Откуда там взялись десятки секунд, можно только догадываться. Впрочем долго гадать не придется. atoi на каждую цифру, ОМГ. Вообще-то int digit = str[i] - '0' - вполне достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 15:39 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovК чему бы это?.. К тому, что 1 миллиард циферок - это немного больше, чем 1 миллион. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 15:39 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValК тому, что 1 миллиард циферок - это немного больше, чем 1 миллион. :) В тысячу раз, да. И что самое забавное - секунда во столько же раз больше миллисекунды. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 16:16 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
автор1. Вы понимаете, что вот это вообще не работает, т.к нет завершающего нуля? К сожалению не понимаю. И основная причина непонимания в том, что это работает. :) (конструкторе я пока ничего менять не буду, поскольку натяпываю сумматор). А если Вам не поржать, то Вы могли бы заметить, что никакой проверки строки на корректность - нетути. Так что без получения char-а и его проверки на цифру не обойтись. Это, как сказал бы Рабинович "Раз". В предложенным Вами варианте не просматривается возможность проверки. *конструкции типа int digit = str[i] - '0' - это к доктору или для наладонников и наколенников. (не смотря на то, что вроде бы как работает). По поводу оптимизации : до неё ещё далеко. Потому как если оптимизировать char-ы - до сложения не дойдёшь. Это "Два" (того-же автора). Перегруженный Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. - тоже имеется(как известно, он выводит циферки и буковки на экран). Так вот, циферки на экране просто замечательные. И, по совершенно невероятной причине, именно те что надо! Впрочем, думаю, к вечеру натяпаю простенький сумматор - выложу скрин с короткими цифрами. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 16:28 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , я ведь написал, что конструктор работает медленнно . И сравнить его, увы, не с чем. Вот у меня ужо есть библиотека, которая за 40 секунд засасывает миллиард цифр. (складывать она пока не умеет :) ) Я привёл достаточно ссылок на библиотеки. Вам известна хоть какая-то, конструктор которой работает быстрее? (точнее, хоть как-то работает с миллиардом цифр). Кстати, библиотека делается для больших чисел, а не для какого-то жалкого миллиона. *и ваще: "Нам что... шашечки или ехать надо"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 16:49 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValавтор1. Вы понимаете, что вот это вообще не работает, т.к нет завершающего нуля? К сожалению не понимаю. И основная причина непонимания в том, что это работает. :) (конструкторе я пока ничего менять не буду, поскольку натяпываю сумматор). Ну я и не сомневался в этом (и в том что вы не понимаете, и в том что скажете что "работает"). Вам следует сначала изучить понятие undefined behavior его последствия, и тогда уже делать выводы работает или нет. А если Вам не поржать, то Вы могли бы заметить, что никакой проверки строки на корректность - нетути. Так что без получения char-а и его проверки на цифру не обойтись. Это, как сказал бы Рабинович "Раз". В предложенным Вами варианте не просматривается возможность проверки. *конструкции типа int digit = str[i] - '0' - это к доктору или для наладонников и наколенников. (не смотря на то, что вроде бы как работает). Можно подумать atoi дает вам возможность проверки :) Притом, что мой вариант как раз дает такую возможность: if (digit < 0 || digit > 9) ... Ладно, я тут не хотел надолго отвлекать вас, желаю вам удачи и до конца жизни сопровождать этот код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 16:55 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Я тут подумал, что слишком жестоко было бы сопровождать такой код до конца жизни. Поэтому вот вам объяснение почему atoi(&ch) - не работает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 17:08 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНу я и не сомневался в этом (и в том что вы не понимаете, и в том что скажете что "работает"). Любезный Анатолий, уж не полагаете ли Вы, что приведённые мной циферки я натяпываю ручками? *типа, чтобы ввести народ в заблуждение? Честно-пречестно говорю, что это не я, а программа! Это всё она так выводит на экран, а я только копирую и вставляю сюда. Почему она подлая работает и правильно выводит циферки дело тёмное. :) Ну и есть небольшая разница между моим и Вашим кодом: мой код - вот он - каждый может посмотреть и покритиковать. А Ваш код - он как мёд - вроде бы он есть, а вроде бы его уже и нет... К сожалению, и приведённые Вами функции fn1 и fn2 в программе использовать не удалось. :( хотя написали Вы намного больше, чем натяпанная мной atoi. Надо признаться, я вообще не понял, к какому месту приграммы относятся эти функции. Вроде бы конструктор не должен ничего выводить на экран... Однако ж спасибо за пожелание удачи. *на курсы Ликбеза я обязательно пойду. Скорее всего, после того, как доделаю библиотеку. и сопровождать код мне не придётся, потому как делаю для себя. :) ***** Ах да, выражение int digit = str[i] - '0' довело меня до когнитивного диссонанса. :) ***** И видеоадаптер чёта моргает и драйвер падает когда я в него массив засовываю. Не хочет суммировать... Ща ещё погляжу. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 18:05 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValЯ привёл достаточно ссылок на библиотеки. Вам известна хоть какая-то, конструктор которой работает быстрее? У той, которую я написал за пять минут конструктор работает быстрее. Без распараллеливания. И единственная причина почему она не работает на миллиарде цифр - отсутствие пяти гигабайт виртуальной памяти. Если её скомпилировать на 64-х битах - будет работать и на миллиарде. По прежнему быстрее вашей. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 18:23 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValПочему она подлая работает и правильно выводит циферки дело тёмное. :) Так ничего удивительного: http://lurkmore.to/Индусский_код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 19:20 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , приветствую в Вашем лице всё прогрессивное человечество. Dimitry SibiryakovУ той, которую я написал за пять минут конструктор работает быстрее. Без распараллеливания. Замечательно! Вот где наши Российские таланты! Библиотек, правда, нетути...а талантов у нас огого!. Похоже библиотеки в закромах Родины.. "Если завтра война, если завтра в поход..." вот тогда мы покажем кузькину мать..:) Dimitry SibiryakovИ единственная причина почему она не работает на миллиарде цифр - отсутствие пяти гигабайт виртуальной памяти. Если её скомпилировать на 64-х битах - будет работать и на миллиарде. По прежнему быстрее вашей. Ну да, ну да.. почему пушки не стреляли ?.. "Во первых не было патронов...".. Мда, Дмитрий, Вы тоже вводите меня в ступор. Не работающая библиотека, которая работает быстрее моей. О, как! Как тут не вспомнить классика: "Никогда ж такого не было, и вот опять!..."(с) Виктор Черномырдин. Ну и Ваш код и обладает тем же свойством, что и у Московского товарища из Одессы.. никто его не видел, не щупал и сказать о нём нечего. ****** Сумматор без переноса я сделал. Ща проверю на мелких цифрах для CPU и GPU. И таймеры вкрячу. 7654321 и 1234567 Сумма должна быть: 8888888 Ну а потом строки 7654321 и 1234567 раскручу в цикле: Код: plaintext 1. 2. 3. 4. 5. Получатся миллиардные цифры, которые можно будет сложить без переносов и в сумме все цифры будут восьмёрки. Ежели сегодня успею приведу тайминги. :) ****** Фу-ты ну-ты.. память у моих видеоадаптеров только по 1 гигабайту. Похоже, миллиардные слагаемые не влезут. Ладно, напишу про те которые влезут. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 19:58 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValПолучатся миллиардные цифры, которые можно будет сложить без переносов Ну да, ну да... А уж как круто было бы складывать нули... SerValЕжели сегодня успею приведу тайминги. :) Заодно приведи параметры компьютера на котором ты это запускаешь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2013, 20:03 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Ну вот, можно проверить сложение с использованием всех имеющихся процессоров. :) Компик вот такой: ************* Процессор: i3820@4.2HGz Материнская плата: ASUS P9X79 WS RAM 64 GB Сопроцессор1: NVIDIA GeForce GTX 460 Сопроцессор2: ATI Radeon HD 5800 Series ************* Сложение на CPU(на одном ядре): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Сложение на GPU: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Закатал в строки Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. - штоб числа были по 100 миллионов цифр. Занимают в акселераторе 765 MBytes памяти. больше не лезет. Результат: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Хм.. результат как бы заставляет задуматься. :( Ща посмотрю в чём дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2013, 14:16 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Размеры чисел уменьшил до 10 миллионов цифр и переделал умножение на GPU: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Результат уже лучше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2013, 20:03 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
На cpu в одном потоке. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Intel Pentium CPU G2020 2.9GHz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 09:10 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerVal, а переносы между разрядами при сложении вы что вообще не учитываете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 13:24 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerVal, а какие задачи ты решаешь? Криптография? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 17:50 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
m_SlaНа cpu в одном потоке.... Exec time : 0.037000 seconds. Поздравляю! ... как известно,быстрее всего работает код, которого о5 же никто не видел. :) Вот отсюда http://www.cs.sunysb.edu/~skiena/392/programs/bignum.c можно скопипастить исходник сложения/вычитания...итд прям вместе с main() ...мож оно ещё быстрее будет. Однако ж не совсем понятно, что Вы хотели сказать. Что одно ядро работает быстрее нескольких? Сколько времени занимает у Вас параллельное сложение пока не видно.. ... видимо оно прячется за многозначительным "Press any key to continue.". Ждём "continue". :) Или, давайте 10000 раз сложим числа размером в 10 000 000 цифр ? Нуачё - вот мой код - складывает одни и те же цифры 10 000 раз: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Вот результат(CPU одно сложение, GPU 10 тыс): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. *на акселераторе NVIDIA GeForce GTX 460 время такое же. maytonSerVal, а какие задачи ты решаешь? Криптография? Не, сам я в криптографии не разбираюсь. Но есть ребятки, которые интересуются криптоанализом шифров Bivium и Trivum. GuestSerVal, а переносы между разрядами при сложении вы что вообще не учитываете? Ага, не учитываю, поскольку ещё не умею, а подсказать некому. :( Однако, сначала надо определиться, какой будет ли выигрыш в производительности. Потому как производительность пока определяется копированием слагаемых в память видеоадаптера и копирование результата обратно в память процессора. :( Читаю теорию. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:10 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValАга, не учитываю, поскольку ещё не умею, а подсказать некому. :( А как же та книжка, которой ты хвастался на предыдущей странице? Ниасилил?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:31 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА как же та книжка, которой ты хвастался на предыдущей странице? Ниасилил?.. Аха, пока ниасилил. Книжка шибко вумная. :( .. и не хвастался я совсем. Ясное дело, осиливать надо, не изобретать же велосипед. В ближайшие дни постараюсь осилить и применить. :) ***** Ах да, для GPU типа AMD Fusion или Intel HD Graphics использующих shared memory всё будет на порядок быстрее, поскольку реального копирования массивов в память ускорителя не будет(Zero Copy). *у меня такой графики нетути, поэтому попробовать не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 20:39 |
|
||
|
C++ BigIntegers parallel library
|
|||
|---|---|---|---|
|
#18+
SerValDimitry SibiryakovА как же та книжка, которой ты хвастался на предыдущей странице? Ниасилил?.. Аха, пока ниасилил. Книжка шибко вумная. :( .. и не хвастался я совсем. Ясное дело, осиливать надо, не изобретать же велосипед. В ближайшие дни постараюсь осилить и применить. :) ***** Ах да, для GPU типа AMD Fusion или Intel HD Graphics использующих shared memory всё будет на порядок быстрее, поскольку реального копирования массивов в память ускорителя не будет(Zero Copy). *у меня такой графики нетути, поэтому попробовать не могу. Bandwidth памяти RAM-GPU = 100-300 GByte/sec, а PCI-E gen2 16x = 8 GBytes/sec. Вы уверены, что RAM-GPU у вас слабое звено? Или у вас данные в ядрах GPU окажутся в обход шины PCI-E? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2013, 21:45 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38390918&tid=2019035]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 186ms |

| 0 / 0 |
