我正在尝试使用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);“预期的声明”
发布于 2019-07-26 01:48:56
多行宏需要有一个\来指示它们继续到下一行。我把它们都排在最后;滚动查看。
#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);一般来说,请尽量避免使用宏。改用lambdas和高阶函数:
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);
}
}我们可以这样使用它:
void dostuff() {
bool wasICalled = false;
cudacall([&]() {
// Code goes here
// We can access and modify local variables inside a lambda
wasICalled = true;
// Return the error
return cudaError_t{};
});
}https://stackoverflow.com/questions/57206878
复制相似问题