20240614_taskList

2024/06/14時点でのタスクリスト 開発関係 Jc_Data_checkerがうまく動いてないらしいから、原因を究明してすぐに直してくれ。一体なんでなんだ!!ったく!!–> 修正しました。原因は、HTMLの表示形式が変わって、正規表現で抜き取れなかったことでした。 配信サーバを作ってくれ!!これ、mediasoupeっての使えば行ける –> なんか、ffmpegを使って配信サーバにpublishして、chromeからHLSで動画を見ることができた。ーー>次は本格的なyoutubeを作ってみよう!って感じやな。 レジュメを作ろう。業務委託を取るために。簡単には作りましたって感じですね。 JC_booking_centerを早く稼働させてくれ –> jc_licence_translationを早く作ってくれ。 La_keibaのTODO LISTをすべて解消してくれ Go言語でdistributed file systemを作ってくれ!このyoutubeを見て 研修で作ったフリマアプリ、まるまる自分のものにしよう。じっさいしてええやろ。 その他 確定拠出年金どうするか早く考えてくれ!6/19までだぞ?! 企業型確定拠出年金で、マッチング拠出(個人で拠出すること)をする方法を調べてくれ。ちなみに、マッチング拠出とideco(個人型確定拠出年金)の併用は不可能だ。–> 新卒だからまだ無理っぽい? ニトリでソファーを頼んでくれ –> ネットで頼まないとダメっぽい 研修で学んだことをブログにまとめてくれ!!高解像度で!特に個人的に学びが多かったSQL周り!よろしく!–> とりあえず全体を通しての反省みたいなのは書きました。あとは個別のトピック別に。 実家に健康診断のチケットを取りに行け! APDCMのJournal書いてくれ!! 毎日筋トレしてくれ。ジムに行ってくれ。朝がいい。 毎朝早く起きてくれ。23時に寝て0630に起きる生活ができると最高だ。 早く業務委託で何かしらの案件を取ってきて売れ。 なんかいい研究ネタがないか、せんせいにきいてくれ!配属されたら意外と退屈しないかもしれないけど。。。 早くyoutubeチャンネル開設して、経費生活を始めてくれ! 長期目線 宅建を取ってくれ!!(令和6年7月1日(月)9時30分から7月31日(水)23時59分まで) 簿記2級とってくれ! 土地をどこに買うかかんがえてくれ!!そして貯金しろ!!マジな話、生活費8万と、共通貯金口座2万以外は全部あっちに回してくれ。

June 14, 2024 · 1 min · 37 words · Me

サーバのお引越し && hugoのアップデート

ブログの引っ越し ブログ引っ越した。 家の引っ越しをして自宅サーバからブログを公開できなくなった。 そこで、VPSをレンタルしてそこから配信するように変更。そこからの一発目の投稿。 昔の記事はgithubに保存したので、そこから引っ張ってきて普通に見られるようにした。 hugoのアップデート hugoのアップデートに伴い、昔のraspiで動かしていたhugoのバージョン (v0.54.0) から、v0.127.0にアップグレード??いやなんか、ダウングレードされてね?どゆことや。。。まあそれはさておき、何が言いたいかというと、 バージョンが変わったから使用方法も少し変わってしまったということや。新しいポストの作り方だけ覚えておけば問題ないかな? ポストの新規作成方法 ~/hugo_site、つまり、contentとかがあるディレクトリ上で hugo new post/new_post_name.md って感じね。まえはpostディレクトリがある場所でこれをやる必要があったけど、変わってしまった、という話だ。 その他注意点 brタグは使ってはいけません。バグる。改行したい時は普通にエンター二つで開けてください。よろしく。 テストで改行。うまくいってるみたいね。しかも、ライブ変更してくれる?フロント側も少し担当してくれているって感じなのかな?websockでつながってる?ちょっと検証。あーやっぱりそうだね。ライブリロードって機能でws使ってるみたいや。ええやん。プッシュ通知できて。 その他知っておいた方がいいTIPS hugoの設定関係 archtypes/default.mdを変更するとデフォルトで生成されるmdファイルを変更することが可能。yamlに変更。 Categoriesを各記事ごとに作ることができる。しかし、ホットリロードはされない模様(カテゴリ一覧から検索することは不可能である)。だから、カテゴリーを反映させたかったら、サーバを再起動する必要がある。 sslの設定方法

June 14, 2024 · 1 min · 24 words · Me

How_to_drop_commits_in_git

です 恥ずかしながら、この年になりまして、初めてgitのコミットを取り消したので、やり方を記録しておきたいと思います。 1. コミットを何個さかのぼりたいかを決める git rebase -i HEAD~n nに何コミット分さかのぼりたいかを書きます。例えば、3コミットさかのぼりたかったら git rebase -i HEAD~3 って書きます。次です。 2. 実際にどのコミットを取り消すかを決める 以下のようにテキストエディタが出てきます。 pick 1234567 Commit message for commit to keep drop 9004867 Commit message for commit to remove ただ、pick -> dropに変更するとそのコミットが取り消されます。

May 6, 2024 · 1 min · 36 words · Me

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