小编Imr*_*ran的帖子

如何分析在C/C++应用程序中花在内存访问上的时间?

函数在应用程序中花费的总时间可以大致分为两个部分:

  1. 花在实际计算上的时间(Tcomp)
  2. 花在内存访问上的时间(Tmem)

通常,剖析器提供函数花费的总时间的估计.是否有可能估算出上述两个组件(Tcomp和Tmem)所花费的时间?

c++ profiling intel-vtune callgrind perf

14
推荐指数
3
解决办法
1237
查看次数

c ++ 11函数调用中的单元素向量初始化

请考虑以下示例代码:

例:

void print(int n) {
    cout << "element print\n";
}

void print(vector<int> vec) {
    cout << "vector print\n";
}

int main() {
   /* call 1 */ print(2);
   /* call 2 */ print({2});
   std::vector<int> v = {2};
   /* call 3 */ print(v);
   /* call 4 */ print( std::vector<int>{2} );
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它生成以下输出:

element print
element print
vector print
vector print
Run Code Online (Sandbox Code Playgroud)

为什么print函数调用(上例中的调用2)与接受单个值的函数匹配?我在这个调用中创建了一个向量(包含单个元素),所以它与print使用向量作为输入的调用不匹配吗?

在另一个问题中进行了部分讨论,其中所提供的解决方案适用于具有多于1个元素的向量.

c++ stl vector overload-resolution c++11

6
推荐指数
2
解决办法
2270
查看次数

CUDA与CPU和GPU功能相同

为了从主机代码和GPU内核调用相同的函数,我是否必须保留以下相同函数的两个副本:

int sum(int a, int b){
return a+b;
}

__device int sumGPU(int a, int b){
return a+b;
}
Run Code Online (Sandbox Code Playgroud)

或者是否有任何技术来保存/管理功能的单个副本?

c c++ cuda gpgpu

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

简单的CUDA内核优化

在加速应用程序的过程中,我有一个非常简单的内核,它执行类型转换,如下所示:

__global__ void UChar2FloatKernel(float *out, unsigned char *in, int nElem){
    unsigned int i = (blockIdx.x * blockDim.x) + threadIdx.x;
    if(i<nElem)
        out[i] = (float) in[i];
}
Run Code Online (Sandbox Code Playgroud)

全局内存访问是合并的,并且在我的理解中使用共享内存也不会有益,因为没有多个相同内存的读取.有没有人知道是否有任何可以执行的优化来加速这个内核.输入和输出数据已在设备上,因此不需要主机到设备内存副本.

cuda gpu

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

浮点数的最大值

对于下面的循环,我期待输出,sum = 20e6但输出是sum = 1.67772e+07.

float sum=0.0f;
for(i=0;i<20e6;i++)
    sum = sum + 1.0f;
printf("sum = %g\n", sum);
Run Code Online (Sandbox Code Playgroud)

问题1:为什么sum浮动不能保持大于1.67772e07?的值?

问题2:如果我在循环中更改语句,sum = sum + 1.001f;则sum的最终值为2.32229e+07.为什么总和的价值有所不同?

问题3:我们可以在上面的循环中控制这种行为,这样我们可以使用float来表示大于1.67772e07仍然增加1.0f的值吗?

c floating-point

0
推荐指数
1
解决办法
712
查看次数