我成功地编写了一些CUDA FFT代码,用于对图像进行2D卷积,以及其他一些计算.
我如何确定我能运行的最大FFT是什么?似乎2D R2C卷积的计划占用了图像尺寸的2倍,而另外2倍于C2R的图像尺寸.这似乎是很多开销!
此外,似乎大多数基准测试都适用于相对较小的FFT ..为什么这样?对于大型图像,我似乎会很快耗尽内存.这通常如何处理?你能在图像的图块上执行FFT卷积并将这些结果组合起来,并期望它与在整个图像上运行2D FFT相同吗?
谢谢你回答这些问题
我收到的错误如下所示.这与我的级联设置方式有关吗?开始调查的适当场所在哪里?现在我有一个角色,有很多角色责任.RoleDuty属于角色.RoleDuty只有一个字段,duty,这是一个可以为空的字符串.Role具有RoleDuties列表的all-delete-orphan映射.
06.12.2010 10:02:17 *ERROR* AssertionFailure: an assertion failure occured (this may indicate a bug in Hibernate, but is
more likely due to unsafe use of the session) (AssertionFailure.java, line 47)
org.hibernate.AssertionFailure: null id in RoleDuty entry (don't flush the Session after an exception occurs)
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:78)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:187)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:14
3)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListen
er.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
at org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewInterceptor.flushIfNecessary(GrailsOp
enSessionInViewInterceptor.java:116)
at org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor.postHandle(OpenSessionInViewIntercept
or.java:181)
at org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewInterceptor.postHandle(GrailsOpenSess
ionInViewInterceptor.java:66)
at org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter.postHandle(WebRequestHandlerInter
ceptorAdapter.java:61)
at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:303)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) …Run Code Online (Sandbox Code Playgroud) 我能够使用以下内容在Qt中的标签中显示图像:
transformPixels(0,0,1,imheight,imwidth,1);//sets unsigned char** imageData
unsigned char* fullCharArray = new unsigned char[imheight * imwidth];
for (int i = 0 ; i < imheight ; i++)
for (int j = 0 ; j < imwidth ; j++)
fullCharArray[(i*imwidth)+j] = imageData[i][j];
QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_RGB32);
ui->viewLabel->setPixmap(QPixmap::fromImage(*qi,Qt::AutoColor));
Run Code Online (Sandbox Code Playgroud)
所以fullCharArray是一个已经从2D数组imageData映射的无符号字符数组,换句话说,它是imighight*imwidth字节.
问题是,似乎我的图像中只有一部分显示在标签中.图像非常大.我希望显示完整的图像,按比例缩小以适应标签,并保留纵横比.
另外,那个QImage格式是我能找到的唯一一个似乎能让我近距离展示我想要展示的图像的格式,这是我应该期待的吗?我只使用每个像素一个字节(无符号字符 - 从0到255的值),似乎谎言RGB32对该数据类型没有多大意义,但没有其他任何显示任何远程正确
编辑:关于dan gallaghers的建议,我实现了这段代码:
QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_RGB32);
int labelWidth = ui->viewLabel->width();
int labelHeight = ui->viewLabel->height();
QImage small = qi->scaled(labelWidth, labelHeight,Qt::KeepAspectRatio);
ui->viewLabel->setPixmap(QPixmap::fromImage(small,Qt::AutoColor));
Run Code Online (Sandbox Code Playgroud)
但这导致我的程序"意外地完成"代码0
我试图找出如何使用CUDA内核作为库的一部分,以便我可以将库添加到我现有的C++源文件,并能够使用cuda内核.
那么你怎么做呢?我尝试创建一个包装器,如下所示:
.h文件:
#ifndef __reductions2d_H_
#define __reductions2d_H_
#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime.h>
extern "C" void getMean_wrapper();
#endif
Run Code Online (Sandbox Code Playgroud)
.CU
__global__ void getMean(float *devDataPtr, size_t pitch, int rows, int cols)
{
for (int r = 0; r < height; ++r)
{
float* row = (float*)((char*)devPtr + r * pitch);
for (int c = 0; c < width; ++c)
{
printf("Row[%i][%i]: %4.3f \n",r,c row[c]);
}
}
}
void getMean_wrapper()
{
// Host code
int width = 3, height = 3;
int N …Run Code Online (Sandbox Code Playgroud) 当我尝试调用我已经重载的函数以接受来自CUDA的结构cuComplex时,我收到以下错误.
../common/Filter.cpp:73: error: no matching function for call to ‘ReaderIF::getData(float2&, int&)’
../readers/ReaderIF.h:63: note: candidates are: virtual bool ReaderIF::getData(cuComplex*, offset)
../readers/ReaderIF.h:65: note: virtual bool ReaderIF::getData(std::complex<float>*, offset)
../readers/ReaderIF.h:82: note: virtual bool ReaderIF::getData(float*, offset)
Run Code Online (Sandbox Code Playgroud)
为什么我得到这个?
这是我如何调用getData函数:
cuComplex *h_hhBuff = (cuComplex *)malloc(memsize);
for (int r = 0; r < rows; r++)
{
hhReader->getData(h_hhBuff[r*cols], r);
}
Run Code Online (Sandbox Code Playgroud)
因为我显然将malloc作为cuComplex投射,我不能称之为第一个候选人吗?
我有以下代码:
<button data-dojo-type="dijit.form.Button" data-dojo-props='baseClass:"styleButton"'
name="_action_update"
type="submit"
label="Save"
>Save</button>
Run Code Online (Sandbox Code Playgroud)
问题是,这似乎不再作为提交动作.如果我带走dojo相关的东西,它会按预期工作.我之前使用过这个baseClass方法将样式应用于按钮,但不是提交按钮.我应该怎么改变这个?
有没有办法让bourne shell不关心字符串比较的情况?或者,我可以将变量转换为全部小写吗?
我试图使用带有echo的tr,但永远不能让它覆盖我的变量.
我在QT项目中使用GMP,我正在尝试使用QByteArray来存储一些数字.
当我想将字节数组转换为mpz_t时,我正在执行以下操作:
const char *hexstring = qbyteval.toHex().toStdString().c_str();
mpz_t myval;
mpz_init (myval);
mpz_set_str(myval, hexstring, 16);
mpz_t zero;
mpz_init(zero);
mpz_set_str(zero, "0", 10);
if(mpz_comp(myval, zero) == 0) {
//...set a breakpoint or do something here. This line shouldn't be reached ever.
}
Run Code Online (Sandbox Code Playgroud)
就我而言,qbyteval永远不会为零.如果我在mpz_comp if block中设置断点,则qbyteval.toHex()始终是十六进制字符串.
什么是失败,导致hexstring是一个空字符串(因此myval = 0)?
在C中,我想按此顺序遍历数组
for(int z = 0; z < NZ; z++)
for(int x = 0; x < NX; x++)
for(int y = 0; y < NY; y++)
3Darray[x][y][z] = 100;
Run Code Online (Sandbox Code Playgroud)
如何以3Darray [0] [1] [0]在内存中的3Darray [0] [2] [0]之前出现的方式创建此数组?
我可以进行初始化工作,给我"z-major"排序,但我真的想要这个3d数组的y主要排序
这是我一直在尝试使用的代码:
char *space;
char ***Arr3D;
int y, z;
ptrdiff_t diff;
space = malloc(X_DIM * Y_DIM * Z_DIM * sizeof(char))
Arr3D = malloc(Z_DIM * sizeof(char **));
for (z = 0; z < Z_DIM; z++)
{
Arr3D[z] = malloc(Y_DIM * sizeof(char *));
for (y = 0; …Run Code Online (Sandbox Code Playgroud) 我有一个像这样定义的结构:
typedef struct {
int n;
int *n_p;
void **list_pp;
size_t rec_size;
int n_buffs;
size_t buff_size
} fl_hdr_type;
Run Code Online (Sandbox Code Playgroud)
在我的代码中我有一个initlialization函数,具有以下功能
fl_hdr_type *fl_hdr;
fl_hdr = malloc(sizeof(fl_hdr_type) + (buff_size_n * rec_size_n));
Run Code Online (Sandbox Code Playgroud)
将那些缓冲区大小传递给函数,以便为缓冲区提供空间.
尺寸通常很小...... 100*50或者类似的东西.这个系统上有很多内存来分配它.我实际上无法发布堆栈跟踪,因为此代码位于另一个网络上,但是从核心文件中的dbx中提取了一些信息:
buff_size_n = 32,rec_size_n = 186
和malloc.c中的stack..line数字
t_splay:861
t_delete:796
realfree: 531
cleanfree:945
_malloc:230
_malloc:186
Run Code Online (Sandbox Code Playgroud)
任何想法为什么失败?