LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

mat4 mat4_mul_mat4(mat4 m1, mat4 m2) {

А что за структуры это, mat4? Может попробовать сделать отдельные массивы, типа

void mat4_mul_mat4(
  float* restrict m1_xx, float* restrict m1_xy, float* restrict m1_xz, float* restrict m1_xw,
  float* restrict m1_yx, float* restrict m1_yy, float* restrict m1_yz, float* restrict m1_yw,
  float* restrict m1_zx, float* restrict m1_zy, float* restrict m1_zz, float* restrict m1_zw,
  float* restrict m1_wx, float* restrict m1_wy, float* restrict m1_wz, float* restrict m1_ww,

  float* restrict m2_xx, float* restrict m2_xy, float* restrict m2_xz, float* restrict m2_xw,
  float* restrict m2_yx, float* restrict m2_yy, float* restrict m2_yz, float* restrict m2_yw,
  float* restrict m2_zx, float* restrict m2_zy, float* restrict m2_zz, float* restrict m2_zw,
  float* restrict m2_wx, float* restrict m2_wy, float* restrict m2_wz, float* restrict m2_ww,

  float* restrict mat_out_xx, float* restrict mat_out_xy, float* restrict mat_out_xz, float* restrict mat_out_xw,
  float* restrict mat_out_yx, float* restrict mat_out_yy, float* restrict mat_out_yz, float* restrict mat_out_yw,
  float* restrict mat_out_zx, float* restrict mat_out_zy, float* restrict mat_out_zz, float* restrict mat_out_zw,
  float* restrict mat_out_wx, float* restrict mat_out_wy, float* restrict mat_out_wz, float* restrict mat_out_ww,

  size_t num) {
  
  // тут дальше что-то умножать и суммировать в цикле и писать результат в mat_out_??, можно сразу много матриц обрабатывать

Которая б принимала на вход просто массивы соответствующих значений конкретных матриц.

Да и вообще, почему б это на GPU не делать? По-моему это как раз идеальная для GPU задача

Исправление SZT, :

mat4 mat4_mul_mat4(mat4 m1, mat4 m2) {

А что за структуры это, mat4? Может попробовать сделать отдельные массивы, типа

void mat4_mul_mat4(
  float* restrict m1_xx, float* restrict m1_xy, float* restrict m1_xz, float* restrict m1_xw,
  float* restrict m1_yx, float* restrict m1_yy, float* restrict m1_yz, float* restrict m1_yw,
  float* restrict m1_zx, float* restrict m1_zy, float* restrict m1_zz, float* restrict m1_zw,
  float* restrict m1_wx, float* restrict m1_wy, float* restrict m1_wz, float* restrict m1_ww,

  float* restrict m2_xx, float* restrict m2_xy, float* restrict m2_xz, float* restrict m2_xw,
  float* restrict m2_yx, float* restrict m2_yy, float* restrict m2_yz, float* restrict m2_yw,
  float* restrict m2_zx, float* restrict m2_zy, float* restrict m2_zz, float* restrict m2_zw,
  float* restrict m2_wx, float* restrict m2_wy, float* restrict m2_wz, float* restrict m2_ww,

  float* restrict mat_out_xx, float* restrict mat_out_xy, float* restrict mat_out_xz, float* restrict mat_out_xw,
  float* restrict mat_out_yx, float* restrict mat_out_yy, float* restrict mat_out_yz, float* restrict mat_out_yw,
  float* restrict mat_out_zx, float* restrict mat_out_zy, float* restrict mat_out_zz, float* restrict mat_out_zw,
  float* restrict mat_out_wx, float* restrict mat_out_wy, float* restrict mat_out_wz, float* restrict mat_out_ww,

  size_t num) {
  
  // тут дальше что-то умножать и суммировать в цикле и писать результат в mat_out_??, можно сразу много матриц обрабатывать

Которая б принимала на вход просто массивы соответствующих значений конкретных матриц

Исправление SZT, :

mat4 mat4_mul_mat4(mat4 m1, mat4 m2) {

А что за структуры это, mat4? Может попробовать сделать отдельные массивы, типа

void mat4_mul_mat4(
  float* restrict m1_xx, float* restrict m1_xy, float* restrict m1_xz, float* restrict m1_xw,
  float* restrict m1_yx, float* restrict m1_yy, float* restrict m1_yz, float* restrict m1_yw,
  float* restrict m1_zx, float* restrict m1_zy, float* restrict m1_zz, float* restrict m1_zw,
  float* restrict m1_wx, float* restrict m1_wy, float* restrict m1_wz, float* restrict m1_ww,
  float* restrict m1_yx, float* restrict m1_yy, float* restrict m1_yz, float* restrict m1_yw,

  float* restrict m2_xx, float* restrict m2_xy, float* restrict m2_xz, float* restrict m2_xw,
  float* restrict m2_yx, float* restrict m2_yy, float* restrict m2_yz, float* restrict m2_yw,
  float* restrict m2_zx, float* restrict m2_zy, float* restrict m2_zz, float* restrict m2_zw,
  float* restrict m2_wx, float* restrict m2_wy, float* restrict m2_wz, float* restrict m2_ww,
  float* restrict m2_yx, float* restrict m2_yy, float* restrict m2_yz, float* restrict m2_yw,

  float* restrict mat_out_xx, float* restrict mat_out_xy, float* restrict mat_out_xz, float* restrict mat_out_xw,
  float* restrict mat_out_yx, float* restrict mat_out_yy, float* restrict mat_out_yz, float* restrict mat_out_yw,
  float* restrict mat_out_zx, float* restrict mat_out_zy, float* restrict mat_out_zz, float* restrict mat_out_zw,
  float* restrict mat_out_wx, float* restrict mat_out_wy, float* restrict mat_out_wz, float* restrict mat_out_ww,
  float* restrict mat_out_yx, float* restrict mat_out_yy, float* restrict mat_out_yz, float* restrict mat_out_yw,

  size_t num) {
  
  // тут дальше что-то умножать и суммировать в цикле и писать результат в mat_out_??, можно сразу много матриц обрабатывать

Которая б принимала на вход просто массивы соответствующих значений конкретных матриц

Исходная версия SZT, :

[code=c]mat4 mat4_mul_mat4(mat4 m1, mat4 m2) {[/code]

А что за структуры это, mat4? Может попробовать сделать отдельные массивы, типа

void mat4_mul_mat4(
  float* restrict m1_xx, float* restrict m1_xy, float* restrict m1_xz, float* restrict m1_xw,
  float* restrict m1_yx, float* restrict m1_yy, float* restrict m1_yz, float* restrict m1_yw,
  float* restrict m1_zx, float* restrict m1_zy, float* restrict m1_zz, float* restrict m1_zw,
  float* restrict m1_wx, float* restrict m1_wy, float* restrict m1_wz, float* restrict m1_ww,
  float* restrict m1_yx, float* restrict m1_yy, float* restrict m1_yz, float* restrict m1_yw,

  float* restrict m2_xx, float* restrict m2_xy, float* restrict m2_xz, float* restrict m2_xw,
  float* restrict m2_yx, float* restrict m2_yy, float* restrict m2_yz, float* restrict m2_yw,
  float* restrict m2_zx, float* restrict m2_zy, float* restrict m2_zz, float* restrict m2_zw,
  float* restrict m2_wx, float* restrict m2_wy, float* restrict m2_wz, float* restrict m2_ww,
  float* restrict m2_yx, float* restrict m2_yy, float* restrict m2_yz, float* restrict m2_yw,

  float* restrict mat_out_xx, float* restrict mat_out_xy, float* restrict mat_out_xz, float* restrict mat_out_xw,
  float* restrict mat_out_yx, float* restrict mat_out_yy, float* restrict mat_out_yz, float* restrict mat_out_yw,
  float* restrict mat_out_zx, float* restrict mat_out_zy, float* restrict mat_out_zz, float* restrict mat_out_zw,
  float* restrict mat_out_wx, float* restrict mat_out_wy, float* restrict mat_out_wz, float* restrict mat_out_ww,
  float* restrict mat_out_yx, float* restrict mat_out_yy, float* restrict mat_out_yz, float* restrict mat_out_yw,

  size_t num) {
  
  // тут дальше что-то умножать и суммировать в цикле и писать результат в mat_out_??, можно сразу много матриц обрабатывать

Которая б принимала на вход просто массивы соответствующих значений конкретных матриц