我读过CUDA编程指南,但我错过了一件事.假设我在全局内存中有32位int数组,我想将它复制到具有合并访问权限的共享内存中.全局数组的索引从0到1024,假设我有4个块,每个块有256个线程.
__shared__ int sData[256];
Run Code Online (Sandbox Code Playgroud)
何时进行合并访问?
1.
sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y];
Run Code Online (Sandbox Code Playgroud)
全局内存中的地址从0到255复制,每个地址由32个线程进行warp,所以这里可以吗?
2.
sData[threadIdx.x] = gData[threadIdx.x * blockIdx.x+gridDim.x*blockIdx.y + someIndex];
Run Code Online (Sandbox Code Playgroud)
如果someIndex不是32的倍数,它不会合并?地址错位?那是对的吗?
我需要编写有效且快速的方法来搜索给定模式的字节数组.我这样写,你怎么想,怎么改进?它有一个bug,它不能返回长度为1的匹配.
public static bool SearchByteByByte(byte[] bytes, byte[] pattern)
{
bool found = false;
int matchedBytes = 0;
for (int i = 0; i < bytes.Length; i++)
{
if (pattern[0] == bytes[i] && bytes.Length - i >= pattern.Length)
{
for (int j = 1; j < pattern.Length; j++)
{
if (bytes[i + j] == pattern[j])
{
matchedBytes++;
if (matchedBytes == pattern.Length - 1)
{
return true;
}
continue;
}
else
{
matchedBytes = 0;
break;
}
}
}
}
return found; …Run Code Online (Sandbox Code Playgroud) 我想将一个位写入二进制文件.
using (FileStream fileStream = new FileStream(@"myfile.bin", FileMode.Create))
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
binaryWriter.Write((bool)10);
}
Run Code Online (Sandbox Code Playgroud)
像binaryWriter.Write((bit)1);
我使用binaryWriter.Write((bool)1)文件时有一个字节,但我想写一个字节.这可能吗?
嗨我有内核功能,我需要比较字节.我想要搜索的区域被分成块,因此4k字节的数组被分成4k/256 = 16个块.块中的每个线程都在idx上读取数组,并将其与另一个数组进行比较,这就是我想要搜索的内容.我通过两种方式做到了这一点:
1.比较全局内存中的数据,但块中的线程通常需要读取相同的地址.
2.将数据从全局内存复制到共享内存,并以与上述相同的方式比较共享内存中的字节.读同一地址仍有问题.复制到共享内存如下所示:
myArray[idx] = global[someIndex-idx];
whatToSearch[idx] = global[someIndex+idx];
Run Code Online (Sandbox Code Playgroud)
其余的代码是一样的.仅在共享阵列中执行对示例2中的数据的操作.
但是第一个选项比共享内存快10%左右,为什么?谢谢你的解释.
我需要执行并行缩减以在CUDA设备上找到数组的最小值或最大值.我找到了一个很好的图书馆,称为Thrust.您似乎只能在主机内存中对阵列执行并行缩减.我的数据在设备内存中.是否可以减少设备内存中的数据?我无法想象如何做到这一点.以下是Thrust的文档:http://code.google.com/p/thrust/wiki/QuickStartGuide#Reductions.谢谢大家.
我有char数组,我想把它写到txt文件,但是以字节为单位.
ofstream sw("C:\\Test.txt");
for(int i = 0; i < 256; i++)
{
sw << (byte)myArray[i];
}
Run Code Online (Sandbox Code Playgroud)
这会将字符写入文件,但我想写字节.如果有char'a'我想写'97'.谢谢.
我有一个url的集合,我需要编写正则表达式来过滤所需的内容.
/数据/ 43492-someText /"
/数据/ 221639-anotherText /"
/数据/ 116345-differentText /"
/数据/ 6630-boooring /"
/数据/ 220742-富/"
我需要的只是没有/"最后的字符串,所以
/数据/ 220742-FOO
我的正则表达式如下所示:
@"/data/[0-9]{1,10}-.*""\s"
Run Code Online (Sandbox Code Playgroud)
注意:由于我的项目存在一些限制,我不想使用字符串替换来执行此操作.