Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

书与GitHub代码不一致(及再勘误) #26

Open
xiaoliable opened this issue Jun 28, 2023 · 1 comment
Open

书与GitHub代码不一致(及再勘误) #26

xiaoliable opened this issue Jun 28, 2023 · 1 comment

Comments

@xiaoliable
Copy link

xiaoliable commented Jun 28, 2023

针对最新的勘误表核对了下2022年10月第5次印刷的书籍。
大部分已经该改正。除了以下几处。

  1. 书中Listing 12.4代码与现GitHub项目中的oversubscription2.cu代码差别较大,与之前CUDA-Programming-v1.0的代码也有出入。至少“size 应改为 size / sizeof(uint64_t)”改的不成功,改成了“size) / sizeof(uint64_t)”。至少是笔误了。
我自己 不安全的代码 第 143 页 程序中第 23 行核函数的第二个参数 size 应改为 size / sizeof(uint64_t)。我已修改本仓库中 对应的程序
  • 2022年10月第5次印刷的书中代码:
    CUDA勘误-fotor-20230628112433

  • 最新oversubscription2.cu代码:

int main(void)
{
    for (int n = 1; n <= N; ++n)
    {
        const size_t memory_size = size_t(n) * 1024 * 1024 * 1024;
        const size_t data_size = memory_size / sizeof(uint64_t);
        uint64_t *x;
        CHECK(cudaMallocManaged(&x, memory_size));
        gpu_touch<<<(data_size - 1) / 1024 + 1, 1024>>>(x, data_size);
        CHECK(cudaGetLastError());
        CHECK(cudaDeviceSynchronize());
        CHECK(cudaFree(x));
        printf("Allocated %d GB unified memory with GPU touch.\n", n);
    }
    return 0;
}
  • 老版本oversubscription2.cu代码:
int main(void)
{
    for (int n = 1; n <= N; ++n)
    {
        const size_t size = size_t(n) * 1024 * 1024 * 1024;
        uint64_t *x;
        CHECK(cudaMallocManaged(&x, size));
        gpu_touch<<<size / sizeof(uint64_t) / 1024, 1024>>>(x, size);
        CHECK(cudaGetLastError());
        CHECK(cudaDeviceSynchronize());
        CHECK(cudaFree(x));
        printf("Allocated %d GB unified memory with GPU touch.\n", n);
    }
    return 0;
}
  1. 核函数的笔误还没改。(虽然没啥影响)
EverNorif 笔误 第 34 页 “调用该核函时” 应改为 “调用该核函数时”。
  1. 这个认知错误,2022年10月书中好像没看到说明。(或者转述了没看出来?)
静听风吟 认知错误 第 12 章 本章中关于统一内存的使用,错误地认为在使用第二代统一内存(在 Linux 系统中使用帕斯卡及以上架构的 GPU)的情况下,在调用核函数之后不需要进行主机与设备的同步即可 1)从主机访问任何统一内存数据;2)并总是得到正确的结果。以上论断中,1)是正确的,而 2)不正确,因为无论是使用第一代统一内存,还是使用第二代统一内存,在从主机访问被核函数修改的统一内存数据之前,都需要某种(显式的或隐式的)同步操作,才能避免读写竞争,从而保证结果的正确性。
@fever-Wong
Copy link

fever-Wong commented Jun 28, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants