【CUDA】Warp Sum & Warp Scan

Warp Sum 各Warpの持つ値の合計を計算する。 例:[1, 2, 3, 4] -> [10, 10, 10, 10] for (int i = 1; i < warpSize; i *= 2) value += __shfl_xor(value, i); Warp Scan 各Warpの持つ値の累積を計算する。 例:[1, 2, 3, 4] -> [1, 3, 6, 10] for (int i = 1…

基数を取得する

最下位ビット/バイトからk番目の基数を取得する関数です。 radix1bit → 2進数表現で右からk番目の値を取り出す (0 or 1) radix4bit → 16進数表現で右からk番目の値を取り出す (0 to 15) radix8bit → 1バイト区切りで右からk番目の値を取り出す (0 to 255) Se…

CUDAのハッシュテーブル CUDPP編

インストール まずCUDPPのインストール手順です。事前にcmakeのインストールが必要です。 $ git clone -b 2.2 https://github.com/cudpp/cudpp.git $ cd cudpp $ git submodule init $ git submodule update $ mkdir build && cd build $ cmake .. $ make $ …

Google Homeでのやり取りの履歴を見る

Google Homeに話しかけた内容、また、Google Homeの返答の履歴を見る方法です。 こちらのページを開く 検索の下の"日付とサービスでフィルタ"を選択 アシスタントにチェック 検索の虫眼鏡ボタンを押すと、Google Homeとのやり取りの履歴が出てきます ※スマー…

【CUDA】カーネル内での動的メモリ確保

デバイス上のメモリは、ホストからのcudaMalloc()で確保するのが通常だが、 カーネル内で動的にメモリ確保することもできる*1。 カーネル内での動的メモリ確保には、C/C++と同じようにmalloc()/free()、new/deleteが使える。 __global__ void testKernel() {…

NVIDIA Jetson TX2を買ったのでセットアップ

届きました! 意外と大きいです。一辺20cmくらいでしょうか。 ディスプレイ(HDMI)、キーボード、マウス、電源を接続します。USBポートは一基しかないので、キーボードとマウスを両方接続する場合は USBハブを使うか、付属のMicroUSB-USB変換ケーブルを使い…

ZeroMQ: 複数のEndpointに接続する

ちゃんとドキュメントを読めという話かもしれないが、ZeroMQ のソケットが 複数のEndpointにbind/connectできることを最近知った。そこで、複数のEndpointに対してのbind/connectを 使ったメッセージングのパターンをいくつか考えてみた。 1. ローカル/リモ…

通信時のソースアドレスを取得する

※Linuxです。 なんて言えばよいのかわからなかったのですが、ip route get xxx.xxx.xxx.xxxと打ったときに出てくる ソース(送信元)アドレスをC/C++内で取得したかった。すぐに思いついた方法は、 popenを使ってip route getを実行し、標準出力を取得 一時…

ソケットに結び付けられたアドレスを取得する

※Linuxです。 netstatしたときのLocal AddressとForeign AddressにあたるものをC/C++で取得したかった。 Local Addressはgetsockname()、Foreign Addressはgetpeername()を使えば取得できるらしい。 C++でサンプルを書くと以下のような感じ。 gist6c0628fe0a…

ZeroMQのheartbeatを試してみた

ZeroMQのversion 4.2からheartbeat機能が追加されました。 元々コネクションの切断は検知してzmq_socket_monitor(3)で通知してくれたのですが、 TCPエラーを吐かずにコネクションが死んだり、Out of Memory等でプロセスが止まったりした場合は検知できないの…

ZeroMQのzmq_socket_monitor(3)の挙動を調べた

ZeroMQのzmq_socket_monitor(3)の挙動を調べてみました。 bindするソケットとconnectするソケットを用意し、以下の順に処理して zmq_socket_monitor(3)でどのようなイベントが通知されるか確認しました。 create (bind/connect socket) bind connect disconn…