Skip to content

有明显依赖顺序该怎么优化啊,救救孩子 #12

Description

@muyuuuu
#include <iostream>
#include <array>
#include <vector>
#include <random>

const int width = 1024;
const int height = 768;

template <typename T>
void RandomData(T &data) {
    std::mt19937 mt(20241101);
    std::uniform_int_distribution<int> int_dist(0, 255);
    for (int i = 0; i < data[0].size(); i++) {
        for (int j = 0; j < data.size(); j++) {
            data[i][j] = int_dist(mt);
        }
    }
}

int main() {
    std::array<std::array<uint8_t, height>, width> mask;
    std::array<std::array<uint8_t, height>, width> mask_errode;
    std::array<std::array<uint8_t, height>, width> disp;
    std::array<std::array<uint8_t, height>, width> dst;

    RandomData(mask);
    RandomData(mask_errode);
    RandomData(disp);
    RandomData(dst);

    std::vector<int> distance(width, 0);

    for (int i = 0; i < height; i++) {
        std::fill(distance.begin(), distance.end(), 0);
        int val = 0;
        int idx = 0;
        for (int j = 0; j < width; j++) {
            if ((!mask[i][j]) && (disp[i][j])) {
                val = disp[i][j];
                idx = j;
            }
            if ((250 < mask[i][j]) && (!mask_errode[i][j])) {
                dst[i][j] = val;
                if (0 != val) {
                    distance[j] = j - idx;
                }
            }
        }
        idx = 0;
        val = 0;
        for (int j = width - 1; j >= 0; j--) {
            if ((!mask[i][j]) && (disp[i][j])) {
                val = disp[i][j];
                idx = j;
            }
            if ((250 < mask[i][j]) && (!mask_errode[i][j])) {
                if (0 != val) {
                    if (0 != disp[i][j]) {
                        if (distance[j] > idx - j) {
                            dst[i][j] = val;
                        }
                    } else {
                        dst[i][j] = val;
                    }
                }
                if (dst[i][j] < disp[i][j]) {
                    dst[i][j] = disp[i][j];
                }
            }
        }
    }
    return 0;
}

补充:

  1. 我是安卓端,SIMD 是 Neon,估计和 SSE 差不多,感觉不太好写向量化
  2. cuda 也可以,或者有什么优化思路都可以

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions