为什么我的内核产生奇怪的错误消息或"0"只搜索结果我在SO上发现这个答案,提到在nvidia gpus上运行内核的超时为5秒?我用谷歌搜索结果,但我找不到确认来源或更多信息.
你怎么知道的?
对于运行时间长的内核,timout会导致奇怪的行为吗?
谢谢!
问题或多或少都说明了一切.
calling a host function("std::pow<int, int> ") from a __device__/__global__ function("_calc_psd") is not allowed
Run Code Online (Sandbox Code Playgroud)
从我的理解,这应该是使用cuda pow功能,但事实并非如此.
应该够简单; 我真的想把一个int发送到一个SourceModule内核声明,其中有C函数
__global__......(int value,.....)
Run Code Online (Sandbox Code Playgroud)
声明并调用值...
value = 256
...
...
func(value,...)
Run Code Online (Sandbox Code Playgroud)
但我从pycuda得到了各种各样的错误,我使用了错误的类型.
在我的C OpenCL代码中,我clSetKernelArg用来创建'可变大小' __local内存以供在我的内核中使用,这在OpenCL本身并不可用.看我的例子:
clSetKernelArg(clKernel, ArgCounter++, sizeof(cl_mem), (void *)&d_B);
...
clSetKernelArg(clKernel, ArgCounter++, sizeof(float)*block_size*block_size, NULL);
...
kernel="
matrixMul(__global float* C,
...
__local float* A_temp,
...
)"
{...
Run Code Online (Sandbox Code Playgroud)
我的问题是现在,如何在pyopencl中做同样的事情?
我查看了pyopencl附带的示例,但我唯一能找到的是使用模板的方法,这对我来说就像我所理解的那样是一种矫枉过正.见例子.
kernel = """
__kernel void matrixMul(__global float* C,...){
...
__local float A_temp[ %(mem_size) ];
...
}
Run Code Online (Sandbox Code Playgroud)
您有什么推荐的吗?
当转换为pycuda.gpuarray?时,为什么转置矩阵看起来不同?
你能复制一下吗?什么可能导致这个?我使用了错误的方法吗?
示例代码
from pycuda import gpuarray
import pycuda.autoinit
import numpy
data = numpy.random.randn(2,4).astype(numpy.float32)
data_gpu = gpuarray.to_gpu(data.T)
print "data\n",data
print "data_gpu.get()\n",data_gpu.get()
print "data.T\n",data.T
Run Code Online (Sandbox Code Playgroud)
产量
data
[[ 0.70442784 0.08845157 -0.84840715 -1.81618035]
[ 0.55292499 0.54911566 0.54672164 0.05098847]]
data_gpu.get()
[[ 0.70442784 0.08845157]
[-0.84840715 -1.81618035]
[ 0.55292499 0.54911566]
[ 0.54672164 0.05098847]]
data.T
[[ 0.70442784 0.55292499]
[ 0.08845157 0.54911566]
[-0.84840715 0.54672164]
[-1.81618035 0.05098847]]
Run Code Online (Sandbox Code Playgroud) 当我在内核中将展开从8个循环增加到9个循环时,会出现out of resources错误.
我读了如何诊断由于资源不足导致的CUDA启动失败?参数不匹配和寄存器过度使用可能是一个问题,但这似乎不是这种情况.
我的内核计算n点和m质心之间的距离,并为每个点选择最接近的质心.它适用于8个维度,但不适用于9.当我dimensions=9为距离计算设置和取消注释这两行时,我得到了一个pycuda._driver.LaunchError: cuLaunchGrid failed: launch out of resources.
您怎么看,可能会导致这种行为?还有什么其他的可以导致out of resources*?
我使用的是Quadro FX580.这是最小(ish)的例子.为了展开真正的代码我使用模板.
import numpy as np
from pycuda import driver, compiler, gpuarray, tools
import pycuda.autoinit
## preference
np.random.seed(20)
points = 512
dimensions = 8
nclusters = 1
## init data
data = np.random.randn(points,dimensions).astype(np.float32)
clusters = data[:nclusters]
## init cuda
kernel_code = """
// the kernel definition
__device__ __constant__ float centroids[16384];
__global__ void …Run Code Online (Sandbox Code Playgroud) 我使用第三方库,经过大量计算后返回一个包含指针的ctypes对象.
如何保存ctypes对象以及指针指向以供以后使用?我试过了
scipy.io.savemat => TypeError:无法将对象转换为数组cPickle =>包含指针的ctypes对象无法进行pickle这个问题类似于Python - 在字典中查找最长(大多数单词)键 - 但我需要纯字符数.
输入示例:
d = {'group 1': 1, 'group 1000': 0}
Run Code Online (Sandbox Code Playgroud)
输出:
10
Run Code Online (Sandbox Code Playgroud) 对于相同的数据集和参数,我得到不同的准确性LibSVM和scikit-learn的SVM实现,尽管scikit-learn也使用LibSVM在内部.
我忽略了什么?
LibSVM命令行版本:
me@my-compyter:~/Libraries/libsvm-3.16$ ./svm-train -c 1 -g 0.07 heart_scale heart_scale.model
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
me@my-compyter:~/Libraries/libsvm-3.16$ ./svm-predict heart_scale heart_scale.model heart_scale.result
Accuracy = 86.6667% (234/270) (classification)
Run Code Online (Sandbox Code Playgroud)
Scikit-learn NuSVC版本:
In [1]: from sklearn.datasets import load_svmlight_file
In [2]: X_train, y_train = load_svmlight_file('heart_scale')
In [3]: from sklearn import svm
In [4]: clf = svm.NuSVC(gamma=0.07,verbose=True)
In …Run Code Online (Sandbox Code Playgroud) 我的Flask在上传文件或通过GET从其他服务器收集数据时停止响应.我假设,问题是,Flask只在一个线程上运行.
如何更改此权限,以便多个用户可以使用该网站?