gpt4 book ai didi

CUDA 没有按预期工作?

转载 作者:行者123 更新时间:2023-11-30 15:58:14 26 4
gpt4 key购买 nike

我已经编写了 CUDA 代码。

unsigned long mask_buffer;
int s;
off_t p,

for(p=0;p!=5000;p++)
{
for(s=start;s!=end;s++)
{
ref_off = *(((unsigned int*)(idx_base)) + p);

if((int)(first_indexes[s-start_sequence] % 8 - ref_off % 8) < 0)
{
int shamt2 = (ref_off % 8 - first_indexes[s-start_sequence] % 8);
mask_buffer = *((unsigned long *)(msk_base + (ref_off - first_indexes[s-start_sequence])/8)) >> shamt2;

if( ( (*(unsigned long *)(seqmaskc + 16 * (s-start_sequence))) ^ mask_buffer ) << shamt2)
continue;
}

else if((int)(first_indexes[s-start_sequence] % 8 - ref_off % 8) == 0)
{
mask_buffer = *((unsigned long *)(msk_base + (ref_off)/8));

if( (*(unsigned long *)(seqmaskc + 16 * (s-start_sequence)) ^ mask_buffer))
continue;
}

else
{
int shamt2 = 8 - (first_indexes[s-start_sequence] % 8 - ref_off % 8);
mask_buffer = *((unsigned long *)(msk_base + (ref_off/8- first_indexes[s-start_sequence]/8) - 1)) >> shamt2;

if( ( (*(unsigned long *)(seqmaskc + 16 * (s-start_sequence))) ^ mask_buffer ) << shamt2)
continue;
}

int shamt = (ref_off % 4 - first_indexes[s-start_sequence] % 4) * 2;

memcpy(reference_blk, ref_base + ref_off / 4 - first_indexes[s-start_sequence] / 4, sequence_bytes);

for (rp = last_rp ; rp != (unsigned long *) reference_blk ; rp--)
{
unsigned long tmp = ((*rp) & ((1 << shamt) - 1)) << (8 * sizeof(unsigned long) - shamt);
*rp = (*rp >> shamt) | shifted_in;
shifted_in = tmp;
}

*rp = (*rp >> shamt) | shifted_in;

if (sequence_length & 0x3)
reference_blk[sequence_length >> 2] &= (1 << ((sequence_length & 0x3) << 1)) - 1;

for ( i = sequence_length >> 2 ; i & (SEQUENCE_ALIGN - 1) ; i++ )
reference_blk[i] = 0;

//-- instead of memcmp --//
int v = 0;
char *p1 = (char *)sequence;
char *p2 = (char *)reference_blk;
int tmp_asd = sequence_bytes;

while(tmp_asd!=0)
{
v = *(p1++) - *(p2++);

if(v!=0)
break;

tmp_asd--;
}

if(v == 0)
{
mat_count[s - (int)start_sequence]++; /* Maintain count */
mat_position[s - (int)start_sequence] = ref_off-first_indexes[s-start_sequence]; /* Record latest position */
}

}
}

这个 for 循环是我的代码的主要功能。但问题是变量“p”永远不会增加超过 5 或 6。我的电脑里有GT530,我的CUDA驱动程序版本和运行时版本也是4.0。这段代码有什么问题???

最佳答案

假设这确实是一个内核,您在新代码编辑之前的原始帖子声称它是一个内核,那么您不能在 CUDA 内核内调用标准 C 库函数,如 memcpy (您可以这样做)大约是代码的一半)。您只能在内核中调用__device__ 函数。因此,除非这是 CUDA 中 memcpy 的重新实现,否则在内核中调用该函数将无法工作...

此外,如果您打算尝试编写需要检查组中其他线程写入的结果的 CUDA 内核,例如您在内核的内存比较部分中所做的操作,那么您将需要在代码中放置一些同步点,以确保在开始检查这些线程的结果之前所有线程都已达到某个点。如果您试图检查另一个 block 可能已写入主内存,也有同步原语,以确保任何先前线程 block 的结果已写入主内存。

关于CUDA 没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com