Чем лучше проверить скорость ОЗУ?
От: Shmj Ниоткуда  
Дата: 16.01.26 11:44
Оценка:
Вот такой код оно дало:

#include <iostream>
#include <chrono>
#include <cstdint>
#include <cstdlib>     // std::strtod
#include <new>         // std::bad_alloc
#include <algorithm>   // std::max

static double toGiB(std::uint64_t bytes)
{
    constexpr double GiB = 1024.0 * 1024.0 * 1024.0;
    return static_cast<double>(bytes) / GiB;
}

int main(int argc, char** argv)
{
    // Размер по умолчанию: 1 GiB
    double requestedGiB = 1.0;
    if (argc >= 2) {
        requestedGiB = std::strtod(argv[1], nullptr);
        if (!(requestedGiB > 0.0)) {
            std::cerr << "Usage: " << argv[0] << " [size_in_GiB]\n";
            return 1;
        }
    }

    constexpr std::uint64_t GiB = 1024ull * 1024 * 1024;
    std::uint64_t bytesRequested = static_cast<std::uint64_t>(requestedGiB * static_cast<double>(GiB));

    // Выравниваем вниз до размера элемента, чтобы не выйти за границы.
    std::uint64_t elementCount = bytesRequested / sizeof(std::uint64_t);
    std::uint64_t bytes = elementCount * sizeof(std::uint64_t);

    if (elementCount == 0) {
        std::cerr << "Requested size is too small.\n";
        return 1;
    }

    std::cout << "Requested: " << requestedGiB << " GiB\n";
    std::cout << "Actual:    " << toGiB(bytes) << " GiB (" << bytes << " bytes)\n";
    std::cout << "Elements:  " << elementCount << " x uint64_t\n\n";

    using clock = std::chrono::steady_clock;

    // --------------------
    // Allocation test
    // --------------------
    std::cout << "Allocating...\n";

    std::uint64_t* buffer = nullptr;

    auto allocStart = clock::now();
    try {
        // Не инициализирует память, только выделяет
        buffer = static_cast<std::uint64_t*>(::operator new[](bytes));
    } catch (const std::bad_alloc&) {
        std::cerr << "Allocation failed (bad_alloc).\n";
        return 1;
    }
    auto allocEnd = clock::now();
    std::chrono::duration<double> allocDuration = allocEnd - allocStart;

    double allocGiBs = toGiB(bytes) / std::max(allocDuration.count(), 1e-12);

    // --------------------
    // Write test (first touch)
    // --------------------
    auto writeStart = clock::now();
    for (std::uint64_t i = 0; i < elementCount; ++i)
        buffer[i] = i;
    auto writeEnd = clock::now();
    std::chrono::duration<double> writeDuration = writeEnd - writeStart;

    double writeGiBs = toGiB(bytes) / std::max(writeDuration.count(), 1e-12);

    // --------------------
    // Read test
    // --------------------
    volatile std::uint64_t sink = 0;

    auto readStart = clock::now();
    for (std::uint64_t i = 0; i < elementCount; ++i)
        sink += buffer[i];
    auto readEnd = clock::now();
    std::chrono::duration<double> readDuration = readEnd - readStart;

    double readGiBs = toGiB(bytes) / std::max(readDuration.count(), 1e-12);

    // --------------------
    // Cleanup
    // --------------------
    ::operator delete[](buffer);

    // --------------------
    // Results
    // --------------------
    std::cout << "\nResults:\n";
    std::cout << "Alloc time : " << allocDuration.count() << " s  (" << allocGiBs  << " GiB/s)\n";
    std::cout << "Write time : " << writeDuration.count() << " s  (" << writeGiBs  << " GiB/s)\n";
    std::cout << "Read  time : " << readDuration.count()  << " s  (" << readGiBs   << " GiB/s)\n";
    std::cout << "Checksum   : " << sink << "\n";

    return 0;
}


Какие-то проги находил, но все какие-то стремные. Что лучше юзать?
=сначала спроси у GPT=
Re: Чем лучше проверить скорость ОЗУ?
От: Stanislaw K СССР  
Дата: 16.01.26 14:11
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот такой код оно дало:


?

S>Какие-то проги находил, но все какие-то стремные. Что лучше юзать?



"Скорость" ОЗУ проверяется memtest86. В BIOS выставляешь параметры скорости и тактов, грузишься в memtest и гоняешь комплекс разных тестов (full) минимум сутки в несколько итераций. (оно само циклит).

