正如问题所述,我想知道是否有可能获得内核中特定CUDA函数的更深层的分析数据。我已经开发了一些相当复杂的Miller-Rabin算法实现,任意大整数,需要微调,一般我已经找到了一些“可疑代码”:
/* Iterate over bits of t from bit-position D-2 to s (both inclusive).
Note that t is just effectively n with special treatment, namely we skip
s least-significant bits as stated previously (refer to initialization section) */
for (int j = SIZ(n) * CUMP_LIMB_BITS - 2; j >= s; j--) {
/* b_helper = b**2 mod n */
cumpz_mulmod(b_helper, b, b, n);
/* Swap b with b_helper */
cumpz_swap(b, b_helper);
if (cump_tstbit(PTR(n), j)) {
/* b = b_helper * a mod n */
cumpz_mulmod(b_helper, b, a, n);
/* Swap b with b_helper */
cumpz_swap(b, b_helper);
}
}
如何获取总呼叫数,cumpz_mulmod
的总时间,每次通话的时间等内容?请注意,cumpz_mulmod
会调用其他功能,例如cumpz_add
,调用其他功能等。理想情况下,我希望获得与gprof
相同的信息,例如调用图,但我已经研究过这似乎不可能完全,因为所有__device__
函数都是内联的。我发现nvprof
仅对内核整体有用。