我正在尝试使用CUDA C进行GPU计算,尤其是矩阵求逆问题。同时,在我的代码开头,我定义了函数。但是,这似乎使我在执行“ do”的那一行出现了“预期的通货膨胀”错误。
我是C ++的新手,所以没有做太多尝试。
#include<cublas_v2.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define cudacall(call)
do
{
cudaError_t err = (call);
if (cudaSuccess != err)
{
fprintf(stderr, "CUDA Error:\nFile = %s\nLine = %d\nReason = %s\n", __FILE__, __LINE__, cudaGetErrorString(err));
cudaDeviceReset();
exit(EXIT_FAILURE)
}
}
while (0);
“预期宣言”
答案 0 :(得分:0)
多行宏需要使用MyActivity#onCreate
来指示它们在下一行继续。我把所有的人排在最后。滚动查看它们。
\
通常,请尽量避免使用宏。改用lambda和高阶函数:
#define cudacall(call) \
do { \
cudaError_t err = (call); \
if (cudaSuccess != err) { \
fprintf(stderr, "CUDA Error:\nFile = %s\nLine = %d\nReason = %s\n", \
__FILE__, __LINE__, cudaGetErrorString(err)); \
cudaDeviceReset(); \
exit(EXIT_FAILURE) \
} \
} while (0);
我们可以这样使用它:
template<class F>
void cudacall(F&& func) {
cudaError_t err = func();
if (cudaSuccess != err) {
fprintf(stderr, "CUDA Error:\nFile = %s\nLine = %d\nReason = %s\n",
__FILE__, __LINE__, cudaGetErrorString(err));
cudaDeviceReset();
exit(EXIT_FAILURE);
}
}