Сравнение Int64 элементов массивов используя Metal


#1

Есть два array of Int64 и возникла идея сравнивать значения Int64 используя Metal поскольку массивы большие. Ниже код на Swift. Надо переписать его в Metal. Читаю документацию по Metal ( https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf ) И возник вопрос. С одной стороны Metal Поддерживает Int64, а с другой в буфере не могут быть использованы Int64.
“Note: Metal does not support buffers that contain long or ulong data types.”

Может кто прояснить дело, может я не так что понимаю, или действительно я не могу использовать Int64 для моего сравнения.

for each in arrayOfInt
{
    for j in 0..<arrayOfArrayOfInt.endIndex
    {
        if arrayOfArrayOfInt[j].contains(each)
        {
            arrayOfIndeces.insert(j)
        }
    }

    arrayOfarrayOfIndeces.append(arrayOfIndeces)
    arrayOfIndeces = [Int]()
}

#2

Из коментарий на stackoverflow похоже я не могу напрямую использовать array of Int64. Ok, можно попробовать и c Int32.
Основная проблема теперь в том чтобы разобраться как написать kernel function для кода выше. Есть пример от Apple как должен выглядеть kernel function для loop в котором элементы из двух массивов складываются и получают третий массив. https://developer.apple.com/documentation/metal/basic_tasks_and_concepts/performing_calculations_on_a_gpu
В этом примере используется 1-dimensional greed вместо loop.
В моем случае тоже два массива, в одном каждый элемент это один Int32, в другом массиве каждый элемент это массив Int32 в 50 штук. Надо сравнить элемент из первого массива если он содержится в элементах-массивах второго и если да то записать индекс этого элемента-массива.
Вопрос как должна быть организована greed ? По-видимому как 2-dimensional greed. Но как при этом должна выглядеть kernel function не понимаю. Может кто объяснить или посоветовать что то ?