Skip to content

Conversation

a2d8a4v
Copy link

@a2d8a4v a2d8a4v commented Sep 25, 2025

The current median filter operator has a CPU version alone. Adding a GPU implementation to satisfy the support for GPU computing.

@a2d8a4v a2d8a4v changed the title Add GPU implementation for medain filter Add GPU implementation for median filter Sep 25, 2025
@a2d8a4v
Copy link
Author

a2d8a4v commented Sep 25, 2025

The code for testing the GPU implementation is here


void test_median_filter() {

    StorageView input({1, 2, 10}, DataType::FLOAT32);
    auto* in_data = input.data<float>();
    for (size_t i = 0; i < 20; ++i) in_data[i] = float(i + 1);
    std::cout << "Input:\n";
    for (size_t i = 0; i < 20; ++i) {
        std::cout << in_data[i] << ' ';
        if ((i + 1) % 10 == 0) std::cout << '\n';
    }

    StorageView output;
    ops::MedianFilter median(7);
    median(input, output);

    std::cout << "Output:\n";
    auto* out_data = output.data<float>();
    for (size_t i = 0; i < 20; ++i) {
        std::cout << out_data[i] << ' ';
        if ((i + 1) % 10 == 0) std::cout << '\n';
    }

    StorageView input_gpu = input.to(Device::CUDA);
    StorageView output_gpu(input_gpu.shape(), input.dtype(), Device::CUDA);
    output_gpu.zero();
    ops::MedianFilter(7)(input_gpu, output_gpu);
    std::cout << "Output (GPU -> CPU copy):\n";
    StorageView output_gpu_host = output_gpu.to(Device::CPU);
    out_data = output_gpu_host.data<float>();
    for (size_t i = 0; i < 20; ++i) {
        std::cout << out_data[i] << ' ';
        if ((i + 1) % 10 == 0) std::cout << '\n';
    }
    
    std::cout << "Input GPU size: " << input_gpu.size() << '\n';
    std::cout << "Output GPU size: " << output_gpu.size() << '\n';
}

The result is like:

Input:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
Output:
3 3 3 4 5 6 7 8 8 8
13 13 13 14 15 16 17 18 18 18
Output (GPU -> CPU copy):
3 3 3 4 5 6 7 8 8 8
13 13 13 14 15 16 17 18 18 18
Input GPU size: 20
Output GPU size: 20  

I hope this tiny experiment proves that it can work.

@a2d8a4v
Copy link
Author

a2d8a4v commented Oct 1, 2025

Hi, @minhthuc2502
Can you help me review this pull req?

Sincerely,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant