If you want to use the GPU, there should be library functions in OpenCV. Hough transform is usually used for detecting straight lines, although the principle has been extended to other geometric objects.
The basic idea is that you go through every interesting pixel and take its coordinates as evidence that there is one or more lines going through it. There is an infinite number of lines in the plane going through a point, but in a prior step you have chosen to restrict the number of possible lines. Other pixels of interest mighty lie on different lines, or on the same line. If the latter is the case, evidence is added up, and in the end each possible line has a number of arguments that speak for its existence. So you simply go through your set of allowed lines, have a look at the number of pixels that contributed as an evidence for it, and use it in your return set if the number is large enough.
So how are lines defined, restricted in number? A line in the plane is defined by two numbers, e.g. y(x)=m*x+b, here m and b. But the problem is, what if the line is parallel to the y-axis? Then you'd have an infinite slope. So the trick is to use the Hesse normal form. It defines a straight line L by a point P where a line going through the origin O (0,0) crosses is perpendicularly. The two numbers that are used to define L is the distance d(P,O) and the angle of (P,O). And now you can restrict the number of possible lines by the number of possible angles, and the number possible distances. Say 100 steps each.
Now you make an integer array ("the accumulator") with 100 times 100 entries, which leads to 10 000 possible straight lines that could be borders or painted stripes of your lane. The accumulator array is used to collect evidence for each line. In the end, maybe you apply a convolution first, then collect the maxima in the array. The coordinates of these maxima in the array are the Hesse coordinates of the lines.
You will have to do some preprocessing to find points in your camera image that lie on lines. Convolutional filters are an option, maybe with an adaptable kernel, since the street condition will change with time.