小编sae*_*edn的帖子

通过更改线程数来更改CUDA代码输出的说明

我想确定形式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)

cuda nvidia

0
推荐指数
1
解决办法
437
查看次数

在haskell中导入模块会使代码无法编译

我写了以下用于测试的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是否在导入模块时更改环境?有什么区别,我导入模块错了吗?

haskell

-2
推荐指数
1
解决办法
77
查看次数

标签 统计

cuda ×1

haskell ×1

nvidia ×1