亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

pytorch中使用cuda擴展的實現示例

2020-02-15 21:14:12
字體:
來源:轉載
供稿:網友

以下面這個例子作為教程,實現功能是element-wise add;

(pytorch中想調用cuda模塊,還是用另外使用C編寫接口腳本)

第一步:cuda編程的源文件和頭文件

// mathutil_cuda_kernel.cu// 頭文件,最后一個是cuda特有的#include <curand.h>#include <stdio.h>#include <math.h>#include <float.h>#include "mathutil_cuda_kernel.h"http:// 獲取GPU線程通道信息dim3 cuda_gridsize(int n){  int k = (n - 1) / BLOCK + 1;  int x = k;  int y = 1;  if(x > 65535) {    x = ceil(sqrt(k));    y = (n - 1) / (x * BLOCK) + 1;  }  dim3 d(x, y, 1);  return d;}// 這個函數是cuda執行函數,可以看到細化到了每一個元素__global__ void broadcast_sum_kernel(float *a, float *b, int x, int y, int size){  int i = (blockIdx.x + blockIdx.y * gridDim.x) * blockDim.x + threadIdx.x;  if(i >= size) return;  int j = i % x; i = i / x;  int k = i % y;  a[IDX2D(j, k, y)] += b[k];}// 這個函數是與c語言函數鏈接的接口函數void broadcast_sum_cuda(float *a, float *b, int x, int y, cudaStream_t stream){  int size = x * y;  cudaError_t err;    // 上面定義的函數  broadcast_sum_kernel<<<cuda_gridsize(size), BLOCK, 0, stream>>>(a, b, x, y, size);  err = cudaGetLastError();  if (cudaSuccess != err)  {    fprintf(stderr, "CUDA kernel failed : %s/n", cudaGetErrorString(err));    exit(-1);  }}
#ifndef _MATHUTIL_CUDA_KERNEL#define _MATHUTIL_CUDA_KERNEL#define IDX2D(i, j, dj) (dj * i + j)#define IDX3D(i, j, k, dj, dk) (IDX2D(IDX2D(i, j, dj), k, dk))#define BLOCK 512#define MAX_STREAMS 512#ifdef __cplusplusextern "C" {#endifvoid broadcast_sum_cuda(float *a, float *b, int x, int y, cudaStream_t stream);#ifdef __cplusplus}#endif#endif

第二步:C編程的源文件和頭文件(接口函數)

// mathutil_cuda.c// THC是pytorch底層GPU庫#include <THC/THC.h>#include "mathutil_cuda_kernel.h"extern THCState *state;int broadcast_sum(THCudaTensor *a_tensor, THCudaTensor *b_tensor, int x, int y){  float *a = THCudaTensor_data(state, a_tensor);  float *b = THCudaTensor_data(state, b_tensor);  cudaStream_t stream = THCState_getCurrentStream(state);  // 這里調用之前在cuda中編寫的接口函數  broadcast_sum_cuda(a, b, x, y, stream);  return 1;}
int broadcast_sum(THCudaTensor *a_tensor, THCudaTensor *b_tensor, int x, int y);

第三步:編譯,先編譯cuda模塊,再編譯接口函數模塊(不能放在一起同時編譯)

