几天前,我在Java代码中打了一个错字,但是它可以编译并且运行良好。(尽管结果很奇怪。)
我的代码是:
public static void main(String args[]) {
String strOut;
char cSEP = '|';
String sSEP = "|";
strOut = "AA" + cSEP + "BB"; // Correct assignment
System.out.println(strOut); // The result is "AA|BB". This is OK.
strOut = "AA" + + cSEP + "BB"; // No Error : no token between two +
System.out.println(strOut); // The result is "AA124BB"
strOut = "AA" + + sSEP + "BB"; // This is compiler error !!!
System.out.println(strOut);
}
Run Code Online (Sandbox Code Playgroud)
我找不到第二个作业为什么没有错误并打印124的原因。(当然,“ |”在ASCII代码中为124。但是为什么是“ 124”,而不是“ |”?) …
CUDA C编程指南(p.70)说,
全局存储器驻留在设备存储器中,并且通过32,64或128字节存储器事务访问设备存储器.这些内存事务必须自然对齐:只有与其大小对齐的设备内存的32,64或128字节段(即其第一个地址是其大小的倍数)可以由内存事务读取或写入.
因此,如果我想在设备功能中一次访问32,64或128个连续字节,(例如,复制到共享内存)这个操作最合适的功能(或赋值)是什么?
传统的C memcpy函数似乎一次不能访问32个字节(非常慢).因为这不是矢量数据,所以我希望单个线程一次读取这些数据.
到dbaupp
memcpy效果很好,但我说的是速度.例如,假设我有设备内存指针p并在设备功能中运行以下代码.
a)char c [8]; memcpy(c,p,8);
b)char c [8];*(double*)c =*(double*)p;
对于上述两种情况,结果相同,但情况b比情况a(我在我的代码中测试和确认)快近8倍.
而且,仅供参考,cudaMemcpy功能在设备功能中不起作用.
所以,我想知道的是,是否有任何方法可以在单个操作中复制16个字节.(希望比memcpy快16倍(c,p,16);)