12
返回列表 发新帖
楼主: snapshotwhu

帮忙看一下这一段代码,谢谢

[复制链接]
论坛徽章:
12
2010新春纪念徽章
日期:2010-03-01 11:08:29马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142011新春纪念徽章
日期:2011-02-18 11:42:502011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
11#
发表于 2010-3-13 00:57 | 只看该作者
if( (y< (256-48)) && (x<(256-48))) 这个地方不需要判断大于0就可以
x和y铁定大于0,要不然就是硬件挂了,,,,

dSigmaST=0.0f;
dSigmaS=0.0f;

换成register,用local 会很慢的

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2010-3-13 00:58 | 只看该作者

回复 #8 cyrosly 的帖子

好的,这是个错误,还有别的错误吗?急求啊!!

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2010-3-13 01:03 | 只看该作者

回复 #11 OpenHero 的帖子

问题是我每计算到一个地方,dSigmaST,dSigmaS    都要置0一次。所以我也是用cudamalloc  分配的。

用cudamalloc  分配的就是  local吗?我记得好像是global  啊!

使用道具 举报

回复
论坛徽章:
12
2010新春纪念徽章
日期:2010-03-01 11:08:29马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142011新春纪念徽章
日期:2011-02-18 11:42:502011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
14#
发表于 2010-3-13 01:35 | 只看该作者
这两个都是临时变量,最终也没有记录作用的,所以这两个都是可以直接用register来存储,性能会快很多,cudamalloc分配的是global的内存,会很慢,现在的global和local都是同样的global内存,没有缓冲的。
这个代码最后还有一个问题,就是大家找到的并一不一定都是最大的,因为所有的线程都在写最后的输出的变量,这个地方需要修改一下,可以先得到16*16个,然后再得到最大的哪一个;

使用道具 举报

回复
论坛徽章:
12
2010新春纪念徽章
日期:2010-03-01 11:08:29马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142011新春纪念徽章
日期:2011-02-18 11:42:502011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
15#
发表于 2010-3-13 01:35 | 只看该作者
__global__   void result(unsigned char *id, unsigned char *itempd  , int* nMaxWidth, int* nMaxHeight, float* dMaxR)
{

        long m,n;
        //float R=0.0f;

        unsigned char P=0;
        unsigned char TempP=0;
        float dSigmaST = 0.0f;
        float dSigmaS = 0.0f;

        __shared__ float R[16][9];

        float nMaxWidth_ = x;
        float nMaxHeight_ = y;

        long y=blockDim.y*blockIdx.y+threadIdx.y;//高
        long x=blockDim.x*blockIdx.x+threadIdx.x;//宽

        if( y< (256-48)) && x< (256-48))
        {

                for(m=0;m<48;m++)
                {
                        for(n=0;n<48;n++)
                        {
                                P=id[(y+m)*256+x+n];
                                TempP=itempd[m*48+n];

                                dSigmaS+=(float)(P*P);
                                dSigmaST+=(float)(Pixel*TempP);
                        }
                }

                R[threadIdx.y][threadIdx.x]=dSigmaST/(sqrt(dSigmaS)*sqrt(32621576));
        }

        if (threadIdx.x <8)
        {
                if (R[threadIdx.y][threadIdx.x] < R[threadIdx.y][threadIdx.x+8])

.............
部分代码,其他的自己补充了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表