加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
aparapi仅能读取基本数据类型 及其一维数组

可以继承Kernel重写run方法
也可以用匿名内部类

调用Kernel.execute(int range),并且在方法内部通过getGlobalId()来获取唯一索引(0...range-1)

通过配置javac -g参数来显示代码调试信息

有四种执行模式
1.JTP Java thread pool 一个核心对应着一个线程
2.SEQ single sequential java loop 通过循环来串行执行
3.GPU 将Java字节码转化为OpenCL代码在GPU上执行
4.CPU 将Java字节码转化为
OpenCL代码在CPU上执行
如果OpenCL可用则默认使用GPU模式
否则使用JTP模式

通过Kernel.setExecutionMode()来设定执行模式

也可以设定启动参数来指定执行模式
-Dcom.amd.aparapi.ExecutionMode=JTP

通过Kernel.getExecutionMode()来获取实际执行模式

也可以设定启动参数来获取实际执行模式
-Dcom.amd.aparapi.enableExecutionModeReporting=true
其它可设定参数及默认值有
com.amd.aparapi.executionMode SEQ|JTP|CPU|GPU  (GPU)
com.amd.aparapi.enableExecutionModeReporting true|false  (false)
com.amd.aparapi.enableShowGeneratedOpenCL true|false  (false)
com.amd.aparapi.logLevel FINEST|FINE|INFO|WARNING|SEVERE   (WARNING)
com.amd.aparapi.enableProfiling true|false    (false)
com.amd.aparapi.enableVerboseJNI true|false    (false)
com.amd.aparapi.instructionListenerClass Name of a class implements Config.InstructionListener

举例:
-Dcom.amd.aparapi.executionMode=GPU
-Dcom.amd.aparapi.enableExecutionModeReporting=true
-Dcom.amd.aparapi.logLevel=FINE
-Dcom.amd.aparapi.enableShowGeneratedOpenCL=true


在for循环中多次执行核函数时,为了避免不必要的多次拷贝赋值,我们可以明确指出自己控制数据转移过程(支持链式调用)
final int hugeArray[] =new int[HUGE]; 
final boolean[] done = new boolean[false]; 
Kernel kernel = new Kernel(){ 
	// reads and writes hugeArray 
}; 
kernel.setExplicit(true); // we take control of all transfers 
kernel.put(hugeArray).put(done); 
while (!done[0]){
	kernel.execute(range).get(done); 
} 
kernel.get(hugeArray);


一些可用的方法
getGlobalId()	0	1	2	3	4	5	6	7	8	9	10	11	12	13	14	15 
getLocalId()	0	1	2	3	4	5	6	7	0	1	2	3	4	5	6	7
				getGroupId()==0					getGroupId()==1
									getNumGroups()==2
getGlobalSize()==16
getGroupSize()==8


for (int pass=0; pass<100; pass++){ 
	kernel.execute(range); 
}
可以被替换为
Kernel kernel = new Kernel(){ 
	public void run(){ 
		if (getPassId()%2==0){ // 通过getPassId()获取当前执行为第几次
			// do this 
		}else{ 
			// do that 
		} 
	} 
}; 
kernel.execute(range, 100); // 指定当前核函数执行100次

空文件

简介

搜索差集偶 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化