- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要修改PTX代码并直接进行编译。原因是我想彼此之间有一些特定的说明,并且很难编写生成目标PTX代码的cuda代码,因此我需要直接修改ptx代码。
问题是我可以将其编译为(fatbin和cubin),但是我不知道如何将它们(.fatbin和.cubin)编译为“X.o”文件。
最佳答案
也许可以通过按顺序排列的nvcc
命令来执行此操作,但是我不知道并且也没有发现它。
但是,尽管很麻烦,但是一种可能的方法是中断并重新启动cuda编译序列,并在过渡期间(重新启动之前)编辑ptx文件。这基于nvcc manual中提供的信息,我不认为这是标准方法,因此您的里程可能会有所不同。在这种情况行不通或不可行的情况下,我可能没有考虑过多种情况。
为了解释这一点,我将提供一个示例代码:
#include <stdio.h>
__global__ void mykernel(int *data){
(*data)++;
}
int main(){
int *d_data, h_data = 0;
cudaMalloc((void **)&d_data, sizeof(int));
cudaMemcpy(d_data, &h_data, sizeof(int), cudaMemcpyHostToDevice);
mykernel<<<1,1>>>(d_data);
cudaMemcpy(&h_data, d_data, sizeof(int), cudaMemcpyDeviceToHost);
printf("data = %d\n", h_data);
return 0;
}
nvcc -arch=sm_20 -o t266 t266.cu
nvcc -arch=sm_20 -keep -o t266 t266.cu
t266.ptx
(其中包含
mykernel
的ptx代码)
$ ./t266
data = 1
$
data
变量中,而不是添加1。相关行是:
add.s32 %r2, %r1, 2;
^
|
change the 1 to a 2 here
nvcc -dryrun -arch=sm_20 -o t266 t266.cu --keep 2>dryrun.out
stderr
重定向)。然后,我们要编辑
dryrun.out
文件,以便:
-o "t266.ptx"
#$
,因此实际上我们正在创建一个脚本。 ptxas -arch=sm_20 -m64 "t266.ptx" -o "t266.sm_20.cubin"
fatbinary --create="t266.fatbin" -64 --key="xxxxxxxxxx" --ident="t266.cu" "--image=profile=sm_20,file=t266.sm_20.cubin" "--image=profile=compute_20,file=t266.ptx" --embedded-fatbin="t266.fatbin.c" --cuda
gcc -D__CUDA_ARCH__=200 -E -x c++ -DCUDA_DOUBLE_MATH_FUNCTIONS -D__CUDA_PREC_DIV -D__CUDA_PREC_SQRT "-I/usr/local/cuda/bin/..//include" -m64 -o "t266.cu.cpp.ii" "t266.cudafe1.cpp"
gcc -c -x c++ "-I/usr/local/cuda/bin/..//include" -fpreprocessed -m64 -o "t266.o" "t266.cu.cpp.ii"
nvlink --arch=sm_20 --register-link-binaries="t266_dlink.reg.c" -m64 "-L/usr/local/cuda/bin/..//lib64" "t266.o" -o "t266_dlink.sm_20.cubin"
fatbinary --create="t266_dlink.fatbin" -64 --key="t266_dlink" --ident="t266.cu " -link "--image=profile=sm_20,file=t266_dlink.sm_20.cubin" --embedded-fatbin="t266_dlink.fatbin.c"
gcc -c -x c++ -DFATBINFILE="\"t266_dlink.fatbin.c\"" -DREGISTERLINKBINARYFILE="\"t266_dlink.reg.c\"" -I. "-I/usr/local/cuda/bin/..//include" -m64 -o "t266_dlink.o" "/usr/local/cuda/bin/crt/link.stub"
g++ -m64 -o "t266" -Wl,--start-group "t266_dlink.o" "t266.o" "-L/usr/local/cuda/bin/..//lib64" -lcudart_static -lrt -lpthread -ldl -Wl,--end-group
chmod +x dryrun.out
或类似文件使该脚本文件可执行。)如果在编辑
.ptx
文件时没有犯任何错误,则命令应全部成功完成,并创建一个新的
t266
可执行文件。
$ ./t266
data = 2
$
关于cuda - 如何编译PTX代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20012318/
我正在使用 Capabilities 3.5、CUDA 5 和 VS 2010(当然还有 Windows)。 我有兴趣阅读编译后的代码,以更好地了解我的 C 代码更改的含义。 我需要在 VS 中进行什
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
:)当我尝试管理内核资源时,我决定研究一下 PTX,但有一些事情我不明白。这是我编写的一个非常简单的内核: __global__ void foo(float* out, float* in, uin
我已经为其他应用程序执行了此操作,但由于某种原因,它在我当前的应用程序中不起作用。 这里是一个代码片段,在 VS2010 中工作,使用 Cuda 4.2。我在VS内部和VS外部都编译了ptx文件,但没
我看到了一些代码示例,其中人们在 C 代码中使用内联 PTX 汇编代码。 CUDA toolkit中的Doc提到PTX很强大,为什么会这样?如果我们在 C 代码中使用这样的代码,我们会得到什么好处?
我能否将 PTX 文件中包含的 PTX 函数用作外部设备函数,以将其链接到另一个应调用该函数的 .cu 文件? 这是CUDA - link kernels together的另一个问题其中函数本身不包
我试图减少内核中使用寄存器的数量,所以我决定尝试内联 PTX。 这个内核: #define Feedback(a, b, c, d, e) d^e^(a&c)^(a&e)^(b&c)^(b&e)^(c
...刚刚在 PTX manual 中提到.没有关于它们有什么好处或如何使用它们的提示。 有人知道更多吗?我只是缺少一个共同的概念吗? 最佳答案 巴特的评论基本正确。更详细地,如 PTX ISA 3.
为了查看 CUDA 生成的代码类型,除了目标文件外,我还喜欢编译为 ptx。由于我的一些循环展开可能需要相当长的时间,所以我希望能够编译 *.cu→*.ptx→*。 o 而不是在 *.cu→*.ptx
在 OpenCL 中,“PTX(如 Java 中的字节码)到目标转换器”是解释器(如 Java 中的字节码)还是提前汇编器? 最佳答案 Java 是即时编译的,而不是解释的。 PTX 也在加载时编译。
我正在通过 c++filt 过滤我编译的 PTX,但它只删除了一些名称/标签并保留了一些原样。例如,这个: func (.param .b32 func_retval0) _ZN41_INTERNA
我希望能够使用 PTX 1.3 中尚未在 C 接口(interface)中实现的功能。有没有办法在 PTX 中编写我自己的函数并注入(inject)到现有的二进制文件中? 我正在寻找的功能是获得 %s
我想将 cuda 编译为 ptx 进行嵌入。为此,我将 CMAKE 3.18.5 与 Visual Studio 16(2019) 生成器一起使用,这是项目的要求。我遇到的问题是目标标志重复 comp
CUDA PTX 类似于汇编,因此会显示源代码。我已阅读 CUDA 编程指南的第 3.1 节和 Section 3.2.7 from the online CUDA compiler document
CUDA 编译器可以选择生成 32 位或 64 位 PTX。这些有什么区别?和 x86 一样,NVidia GPU 实际上有 32 位和 64 位 ISA 吗?还是仅与主机代码有关? 最佳答案 指针肯
只是为了看看 CUDA 正在生成什么样的代码,除了目标文件之外,我还喜欢编译为 ptx。由于我的一些循环展开可能需要相当长的时间,因此我希望能够编译 *.cu→*.ptx→*。 o 而不是浪费时间使用
随着gcc 7.1的发布,我们现在可以为openmp 4.5配置gcc,将其卸载到Nvidia PTX GPGPU。这就是他们在发行说明中所说的(大约)。 所以我的问题是,在将openmp 4.5编译
Here在文档中,指出 prefetch 和 prefetchu ptx 指令“预取行包含指定状态空间中指定内存层次结构级别的通用地址”。还提到语法是 prefetch{.space}.level [
我尝试使用 CUDA 驱动程序 API 运行由 .cl 内核生成的 PTX 汇编代码。我采取的步骤是这些(标准的opencl程序): 1) 加载 .cl 内核 2) JIT 编译 3) 获取编译好的p
我是一名优秀的程序员,十分优秀!