在 CPU/GPU 上优化运行时的成员函数选择
Optimize member function selection at runtime on CPU/GPU
我有以下代码需要优化(稍后通过 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 and/or GPU 上是否有比这个更高效的方法?
有一篇博客 post 介绍了如何使用 SYCL on this website 实现函数指针的替代方案。该解决方案改为使用模板功能和功能对象。我相信这个历史是大多数硬件不支持跳转到计算地址。
我有以下代码需要优化(稍后通过 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 and/or GPU 上是否有比这个更高效的方法?
有一篇博客 post 介绍了如何使用 SYCL on this website 实现函数指针的替代方案。该解决方案改为使用模板功能和功能对象。我相信这个历史是大多数硬件不支持跳转到计算地址。