Если без ошибок — параметры можно подразогнать: повысить частоту (глупо), сократить такты (правильно). и еще раз тест на сутки.
и так до появления неприемлемого количества неприемлемых ошибок.
Откатываешь на предыдущие параметры, ещё сутки прогоняешь тест и пользуешся.


В многих современных UEFI memtest уже прошит в bios, но не сложно сделать загрузочную флешку.
Все проблемы от жадности и глупости
Re: Чем лучше проверить скорость ОЗУ?
От: Vzhyk2  
Дата: 16.01.26 14:12
Оценка:
Здравствуйте, Shmj, Вы писали:

MemTest86
Re[2]: Чем лучше проверить скорость ОЗУ?
От: Shmj Ниоткуда  
Дата: 16.01.26 14:22
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

SK>"Скорость" ОЗУ проверяется memtest86. В BIOS выставляешь параметры скорости и тактов, грузишься в memtest и гоняешь комплекс разных тестов (full) минимум сутки в несколько итераций. (оно само циклит).


А просто запустить прогу и примерно получить результат, пусть не космическая точность — чем плохо? Без флешек и пр.
=сначала спроси у GPT=
Отредактировано 16.01.2026 14:22 Shmj . Предыдущая версия .
Re[2]: Чем лучше проверить скорость ОЗУ?
От: Философ Ад http://vk.com/id10256428
Дата: 16.01.26 14:35
Оценка:
Здравствуйте, Stanislaw K, Вы писали:

SK>...минимум сутки в несколько итераций. (оно само циклит).


Не поможет. Меня это не спасло. Я месяца 3 пытался разобраться в причине синьки, потом просто опустился с 3.6 до 3.2. Со штатного XMP-профиля моей DDR4 опустился до штатного профиля другой памяти, которую в интернете нашёл — она по виду была слишком похожа на мою, решил попробовать. С тех пор мой комп работает стабильно.

Хороший тест — игры: нужно поставить текстуры побольше, чтоб чуть-чуть не влезали в видеопамять, и недостающее гонялось по PCI-E. О том, что оперативке плохо будет видно по артефактам на экране. Это личное наблюдение — я не встречал таких рекомендаций в интернетах. У меня это так работало.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Чем лучше проверить скорость ОЗУ?
От: Философ Ад http://vk.com/id10256428
Дата: 16.01.26 14:40
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А просто запустить прогу и примерно получить результат, пусть не космическая точность — чем плохо? Без флешек и пр.


С высокой долей вероятности прога тебе может не результат посчитать, а погоду в Африке. Думаю, ты сам прекрасно понимаешь, что потеря (инвертирование) старшего бита в знаковом целом легко переворачивает всё с ног на голову — это так, просто для примера.
Всё сказанное выше — личное мнение, если не указано обратное.
Re: Чем лучше проверить скорость ОЗУ?
От: Maniacal Россия  
Дата: 16.01.26 15:16
Оценка: 5 (1)
Здравствуйте, Shmj, Вы писали:

S>Какие-то проги находил, но все какие-то стремные. Что лучше юзать?


AIDA64, еще и сравнение выдаст с тестами на других конфигурациях.
Re: Чем лучше проверить скорость ОЗУ?
От: Osaka  
Дата: 16.01.26 16:21
Оценка:
S>Какие-то проги находил, но все какие-то стремные. Что лучше юзать?
Свою прикладную задачу погонять на разных таймингах. Результаты могут оказаться весьма нелинейные.
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[2]: Чем лучше проверить скорость ОЗУ?
От: Shmj Ниоткуда  
Дата: 17.01.26 06:21
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>AIDA64, еще и сравнение выдаст с тестами на других конфигурациях.


Точно, как то забыл про него. Но показатели проги выше — тоже актуальны, примерно отражают картину, если сравнивать два компа.
=сначала спроси у GPT=
Re[3]: Чем лучше проверить скорость ОЗУ?
От: Stanislaw K СССР  
Дата: 17.01.26 06:22
Оценка:
Здравствуйте, Shmj, Вы писали:

SK>>"Скорость" ОЗУ проверяется memtest86. В BIOS выставляешь параметры скорости и тактов, грузишься в memtest и гоняешь комплекс разных тестов (full) минимум сутки в несколько итераций. (оно само циклит).


