東方算程譚

επιστημηがヨタをこく、弾幕とは無縁のCUDAなタワゴト

Memory

転置しながらコピーする

cuBLAS が扱う行列要するに二次元配列のメモリレイアウトはFortranとC/C++では大きく異なります。 行列 │ 1 2 3 │ │ 4 5 6 │ がメモリ上にリニアに展開されたとき、 Fortranでは 1 4 2 5 3 6 の順、上から下/左から右に並ぶのに対し、 C/C++ では 1 2 3 4 5 …

カスタム・アロケータ

CUDAでは目的/用途に応じて様々なメモリの確保/解放APIが用意されています。 ピン留めされたHost-memory : cudaMallocHost / cudaFreeHost Host/Device双方で共用できるManaged-memory : cudaMallocManaged / cudaFree Device-memory : cudaMalloc : cudaFre…

Zero Copy

CUDA C Best Practices Guide 9.1.3 に Zero Copy てのが出てきます...なにコレ? ってんで調べてみました。 サンプル: float列の各要素に対し、その平方根をを求める処理を書きました: #include <cuda_runtime.h> #include <device_launch_parameters.h> // out[i] = √in[i] where i = 0..size-1 __global</device_launch_parameters.h></cuda_runtime.h>…

後付けピン留め

cudaMallocHostを使ってピン留めされたHost-memoryを確保すればcudaMemcpyのスキマを潰すことができ、その分速くなる(てかそうしないと複数streamでのoverlapができん)のですが、あらかじめ(mallocやnewで)確保された領域を後付けでピン留め...できるんです…

ピン留め(Page-locked)されたHost-memoryの効果

CUDAによる一連の処理は、 cudaMemcpy でデータ(input)をHostからDeviceにコピー kernelを実行: inputを読んで処理してoutputに書く cudaMemcpy でデータ(output)をDeviceからHostにコピー ってゆー一連のダンドリになります。 このとき Host-memoryをmalloc…

cudaMemcpyのコピー方向とUVA

cudaMemcpy の引数は コピー先, コピー元, バイト数, そして コピー方向。 コピー方向は コピー先/元がHostかDeviceのそれぞれに応じて4種類...ともうひとつ cudaMemcpyDefault てのがあります。 cudaMemcpyDefault はコピー元/先に与えたポインタがHost/Dev…