PEACH2 APIの解説(仮)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[ASAP Top]]
#contents
とりあえず、APIの使い方のスライド
#ref(TCA-API-en.pptx.pdf)
* 場所 [#p8db3b40]
/opt/tca/p2driver/PEACH2-RDMA下にAPIが~
/opt/tca/p2driver/PEACH2-PCIe-driver下にはドライバがあり...
* コンパイル [#vdb5283f]
PEACH2-RDMA下のtca-comm.o,とtca_gpu.oをリンクする必要があ...
ar -rcs ./libtca.a /opt/tca/p2driver/PEACH2-RDMA/{tca_co...
などでライブラリを作り,
nvcc -arch=sm_35 -lcuda -lcudart -ltcat -I/opt/tca/p2dr...
とすれば良い.
* 使い方 [#h7008739]
** インクルード [#v58079ba]
#inckude "peach2_pcie_ioctl.h"
extern "C" {
#include "tca-api,h"
}
extern "C"は,C言語として解釈せよ,とのこと.マングリング...
** 初期化 [#re411973]
必ず.
tcaInit();
をtca系のAPIを使う前に入れる.~
WorkRAMを使うAPIを使う場合は
tcaDMADescInt_Init();
をその後で行なう.~
これは,WorkRAMの初期化を行なう.
** ハンドルの作成 [#f3e038c8]
ハンドルの宣言は
tcaHandle handle;
でつくる.~
ハンドルは,nodeid, ptr, size, typeの値を持つ構造体で,~
tcaCreateHandle(&handle, &ptr, size, type)
handle => 宣言したハンドル名
ptr => ハンドルに設定したいポインター.GPUなどの場合は,...
size => ptrのサイズ
type => GPUの場合はtcaMemoryGPU, CPUの場合はtcaMemoryCPU...
で各値を設定する.~
後から直接値を設定することも可能で,PEACH2のアドレスなど...
handle.ptr = PEACH2_MODULE_ADDRESS;
みたいに入力できる.~
ただし,CudaMallocで取得したGPUのポインタなどは,APIで使...
この方法で直接設定することはできません.
** 転送 [#t4fe1ce9]
*** レジスタモード [#i22e1c60]
16個までのDMA要求をまとめて実行できるモード.~
PEACH内のレジスタに要求をセットするモードで,起動が高速.
* 引数はapiを調べてください
tcaSetDMAReg_Memcpy(dma_ch,numslot,&numslot,&dst_handle,...
tcaStartDMAReg(dma_ch, numslot)・・・転送キック
tcaWaitDMARecvReg(handle, rwait)・・・DMA終了のwait
**** numslot [#i7a7e9ab]
引数のnumslotは,セットするたびに1増える値で,キックする...
これは転送をいくつかのまとまりにする場合に使える.~
例えば,転送ブロック1(転送4回),転送ブロック2(転送2回),...
numslot_block1 = 0;
tcaSetDMAReg_Memcpy();//転送ブロック1
tcaSetDMAReg_Memcpy();
tcaSetDMAReg_Memcpy();
tcaSetDMAReg_Memcpy();
numslot_block2 = numslot;
tcaSetDMAReg_Memcpy();//転送ブロック2
tcaSetDMAReg_Memcpy();
numslot_block3 = numslot;
tcaSetDMAReg_Memcpy();//転送ブロック3
tcaSetDMAReg_Memcpy();
tcaSetDMAReg_Memcpy();
としておいて,転送ブロック2をキックするときには,
tcaStartDMAReg(dma_ch, numslot_block2)
とすれば良い.
**** tcaDMAflag [#d124711a]
いくつかフラグが用意されているが,通常使うのは~
tcaDMAContinue
tcaDMANotify
ブロックの最後のtcaSetDMAReg_MemcpyにはNotifyを設定して,~
それ以外はContinueを使う.
** ディスクリプタモード [#b5afcc65]
DMAチェーニングが使えるモード.~
ポインタで連結したディスクリプタを用意しておき,これをPEA...
転送できる要求の個数が無制限(レジスタモードは16個が限界).~
ホストから読み出すモードと,WorkRAMモードがある.
*** ホストから [#g7cfc156]
こっちが通常っぽいけど使ったことない.
*** WorkRAM [#v03cb85c]
PEACH2上のWorkRAMにディスクリプタをセットする.~
さきほど無制限と書いたが,WorkRAMの場合は,容量の問題上,...
こっちはなぜかは分からないが高速らしい.
tcaSetDMADescInt_Memcpy(numslot,&numslot,&dst_handle,off...
tcaStartDMADesc(numslot)・・・転送キック
tcaWaitDMARecvDesc(handle, rwait,tag)・・・DMA終了のwait
numslotや,flagの使い方などは同じ.
** 既知のバグ? [#y8f7465d]
waitを何百回もコールするとうまく値が読み込めなくて,
waitでストップしてしまう.
written by kuhataku 2014-08-29
終了行:
[[ASAP Top]]
#contents
とりあえず、APIの使い方のスライド
#ref(TCA-API-en.pptx.pdf)
* 場所 [#p8db3b40]
/opt/tca/p2driver/PEACH2-RDMA下にAPIが~
/opt/tca/p2driver/PEACH2-PCIe-driver下にはドライバがあり...
* コンパイル [#vdb5283f]
PEACH2-RDMA下のtca-comm.o,とtca_gpu.oをリンクする必要があ...
ar -rcs ./libtca.a /opt/tca/p2driver/PEACH2-RDMA/{tca_co...
などでライブラリを作り,
nvcc -arch=sm_35 -lcuda -lcudart -ltcat -I/opt/tca/p2dr...
とすれば良い.
* 使い方 [#h7008739]
** インクルード [#v58079ba]
#inckude "peach2_pcie_ioctl.h"
extern "C" {
#include "tca-api,h"
}
extern "C"は,C言語として解釈せよ,とのこと.マングリング...
** 初期化 [#re411973]
必ず.
tcaInit();
をtca系のAPIを使う前に入れる.~
WorkRAMを使うAPIを使う場合は
tcaDMADescInt_Init();
をその後で行なう.~
これは,WorkRAMの初期化を行なう.
** ハンドルの作成 [#f3e038c8]
ハンドルの宣言は
tcaHandle handle;
でつくる.~
ハンドルは,nodeid, ptr, size, typeの値を持つ構造体で,~
tcaCreateHandle(&handle, &ptr, size, type)
handle => 宣言したハンドル名
ptr => ハンドルに設定したいポインター.GPUなどの場合は,...
size => ptrのサイズ
type => GPUの場合はtcaMemoryGPU, CPUの場合はtcaMemoryCPU...
で各値を設定する.~
後から直接値を設定することも可能で,PEACH2のアドレスなど...
handle.ptr = PEACH2_MODULE_ADDRESS;
みたいに入力できる.~
ただし,CudaMallocで取得したGPUのポインタなどは,APIで使...
この方法で直接設定することはできません.
** 転送 [#t4fe1ce9]
*** レジスタモード [#i22e1c60]
16個までのDMA要求をまとめて実行できるモード.~
PEACH内のレジスタに要求をセットするモードで,起動が高速.
* 引数はapiを調べてください
tcaSetDMAReg_Memcpy(dma_ch,numslot,&numslot,&dst_handle,...
tcaStartDMAReg(dma_ch, numslot)・・・転送キック
tcaWaitDMARecvReg(handle, rwait)・・・DMA終了のwait
**** numslot [#i7a7e9ab]
引数のnumslotは,セットするたびに1増える値で,キックする...
これは転送をいくつかのまとまりにする場合に使える.~
例えば,転送ブロック1(転送4回),転送ブロック2(転送2回),...
numslot_block1 = 0;
tcaSetDMAReg_Memcpy();//転送ブロック1
tcaSetDMAReg_Memcpy();
tcaSetDMAReg_Memcpy();
tcaSetDMAReg_Memcpy();
numslot_block2 = numslot;
tcaSetDMAReg_Memcpy();//転送ブロック2
tcaSetDMAReg_Memcpy();
numslot_block3 = numslot;
tcaSetDMAReg_Memcpy();//転送ブロック3
tcaSetDMAReg_Memcpy();
tcaSetDMAReg_Memcpy();
としておいて,転送ブロック2をキックするときには,
tcaStartDMAReg(dma_ch, numslot_block2)
とすれば良い.
**** tcaDMAflag [#d124711a]
いくつかフラグが用意されているが,通常使うのは~
tcaDMAContinue
tcaDMANotify
ブロックの最後のtcaSetDMAReg_MemcpyにはNotifyを設定して,~
それ以外はContinueを使う.
** ディスクリプタモード [#b5afcc65]
DMAチェーニングが使えるモード.~
ポインタで連結したディスクリプタを用意しておき,これをPEA...
転送できる要求の個数が無制限(レジスタモードは16個が限界).~
ホストから読み出すモードと,WorkRAMモードがある.
*** ホストから [#g7cfc156]
こっちが通常っぽいけど使ったことない.
*** WorkRAM [#v03cb85c]
PEACH2上のWorkRAMにディスクリプタをセットする.~
さきほど無制限と書いたが,WorkRAMの場合は,容量の問題上,...
こっちはなぜかは分からないが高速らしい.
tcaSetDMADescInt_Memcpy(numslot,&numslot,&dst_handle,off...
tcaStartDMADesc(numslot)・・・転送キック
tcaWaitDMARecvDesc(handle, rwait,tag)・・・DMA終了のwait
numslotや,flagの使い方などは同じ.
** 既知のバグ? [#y8f7465d]
waitを何百回もコールするとうまく値が読み込めなくて,
waitでストップしてしまう.
written by kuhataku 2014-08-29
ページ名: