add iterator struct
add struct to allow device function to query dimensions