Вычисление Pi с использованием массивов Float или Integer

Я использую Aparapi, чтобы сделать число хруст в моей программе Java на графическом процессоре. Из того, что я понимаю, Апарапи отлично играет с плавающими массивами.

Я хочу вычислить Pi до N-го десятичного числа, используя Aparapi. Я думаю об использовании метода Лейбница, но я не уверен, как бы я работал с представлением и хранением длинных десятичных знаков в форме float или integer.

Будет ли массив целых чисел работать, причем размер массива равен N числу десятичных знаков?

int[] digits = new int[N];

Если бы я использовал это с методом Лейбница, мне нужно было бы вычислить массив из N целых чисел для M терминов, которые я нахожу (Liebniz говорит, что pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 ....), а затем добавьте их вместе и умножьте полученное число на 4. Но это означало бы, что мне нужно было бы выделить M много целых чисел для КАЖДОГО термина, который я вычислил, что бы скомпоновать и действительно отразиться на памяти.

tl; dr: Как я могу вычислить Pi, используя циклы операций с float, чтобы я мог сделать это с Aparapi?

Огромное спасибо!

1
nl ja de
Просто создайте случайные точки на карте апарапи и в конце нарисуйте круг и просто разделите общее количество точек на количество точек внутри круга, вы найдете 4/pi
добавлено автор huseyin tugrul buyukisik, источник
Я пропустил метод Лейбница, извините за то, что нажал «Монтекарло».
добавлено автор huseyin tugrul buyukisik, источник
Это медленный способ действительно для вычисления pi.
добавлено автор Blender, источник
Вы все равно будете хранить номера, независимо от вашего алгоритма. Вот гораздо более быстрый алгоритм: stackoverflow.com/questions/14065929/…
добавлено автор Blender, источник
Извините, вот что я пытался вставить: mathworld.wolfram.com/Brent-SalaminFormula.html </а>
добавлено автор Blender, источник
Вот почему я надеюсь, что у кого-то есть лучший способ сделать это, все еще используя меньшие типы данных
добавлено автор K. Barresi, источник
Я не думаю, что вы вставили правильный URL :)
добавлено автор K. Barresi, источник
Благодаря! И теперь проблема заключается в том, как хранить эти данные ...
добавлено автор K. Barresi, источник

1 ответы

Вам нужно уменьшить, чтобы частично добавить m элементов в аннотированный массив @Local (используется для локальной памяти в aparapi). Допустим, что существует N общих элементов, поэтому вам нужны N/m частичные суммы, которым требуется более высокая пропускная способность (поэтому в локальной памяти).

Также вы должны использовать localBarrier (); для синхронизации ядер в вычислительных единицах или рабочих единицах в местных рабочих группах. Затем отправьте данные в основную память.

Очень короткий пример:

Вам нужно 1 + 2 + 3 + 4 + 5 + 6 + ..... и у вас есть 3 ядра на вычислительную единицу gpu.

1 + 2 выполняется в ядре № 1

3 + 4 выполняется в ядре номер 2

5 + 6 выполняется в ядре № 3

то вы добавляете выходы ядра в локальной памяти, которые разделяются всеми соседними ядрами этого вычислительного блока.

Наконец, вы получите 3,7,11 в массиве, который суммируется до 21 в локальной памяти.

Все эти данные всех вычислительных единиц в основной памяти, такие как 21,57, ... тогда вы можете добавить их все просто в CPU.

Конечно, будет (+/-) (1/(2 * n + 1)) вместо 1,2,3,4,5

2
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async