Learn_java

共通言語を学ぶ なんでか知らんけど、javaが共通言語になっているみたいなんだよね。 理解不能なんだけども。 ということで、軽くやりますかね。 環境構築から Javaの精神は、「ビルドワンス、らん絵にウェア」だった気がする。 つまり、OSごとに新たにコンパイルしなおしたりしなくていいってことなんだけど、 まあ、そういうのを実現するためには、新しいレイヤーを一枚かませないとだめなんだよね。 それが、JVMだね。 JVM (Java Virtual Machine) は、1 つの命令セットを持ち、メモリーを使用する抽象的な演算マシン。 で、JvMは、JVM専用のファイルじゃないと走らないって思っているんだけど、そうだよね? javacで、コンパイルして、JVMが読める形式に変換して、javaコマンドで実際に動かすって感じかな? で、JVMが読める形式っていうのが、classファイルだったと思うんだけど、どうなんかな。 そうですね。 で、.classはどのjvmでも動くようになっているんですね。つまり、一度コンパイルされたソースコードは、 jvmがあるおかげでどこでも動くって話だ。 で、よく見るjarファイルってのが、.classがいっぱい入っているzipファイルなんだよね。 あれ、java -jarとかですぐ実行できるやん?そういうことや。 JDK = java development kit これには何が入っているんだ。はい、わかりやすいね。 このきーた が。 JDKはJREを内包している。そして、JREはJVMを内包している。 JDKはコンパイラとデバッガを内包している。 つまり、JDKはjavacとを含んでいる。 んで、JREはjava runtime environmentだから、jvmとc/c++でいう標準ライブラリを含んでいる。 javaコマンドは、JVM上で.classファイルを動かすためにあるんだと思う。そんな気がする。そうです。 つまり、結局はJDKをインストールすればコンパイルと実行はできるようになるってことです。 sudo apt install openjdk-17-jdk-headless これで、jreを入る。 環境構築完了。 補足知識 「具体的には、jarファイルはコンパイル済みのclassファイルや画像などのファイルを、zip形式に圧縮してまとめたファイルです。」 コンパイルから実行までのながれ まず、ソースコードを書きます。拡張子は、.java class Hello { public static void main(String[] args) { System.out.println("初めてのJava program"); System.out.println("画面に表示"); } } で、ファイル名は、クラス名と一致させるのがいいみたいですね。つまり、ファイル名は、Hello.javaになります。 で、javacで中間コードにコンパイルします。 javac Hello.java 出てくるのは、Hello.classってファイルです。 んで、実行するときは、 java Hello だけでいいっす。 でも、じつは、 ...

February 4, 2024 · 1 min · 207 words · Me

ロングファットパイプ、TCPダンプ

