A/I #4
未完了コンパイラや開発言語によらず、処理速度を同じ単位・CPUクロック数で比較できる関数を作る
開発 次郎 さんが8ヶ月前に更新 · 編集済み
用語調査¶
純粋な処理時間を表す言葉は?
- 経過実時間(elapsed real time)
- コンピュータプログラムの開始から終了までにかかった実際の時間。タスクが終了した時刻とタスクが開始した時刻の差
- ウォール・クロック・タイム(wall-clock time、WCT、壁時計時間)、ウォール・タイム(wall time)とも言う
- プログラムによる遅延やリソースが使えるようになるまでの待ち時間等、アーキテクチャやランタイムに依存する要因が 含まれる 。
- 多くのCPUで同時に並行して実行するプログラムの場合、CPU時間が経過実時間の何倍もの値になる
- 実時間(real time)
- 入力データの処理が瞬時に行なわれること。経過時間や実行時間と呼ばれることもあるが、これらは後述のCPU時間との区別が曖昧である。
- CPU時間
- CPUが動作している時間
- プログラムによる遅延やリソースが使えるようになるまでの待ち時間等、アーキテクチャやランタイムに依存する要因が 含まれない 。
- ユーザ時間
- CPUがユーザー空間でコードを実行するのに忙しかった時間
- システム時間
- CPUがカーネル空間でコードを実行するのに忙しかった時間
- この値がスレッドまたはプロセスについて報告されている場合は、たとえば、スレッドがシステムコールを発行した後など、実行中のコンテキストに代わってカーネルが作業を行っていた時間を表す
- CPUがカーネル空間でコードを実行するのに忙しかった時間
- 並行と並列
- 並行(Concurrent)
- CPUがタスクを切り替えながら処理すること
- リソースを効率的に使用するため、処理を同時に進めることが目的
- 並列(Parallel)
- 複数のタスクが物理的に同時に実行される状態です。マルチコアCPUが各コアで異なるタスクを同時に処理すること
- 処理を早くこなすことが目的
- 並行(Concurrent)
開発 次郎 さんが7ヶ月前に更新
トラブルシューティング¶
トラブル¶
次のCMakefile.txtだと実行時に得体のしれないエラーになる。
# たぶん、これが原因。後述するが、ソースからGoogleTestをビルドした場合はこの現象にならない
find_package(GTest REQUIRED)
# たぶん、これは関係ない
set(CMAKE_CXX_FLAGS "-static -lstdc++ -lgcc -lwinpthread")
# たぶん、これは関係ない
file(GLOB_RECURSE TESTS test_*.cpp)
# たぶん、これらは関係ない
include(GoogleTest)
add_executable(${PROJECT_NAME}-googletest ${TESTS})
target_include_directories(${PROJECT_NAME}-googletest PRIVATE ../lib/include)
target_link_libraries(${PROJECT_NAME}-googletest GTest::GTest GTest::Main ${PROJECT_NAME})
gtest_add_tests(TARGET ${PROJECT_NAME}-googletest)
得体のしれないエラー¶
$ build/tests/MeasureTime-googletest.exe
0 [main] MeasureTime-googletest (23320) child_copy: cygheap read copy failed, 0x800000000..0x80000FDB0, done 0, windows pid 23320, Win32 error 6
477 [main] MeasureTime-googletest 548 D:\src\MeasureTime\cpp\build\tests\MeasureTime-googletest.exe: *** fatal error - couldn't create signal pipe, Win32 error 5
解決方法¶
GoogleTestはソースからビルドする。
set(CMAKE_CXX_FLAGS "-static -lstdc++ -lgcc -lwinpthread")
file(GLOB_RECURSE TESTS test_*.cpp)
# https://qiita.com/utkamioka/items/cacb1001bd2abf605b15
include(FetchContent)
FetchContent_Declare(
googletest
DOWNLOAD_EXTRACT_TIMESTAMP ON
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.16.0
)
if (WIN32)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
endif()
FetchContent_MakeAvailable(googletest)
file(GLOB_RECURSE TESTS test_*.cpp)
add_executable(${PROJECT_NAME}-googletest ${TESTS})
target_link_libraries(${PROJECT_NAME}-googletest gtest_main ${PROJECT_NAME})
target_include_directories(${PROJECT_NAME}-googletest PRIVATE ../lib/include)
include(GoogleTest)
gtest_discover_tests(${PROJECT_NAME}-googletest)
次のコマンドでMSYS2用のgtestをインストールしたのだが、これだとダメ見たい。原因不明。判明しそうもないので追及もしない。
$ pacman -S gtest
$ pacman -Qs gtest
local/gtest 1.16.0-1
Google Test - C++ testing utility
開発 次郎 さんが7ヶ月前に更新 · 編集済み
トラブルシューティング¶
トラブル¶
cmakeで作成したMakefileでmakeできない。
$ make
/usr/bin/cmake.exe -S/d/src/MeasureTime/cpp -B/d/src/MeasureTime/cpp/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake.exe -E cmake_progress_start /d/src/MeasureTime/cpp/build/CMakeFiles /d/src/MeasureTime/cpp/build//CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make1: Entering directory '/d/src/MeasureTime/cpp/build'
make -f lib/CMakeFiles/MeasureTime.dir/build.make lib/CMakeFiles/MeasureTime.dir/depend
make2: Entering directory '/d/src/MeasureTime/cpp/build'
cd /d/src/MeasureTime/cpp/build && /usr/bin/cmake.exe -E cmake_depends "Unix Makefiles" /d/src/MeasureTime/cpp /d/src/MeasureTime/cpp/lib /d/src/MeasureTime/cpp/build /d/src/MeasureTime/cpp/build/lib /d/src/MeasureTime/cpp/build/lib/CMakeFiles/MeasureTime.dir/DependInfo.cmake "--color="
make2: Leaving directory '/d/src/MeasureTime/cpp/build'
make -f lib/CMakeFiles/MeasureTime.dir/build.make lib/CMakeFiles/MeasureTime.dir/build
make2: Entering directory '/d/src/MeasureTime/cpp/build'
lib/CMakeFiles/MeasureTime.dir/compiler_depend.make:4: multiple target patterns. Stop.
make2: Leaving directory '/d/src/MeasureTime/cpp/build'
make1: [CMakeFiles/Makefile2:224: lib/CMakeFiles/MeasureTime.dir/all] Error 2
make1: Leaving directory '/d/src/MeasureTime/cpp/build'
make: [Makefile:149: all] Error 2
解決に向けてトライ¶
- chocolateyでWindows用のmakeコマンドをインストールしてみたが、MSYS2の/d/ProgramData/形式のパスに対応していない
解決方法¶
- mingw-w64-x86_64-cmake をインストールする
- pacman -S mingw-w64-x86_64-cmake
インストール履歴閉じる
$ pacman -S mingw-w64-x86_64-cmake
依存関係を解決しています...
衝突するパッケージがないか確認しています...パッケージ (21) mingw-w64-x86_64-brotli-1.1.0-4 mingw-w64-x86_64-c-ares-1.34.5-1 mingw-w64-x86_64-ca-certificates-20241223-1 mingw-w64-x86_64-cppdap-1.65-1
mingw-w64-x86_64-curl-8.13.0-2 mingw-w64-x86_64-jsoncpp-1.9.6-3 mingw-w64-x86_64-libarchive-3.7.9-2 mingw-w64-x86_64-libb2-0.98.1-2 mingw-w64-x86_64-libidn2-2.3.8-2
mingw-w64-x86_64-libpsl-0.21.5-3 mingw-w64-x86_64-libssh2-1.11.1-1 mingw-w64-x86_64-libtasn1-4.20.0-1 mingw-w64-x86_64-libunistring-1.3-1
mingw-w64-x86_64-libuv-1.50.0-2 mingw-w64-x86_64-lz4-1.10.0-1 mingw-w64-x86_64-nghttp2-1.65.0-1 mingw-w64-x86_64-nghttp3-1.8.0-1 mingw-w64-x86_64-ninja-1.12.1-1
mingw-w64-x86_64-p11-kit-0.25.5-1 mingw-w64-x86_64-rhash-1.4.5-1 mingw-w64-x86_64-cmake-4.0.0-1合計ダウンロード容量: 16.48 MiB
合計インストール容量: 88.54 MiB:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
mingw-w64-x86_64-curl-8.13.0-2-any 1519.4 KiB 750 KiB/s 00:02 [#################################################################] 100%
mingw-w64-x86_64-libunistring-1.3-1-any 832.7 KiB 281 KiB/s 00:03 [#################################################################] 100%
mingw-w64-x86_64-cppdap-1.65-1-any 491.9 KiB 415 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-ninja-1.12.1-1-any 500.5 KiB 148 KiB/s 00:03 [#################################################################] 100%
mingw-w64-x86_64-libarchive-3.7.9-2-any 856.3 KiB 233 KiB/s 00:04 [#################################################################] 100%
mingw-w64-x86_64-p11-kit-0.25.5-1-any 422.7 KiB 730 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-brotli-1.1.0-4-any 419.9 KiB 383 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-cmake-4.0.0-1-any 9.0 MiB 1666 KiB/s 00:06 [#################################################################] 100%
mingw-w64-x86_64-c-ares-1.34.5-1-any 309.2 KiB 187 KiB/s 00:02 [#################################################################] 100%
mingw-w64-x86_64-libssh2-1.11.1-1-any 309.0 KiB 310 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-ca-certificates-20241223-1-any 395.0 KiB 192 KiB/s 00:02 [#################################################################] 100%
mingw-w64-x86_64-rhash-1.4.5-1-any 219.0 KiB 313 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-libuv-1.50.0-2-any 216.9 KiB 264 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-libtasn1-4.20.0-1-any 196.3 KiB 260 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-jsoncpp-1.9.6-3-any 176.1 KiB 194 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-libidn2-2.3.8-2-any 170.6 KiB 227 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-nghttp3-1.8.0-1-any 123.7 KiB 232 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-lz4-1.10.0-1-any 166.9 KiB 218 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-libpsl-0.21.5-3-any 94.4 KiB 138 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-libb2-0.98.1-2-any 23.7 KiB 21.7 KiB/s 00:01 [#################################################################] 100%
mingw-w64-x86_64-nghttp2-1.65.0-1-any 196.3 KiB 71.9 KiB/s 00:03 [#################################################################] 100%
合計 (21/21) 16.5 MiB 1757 KiB/s 00:10 [#################################################################] 100%
(21/21) キーリングのキーを確認 [#################################################################] 100%
(21/21) パッケージの整合性をチェック [#################################################################] 100%
(21/21) パッケージファイルのロード [#################################################################] 100%
(21/21) ファイルの衝突をチェック [#################################################################] 100%
(21/21) 空き容量を確認 [#################################################################] 100%
:: パッケージの変更を処理しています...
( 1/21) インストール mingw-w64-x86_64-cppdap [#################################################################] 100%
( 2/21) インストール mingw-w64-x86_64-c-ares [#################################################################] 100%
( 3/21) インストール mingw-w64-x86_64-brotli [#################################################################] 100%
( 4/21) インストール mingw-w64-x86_64-libunistring [#################################################################] 100%
( 5/21) インストール mingw-w64-x86_64-libidn2 [#################################################################] 100%
( 6/21) インストール mingw-w64-x86_64-libpsl [#################################################################] 100%
( 7/21) インストール mingw-w64-x86_64-libtasn1 [#################################################################] 100%
( 8/21) インストール mingw-w64-x86_64-p11-kit [#################################################################] 100%
( 9/21) インストール mingw-w64-x86_64-ca-certificates [#################################################################] 100%
(10/21) インストール mingw-w64-x86_64-libssh2 [#################################################################] 100%
(11/21) インストール mingw-w64-x86_64-nghttp2 [#################################################################] 100%
(12/21) インストール mingw-w64-x86_64-nghttp3 [#################################################################] 100%
(13/21) インストール mingw-w64-x86_64-curl [#################################################################] 100%
(14/21) インストール mingw-w64-x86_64-jsoncpp [#################################################################] 100%
(15/21) インストール mingw-w64-x86_64-libb2 [#################################################################] 100%
(16/21) インストール mingw-w64-x86_64-lz4 [#################################################################] 100%
(17/21) インストール mingw-w64-x86_64-libarchive [#################################################################] 100%
(18/21) インストール mingw-w64-x86_64-libuv [#################################################################] 100%
(19/21) インストール mingw-w64-x86_64-ninja [#################################################################] 100%
(20/21) インストール mingw-w64-x86_64-rhash [#################################################################] 100%
(21/21) インストール mingw-w64-x86_64-cmake [#################################################################] 100%
mingw-w64-x86_64-cmake の提案パッケージ
mingw-w64-x86_64-emacs: for cmake emacs mode - makeを変えなくても問題がなくなった
- (旧)/usr/bin/cmake 4.0.0
- (新)/mingw64/bin/cmake 4.0.0
- pacman -S mingw-w64-x86_64-cmake
インストール履歴閉じる