I’m trying to write a kernel that does some operations on vectors using CUDA.jl and @cuda. My code is essentially this:
points = Nx3 matrix with x,y,z coordinates of points elements = Nx4 matrix with integers that list rows in "points" making up quadrilaterals A = NxN matrix for i in 1:N for j in 1:N a bunch of operations (and, unfortunately, some if statements) involving the points in elements[i,:] and elements[j,:] A[i,j] = a function of those operations end end
A lot of the operations involve
cross. On the CPU I deal with that in a pretty clean way. Say:
point1=points[elements[i,1],:] # gives me an array with 3 numbers x,y,z ... vec1 = point1-point2; ... foo = dot(vec1,vec2) bar = cross(vec1,vec2)
Is there an elegant way to do that on the GPU? Trying to use
[i,:] doesn’t seem to work and extracting subvectors of an array doesn’t seem too easy (also, assigning subvectors of an array! Say A[1,:] = b).
I don’t even know how to create an array in a kernel. The only way that I managed to do some math was to index each individual position and do the calculations in the classic way (i.e., old school C-style, not Matlab-style).
Thanks a lot!