CUDA4.0 inline PTX汇编程序开发( 0 )

本文介绍了CUDA4.0中内联PTX汇编的使用,包括不同形式的asm语法、类型指示符以及如何进行算术运算。通过示例展示了如何在内联汇编中进行浮点数运算,并强调了内联汇编中的匹配符使用和局部变量声明。此外,还提及了内存操作和同步问题,并提供了测试程序的概述。
摘要由CSDN通过智能技术生成

内联PTX汇编具有如下形式:

asm(“instop”:”type_symbolic”(or):”type_symbolic”(ir),..);

asm(“instop”::”type_symbolic”(r));

第二种形式是无输出操作格式,需要使用”::”指示符

其中instop是指令操作

type_symbolic是类型指示符(可选如下),分别对应与PTX中的数据类型:

“h” .s16, .u16

“r” .s32, .u32

“l” .s64, .u64

“f” .f32

“d” .f64

 

例如:

//c=a+b

float a=…

float b=…;

float c;

asm( “add.f32 %0, %1, %2;” : “=f”(c):”f”(a),”f”(b));

 

%0, %1, %2,是匹配符,在分开写的“asm()”段中,不通指令序列中的%匹配符不具有相关项,它们的作用只是根据“:”后面的匹配格式按照顺序进行匹配,所以统一规格程序中的两段“asm()“中的相同的%numberic不一定指向统一规格实际的物理寄存器,例如:

 

__global__

void cuk_lerp( float* z, const float* x, const float* y, float alpha )

{

    float u=x[ threadIdx.x ];

    float v=y[ threadIdx.x ];

    float a, b;

    asm( "sub.f32 %0, 0f3f800000, %1;" : "=f"(a) : "f"(alpha) );  //a=1.f-alpha

    asm( "mul.f32 %0, %0, %1;" : "+f"(u) :

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值