- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在关注 http://code.google.com/p/stanford-cs193g-sp2010/和在线发布的视频讲座,做一个发布的问题集(第一个)我遇到了一些稍微违反直觉的事情,至少在问题的提出方式上。该问题要求我推导出 cpu 和 gpu 上执行时间的时序模型,假设基于在我自己的机器上运行的示例应用程序的时序进行线性缩放。
-Plug the timing numbers printed by the code on the computer you're working on into that equation and report what the break even point (when the cpu version is as fast as the gpu version) will be.
我遇到的问题是我的内核比等效函数的主机版本花费的时间长得多(我将在下面发布),因此没有收支平衡点。我得到的数字如下。
done with copy to gpu kernel
copy to gpu took 26.30630 ms
done with gpu shift cypher kernel
gpu shift cypher took 7.33203 ms
done with copy from gpu kernel
copy from gpu took 28.54141 ms
host shift cypher took 0.00186 ms
Worked! CUDA and reference output match.
您认为我做事的方式有问题吗?这是内核和宿主函数。
// This kernel implements a per element shift
__global__ void shift_cypher(unsigned int *input_array, unsigned int *output_array,
unsigned int shift_amount, unsigned int alphabet_max, unsigned int array_length)
{
int gid = blockIdx.x * blockDim.x + threadIdx.x;
output_array[gid] = (input_array[gid] + shift_amount)%(alphabet_max+1);
}
void host_shift_cypher(unsigned int *input_array, unsigned int *output_array, unsigned int shift_amount, unsigned int alphabet_max, unsigned int array_length)
{
for(unsigned int i=0;i<array_length;i++)
{
int element = input_array[i];
int shifted = element + shift_amount;
if(shifted > alphabet_max)
{
shifted = shifted % (alphabet_max + 1);
}
output_array[i] = shifted;
}
}
示例应用程序以 16MB 的整数元素运行, block 大小为 512。这里是相关文件的完整源代码 http://pastebin.com/htYH0bA2
最佳答案
host shift cypher took 0.00186 ms
这看起来很奇怪。无论您在 CPU 上使用 16MB 做什么,都应该花费不到一毫秒的时间。
通过查看 pastebin 代码,您似乎可以使用 CUDA 事件对所有内容进行计时。虽然我没有使用过它们,但我的猜测是你用它来测量 GPU 内核执行的实际时间。其中,在仅调用主机代码的情况下几乎没有。这真的是他们衡量斯坦福类(class)中主机代码执行的方式吗?
你可以用任何一种 C 定时器检查这个结果来证明我是错的。
关于CUDA 内核函数比等效的主机函数花费更长的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216716/
所以我的问题是: 为什么(以及如何避免)C# 中的 Is 运算符的生命周期比 if 中使用的更长? 例子: Animal a = new Cat(); if (a is Cat c) { Co
我遇到了这个问题,我已经尝试解决了很长一段时间。理想情况下,我希望 particles.js 的“生成框”向下延伸到页面底部(由 fullpage.js 计算的 7 x viewport),这样当使用
我想让一个 div(我的侧边栏)延伸到页面底部。我知道我需要添加“高度:100%;”为了做到这一点。 但是当我添加 height: 100%; 时,内容少于侧边栏的页面会降低侧边栏的高度,然后您就看不
只有我这么认为吗,还是在 SQL Server 2008 Management Studio 中扩展数据库列表比在 SQL Server 2005 Management Studio 中扩展数据库列表
我是一名优秀的程序员,十分优秀!