事始め 例のシステムで、tcコマンドでネットワークレイテンシーを増加させたんですけどね。 そしたら、たったの100msの遅延だったんですけど、64MiBのデータを送信するときに、 アプリから見た時の遅延の時間がなんと1sくらいまで伸びてしまったんですよね。これ、めちゃめちゃ面白い話で、深堀りする価値があるんです。 もしかしたら、ロングファットパイプ問題についても、わかるかもしれないね。 まず、TCPの基礎、どうやって動いているのかを理解する必要がある。 が、せっかくなので、もう一回上からやろうか。 アプリケーションレイヤーから、どうやってデータが通信相手まで伝わるのか、ってのをもう一回確認して、 本題のTCPレイヤーのMTU,MSS,windowサイズについて話した後、tcpダンプの使い方を調べ、最後に実際にTCPダンプをして、 例のシステムにおいて、サーバ・クライアント間で100msの遅延が生じているときのデータのやり取りについてみてみましょう。 OSIモデル、プロトコルスタックについて確認 まず、プロトコルスタックとは「コンピュータネットワーク用のプロトコルの階層」のことです。 OSIモデル(7層) で見ていくのが大事そうですね。上から、アプリケーション層、プレゼンテーション層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層。 アプリケーション層では、具体的なサービスを提供。HTTPとか、websocketとか、FTPとか、SSHとか、その他いろいろ。 プレゼンテーション層は、データのフォーマットを定義する?そうですね。エンコードの方法とか。これはおそらくまだOSレイヤーの話ではない。 ここからがOSの世界の話。 セッション層は、connect(sockdrp,IP)で、コネクションを確立したときに、コネクションの相手を覚えておく層、だと思っていい。 つまり、ソケットのことです。ソケットが通信相手の情報を覚えておきます。 ソケットは、OSによってプログラムのされ方が違うらしいです。それでも異なるOS同士ど通信ができるのは、トランスポート層で規定されているプロトコルにすべてのOSが準拠しているからです。 トランスポート層 (L4) が、TCP / UDP です。TCPでは、アプリケーションからもらったデータを小分けにして、通し番号を付けて、 小分けにしたデータをちょっとづつ送ります。小分けにされたデータが、いわゆる「パケット」です。 再送とかもする。信頼性が高いのです。その代わりスループットは悪くなります。 一方、UDPはデータを投げっぱなしにします。信頼性は低いですが、スループットは高くなります。VoIPなどに使われますね。 L4ではまだ、IPは指定しません。 その下、ネットワーク層が、IPです。ルーティングを決めてくれます。 その下、データリンク層が、イーサネットですね。L2TPとかをするVPN、ありますよね。あれはね、このレイヤーで動いているんですよね。 その下、もう物理層です。L1です。 L4、トランスポート層のTCPについてもう少し詳しく見ていく まずは、TCPヘッダーのフォーマットを見てみましょう。 送信元ポート番号:16bit 送信先ポート番号:16bit シーケンス番号:32bit ACK番号:32bit データオフセット:4bit 未使用:6bit コントロールビット:6bit ウインドウ:16bit チェックサム:16bit 緊急ポインタ:16bit オプション:可変長 いろいろありますが、ここでまず注目したいのは、通信相手のIPアドレスがないってことですね。 なぜなら、それはL3が担当するからです。 その他、自分的にまだ理解が完ぺきではないけど大事そうなのは、シーケンス番号、ACK番号、コントロールビット、 ウィンドウの、4つですね。それぞれについて説明していきます。 シーケンス番号 「このパケットの先頭のデータが送信データの何バイト目にあたるのか送信側から受信側に伝えるためのもの」 TCPではデータを小分けにして送りますね。パケットです。で、何バイト目か?って話ですね。32bitしかないってことは、 2^32/1024/1024/1024 = 4GiBしか一回で送れないってこと?まじ??まあいいや。そんなことはないと思うけどね。 ACK番号 「データが何バイト目まで受信側に届いたのか、受信側から送信側に伝えるためのもの。」だそうです。 コントロールビット URG:緊急ポインタ ACK:データが正しく受信側に届いたことを意味する PSH:FLUSH動作によって送信されたデータである RST:接続を強制的に終了:異常終了 SYN:送信側と受信側で連番を確認しあう。これで接続どうさを表す FIN:切断 ウィンドウ 「受信側から、送信側にウィンドウサイズ (受信確認を待たずにまとめて送信可能なデータ量) を通知するために使う。」 これが16bitであるのが、もんだいなんですよ!! 以上を念頭に次に進みます。 TCPが接続を開始して、データを送信し、切断するまで はい。一言でいうと、 「TCPはスループットを犠牲に、信頼性を高めた通信プロトコル」です。 信頼性を高めるために、されている工夫が2つあるんですね。それが、 3ウェイハンドシェイクと、パケット送信時の受け取り確認です。 (UDPはスリーウェイハンドシェイクも、受け取り確認もしない) ...

January 19, 2024 · 4 min · 650 words · Me

Lessons_i_learned_from_softwareDev_through_research (メモ)

めも 研究を通してやったソフトウェア開発で学んだこと まあ、やっぱりアジャイルっぽくはなるので、試作を作って、それを改良していく感じにはなります。 ただ、これだけは忘れないでほしい。試作を作る段階で今後の可能性を狭めない方がいい。 いや、具体例を一言でいうと、ハードコーディングするな。マジで。そのときはいいかもしれないけど、あとで見つけるの、マジでだるい。頼む。 具体例 いやね、tolを変えて評価したいんですわ。でもね、L3prefetcherのところ、tolがハードコーディングされてるのよね。0.1で。これを変えるのがめんどくさすぎるーーーー。

