在CUDA中获取纹理对象

问题描述

我可以在网上找到许多使用CUDA纹理引用的示例,但很少有依赖纹理对象的示例。我试图了解为什么我的下面的代码总是获取x = [(n2w_model[str(i)]+n2w_model[str(j)]) for i,j in zip(df_new['u1'],df_new['u2'])] from sklearn.model_selection import train_test_split xtrain,xtest,ytrain,ytest = train_test_split(np.array(x),df_new['link'],test_size = 0.3,random_state = 35) from sklearn.linear_model import LogisticRegression lr = LogisticRegression(class_weight="balanced") lr.fit(xtrain,ytrain) predictions = lr.predict_proba(xtest) from sklearn.metrics import roc_auc_score roc_auc_score(ytest,predictions[:,1]) 而不是我的输入纹理。我是否缺少某些东西,或使用了错误的设置?我尽可能地简化了它:

0

解决方法

在您的代码中,将纹理描述指定为

texDesc.addressMode[0]   = cudaAddressModeBorder;
texDesc.addressMode[1]   = cudaAddressModeBorder;
texDesc.filterMode       = cudaFilterModeLinear;
texDesc.readMode         = cudaReadModeElementType;
texDesc.normalizedCoords = 1;

,保存纹理数据的数组定义为

auto channelDesc = cudaCreateChannelDesc<uchar4>();

引用documentation

线性过滤

在这种过滤模式下,仅适用于浮点纹理……

您有一个uchar4纹理。您不能对整数纹理使用线性过滤。更改为浮点纹理类型或使用其他读取模式。