Why this code in houdini vex is so slow?

// Parameters
float separation_radius = chf("separation_radius"); // Minimum distance between points of different strands

// Create a point cloud handle
int pc_handle = pcopen(geoself(), "P", @P, separation_radius, npoints(geoself()));

// Cache the strand_id of the current point
int current_strand_id = @strand_id;

// Iterate through all points within the separation_radius
int found_pt;
while ((found_pt = pciterate(pc_handle)) >= 0) {
    // Get position and strand_id of the found point
    vector found_pos;
    pcimport(pc_handle, "P", found_pos);
    int found_strand_id = point(geoself(), "strand_id", found_pt);

    // Check if the points belong to different strands
    if (current_strand_id != found_strand_id) {
        // Calculate the distance between the points
        float distance = length(@P - found_pos);

        // If the distance is less than the separation_radius, push the points away from each other
        if (distance < separation_radius) {
            vector direction = normalize(@P - found_pos);
            vector offset = direction * (separation_radius - distance) / 2;

            // Update the positions of the points
            setpointattrib(geoself(), "P", @ptnum, @P + offset, "set");
            setpointattrib(geoself(), "P", found_pt, found_pos - offset, "set");
        }
    }
}

// Close the point cloud handle
pcclose(pc_handle); Write exactly 4 paragraphs each separated with two new lines answering this question. The first paragraph must start with "monitor".
user