January 19, 2024 · 1 min · 7 words · Me

Gdb

gdbを使えるようになりたい デバッガは使えた方がいいですよ。ステップ実行とかね。まあ、ちゃんとしたソフトウェア開発っやったことないんで、いまいちピンとこないんですよね。でも、大事なことには変わりないです。頑張りましょう。 python3から、c++の共有ライブラリを呼び出すときにおこったバグの見つけ方 chatgptさんに聞きました。 The error message "munmap_chunk(): invalid pointer" typically indicates a memory corruption issue or a double-free error. It means that at some point during the program's execution, it is trying to deallocate memory that has already been freed or that was never allocated in the first place. To identify the exact point where the issue occurs, you can follow these steps 1:Enable address sanitizer (ASAN) in your C++ code to help detect memory issues. You need to recompile your C++ library with ASAN flags (-fsanitize=address) and then rerun your Python script under GDB. ASAN will provide more detailed information about memory errors. Modify your CMakeLists.txt to include ASAN flags: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address") Then rebuild your C++ library. 2: Run your Python script again under GDB with ASAN enabled: gdb -ex r --args python3 crash.py

January 17, 2024 · 1 min · 138 words · Me

Make_tips

makeの高速化 cmake ..でmakeファイルを生成して、最後にmakeすると思うんだけど、これ、高速化する技があるんですね。 make -j <number of cores> で、めっちゃ高速化されます。

January 17, 2024 · 1 min · 9 words · Me

ROS

いつかROSを触ってみたいので、忘れないようにメモ

January 17, 2024 · 1 min · word · Me

Pybinding

