Оптимизируйте собственное выражение, добавив операцию - PullRequest
0 голосов
/ 25 февраля 2019

на моей машине MSVC (сборка в выпуске), вычисление 1 в следующем коде намного быстрее, чем вычисление 2 (6 с против 8,5 с).Почему это так?

Вот полный код (main.cpp):

#include <Eigen/Dense>
#include <chrono>
#include <iostream>

using namespace std;
using namespace Eigen;

int main()
{
    Matrix3Xf a = Matrix3Xf::Random(3, 400);
    Vector3f v = Vector3f::Random();
    RowVectorXf b = RowVectorXf::Random(400);

    auto start = chrono::steady_clock::now();

    for (float f = 0; f < 1000000; f++)
    {
        // calculation 1:
        //b.noalias() += (v.transpose() * (a * 1));

        // calculation 2:
        b.noalias() += (v.transpose() * a);
    }

    auto end = chrono::steady_clock::now();

    cout << "Elapsed time in milliseconds : "
        << chrono::duration_cast<chrono::milliseconds>(end - start).count()
        << " ms" << endl;

    getchar();

    return 0;
}

А вот CMakeLists.txt для воспроизведения

cmake_minimum_required(VERSION 3.1)
project(testProject)

# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
    message(STATUS "Setting build type to 'Release' as none was specified.")
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
    # Set the possible values of build type for cmake-gui
    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
        "MinSizeRel" "RelWithDebInfo")
endif()

find_package(Eigen3 3.3.7 NO_MODULE)

set(SOURCES main.cpp )

add_executable(testProject ${SOURCES} ${SOURCES_test})

target_link_libraries (testProject PUBLIC Eigen3::Eigen)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...