Информация об изменениях

Сообщение Re: Очень быстрое заполнение матрицы (массива) от 28.01.2024 10:34

Изменено 28.01.2024 10:35 vsb

Re: Очень быстрое заполнение матрицы (массива)
Какие-то проблемы с компилятором, похоже. У меня этот код работает за 36 мс. Это где-то 10 Гб/с, если ничего не путаю. Вроде нормально.

  Скрытый текст
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define w 10000
#define h 10000

int main(void) {
  uint32_t *m = malloc(sizeof(uint32_t) * w * h);
  clock_t start = clock();
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) m[i * w + j] = i * w + j;
  }
  clock_t stop = clock();
  printf("%lu ms\n", (stop - start) * 1000 / CLOCKS_PER_SEC);
  uint32_t sum = 0;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) sum += m[i * w + j];
  }
  return (int) sum;
}
Re: Очень быстрое заполнение матрицы (массива)
Какие-то проблемы с компилятором, похоже. У меня этот код работает за 36 мс. Это где-то 10 Гб/с, если ничего не путаю. Вроде нормально. Попробуй включить режим компиляции с оптимизацией.

  Скрытый текст
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define w 10000
#define h 10000

int main(void) {
  uint32_t *m = malloc(sizeof(uint32_t) * w * h);
  clock_t start = clock();
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) m[i * w + j] = i * w + j;
  }
  clock_t stop = clock();
  printf("%lu ms\n", (stop - start) * 1000 / CLOCKS_PER_SEC);
  uint32_t sum = 0;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) sum += m[i * w + j];
  }
  return (int) sum;
}