在我的代码中,我有一些cudaMallocs总是这样:
cudaMalloc((void**) &solDevicePtr, (NG*G) * sizeof(solDevicePtr[0]));
cudaFree看起来像:
cudaFree(solDevicePtr);
我想要做的是使用bash脚本从malloc中提取信息“solDevicePtr”,然后在我的文件中检查表达式cudaFree(solDevicePtr)是否存在,但对于所有cudaMalloc(myvar)。
我怎么能用bash脚本,awk,......来做?一个想法是提取和存储每个cudaMalloc变量并检查相应的cudaFree(myvar)。另一个想法是将所有cudaMalloc变量存储在一个数组中,然后将所有cudaFree变量存储在另一个数组中,并在排序后比较这些数组。
如果不成功,最好显示哪些变量没有被释放。
祝你好运
答案 0 :(得分:0)
这样的事情应该做:
code=/path/to/code
for i in $(grep -PRo '(?<=cudaMalloc\(\(void\*\*\) &)([^,]+)(?=, )' "$code"); do
if ! grep -PRq "cudaFree\\($i\\)"; then
echo "$i is not freed"
fi
done
注意:如果重新分配已分配的变量,则可以使用该名称释放它。此外,整个grepping忽略了范围和程序流程,因此可能是您在2个不同的位置分配了相同的名称,并且只将其释放为一个。