小编Zk1*_*001的帖子

GPU L1和L2缓存统计信息

我编写了一些执行一系列全局内存访问的简单基准测试.当我测量L1和L2缓存统计数据时,我发现(在GTX580中有16个SM):

 total L1 cache misses * 16 != total L2 cache queries
Run Code Online (Sandbox Code Playgroud)

实际上,右侧远高于左侧(大约五倍).我听说过一些注册溢出也可以放到L2中.但我的内核只有不到28个寄存器,而不是那么多.我想知道这种差异的根源是什么?还是我误解了那些性能计数器的含义?

谢谢

cuda gpu gpgpu opencl

5
推荐指数
1
解决办法
3221
查看次数

opencl中的clock()

我知道CUDA中有函数clock(),您可以在其中放入内核代码并查询GPU时间.但我想知道OpenCL中是否存在这样的事情?有没有办法在OpenCL中查询GPU时间?(我正在使用NVIDIA的工具包).

cuda gpu opencl

4
推荐指数
2
解决办法
1857
查看次数

gpu compute 1.3中合并和未合并内存事务的数量

cuda profiler手册指出,由于更加宽松的合并策略,未合并的内存事务的数量将始终为零.但我确信仍然存在不合并的情况.怎么计算呢?是否有任何工具或模拟器可以帮助?其中,哪一个似乎最准确?谢谢

cuda gpu gpgpu opencl

4
推荐指数
1
解决办法
1989
查看次数

让孩子们等待,直到收到父母的信号

我想从父母那里创造N个孩子.我希望所有的孩子同时开始(一个功能 - 测量时间).所以我把函数放在一个信号处理程序中,当父完成创建(fork)所有子节点时,它会向所有子节点发送信号(使用kill(children_id))让make启动.代码如下,但它不能按预期工作.具体来说,它分叉所有子项,但根本不执行函数"measure_time".这个功能不是记录执行时间而是打印出来的东西.如果我做错了什么,有人会告诉我吗?

    int n_task = 4;
    for (i = 0; i < n_task; i++){
            pid = fork();
            if (pid < 0){
                    printf("cannot fork!\n");
            } else
            if (pid == 0){ //child
                    printf("printed from child [%d]\n", getpid());                        
                    signal(SIGUSR1, measure_time); //measure_time is a function
                    exit(0);
            } else {
                    pid_array[i] = pid;
            }
    }

    //This code is executed from parent only
    for (int i = 0; i < n_task; i++)
    {
            kill(pid_array[i], SIGUSR1);                
    }
Run Code Online (Sandbox Code Playgroud)

c unix linux fork multiprocessing

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

cuda ×3

gpu ×3

opencl ×3

gpgpu ×2

c ×1

fork ×1

linux ×1

multiprocessing ×1

unix ×1