事始め HPCの分野はやはりc/c++で開発されることが多いよね。しかしね、やはりc/c++はビルドとか、マジで面倒くさいんですわ。コンパイル型言語はよ。 だからインタープリタ型言語から、c/c++のライブラリを呼び出せたらいいよね、っていうので作られたのがpybind11とかっていうやつなんだよね。 今回は、c/c++で書かれた科学技術データ向けの非可逆圧縮アルゴリズムの一つである cuSZp をpythonから呼び出す方法を 記録します。 前例 けいち先生がすでにMGARDをpythonから呼び出せるようにpybindをやってくれています。 これを参考にしたいと思います。ということで、先生が何をやったのか、の解析から始めたいと思います。 pymgardのcmake 解説しながら進めていきたいと思います。大事なところだけ。 project( MGARD HOMEPAGE_URL "https://github.com/CODARcode/MGARD" VERSION "${MGARD_VERSION_MAJOR}.${MGARD_VERSION_MINOR}.${MGARD_VERSION_PATCH}" #CUDA will be enabled below if `MGARD_ENABLE_CUDA` is `ON`. LANGUAGES CXX ) include(MgardXGenerateSource) find_package(PkgConfig REQUIRED) add_executable(mgard-x ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard-x/Executables/mgard-x.cpp) target_link_libraries(mgard-x mgard-library ${CMAKE_DL_LIBS}) target_include_directories(mgard-x PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>) install(TARGETS mgard-x) add_executable(mgard-x-autotuner ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard-x/Executables/mgard-x-autotuner.cpp) target_link_libraries(mgard-x-autotuner mgard-library ${CMAKE_DL_LIBS}) target_include_directories(mgard-x-autotuner PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>) install(TARGETS mgard-x-autotuner) #Adding library here so we can set compile definitions for it. add_library(mgard-library) if(MGARD_ENABLE_CUDA) enable_language(CUDA) set(CMAKE_CUDA_STANDARD_REQUIRED TRUE) if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES) set(CMAKE_CUDA_ARCHITECTURES 70) endif() find_package(nvcomp REQUIRED) find_package(CUDAToolkit REQUIRED) target_compile_definitions(mgard-library PUBLIC MGARD_ENABLE_CUDA) set (CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr -w --generate-line-info") set (MGARD_X_SEPARATE_COMPILE_COMPILATION_OPTION CUDA_SEPARABLE_COMPILATION ON) set_source_files_properties(${MGARD_X_CUDA_SRC} PROPERTIES LANGUAGE CUDA) endif() find_package(ZLIB REQUIRED) find_package(PkgConfig REQUIRED) set( MGARD_LIBRARY_CPP src/compress.cpp src/compress_internal.cpp src/compressors.cpp src/format.cpp ) set(MGARD_GENERATE_DIMENSION_SWITCH "${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_dimension_switch.py") set(MGARD_COMPRESS_INTERNAL_CPP "${MGARD_FILE_FORMAT_SRCDIR}/compress_internal_generated.cpp") add_custom_command( OUTPUT "${MGARD_COMPRESS_INTERNAL_CPP}" COMMAND "${PYTHON3}" ARGS "${MGARD_GENERATE_DIMENSION_SWITCH}" "--decompress" "${MAXIMUM_DIMENSION}" "${MGARD_COMPRESS_INTERNAL_CPP}" ) list(APPEND MGARD_LIBRARY_CPP "${MGARD_COMPRESS_INTERNAL_CPP}") target_sources( mgard-library PRIVATE ${MGARD_LIBRARY_CPP} ${MGARD_CUDA_SRC} ${MGARD_X_SRC} ${MGARD_X_SERIAL_SRC} ${MGARD_X_OPENMP_SRC} ${MGARD_X_CUDA_SRC} ${MGARD_X_HIP_SRC} ${MGARD_X_SYCL_SRC} ) set_target_properties(mgard-library PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) set_target_properties(mgard-library PROPERTIES OUTPUT_NAME mgard) target_link_libraries(mgard-library PUBLIC PkgConfig::protobuf) install(TARGETS mgard-library EXPORT mgard-targets) install(FILES "${PROJECT_BINARY_DIR}/include/MGARDConfig.hpp" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mgard") install(FILES "${PROJECT_BINARY_DIR}/include/MGARDXConfig.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mgard/mgard-x/RuntimeX") install(DIRECTORY "include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mgard") install(FILES "${MGARD_FILE_FORMAT_HPP}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mgard/${MGARD_FILE_FORMAT_INCLUDESUBDIR_COMPONENT}") if(MGARD_ENABLE_PYTHON) find_package(Python COMPONENTS Interpreter Development.Module REQUIRED) include(FetchContent) FetchContent_Declare( pybind11 GIT_REPOSITORY https://github.com/pybind/pybind11.git GIT_TAG stable ) FetchContent_MakeAvailable(pybind11) pybind11_add_module(_mgard src/python/bindings.cpp) target_link_libraries(_mgard PRIVATE mgard-library) install(TARGETS _mgard LIBRARY DESTINATION python/mgard) endif() # Add all targets to the build-tree export set export( TARGETS mgard-library NAMESPACE mgard:: FILE "${PROJECT_BINARY_DIR}/mgard-targets.cmake" ) bindings.cpp 今回のcuSZpで、確認してみよう CMakelist.txtの中身 # Specify the minimum version of CMake required to build the project cmake_minimum_required(VERSION 3.21) project(cuSZp VERSION 0.0.2 DESCRIPTION "Error-bounded GPU lossy compression library" ) set(namespace "cuSZp") enable_language(CXX) enable_language(CUDA) find_package(CUDAToolkit REQUIRED) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(CUSZP_ENABLE_PYTHON "Enable Python bindings." OFF) set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER}) set(CMAKE_CUDA_SEPARABLE_COMPILATION ON) set(CMAKE_CUDA_STANDARD "17") set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CUDA_ARCHITECTURES 60 61 62 70 75) set(CUDA_PROPAGATE_HOST_FLAGS ON) set(CUDA_LIBRARY CUDA::cudart) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY VALUE Release) endif() # add_library(${PROJECT_NAME} STATIC) add_library(${PROJECT_NAME} SHARED) target_sources(${PROJECT_NAME} PRIVATE src/cuSZp_f32.cu src/cuSZp_f64.cu src/cuSZp_utility.cu src/cuSZp_timer.cu src/cuSZp_entry_f32.cu src/cuSZp_entry_f64.cu ) target_include_directories(${PROJECT_NAME} PRIVATE # where the library itself will look for its internal headers ${CMAKE_CURRENT_SOURCE_DIR}/src PUBLIC # where top-level project will look for the library's public headers $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # where external projects will look for the library's public headers $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ) #target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) target_link_libraries(${PROJECT_NAME} PRIVATE CUDA::cudart) set(public_headers include/cuSZp_f32.h include/cuSZp_f64.h include/cuSZp_utility.h include/cuSZp_timer.h include/cuSZp_entry_f32.h include/cuSZp_entry_f64.h ) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(Installing) if(CUSZP_ENABLE_PYTHON) find_package(Python COMPONENTS Interpreter Development.Module REQUIRED) # よく出てくる。ライブラリがあるかを確認。cmakeがいい感じにいろいろやってくれる find_package(CUDAToolkit REQUIRED) enable_language(CUDA) set(CUDA_LIBRARY CUDA::cudart) include(FetchContent) # 便利 FetchContent_Declare( pybind11 GIT_REPOSITORY https://github.com/pybind/pybind11.git GIT_TAG stable ) FetchContent_MakeAvailable(pybind11) pybind11_add_module(_cuSZp src/python/bindings.cpp) # ここで作成するライブラリを指定。add_libraryてきなののpybind版 target_include_directories(_cuSZp PRIVATE "/usr/local/cuda/include/" "/usr/local/cuSZp/") target_include_directories(${PROJECT_NAME} PRIVATE # where the library itself will look for its internal headers ${CMAKE_CURRENT_SOURCE_DIR}/src PUBLIC # where top-level project will look for the library's public headers $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # where external projects will look for the library's public headers $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ) target_link_libraries(_cuSZp PRIVATE cuSZp CUDA::cudart) install(TARGETS _cuSZp LIBRARY DESTINATION python/cuSZp) endif() option(CUSZP_BUILD_EXAMPLES "Option to enable building example programs" ON) if (CUSZP_BUILD_EXAMPLES) add_subdirectory(examples) endif () pybinding.cppの中身 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <cuSZp_utility.h> #include <cuSZp_entry_f32.h> #include <pybind11/numpy.h> #include <pybind11/pybind11.h> namespace py = pybind11; py::buffer compress(py::array_t<float> original, float tol) { unsigned char *compressed_data = nullptr; size_t compressed_size = 0; compressed_data = new unsigned char[original.size()]; // pointer_to_original_data(float*), pointer_to_compressed_data(unsigned char*), size_of_original_data(int/size_t), pointer_to_compressed_size, tolerance SZp_compress_hostptr_f32(const_cast<float*>(original.data()), compressed_data, original.size(), &compressed_size, tol); return py::array_t<unsigned char>({compressed_size}, {1}, // stride of the array static_cast<unsigned char *>(compressed_data), py::capsule(compressed_data, [](void *ptr) { delete ptr; })); } ちょっと、 ...

January 17, 2024 · 3 min · 527 words · Me

Cmake_cheat_sheat

c/c++を使うならcmake! を使えるようになろう 前提知識 c/c++をライブラリとして提供するときに必要な奴ら /include, /lib, だよね。 /includeにはヘッダーが入っていて、/libには、コンパイルによって生成されたライブラリが入ります。hogehoge.soとか、hogehoge.aとか。 で、こいつらは基本的に、/usr/local/いかに格納されます。 ヘッダーについても説明しておく。ヘッダーは簡単にいうと、関数の入出力を規定したファイルです。 プログラムをビルドする流れは、コンパイルー>リンク だけど、コンパイルの時点では、ライブラリとして読み込まれたファイルがどんな ヘッダーファイルの種類 ヘッダーファイルには2種類ある。 #include<stdio.h> #include "my_library.h" みたいな感じで、<>で囲まれているやつと、““で囲まれているやつ。<>は、システムのライブラリを読み込むときに使われます。システムライブラリのヘッダーは、/usr/local/includeとか、 /usr/include/に置かれます。ライブラリ (オブジェクトファイル) 本体は、/usr/libとか、/usr/lib64とかにおかれます。 一方、““はユーザが作ったライブラリを読み込むために使われます。““を使うと、コンパイラはカレントディレクトリの中で該当するヘッダーファイルを探します。 ライブラリとヘッダーは、一対一対応します。つまり、 プログラムからライブラリを読み出すときは必ず、ヘッダーでインクルードして、最後リンクする必要があります。 ユーザが定義したヘッダーでも同じです。まず、hogehoge.hppとhogehoge.cppを作って、コンパイルするときに g++ main.cpp hogehoge.cpp みたいな感じで、hogehoge.cppもコンパイルします。オブジェクトができて、最後にリンクしています。 コンパイルー>リンクって流れを覚えておけば問題ないです。 サーチパスを追加したいときは、-Iで、ヘッダーのディレクトリ、-Lでライブラリのディレクトリをつけます。 ld (リンカー) がデフォルトで見に行くディレクトリパス LD_LIBRARY_PATH という環境変数で定義されています。これは変えられます。次のようにサーチパスを追加します。 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ちなみに、ldっていうのは、 Origins of the name "ld" are "LoaDer" and "Link eDitor" らしいです。知らんけど。 共有ライブラリと静的ライブラリ 共有ライブラリは、実行時に動的に読まれるのに対して、静的ライブラリは、コンパイル時に実行ファイルに組み込まれる。 どちらがいいかはわからないけど、共有ライブラリは、実行ファイル (実行バイナリ) の大きさが小さくなるよね。 ちなみに、共有ライブラリはShared Objectだから、.soっていう拡張子が付きます。一方、静的ライブラリは、 a collection of object files bundled together into a single archive fileなので、arichveの.aが付きます。 つまり、hogehoge.soとhogehoge.aですね。 ...

January 17, 2024 · 4 min · 833 words · Me

Singularity_and_docker

事始め 再び、singularity環境でコンテナをビルドする必要が生じた。cuSZで圧縮を実現するために 去年の10月にsingularityを使ってpymgardを作った時に殴り書きしたメモ 1. まずは、ちゃんとネットワーク越しに動くようにしたいです。そのために、singularityのコンテナを作ろうと思います。頑張ってください。 いま、eclairでSingularityのSandboxを作っています。Dockerfile的なのが、singularityにもあるらしくね、Singularity.defってのが、それから今作っています。Sandboxを。 singularity build --fakeroot --sandbox pymgard.sandbox Singularity.def WARNING: The underlying filesystem on which resides "/home/gp.sc.cc.tohoku.ac.jp/aoyagir/new_research/The_Middleware/src/python/pymgard.sandbox" won't allow to set ownership, as a consequence the sandbox could not preserve image's files/directories ownerships >>> compressed = mgard.compress(original, 0.1, 0, mgard.ErrorBoundType.REL, config) GPUassert: CUDA driver version is insufficient for CUDA runtime version /MGARD/include/mgard-x/Hierarchy/../RuntimeX/DeviceAdapters/DeviceAdapterCuda.h 628 cuda (ランタイム) はドライバーより古くても大丈夫。つまり、 なので、もしかしてまたエラーが起こるかもしれないです。つまり、/tmpで作ってくださいって話です。 で、ドライバーが最新のmuffin2で実行したら、普通に行けました。ナイスです。めっちゃナイスです。 --> ナイスですねー。あとは、そうですね、monakaで今後実験していくことになるので、monakaのipでハードコーディングしちゃってください! ここに来るまでに売ったコマンド、ちょっとまとめておきますか。 sudo singularity build --fakeroot --sandbox pymgard.sif Singularity.def # SingularityのDockerfile的なの -> sandboxの. ここ、pymgard.sifじゃなくて、pymgard.sanxboxのが正しいのではないかな?まあいいや。 sudo singularity config fakeroot -add aoyagir singularity shell --fakeroot -writable pymgard.sandbox singularity build --fakeroot pymgard.sif pymgard.sandbox # sandbox -> sif singularity shell --nv pymgard.sif ポイントとしては、 1. singualrityはホームディレクトリを共有するからファイルを移動させる必要がないこと 2. fakerootを使うには、上のコマンドでfakerootが使えるように設定する必要があること 3. sandoboxじゃないと新しいモジュールはダウンロードできないこと 4. sifじゃないとなんか知らんけど、cudaがうまく使えないってこと。だから、sandboxからsifに変換する必要があるってこと。 --> sharkでも同じことをしました。sharkのGPUを使って評価したいと思いますー--。 singularityにおけるDockerfile的なの Bootstrap: docker From: nvidia/cuda:12.1.1-devel-ubuntu22.04 %post apt-get update && \ apt-get install -y curl cmake git g++ pkg-config protobuf-compiler libprotobuf-dev libzstd-dev python3 python3-dev python3-pip curl -sL https://developer.download.nvidia.com/compute/nvcomp/2.6.1/local_installers/nvcomp_2.6.1_x86_64_12.x.tgz | tar xzvf - --directory=/usr/local pip3 install numpy pip3 install tiledb pip3 install h5py git clone https://github.com/szcompressor/cuSZ.git cusz-latest cd cusz-latest && mkdir build && cd build cmake .. \ -DPSZ_BACKEND=cuda \ -DPSZ_BUILD_EXAMPLES=on \ -DCMAKE_CUDA_ARCHITECTURES="75;80;86" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_COLOR_DIAGNOSTICS=on \ -DCMAKE_INSTALL_PREFIX=[/path/to/install/dir] make -j make install %environment export PYTHONPATH=/MGARD/build/lib 拡張子は、.defです。この名前じゃないとだめなのかはわかりませんが。 ...

January 15, 2024 · 5 min · 884 words · Me

Comments_on_linux_plus_command_newbies

これはなにか 西村めぐみさんが書いた「Linux + コマンド入門」 のまとめです。学んだことを箇条書きで書いていきます。 画面のクリア方法 clearってやるとクリアされるのはわかりますね。まあ、俺はあまりクリアすることはないんですけどね。。。。 これ以外に、ctrl + lでクリアできるってのを覚えておくといいかもね。lって、割とホームポジションの近くだし、覚えやすいのでは。 画面がフリーズした時の対処法 ctrl + sでターミナルへの出力が停止されます。 これは、ctrl + qで解除することができます。 uname周りについて unameはシステムの基本情報を出すコマンドだよね。 uname -a すべての情報。これだけ覚えておけばいいかな。あ、でもしたのも覚えておくといいかも uname -r これは、カーネルのリリース情報を出力するコマンドです。 よく、特定のカーネルパッケージをインストールしたいときとか、$(uname -r)って、シェル変数にしてコマンドを実行することがあるよね。 manコマンドを使いこなそうって話だ もうね、そろそろインターネットの情報ではなく、公式な情報から知識を得る方向にシフトしていった方がいい。情報の発信源ってのはすごく大事だからね。ってことで、 man <コマンド> で、そのコマンドの詳細を見られます。 chmodとパーミッションについて ls -laで、そのディレクトリのすべてのファイルの属性の詳細がみられますよね。 chmodでパーミッションを変更できます。 僕はいつも、数字で変更していますが、 chmod <対象> <操作> でも変更できます。 <対象> : u,g,o <操作> : + <r,w,x>, - <r,w,x>, = <r,w,x> って感じですね。 chownとchgrp chownで、ファイルの所有者とグループを変更できますよね。 実は、chgrpで、ファイルのグループだけを変更することができます。 ちなみに、自分が所属しているグループであれば、sudoが必要ありませんが、 それ以外のグループである場合は、sudoが必要であるということです。 また、自分が所属しているグループは、idとか、groupsで確認できるということです。 さらに、ちなみになんだけど、ユーザはデフォルトでプライマリグループっていう、自分一人のグループに強制的に加入させられているらしいです。 で、それ以外のグループをセカンダリグループっていいます。 findを使いこなせ まだ使いこなせていない。 find <場所> -name <名前> find / -name .bash* は、ルートディレクトリ以下で、.bashって名前が付くファイルを探せって意味だね。 いや、これ以外と使えるかもしれない。あのね、なんかね、findを使うといっつもめっちゃバーッて出てくるじゃない。あれって実は権限がないために出てくるエラーだったっていう、衝撃の事実。 findを使うときは、エラー出力を抑制する2>/dev/nullとセットで使おうって話です。 こんな感じです。 ...

January 13, 2024 · 1 min · 99 words · Me