|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
||||||
BigInteger в For23.07.2019, 17:26. Показов 16712. Ответов 74
Метки нет (Все метки)
Столкнулся с проблемой того, что в цикле for нельзя использовать BigInteger, не смотря на то, что это целочисленный тип. Кто-нибудь знает решение?
Пример:
0
|
||||||
| 23.07.2019, 17:26 | |
|
Ответы с готовыми решениями:
74
Преобразовать Integer в BigInteger Корень из числа типа BigInteger;
|
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|||
| 10.08.2019, 16:17 | |||
clEnqueueFillBufferЗамените .AddFillValue(1) на .AddWriteArray(ArrFill(10, 1))Добавлено через 1 минуту Вообще, .AddWriteArray(ArrFill медленнее и менее эффективно по памяти, потому что сначала создаёт массив в оперативной памяти, и перебрасывает его содержимое в память GPU. В то время как .AddFillValue - берёт 1 значение (в данном случае с типом integer) и проходится по всей области памяти буфера и заливает её этим значением.На будущее, если вам надо залить буфер с большей эффективность, но не используя .AddFillValue - лучше использовать Kernel, принимающий значение и его размер (в байтах) и заливающий им всю память буфера.Добавлено через 4 минуты
0
|
|||
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
||
| 12.08.2019, 12:12 [ТС] | ||
|
В объекте Buffer указывается размер всех переменных, которые описаны в *.cl, или только тех, которые передаются в файл? И как быть с BigInteger?
Добавлено через 3 часа 28 минут Добавлено через 10 минут И да, ещё, как лучше сделать - что бы каждая из ~1000000 итераций в *.cl сама сравнивала результаты друг с другом или возвращала результат, а потом ~1000000 чисел сравнивались?
0
|
||
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|||||
| 12.08.2019, 15:14 | |||||
|
2. Буфер хранит не переменную. Он хранит права на доступ к куску памяти на GPU. Его размер - указывается в байтах. Сколько байт вам надо чтоб сохранить какие то данные для передачи в карнел - столько выделяйте. И сколько вы выделили - столько будет доступно из cl кода, потому что в cl коде вы получаете указатель на тот кусок памяти, когда передаёте буфер как параметр в карнел. BigInteger есть метод, возвращающий массив байт из содержимого. Вот только вам это не надо, как и сами BigInteger и я вам уже объяснил. Надо сразу всё массивом байт хранить...Ну а далее - я знаю 2 варианта (может ещё есть что то, но это вам самим догадываться: 1. Сравнивать результаты на самом CPU. Но это будет довольно медленно. 2. Передавать информацию в специальный карнел, который сравнивает по парам. И так несколько раз. То есть допустим есть 1024 результата, первый вызов того карнела сравнит 1 и 2, 3 и 4 и т.д. И сохранит лучшие результаты в 1,3,5,7 и т.д. Второй вызов уже будет сравнивать 1 и 3, 5 и 7, 9 и 11 и т.д. И сохранит лучшие результат в 1, 5, 9 и т.д. И так повторять пока не останется только 1 результат. Разумеется, при этом надо вместе с результатом - передавать id теста, который дал этот результат. Ведь нам как раз надо узнать id лучшего результата, а не сам лучший результат.
0
|
|||||
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
|
| 19.08.2019, 11:50 [ТС] | |
|
В итоге, я так и не понял - можно ли производить расчёты без *.cl файла? И что возвращает get_global_id ?
Добавлено через 38 секунд И как array of byte преобразовать в число?
0
|
|
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||
| 19.08.2019, 11:57 | ||||
|
0
|
||||
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
|||
| 19.08.2019, 14:08 [ТС] | |||
|
P.S. Есть, на пример, какой-нибудь тип, в который записывается двоичное число?
0
|
|||
|
142 / 108 / 57
Регистрация: 15.09.2017
Сообщений: 425
|
|
| 19.08.2019, 16:52 | |
|
0
|
|
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||
| 20.08.2019, 00:22 | ||
|
Не ждите что я всю инфу на блюдечке с золотой коёмочкой вам принесу. Я помогаю только пока вижу что вы пытаетесь прикладывать усилия сами, но сейчас я не вижу.
0
|
||
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
|
| 20.08.2019, 07:18 [ТС] | |
|
Ладно, понятно, но у меня вопрос - что бы не использовать BigInteger мне нужно передать:
число, к которому я буду прибавлять get_global_id (если я всё правильно понял) и переводить его в двумерную бинарную таблицу; или строку из нулей и единиц, к которой я буду (неизвестно как) прибавлять get_global_id в двоичной СС; или саму двоичную таблицу. Но проблема последних двух вариантов в том, что преобразования числа надо проводить на CPU, а это долго. Что посоветуете? Добавлено через 52 минуты Точнее, проблема последнего варианта. Добавлено через 48 минут И да, куда кинуть файл, что бы программа могла его скачать? Добавлено через 31 секунду Я про сайт.
0
|
|
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|||
| 20.08.2019, 07:22 | |||
.[Add]WriteArray берёт содержимое массива как есть в памяти. Все элементы массива в памяти располагаются последовательно, поэтому достаточно взять адрес начала содержимого массива и его размер, чтоб скопировать его в буфер. Никаких преобразований.И работает это с массивами любой размерности и с любыми размерными типами элементов (с ссылочными не сработает, надеюсь, понятно почему). Но одномерный массив байт лучше всего, потому что при его заполнении на CPU - проверяется не так много границ индексов. Добавлено через 2 минуты Иначе - подробнее объясните что и зачем.
0
|
|||
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
|
| 20.08.2019, 07:35 [ТС] | |
|
Проблема передачи массивов в том, что на каждый из ~1000000 потоков нужно передать собственный массив, а со строками и числами - все получают одно и то же, но преобразуют с помощью get_global_id.
А сайт мне нужен из-за того, что IP сервера может поменяться (то есть сервер переедет на другой комп), поэтому я хочу, что бы сервер скачивал с сайта .txt и читал IP (пробовал с GitHub и Яндекс.Диском, в первом случае он не смог создать защищённый канал, а во втором скачал страницу).
0
|
|
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|||
| 20.08.2019, 08:20 | |||
|
Имеет смысл делать 256, 256*256 или 256*256*256 потоков, чтоб можно было не передавать последние несколько байт массива. Вместо них get_global_id будет возвращать оставшуюся часть идентификатора.WebClient.
0
|
|||
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
||
| 20.08.2019, 08:35 [ТС] | ||
|
0
|
||
|
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|
| 20.08.2019, 08:47 | |
|
Сложнее если вы будете пытаться степени десяток потоков за раз выполнять. А если 256, 256*256 или 256*256*256 потоков за раз - наоборот проще.
0
|
|
|
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
|
||||||
| 20.08.2019, 11:48 [ТС] | ||||||
|
Сейчас я не о том, какая степень у десятки, а как это реализовать. 256 в степени - не проблема, а с увеличением двоичной матрицы на двоичное число - так себе идея. На мой взгляд, проще передать двоичную строку и увеличить её, а потом перенести в матрицу.
Добавлено через 2 часа 56 минут Знаете, я решил проблему с передачей IP довольно-таки экзотичным способом: так как разобраться с сертификатами я не смог, я решил посмотреть, что я там скачал в .txt с яндекса, и случайно наткнулся на название файла 'IP.txt'. Тогда я назвал файл IP127.0.0.1PI.txt, скачал файл строкой, и по буквам P и I вычленил IP. Кусочек кода, если интересно:
0
|
||||||
| 20.08.2019, 11:48 | |
|
Как делить одно число BigInteger на другое BigInteger, при чем не теряя остаток Бинарное возведение в степень числа типа BigInteger в степень Biginteger BigInteger в степени BigInteger
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|