system
1
错误信息:
src/md5_gpu.cu(51): Error: Unaligned memory accesses not supported
make: *** [obj/x86_64/debug/md5_gpu.cu.o] 错误 2
部分代码:
global void kernel(uint32 *in_data, GPUResult *result)
{
//明文赋值部分
uint32 block0,block1,block2,block3,
block4,block5,block6,block7,
block8,block9,block10,block11,
block12,block13,block14,block15;
//循环体外先初始化
clear_block();
//根据不同明文长度填充信息
read_plaintext(d_plain_len[0]);
block14=d_plain_len[0]<<3;
char ori_word[32]={0};
char transformed_buf[32]={0}; //51行 这一行错误
uint32 plaintext[13];
char *plain;
uint32 word_begin,word_finsh;
word_begin = d_offset[0]&0xff00;
word_finsh = d_offset[0]&0xff;
int *trans_plain;
}
这个错误是为什么呢?求大神解答!!!!!
system
2
read_plaintext(d_plain_len[0]);
你的函数似乎参数列表中并未有d_plain_len
system
3
楼主!unaligned memory access会在编译的时候和运行的时候报错!
你的编译器能给你检查出来的!就是你的幸运!检查不出来的!你运行就是cudaErrorUnknown! 明白?!
这是对你这个错误提示的解释!
至于你指定的51行说有问题!我看没问题!可能是我眼瞎了!
你再找找!其他人也欢迎继续帮他!
system
4
我只是贴部分代码,那个我在常数存储器声明啦!没有错误,编译的时候显示51行内存错误!我在仔细的看下代码,是不是后面写错误啦
system
5
是不是有可能我在后面用这个数组发生错误,但编译器检查时只提示我这个数组有错误?只能细细的先看下后面的代码。然后过会试试常数存储器跑下行不行!老天保佑
system
6
[
如果在常数内存那就没问题了,不过这种错误一般都是内存使用出错了,所以LZ还得仔细找找看看是不是哪里访问出错!
当然还有一个会导致这个问题出现的就是同步问题!你看看是不是有多个线程同时在对某个地址进行写操作。。
system
7
建议检查下详细的代码看看有没有把类型写错的,比如原本是char的误为int,导致int的起始地址不是4字节对齐的。
system
8
想问下在常数存储器存储的值是不是不能再被修改,因为它是只读的,如果在内核修改的话会不会引起内存错误?
system
9
是不能改的,但是我觉得不会报这个非对齐访问的错误,个人意见,仅供参考。
system
10
解决啦,字对齐加__align__(4),强制转换的时候错啦!!!: