Вычисление 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?

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

Вам нужно уменьшить, чтобы частично добавить 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