之前在写代码时,参照了这位博主的文章,里面的思想给了我不少启发。
但应该是由于CUDA上这一作业题目的源码进行过更改,所以文章里面的代码直接提交会有不少错误,主要有以下几个:
- 报错fatal error: check.h: No such file or directory,这是由于新题目中不再内置check.h头文件,解决方案将其删除即可。
- 报错ValueError: operands could not be broadcast together with shapes (393216,) (24576,),这是由于参数的输入在新题目中改为编译器自动输入,所以在输入代码中必须加入2<<15参数以及相关的写入和读取函数,否则无法计算65536个N体时的情况。
- 解决以上两个问题后,在计算4096个N体时报错答案不正确。这是由于输入变为编译器的固定输入而不再是随机输入,因此在写入输入后调用随机函数会把数据变为随机数。需要取消随机函数并加上同步函数。
以下是参考代码,再次感谢此文章 的帮助。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "timer.h"
#include "files.h"
#define SOFTENING 1e-9f
/*
* Each body contains x, y, and z coordinate