在CUDA中,可以使用#pragmaunroll指令展开循环,以通过提高指令级并行性来提高性能.该#pragma可选地跟着一个数字,指定多少次循环必须展开.
不幸的是,文档没有给出关于何时应该使用该指令的具体指示.由于编译器已经展开了具有已知行程计数的小循环,是否应该#pragma在较大的循环上展开?在带有可变计数器的小循环上?那么可选的展开数量呢?还有关于cuda特定循环展开的推荐文档吗?
我正在使用具有计算能力1.3GPU的CUDA实现一个应用程序,该GPU涉及扫描二维数组以寻找发生较小二维数组的位置.到目前为止,两个阵列都是使用cudaMallocPitch()和转移来分配的,cudaMemcpy2D()以满足合并的内存对齐要求.
在第一个优化步骤中,我试图通过共同将数据读取到共享内存来合并对全局内存的内存访问.如在未优化的代码测试(其中,例如,有发散分支和所述存储器访问所述全局存储器不聚结)我使用分配的更大的阵列cudaMalloc(),发现性能达的因子改进50%.这怎么可能?
更新:代码现在正确编译
我想计算两个时间戳之间的时差.分辨率很重要,因此必须以微秒/毫秒为单位.
我尝试了以下但结果没有意义:
boost::posix_time::ptime before = (&input[0])->timestamp;
boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_period tp (before, now);
std::string str (boost::posix_time::to_simple_string (tp));
cout << str.c_str() << endl;
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
[2014-Jun-20 12:26:07.711182/2014-Jun-20 12:26:07.711596]
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得以下内容?
76 ?s
Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个概念验证程序,它打开一个文件,读取一些数据并关闭它,所有这些都不使用fopen/getc/fclose函数.相反,我使用低级别开放/读取/关闭等价物,但没有运气:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
int main ( int argc, char **argv ) {
int fp;
ssize_t num_bytes;
if ( fp = open ( "test.txt", O_RDONLY ) < 0 ) {
perror("Error opening file");
return 1;
}
char header[2];
while ( num_bytes = read ( fp, &header, 2 ) > 0 )
printf("read %i bytes\n", num_bytes);
printf("done reading\n");
close ( fp );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果不存在文件,则打开正确打印错误消息.另一方面,如果文件存在,则程序在read()函数处停止,原因不明.对此有何帮助?