Shader:
        #version 430
        layout(local_size_x=128) in;
        
        layout(r32f, location = 0) uniform imageBuffer data;
        
        shared float local[256];
        void main() {
           int N = imageSize(data);
           int index = int(gl_GlobalInvocationID);
           int localindex = int(gl_LocalInvocationIndex);

           local[localindex] = localindex;
           local[localindex+128] = localindex+128;

           groupMemoryBarrier();
           imageStore(data, index, vec4(local[localindex]));
           imageStore(data, index+128, vec4(local[localindex+128]));
        }

code:

    std::vector<float> data(256);
    std::fill(data.begin(), data.end(), -1.0f);

    GLuint buffer;
    
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_TEXTURE_BUFFER, buffer);
    glBufferData(GL_TEXTURE_BUFFER, sizeof(float)*data.size(), 0, GL_STATIC_DRAW);                  

    GLuint buffer_texture;
    
    glGenTextures(1, &buffer_texture);
    glBindTexture(GL_TEXTURE_BUFFER, buffer_texture);
    glTexBuffer(GL_TEXTURE_BUFFER, GL_R32F, buffer);

    glBindImageTexture(0, buffer_texture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_R32F);
    
    glUseProgram(test_program);
    glUniform1i(0, 0);

    glDispatchCompute(1, 1, 1);
    
    glGetBufferSubData(GL_TEXTURE_BUFFER, 0, sizeof(float)*data.size(), &data[0]);
    
    for(size_t i = 0;i<data.size();i+=1)
    {
        if(i%16==0) std::cout << std::endl;
        std::cout << std::setw(4) << data[i] << ' ';
    }
    std::cout << std::endl;