【问题标题】:convert u_int64_t to u_char on CUDA 2.3 nvopencc在 CUDA 2.3 nvopencc 上将 u_int64_t 转换为 u_char
【发布时间】:2010-12-10 02:25:30
【问题描述】:

CUDA 2.3 V0.2.1221 / 32bit linux

您好,我对以下代码有疑问:

__device__ void put_u64(void *vp, u_int64_t v) {
u_char *p = (u_char *) vp;

p[0] = (u_char) (v >> 56) & 0xff;
p[1] = (u_char) (v >> 48) & 0xff;
p[2] = (u_char) (v >> 40) & 0xff;
p[3] = (u_char) (v >> 32) & 0xff;
p[4] = (u_char) (v >> 24) & 0xff;
p[5] = (u_char) (v >> 16) & 0xff;
p[6] = (u_char) (v >> 8) & 0xff;
p[7] = (u_char) v & 0xff; }

make emu=1 编译并运行

-

没有仿真我得到错误:

### 第 1923 行或 ../../be/cg/cgemit.cxx 的断言失败

### 操作数 0 的寄存器类不正确

nvopencc 内部错误...状态 1

-

有人可以帮忙吗-我只需要一种工作方式 将 u_int64_t 转换为 unsinged char[7]。

【问题讨论】:

  • 不管你如何解决这个问题,我希望你也向 NVidia 的 Cuda 开发人员报告这个问题,因为这显然是 Cuda 中的一个错误。

标签: cuda uint64


【解决方案1】:

我尝试了一个简单的测试用例,不幸的是它编译成功。 u_char 和 u_int_64 是如何定义的?

我绝对同意您应该向 NVIDIA 报告此问题,但他们需要更多代码才能重现该问题。查看生成的 PTX 代码也可能会有所帮助。

我使用了以下代码:

#include <iostream>
#include <algorithm>
#include <cuda.h>

__device__ void put_u64(void *vp, unsigned long long v)
{
    unsigned char *p = (unsigned char *) vp;
    p[0] = (unsigned char) (v >> 56) & 0xff;
    p[1] = (unsigned char) (v >> 48) & 0xff;
    p[2] = (unsigned char) (v >> 40) & 0xff;
    p[3] = (unsigned char) (v >> 32) & 0xff;
    p[4] = (unsigned char) (v >> 24) & 0xff;
    p[5] = (unsigned char) (v >> 16) & 0xff;
    p[6] = (unsigned char) (v >> 8) & 0xff;
    p[7] = (unsigned char) v & 0xff;
}

__global__ void test(unsigned char *output, unsigned long long input)
{
    put_u64(output, input);
}

int main(void)
{
    unsigned char result[8];
    unsigned char *d_result;
    unsigned long long input = 0x1212343456567878ULL;
    cudaMalloc((void **)&d_result, 8 * sizeof(unsigned char));
    test<<<1,1>>>(d_result, input);
    cudaMemcpy(&result, d_result, 8 * sizeof(unsigned char), cudaMemcpyDeviceToHost);
    std::cout << std::hex;
    std::copy(result, result + 8, std::ostream_iterator<int>(std::cout));
    std::cout << std::endl;
}

【讨论】:

  • 但是你 NVIDIA,汤姆。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2019-02-16
  • 2011-08-09
  • 2014-06-20
  • 1970-01-01
相关资源
最近更新 更多