S>А просто запустить прогу и примерно получить результат, пусть не космическая точность — чем плохо? Без флешек и пр.


Плохо тем, что этот "тест" не дает никакого результата. Даже встроенный в BIOS (uefi) тест памяти при инициализации/при включении питания/холодном рестарте тестирует больше/глубже/лучше.

Этот "тест" не отловит типичные ошибки —
-пишешь один байт, считываешь другой.
-пишешь в одну ячейку, но при этом изменяются биты в одной или нескольких соседних. (при чем "соседние" ячейки могут находится за пару мегабайт от текущей, а не просто +\- 1 младший бит адреса)
-бит в ячейке памяти меняется после первого считывания.
и другие.

memtest тестирует 99,5% возможных сбоев памяти.

Кроме memtest существуют, конечно, и другие программы, но их развитие приостановилось в момент появления memtest.
Все проблемы от жадности и глупости
Re[3]: Чем лучше проверить скорость ОЗУ?
От: Stanislaw K СССР  
Дата: 17.01.26 06:47
Оценка:
Здравствуйте, Философ, Вы писали:

SK>>...минимум сутки в несколько итераций. (оно само циклит).


Ф>Не поможет. Меня это не спасло. Я месяца 3 пытался разобраться в причине синьки, потом просто опустился с 3.6 до 3.2. Со штатного XMP-профиля моей DDR4 опустился до штатного профиля другой памяти, которую в интернете нашёл — она по виду была слишком похожа на мою, решил попробовать. С тех пор мой комп работает стабильно.


Просто EDO/DDR память внутри себя очень, оочень, ооочень медленная. (но зато, как-бы, дешёвая). и эта медленность выражается в "таймингах" "профилей" — например после изменения адреса нужно подождать 22 такта процессора перед считыванием строки, а если менял колонку то еще 24. а при записи 22 и 28

иногда, можно ждать не 22/24 а 16/18 или нужно 21/30. если пересчитать в наносекунды, изменение таймингов дает много больший прирост, чем увеличение частоты памяти (и процессора) с 3.2 до 3.6 или даже до 4.5 (потому что при 4.5 тайминги придется увеличить до 70/90, процессор больше тактов будет ожидать и "эффективная частота" (сколько тактов он тратит на собственно рассчет) так и останется 2.4)

но соответственно, при неправильно выбранных таймингах, запись или считывание может происходить "не в те ячейки" так как внутри микросхемы дешифратор адреса не успевает переключить всю строку/колонку.
при чем, при линейном чтении (последовательном инкременте адреса) ошибок не будет, или они будут редки и будут прозрачно исправляться паритетом.

Ф>Хороший тест — игры: нужно поставить текстуры побольше, чтоб чуть-чуть не влезали в видеопамять, и недостающее гонялось по PCI-E. О том, что оперативке плохо будет видно по артефактам на экране. Это личное наблюдение — я не встречал таких рекомендаций в интернетах. У меня это так работало.


Ну вот ещё, ради такого игру покупать. Можно просто отключить кулера обдува памяти, листом бумаги направить поток воздуха в обход памяти, подуть на неё горячим феном.
Все проблемы от жадности и глупости
Re: Чем лучше проверить скорость ОЗУ?
От: Muxa  
Дата: 17.01.26 15:48
Оценка: +1 :)
Ты чо опять какую-то хрень по дешовке купил?
Re[2]: Чем лучше проверить скорость ОЗУ?
От: Shmj Ниоткуда  
Дата: 17.01.26 15:57
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Ты чо опять какую-то хрень по дешовке купил?


Да, но вроде все норм. на этот раз.
=сначала спроси у GPT=
Re: Чем лучше проверить скорость ОЗУ?
От: Doom100500 Израиль  
Дата: 18.01.26 07:31
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот такой код оно дало:


...skip...

Уровень лени уже зашкаливает. Теперь форум должен разбираться в нейрослопе.
Спасибо за внимание
Re[2]: Чем лучше проверить скорость ОЗУ?
От: Shmj Ниоткуда  
Дата: 18.01.26 08:07
Оценка:
Здравствуйте, Doom100500, Вы писали:

D>Уровень лени уже зашкаливает. Теперь форум должен разбираться в нейрослопе.


Кстати, вполне совпадает с данными того же AIDA64, ну не численно а если сравнивать один комп с другим.
=сначала спроси у GPT=
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.