0

我有以下需要优化的代码(稍后通过 SYCL 或 ArrayFire 移植到 GPU):

struct Item {
    float value;
    int f;
    float Func(float);
    float Func1(float);
    float Func2(float);
    float Func3(float);
};

float Item::Func(float v) {
    value = v;
    switch(f) {
        case 1: return Func1(v);
        case 2: return Func2(v);
        case 3: return Func3(v);
    }
    return Func1(v);
}

std::vector<Item> items;

AFAIK,在 GPU 上,函数指针方法不适合。

在 CPU 和/或 GPU 上是否有比这个更高效的方法?

4

1 回答 1

3

在这个网站上有一篇关于如何使用 SYCL 实现函数指针的替代方法的博客文章。该解决方案改为使用模板特征和函数对象。我相信这的历史是大多数硬件不支持跳转到计算地址。

于 2022-01-20T16:46:23.187 回答