-
Notifications
You must be signed in to change notification settings - Fork 14
Closed
Description
Original function:
function distances_jl(data1, data2)
data1 = deg2rad.(data1)
data2 = deg2rad.(data2)
lat1 = @view data1[:, 1]
lng1 = @view data1[:, 2]
lat2 = @view data2[:, 1]
lng2 = @view data2[:, 2]
diff_lat = @view(lat1[:, None]) .- @view(lat2[None, :])
diff_lng = @view(lng1[:, None]) .- @view(lng2[None, :])
data = @. (
sin(diff_lat / 2)^2 +
cos(@view(lat1[:, None])) * cos(lat2) * sin(diff_lng / 2)^2
)
data .= @. 2.0 * 6373.0 * atan(sqrt(abs(data)), sqrt(abs(1.0 - data)))
return reshape(data, (size(data1, 1), size(data2, 1)))
endVersion 1, runs in single core:
function distances_strided(data1, data2)
data1 = @strided deg2rad.(data1)
data2 = @strided deg2rad.(data2)
lat1 = @view data1[:, 1]
lng1 = @view data1[:, 2]
lat2 = @view data2[:, 1]
lng2 = @view data2[:, 2]
diff_lat = @strided(@view(lat1[:, None]) .- @view(lat2[None, :]))
diff_lng = @strided(@view(lng1[:, None]) .- @view(lng2[None, :]))
data = @strided(@. (
sin(diff_lat / 2)^2 +
cos(@view(lat1[:, None])) * cos(lat2) * sin(diff_lng / 2)^2
))
@strided data .= @. 2.0 * 6373.0 * atan(sqrt(abs(data)), sqrt(abs(1.0 - data)))
return reshape(data, (size(data1, 1), size(data2, 1)))
endVersion 2, uses all the cores but somehow runs 10x slower:
function distances_strided(data1, data2)
data1 = @strided deg2rad.(data1)
data2 = @strided deg2rad.(data2)
lat1 = @strided data1[:, 1]
lng1 = @strided data1[:, 2]
lat2 = @strided data2[:, 1]
lng2 = @strided data2[:, 2]
diff_lat = @strided( lat1[:, None] .- lat2[None, :])
diff_lng = @strided( lng1[:, None] .- lng2[None, :])
data = @strided(@. (
sin(diff_lat / 2)^2 +
cos(lat1[:, None]) * cos(lat2) * sin(diff_lng / 2)^2
))
@strided data .= @. 2.0 * 6373.0 * atan(sqrt(abs(data)), sqrt(abs(1.0 - data)))
return reshape(data, (size(data1, 1), size(data2, 1)))
endMetadata
Metadata
Assignees
Labels
No labels