nvcc -c -o mathutil_cuda_kernel.cu.o mathutil_cuda_kernel.cu -x cu -Xcompiler -fPIC -arch=sm_52
import osimport torchfrom torch.utils.ffi import create_extensionthis_file = os.path.dirname(__file__)sources = []headers = []defines = []with_cuda = Falseif torch.cuda.is_available():  print('Including CUDA code.')  sources += ['src/mathutil_cuda.c']  headers += ['src/mathutil_cuda.h']  defines += [('WITH_CUDA', None)]  with_cuda = Truethis_file = os.path.dirname(os.path.realpath(__file__))extra_objects = ['src/mathutil_cuda_kernel.cu.o']  # 這里是編譯好后的.o文件位置extra_objects = [os.path.join(this_file, fname) for fname in extra_objects]ffi = create_extension(  '_ext.cuda_util',  headers=headers,  sources=sources,  define_macros=defines,  relative_to=__file__,  with_cuda=with_cuda,  extra_objects=extra_objects)if __name__ == '__main__':  ffi.build()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情欧美激情在线五月| 色妞一区二区三区| 精品高清美女精品国产区| 蜜臀久久99精品久久久无需会员| 亚洲深夜福利网站| 一区二区亚洲欧洲国产日韩| 久久久久久久久久久亚洲| 日韩美女av在线| 久久久久久久爱| 九九精品在线观看| 国产精品视频内| 久99九色视频在线观看| 伊人久久久久久久久久久久久| 国产日韩欧美夫妻视频在线观看| 亚洲精品xxx| 91色中文字幕| 国模吧一区二区| 亚洲视频网站在线观看| 日韩av在线播放资源| 国产有码一区二区| 亚洲在线观看视频网站| 亚洲图片在线综合| 国产精品久久久久久久久久ktv| 欧美日韩性视频在线| 98精品国产自产在线观看| 亚洲国产日韩欧美在线99| 国产精品劲爆视频| 98精品国产高清在线xxxx天堂| 亚洲国产小视频| 亚洲欧美日韩精品久久奇米色影视| 91经典在线视频| 精品久久久久久久久久国产| 91亚洲精品在线| 欧美日韩久久久久| 日韩在线中文字| 国产精品老女人视频| 国产精品一区二区久久久| 91精品在线国产| 一区二区av在线| 国产精品高潮呻吟久久av无限| 国内精品视频一区| 欧美性xxxxhd| 成人午夜在线视频一区| 日韩在线视频一区| 欧美综合激情网| 国产成人亚洲综合91精品| 欧美激情欧美激情| 91免费看国产| 国产亚洲精品va在线观看| 亚洲日本成人女熟在线观看| 日韩av网址在线观看| 欧美精品久久久久久久久| 国产精品96久久久久久又黄又硬| 欧美一区深夜视频| 91中文字幕一区| 久久精品成人欧美大片古装| 91成人福利在线| 国产精品高潮呻吟久久av野狼| 亚洲伊人久久综合| 91九色综合久久| 欧洲精品久久久| 日韩免费黄色av| 九九精品在线观看| 国产成人精品视频在线观看| 欧美日韩中文字幕综合视频| 欧美亚洲伦理www| 欧美日韩视频免费播放| 久久久999精品免费| 永久免费毛片在线播放不卡| 欧美一区二区三区免费观看| 日韩成人在线视频观看| 一区二区福利视频| 久久国产视频网站| 国产视频欧美视频| 欧美黑人狂野猛交老妇| 久久免费国产精品1| 91av网站在线播放| 在线观看日韩专区| 国产成人精品国内自产拍免费看| 久久这里只有精品99| 亚洲一级黄色片| 欧美一级大片在线免费观看| 亚洲天堂av在线免费观看| 精品欧美一区二区三区| 日韩av在线导航| 中文字幕在线视频日韩| 国产精品永久免费视频| 亚洲色图综合久久| 自拍偷拍亚洲一区| 亚洲视频在线视频| 国产精品99久久久久久久久| 亚洲一区二区三区xxx视频| 91av免费观看91av精品在线| 久久99热这里只有精品国产| 久久久天堂国产精品女人| 亚洲欧洲激情在线| 国产精品18久久久久久首页狼| 久热精品视频在线| 欧洲午夜精品久久久| 国内精品久久久久久影视8| 国产精品户外野外| 久久成人精品电影| 欧美国产第一页| 欧美日本精品在线| 超碰91人人草人人干| 欧美性猛交xxxx黑人猛交| 成人黄色在线播放| 日本精品久久久久久久| 狠狠操狠狠色综合网| 欧美激情极品视频| 亚洲最大的av网站| 久久精品99无色码中文字幕| 亚洲精品ady| 日韩欧美第一页| 97av在线影院| 国产精品男女猛烈高潮激情| 欧美激情a∨在线视频播放| 欧美激情在线有限公司| 91精品国产综合久久香蕉最新版| 久久99久国产精品黄毛片入口| 中文国产亚洲喷潮| 亚洲裸体xxxx| 亚洲网在线观看| 日韩美女视频免费看| 亚洲美女又黄又爽在线观看| 欧美美女15p| 51久久精品夜色国产麻豆| 精品美女国产在线| 欧美电影在线观看| 国产精品日韩欧美综合| 日韩av影片在线观看| 日本久久精品视频| 日韩中文字幕精品| 亚洲欧美日韩在线一区| 欧美性猛交xxxx乱大交蜜桃| 69视频在线播放| 热99精品里视频精品| 久久黄色av网站| 国产精品久久久av| 在线日韩精品视频| 国产精品视频久久| 91免费综合在线| 日本欧美国产在线| 日韩免费观看av| 亚洲91精品在线观看| 亚洲国产精彩中文乱码av| 国产精品久久久久av| 91沈先生在线观看| 日韩综合中文字幕| 国产精品免费一区| 国产在线观看精品一区二区三区| 日韩免费高清在线观看| 久久精品美女视频网站| 中文字幕日韩高清| 久热精品视频在线| 欧美在线视频在线播放完整版免费观看| 成人激情春色网| 国产精品日韩精品| 欧美日韩综合视频网址| 亚洲成人精品视频在线观看| 欧美在线视频一区二区| 成人黄色免费看| 97香蕉久久夜色精品国产| 久久久久久久激情视频|