Как видно из названия. Мне нужно сделать много расчетов следующим образом:
re = (x^a + y^a + z^a)^(1/a).
где {x, y, z} >= 0. более конкретно, a - положительная постоянная с плавающей точкой, а x, y, z - числа с плавающей запятой. ^
является оператором возведения в степень.
В настоящее время я бы предпочел не использовать SIMD, но надеюсь на какой-то другой трюк, чтобы ускорить его.
static void heavy_load(void) {
static struct xyz_t {
float x,y,z;
};
struct xyz_t xyzs[10000];
float re[10000] = {.0f};
const float a = 0.2;
/* here fill xyzs using some random positive floating point values */
for (i = 0; i < 10000; ++ i) {
/* here is what we need to optimize */
re[i] = pow((pow(xyzs[i].x, a) + pow(xyzs[i].y, a) + pow(xyzs[i].z, a)), 1.0/a);
}
}