我想确定形式x ^ 2 + 1是多少个素数,1 <= x <= 10 ^ 7.我只想将它与CUDA并行化并检查差异,所以我使用了普通的素数检查,而我并不关心改进它的算法.
我安排了一个网格,并在我的间隔上滑雪,将结果记录在每个块的共享内存中,对每个块上的gpu执行减少,最后执行cpu减少以获得最终结果.
我的问题是当我更改每个块中的块数和线程数时,输出结果会发生变化.我无法解释的另一件事是,对于每个块8个块和2048个线程的配置,代码运行在100ms以下,但是当我将线程数减少到1024并且块数增加一倍时,代码将导致超时在memcpy从设备到主机!! 我该如何解释这种行为以及正确性在哪里出现问题?
我正在使用GTX 480 nvidia gpu.
我的代码是:
#include <stdio.h>
static void HandleError( cudaError_t err, const char *file, int line )
{
if (err != cudaSuccess) {
printf( "%s in %s at line %d\n", cudaGetErrorString( err ), file, line );
exit( EXIT_FAILURE );
}
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))
#define N 10000000
#define BLOCKS 8
#define THREADS 2048
__device__ int isprime(int x)
{
long …
Run Code Online (Sandbox Code Playgroud) 我写了以下用于测试的haskell代码.它与ghc
(版本8.0.2)编译良好,并按预期打印20.
f x = x * 2
main = print $ f 10
Run Code Online (Sandbox Code Playgroud)
但是当我导入这样的Char
模块时:
module Data.Char
f x = x * 2
main = print $ f 10
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:test.hs:3:1: error: parse error on input ‘f’
.
haskell是否在导入模块时更改环境?有什么区别,我导入模块错了吗?