Местоположение
Таиланд, Чон Бури, Паттая

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (3)
  • Почему у меня AMD Ryzen 3970 в 2-3 раза медленее Core i9 10850K?

    @thecove Автор вопроса
    Update Вопрос решен!
    С проблемой за 12 часов секаса удалось разобраться.
    В проекте использовалась самописная либа для ГСЧ на базе mt19937 и человек писавший ее лет 5 назад сделал ее потокобезопасной. Понапихав во все вызовы
    std::lock_guard guard(mMutex);

    Не знаю почему AMD на этих вызовах "отдыхал" дольше чем Intel но факт остается фактом. В два раза больше проц от красных терял времени чем синие. В итоге у синих 100% загрузка проца а у красных около 50.
    Как временное решение ( пока старую либу не переписали ) я в каждый поток добавил свой собственный класс Random на базе стандартного rand() / srand() из C++
    __declspec(thread) Random* random= nullptr;
    это решение на коленке. Но главное причина найдена и точность рассчетов не пострадала
    class Random
    {
    public:
    Random()
    {
     _rand_state = 0;
    }
    void srand(unsigned int const seed)
    {
        _rand_state = seed;
    }
    uint16_t rand()
    {
        _rand_state = _rand_state * 214013 + 2531011;
        return (_rand_state >> 16) & RAND_MAX;
    }
    private:
    uint32_t _rand_state; 
    }


    в итоге результат.
    Вот было:
    4 млн. итераций AMD 32 потока = 4,05 сек. Загрузка CPU 45%
    4 млн. итераций AMD 64 потока = 3,61 сек. Загрузка CPU 47%
    4 млн. итераций Intel 10 потоков = 4,01 сек. Загрузка CPU 75%
    4 млн. итераций Intel 20 потока = 2,61 сек. Загрузка CPU 100%


    после исправлений стало:
    4 млн. итераций AMD 32 потока = 1,25 сек. Загрузка CPU 60% ( 1 поток на физическое ядро )
    4 млн. итераций AMD 64 потока = 0,71 сек. Загрузка CPU 100% ( 1 поток на физическое ядро + HP )
    4 млн. итераций Intel 10 потоков = 2,8 сек. Загрузка CPU 70% ( 1 поток на физическое ядро )
    4 млн. итераций Intel 20 потока = 2,1 сек. Загрузка CPU 100% ( 1 поток на физическое ядро + HP )


    Как видно из нового теста AMD как и предсказывали все известные бенчмарки примерно в 3 раза производительнее чем Intel при полном использовании всех ядер.
    Тесты при загрузке на одно ядро у меня показывали что Intel на 15-20 процентов шустрее чем AMD
    Ответ написан
    Комментировать
  • Генератор случайных чисел ИНОГДА (очень редко!) возвращает NaN?

    @thecove
    Я ветку почитал и могу сделать ввод: или магия случается, тоесть списываем все на магнитные бури на Юпитере или таки надо копать.
    Если баг воспроизводится абсолютно хаотично то могу придположить ( из своего C++ опыта ) что кто то где то портит кучу и на выходе у вас фигня.
    Кстати я так понимаю что Rand в фортране выдает число типа float / double потому что я не понимаю как NaN возможен в целых числах.

    Вопрос: если написать простую голую программу в которой будет только один вызов функции main ( ну или что там в фортране, простите я не знаю ) и только в этой функции в цикле вызывать Rand и больше ничего.
    NaN - появляется???

    PS можете приложить асм листинг функции Rand ?
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (7)