我用C++编写了一个带有OpenCV和boost的应用程序,它运行良好且正确,但在退出之前崩溃(如果我一步一步调试,它return 0;在main结束时崩溃)说:
在kdevelop中:
*** Error in `/home/xxx/git_repos/my_proj/build/my_proj': free(): invalid pointer: 0x00000000008939c0 ***
*** Crashed with return code: 0 ***
Run Code Online (Sandbox Code Playgroud)在命令行中:
*** Error in `./my_proj': free(): invalid pointer: 0x00000000008939c0 ***
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)如果我使用gdb:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
*** Error in `/home/xxx/git_repos/my_proj/build/plate_info_extractor': free(): invalid pointer: 0x00000000008939c0 ***
Program received signal SIGABRT, Aborted.
0x00007ffff5b83cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
Run Code Online (Sandbox Code Playgroud)有什么帮助吗?我无法弄清楚出了什么问题.
我已经评论了一些代码部分,似乎问题出现在我用来记录错误/信息的代码中......所以:
#include "CLogger.hpp"
static void help(const std::string& …Run Code Online (Sandbox Code Playgroud) 我知道你通常应该在CUDA上每个块运行至少32个线程,因为线程是以32个为一组执行的.但是我想知道只有一个块有一堆线程被认为是可接受的做法(我知道那里是线程数的限制).我问这个是因为我有一些问题需要线程的共享内存和跨计算的每个元素的同步.我想像我一样启动我的内核
computeSomething<<< 1, 256 >>>(...)
并且只是使用线程来进行计算.
只有一个块有效,或者我只是在cpu上进行计算会更好吗?
将矩阵 A 与向量 x 相乘获得结果 y 后,我想将函数 h 按元素应用于 y。
我想获得 z = h(A x),其中 h 按元素应用于向量 A x。
我知道如何在 GPU 上进行矩阵/向量乘法(使用 cublas)。现在我希望 h (这是我自己的函数,用 C++ 编码)也应用于 GPU 中的结果向量,我该怎么做?
我有Theano工作,我已经安装了Cuda.
nvcc编译器位于windows路径变量中.
然而,当我运行theano时,我收到以下错误:
错误(theano.sandbox.cuda):$ PATH上找不到nvcc编译器.检查您的nvcc安装,然后重试.
我不确定会发生什么.可能是theano正在寻找一个不同的"$ PATH"?
Theanorc文件:
[global]
floatX = float32
device = gpu0
[nvcc]
fastmath = True
Run Code Online (Sandbox Code Playgroud)
(无论是否包含,我都会得到同样的错误[nvcc])
我是CUDA的新手,我一直致力于"减少算法".
该算法适用于任何小于1 << 24的数组大小.
当我使用大小为1 << 25的数组时,程序在"总和"中返回0,这是错误的.总和应该是2 ^ 25
编辑 cuda-memcheck compiled_code
========= CUDA-MEMCHECK
@@STARTING@@
========= Program hit cudaErrorInvalidValue (error 11) due to "invalid argument" on CUDA API call to cudaLaunch.
========= Saved host backtrace up to driver entry point at error
========= Host Frame:/usr/lib64/libcuda.so.1 [0x2f2d83]
========= Host Frame:test [0x3b37e]
========= Host Frame:test [0x2b71]
========= Host Frame:test [0x2a18]
========= Host Frame:test [0x2a4c]
========= Host Frame:test [0x2600]
========= Host Frame:test [0x2904]
========= Host Frame:/lib64/libc.so.6 (__libc_start_main + 0xfd) [0x1ed5d]
========= Host Frame:test …Run Code Online (Sandbox Code Playgroud) 我有一个opencv c ++脚本,我需要在其中使用cudamemcpy.所以我在我的脚本中使用了cudamemcpy并将文件保存为.cu我正在使用cmake.所以我添加了.cu作为cuda_executable.但是当我使用"sudo make"时,我收到以下错误
所以在第27行,我将c ++ 0x改为c ++ 11,我得到了同样的错误,所以我尝试了gnu ++ 11,但我仍然有同样的错误.
我尝试按照这些说明在 Fedora23 下安装 caffe,请在此处输入链接描述。我取消了CPU_ONLY := 1Makefile.config 文件中的注释,以便在没有 CUDA 的情况下安装 caffe。我安装了包括 protobuf 在内的依赖项。但是,我收到以下错误:
>make all
CXX src/caffe/layer.cpp
In file included from ./include/caffe/common.hpp:19:0,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/layer.hpp:8,
from src/caffe/layer.cpp:2:
./include/caffe/util/device_alternate.hpp:34:23: fatal error: cublas_v2.h: No such file or directory
compilation terminated.
Makefile:563: recipe for target '.build_release/src/caffe/layer.o' failed
make: *** [.build_release/src/caffe/layer.o] Error 1
Run Code Online (Sandbox Code Playgroud)
据我所知,这是一个与 CUDA 相关的错误,但我想在没有 CUDA 的情况下安装 Caffe。我误解了什么吗?
我试图找出一个简单的CUDA设计问题的解决方案.假设我有一个处理数据的内核.如果当前处理的数据满足指定条件,则相应的元素outputArray获取当前计数器值并且计数器正在递增.
它看起来像这样:
__global__ void setTags(INDATA* inputData, int* tags)
{
int blockId = blockIdx.x + blockIdx.y * gridDim.x;
int threadId = blockId * (blockDim.x * blockDim.y) + (threadIdx.y * blockDim.x) + threadIdx.x;
if(threadId < N)
{
INDATA current = inputData[threadId];
if(/* current meets some criteria */)
{
tags[threadId] = /*current counter value */
/* increment counter value */
}
}
}
Run Code Online (Sandbox Code Playgroud)
符合标准的元素数量明显少于所有元素.关键是处理停留在GPU上,我的案例标记为唯一整数,范围从0到满足条件的案例数量 - 1.有没有比单线程中增量更快的方法?
我想知道是否有一个相当于alloca函数的CUDA .
我需要创建浮点数组,作为我试图优化的数学函数的参数.问题是我真的不想在编译时知道参数的数量,这就是我现在用模板做的事情.我可以在CUDA中使用new运算符,但我觉得它很慢(也许我可以预先分配它或者其他东西).我会使用共享内存,但它不够大.
我正在关注有关并行计算的 udacity 系列,该系列是在 nvidia 的学习 cuda 网站上找到的,第一个程序正在计算非常奇怪的结果。
这段代码只是简单地计算一个数字的立方,但是程序产生的输出是:
#include <stdio.h>
__global__ void cube(float * d_out, float * d_in){
int idx = threadIdx.x;
float f = d_in[idx];
d_out[idx] = f * f * f;
}
int main(int argc, char ** argv) {
const int ARRAY_SIZE = 64;
const int ARRAY_BYTES = ARRAY_SIZE * sizeof(float);
// generate the input array on the host
float h_in[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++) {
h_in[i] = float(i);
}
float h_out[ARRAY_SIZE];
// …Run Code Online (Sandbox Code Playgroud)